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 = [](

Reply via email to