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 fe89151e053e5c932f920b839ad00792f99ae42c Author: Qian Zhang <[email protected]> AuthorDate: Mon Jul 29 23:33:59 2019 -0700 Added a test `ROOT_DOCKER_AllocationRoleEnvironmentVariable`. Review: https://reviews.apache.org/r/71004/ --- .../containerizer/docker_containerizer_tests.cpp | 105 +++++++++++++++++++++ 1 file changed, 105 insertions(+) diff --git a/src/tests/containerizer/docker_containerizer_tests.cpp b/src/tests/containerizer/docker_containerizer_tests.cpp index 3d932a5..e25acfd 100644 --- a/src/tests/containerizer/docker_containerizer_tests.cpp +++ b/src/tests/containerizer/docker_containerizer_tests.cpp @@ -4630,6 +4630,111 @@ TEST_F(DockerContainerizerTest, ROOT_DOCKER_DefaultDNS) } +// This test verifies that the `MESOS_ALLOCATION_ROLE` +// environment variable is set properly. +TEST_F(DockerContainerizerTest, ROOT_DOCKER_AllocationRoleEnvironmentVariable) +{ + Try<Owned<cluster::Master>> master = StartMaster(); + ASSERT_SOME(master); + + MockDocker* mockDocker = + new MockDocker(tests::flags.docker, tests::flags.docker_socket); + + Shared<Docker> docker(mockDocker); + + slave::Flags flags = CreateSlaveFlags(); + + Fetcher fetcher(flags); + + Try<ContainerLogger*> logger = + ContainerLogger::create(flags.container_logger); + + ASSERT_SOME(logger); + + MockDockerContainerizer dockerContainerizer( + flags, + &fetcher, + Owned<ContainerLogger>(logger.get()), + docker); + + // We skip stopping the docker container because stopping a container + // even when it terminated might not flush the logs and we end up + // not getting stdout/stderr in our tests. + EXPECT_CALL(*mockDocker, stop(_, _, _)) + .WillRepeatedly(Return(Nothing())); + + Owned<MasterDetector> detector = master.get()->createDetector(); + + Try<Owned<cluster::Slave>> slave = + StartSlave(detector.get(), &dockerContainerizer, 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); + + Future<FrameworkID> frameworkId; + EXPECT_CALL(sched, registered(&driver, _, _)) + .WillOnce(FutureArg<1>(&frameworkId)); + + Future<vector<Offer>> offers; + EXPECT_CALL(sched, resourceOffers(&driver, _)) + .WillOnce(FutureArg<1>(&offers)) + .WillRepeatedly(Return()); // Ignore subsequent offers. + + driver.start(); + + AWAIT_READY(frameworkId); + + AWAIT_READY(offers); + ASSERT_FALSE(offers->empty()); + + TaskInfo task = createTask( + offers->front().slave_id(), + offers->front().resources(), + "if [ \"$MESOS_ALLOCATION_ROLE\" != \"role1\" ]; then exit 1; fi"); + + // TODO(tnachen): Use local image to test if possible. + task.mutable_container()->CopyFrom(createDockerInfo(DOCKER_TEST_IMAGE)); + + Future<ContainerID> containerId; + Future<ContainerConfig> containerConfig; + EXPECT_CALL(dockerContainerizer, launch(_, _, _, _)) + .WillOnce(DoAll(FutureArg<0>(&containerId), + FutureArg<1>(&containerConfig), + Invoke(&dockerContainerizer, + &MockDockerContainerizer::_launch))); + + Future<TaskStatus> statusStarting; + Future<TaskStatus> statusRunning; + Future<TaskStatus> statusFinished; + EXPECT_CALL(sched, statusUpdate(&driver, _)) + .WillOnce(FutureArg<1>(&statusStarting)) + .WillOnce(FutureArg<1>(&statusRunning)) + .WillOnce(FutureArg<1>(&statusFinished)) + .WillRepeatedly(DoDefault()); + + driver.launchTasks(offers.get()[0].id(), {task}); + + AWAIT_READY_FOR(containerId, Seconds(60)); + AWAIT_READY(containerConfig); + AWAIT_READY_FOR(statusStarting, Seconds(60)); + EXPECT_EQ(TASK_STARTING, statusStarting->state()); + AWAIT_READY_FOR(statusRunning, Seconds(60)); + EXPECT_EQ(TASK_RUNNING, statusRunning->state()); + AWAIT_READY_FOR(statusFinished, Seconds(60)); + EXPECT_EQ(TASK_FINISHED, statusFinished->state()); + + driver.stop(); + driver.join(); +} + + // Fixture for testing IPv6 support for docker containers on host network. // // TODO(akagup): Windows containers do not support IPv6, but they should
