Added DockerContainerizer kill task test.
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/19781efd Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/19781efd Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/19781efd Branch: refs/heads/master Commit: 19781efdaf04fda8ba5eb6cb6068ee74c010b771 Parents: f3d6d77 Author: Benjamin Hindman <[email protected]> Authored: Wed Jul 9 15:11:44 2014 -0700 Committer: Benjamin Hindman <[email protected]> Committed: Mon Aug 4 15:08:17 2014 -0700 ---------------------------------------------------------------------- src/tests/docker_containerizer_tests.cpp | 105 +++++++++++++++++++++++++- 1 file changed, 103 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/19781efd/src/tests/docker_containerizer_tests.cpp ---------------------------------------------------------------------- diff --git a/src/tests/docker_containerizer_tests.cpp b/src/tests/docker_containerizer_tests.cpp index 2d1a287..9a780e7 100644 --- a/src/tests/docker_containerizer_tests.cpp +++ b/src/tests/docker_containerizer_tests.cpp @@ -221,6 +221,108 @@ TEST_F(DockerContainerizerTest, DOCKER_Launch) } +TEST_F(DockerContainerizerTest, DOCKER_Kill) +{ + Try<PID<Master> > master = StartMaster(); + ASSERT_SOME(master); + + slave::Flags flags = CreateSlaveFlags(); + + Docker docker(tests::flags.docker); + + MockDockerContainerizer dockerContainerizer(flags, true, docker); + + Try<PID<Slave> > slave = StartSlave(&dockerContainerizer); + ASSERT_SOME(slave); + + MockScheduler sched; + MesosSchedulerDriver driver( + &sched, DEFAULT_FRAMEWORK_INFO, master.get(), 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); + EXPECT_NE(0u, offers.get().size()); + + const Offer& offer = offers.get()[0]; + + TaskInfo task; + task.set_name(""); + task.mutable_task_id()->set_value("1"); + task.mutable_slave_id()->CopyFrom(offer.slave_id()); + task.mutable_resources()->CopyFrom(offer.resources()); + + CommandInfo command; + CommandInfo::ContainerInfo* containerInfo = command.mutable_container(); + containerInfo->set_image("docker://busybox"); + command.set_value("sleep 120"); + + task.mutable_command()->CopyFrom(command); + + vector<TaskInfo> tasks; + tasks.push_back(task); + + Future<ContainerID> containerId; + EXPECT_CALL(dockerContainerizer, launch(_, _, _, _, _, _, _, _)) + .WillOnce(DoAll(FutureArg<0>(&containerId), + Invoke(&dockerContainerizer, + &MockDockerContainerizer::_launch))); + + Future<TaskStatus> statusRunning; + EXPECT_CALL(sched, statusUpdate(&driver, _)) + .WillOnce(FutureArg<1>(&statusRunning)); + + driver.launchTasks(offers.get()[0].id(), tasks); + + AWAIT_READY_FOR(containerId, Seconds(60)); + AWAIT_READY_FOR(statusRunning, Seconds(60)); + EXPECT_EQ(TASK_RUNNING, statusRunning.get().state()); + + Future<TaskStatus> statusKilled; + EXPECT_CALL(sched, statusUpdate(&driver, _)) + .WillOnce(FutureArg<1>(&statusKilled)); + + driver.killTask(task.task_id()); + + AWAIT_READY(statusKilled); + EXPECT_EQ(TASK_KILLED, statusKilled.get().state()); + + Future<list<Docker::Container> > containers = + docker.ps(true, slave::DOCKER_NAME_PREFIX); + + AWAIT_READY(containers); + + bool foundContainer = false; + string expectedName = slave::DOCKER_NAME_PREFIX + containerId.get().value(); + + foreach (const Docker::Container& container, containers.get()) { + // Docker inspect name contains an extra slash in the beginning. + if (strings::contains(container.name(), expectedName)) { + foundContainer = true; + break; + } + } + + ASSERT_FALSE(foundContainer); + + driver.stop(); + driver.join(); + + Shutdown(); +} + + // This test tests DockerContainerizer::usage(). TEST_F(DockerContainerizerTest, DOCKER_Usage) { @@ -391,8 +493,6 @@ TEST_F(DockerContainerizerTest, DOCKER_Update) task.mutable_command()->CopyFrom(command); - Future<TaskStatus> statusRunning; - vector<TaskInfo> tasks; tasks.push_back(task); @@ -402,6 +502,7 @@ TEST_F(DockerContainerizerTest, DOCKER_Update) Invoke(&dockerContainerizer, &MockDockerContainerizer::_launch))); + Future<TaskStatus> statusRunning; EXPECT_CALL(sched, statusUpdate(&driver, _)) .WillOnce(FutureArg<1>(&statusRunning)) .WillRepeatedly(DoDefault());
