This is an automated email from the ASF dual-hosted git repository. gilbert pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/mesos.git
commit 6f8fcfde600869eda12d17015be0c68ac3bba0d2 Author: Qian Zhang <[email protected]> AuthorDate: Mon Jul 29 23:33:56 2019 -0700 Added a test `CommandExecutorTest.AllocationRoleEnvironmentVariable`. Review: https://reviews.apache.org/r/71002/ --- src/tests/command_executor_tests.cpp | 66 ++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/src/tests/command_executor_tests.cpp b/src/tests/command_executor_tests.cpp index 02ae250..e9726b0 100644 --- a/src/tests/command_executor_tests.cpp +++ b/src/tests/command_executor_tests.cpp @@ -426,6 +426,72 @@ TEST_P(CommandExecutorTest, NoTransitionFromKillingToRunning) #endif // __WINDOWS__ +// This test verifies that the `MESOS_ALLOCATION_ROLE` +// environment variable is set properly. +TEST_P(CommandExecutorTest, AllocationRoleEnvironmentVariable) +{ + Try<Owned<cluster::Master>> master = StartMaster(); + ASSERT_SOME(master); + + Owned<MasterDetector> detector = master.get()->createDetector(); + + slave::Flags flags = CreateSlaveFlags(); + flags.http_command_executor = GetParam(); + + Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), flags); + ASSERT_SOME(slave); + + // Start the framework with a role specified. + FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO; + frameworkInfo.clear_roles(); + frameworkInfo.add_roles("role1"); + + MockScheduler sched; + MesosSchedulerDriver driver( + &sched, frameworkInfo, master.get()->pid, DEFAULT_CREDENTIAL); + + EXPECT_CALL(sched, registered(&driver, _, _)); + + Future<vector<Offer>> offers; + EXPECT_CALL(sched, resourceOffers(&driver, _)) + .WillOnce(FutureArg<1>(&offers)) + .WillRepeatedly(Return()); // Ignore subsequent offers. + + driver.start(); + + AWAIT_READY(offers); + EXPECT_EQ(1u, offers->size()); + + // Launch a task with the command executor. + TaskInfo task = createTask( + offers->front().slave_id(), + offers->front().resources(), + "if [ \"$MESOS_ALLOCATION_ROLE\" != \"role1\" ]; then exit 1; fi"); + + Future<TaskStatus> statusStarting; + Future<TaskStatus> statusRunning; + Future<TaskStatus> statusFinished; + EXPECT_CALL(sched, statusUpdate(_, _)) + .WillOnce(FutureArg<1>(&statusStarting)) + .WillOnce(FutureArg<1>(&statusRunning)) + .WillOnce(FutureArg<1>(&statusFinished)); + + driver.launchTasks(offers->front().id(), {task}); + + AWAIT_READY(statusStarting); + EXPECT_EQ(TASK_STARTING, statusStarting->state()); + + AWAIT_READY(statusRunning); + EXPECT_EQ(TASK_RUNNING, statusRunning->state()); + + AWAIT_READY(statusFinished); + EXPECT_EQ(TASK_FINISHED, statusFinished->state()); + + driver.stop(); + driver.join(); +} + + class HTTPCommandExecutorTest : public MesosTest {};
