Repository: mesos Updated Branches: refs/heads/master a60bbd865 -> 06d8d759a
Updated an agent test to use the mock authorizer. The test `RemoveExecutorUponFailedTaskAuthorization` currently depends on catching and modifying the input arguments of agent `_run()` function to mock the authorizer behavior. Using the mock authorizer instead gives better readability and more functionality. Review: https://reviews.apache.org/r/66118/ Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/dbd5515b Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/dbd5515b Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/dbd5515b Branch: refs/heads/master Commit: dbd5515b82e319631a159c53136bd2d60cc63dd3 Parents: a60bbd8 Author: Meng Zhu <[email protected]> Authored: Thu Apr 5 17:43:50 2018 -0700 Committer: Greg Mann <[email protected]> Committed: Thu Apr 5 17:50:44 2018 -0700 ---------------------------------------------------------------------- src/tests/mesos.cpp | 8 +++--- src/tests/mesos.hpp | 3 ++- src/tests/slave_tests.cpp | 57 ++++++++++++------------------------------ 3 files changed, 23 insertions(+), 45 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/dbd5515b/src/tests/mesos.cpp ---------------------------------------------------------------------- diff --git a/src/tests/mesos.cpp b/src/tests/mesos.cpp index d829631..8e70150 100644 --- a/src/tests/mesos.cpp +++ b/src/tests/mesos.cpp @@ -572,7 +572,8 @@ Try<Owned<cluster::Slave>> MesosTest::StartSlave( mesos::master::detector::MasterDetector* detector, slave::Containerizer* containerizer, mesos::Authorizer* authorizer, - const Option<slave::Flags>& flags) + const Option<slave::Flags>& flags, + bool mock) { Try<Owned<cluster::Slave>> slave = cluster::Slave::create( detector, @@ -584,9 +585,10 @@ Try<Owned<cluster::Slave>> MesosTest::StartSlave( None(), None(), None(), - authorizer); + authorizer, + mock); - if (slave.isSome()) { + if (slave.isSome() && !mock) { slave.get()->start(); } http://git-wip-us.apache.org/repos/asf/mesos/blob/dbd5515b/src/tests/mesos.hpp ---------------------------------------------------------------------- diff --git a/src/tests/mesos.hpp b/src/tests/mesos.hpp index 46c271b..4654cae 100644 --- a/src/tests/mesos.hpp +++ b/src/tests/mesos.hpp @@ -247,7 +247,8 @@ protected: mesos::master::detector::MasterDetector* detector, slave::Containerizer* containerizer, mesos::Authorizer* authorizer, - const Option<slave::Flags>& flags = None()); + const Option<slave::Flags>& flags = None(), + bool mock = false); // Starts a slave with the specified detector, containerizer, // secretGenerator, authorizer and flags. http://git-wip-us.apache.org/repos/asf/mesos/blob/dbd5515b/src/tests/slave_tests.cpp ---------------------------------------------------------------------- diff --git a/src/tests/slave_tests.cpp b/src/tests/slave_tests.cpp index 0d7d972..242cbaf 100644 --- a/src/tests/slave_tests.cpp +++ b/src/tests/slave_tests.cpp @@ -4910,14 +4910,19 @@ TEST_F(SlaveTest, RemoveExecutorUponFailedTaskAuthorization) MockExecutor exec(DEFAULT_EXECUTOR_ID); TestContainerizer containerizer(&exec); + MockAuthorizer mockAuthorizer; slave::Flags slaveFlags = CreateSlaveFlags(); Owned<MasterDetector> detector = master.get()->createDetector(); // Start a mock slave. - Try<Owned<cluster::Slave>> slave = - StartSlave(detector.get(), &containerizer, slaveFlags, true); + Try<Owned<cluster::Slave>> slave = StartSlave( + detector.get(), + &containerizer, + &mockAuthorizer, + slaveFlags, + true); ASSERT_SOME(slave); ASSERT_NE(nullptr, slave.get()->mock()); @@ -4956,55 +4961,25 @@ TEST_F(SlaveTest, RemoveExecutorUponFailedTaskAuthorization) EXPECT_CALL(exec, registered(_, _, _, _)) .Times(0); - Future<TaskStatus> killTaskStatus; + Future<TaskStatus> statusError; EXPECT_CALL(sched, statusUpdate(&driver, _)) - .WillOnce(FutureArg<1>(&killTaskStatus)); + .WillOnce(FutureArg<1>(&statusError)); Future<ExitedExecutorMessage> exitedExecutorMessage = FUTURE_PROTOBUF(ExitedExecutorMessage(), _, _); - Future<list<bool>> _future; - FrameworkInfo _frameworkInfo; - ExecutorInfo _executorInfo; - Option<TaskInfo> _task; - Option<TaskGroupInfo> _taskGroup; - vector<ResourceVersionUUID> _resourceVersionUuids; - Option<bool> _launchExecutor; - - // Capture `__run` arguments. - Future<Nothing> __run; - EXPECT_CALL(*slave.get()->mock(), __run(_, _, _, _, _, _, _)) - .WillOnce(DoAll(FutureSatisfy(&__run), - SaveArg<0>(&_future), - SaveArg<1>(&_frameworkInfo), - SaveArg<2>(&_executorInfo), - SaveArg<3>(&_task), - SaveArg<4>(&_taskGroup), - SaveArg<5>(&_resourceVersionUuids), - SaveArg<6>(&_launchExecutor))); + // Induce agent task authorization failure. This will result in + // task launch failure before the executor launch. + EXPECT_CALL(mockAuthorizer, authorized(_)) + .WillRepeatedly(Return(false)); driver.launchTasks(offers.get()[0].id(), {task}); - AWAIT_READY(__run); - - // Induce a task authorization failure. - Promise<list<bool>> promise; - Future<list<bool>> failedFuture = promise.future(); - promise.fail(""); - - process::dispatch(slave.get()->pid, [&] { - slave.get()->mock()->unmocked___run( - failedFuture, - _frameworkInfo, - _executorInfo, - _task, - _taskGroup, - _resourceVersionUuids, - _launchExecutor); - }); - AWAIT_READY(exitedExecutorMessage); + AWAIT_READY(statusError); + ASSERT_EQ(TASK_ERROR, statusError->state()); + // Helper function to post a request to '/api/v1' master endpoint // and return the response. auto post = [](
