You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by ti...@apache.org on 2016/01/05 13:47:02 UTC
mesos git commit: Corrected termination of Docker containers.
Repository: mesos
Updated Branches:
refs/heads/master 39dee58b8 -> 77dfe6d15
Corrected termination of Docker containers.
Tests cases have to wait until a container has been terminated by the
DockerContainerizer. Otherwise there could be artifacts (e.g. locked
cgroups) that can affect later test cases (see MESOS-4025, where
cgroups couldn't be removed).
Review: https://reviews.apache.org/r/40966/
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/77dfe6d1
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/77dfe6d1
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/77dfe6d1
Branch: refs/heads/master
Commit: 77dfe6d155e025dc1331ef6b29e055333268dea2
Parents: 39dee58
Author: Jan Schlicht <ja...@mesosphere.io>
Authored: Tue Jan 5 13:38:07 2016 +0100
Committer: Till Toenshoff <to...@me.com>
Committed: Tue Jan 5 13:38:07 2016 +0100
----------------------------------------------------------------------
src/tests/health_check_tests.cpp | 73 ++++++++++++++++++++++++++++-------
1 file changed, 59 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/77dfe6d1/src/tests/health_check_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/health_check_tests.cpp b/src/tests/health_check_tests.cpp
index 0fbccc3..26d05e7 100644
--- a/src/tests/health_check_tests.cpp
+++ b/src/tests/health_check_tests.cpp
@@ -45,10 +45,13 @@ using mesos::internal::slave::MesosContainerizer;
using mesos::internal::slave::MesosContainerizerProcess;
using mesos::internal::slave::Slave;
+using mesos::slave::ContainerLogger;
+
using process::Clock;
using process::Future;
using process::Owned;
using process::PID;
+using process::Shared;
using testing::_;
using testing::AtMost;
@@ -288,9 +291,11 @@ TEST_F(HealthCheckTest, HealthyTask)
// docker executor.
TEST_F(HealthCheckTest, ROOT_DOCKER_DockerHealthyTask)
{
- Owned<Docker> docker(Docker::create(tests::flags.docker,
- tests::flags.docker_socket,
- false).get());
+ MockDocker* mockDocker =
+ new MockDocker(tests::flags.docker, tests::flags.docker_socket);
+
+ Shared<Docker> docker(mockDocker);
+
Try<Nothing> validateResult = docker->validateVersion(Version(1, 3, 0));
ASSERT_SOME(validateResult)
<< "-------------------------------------------------------------\n"
@@ -307,11 +312,18 @@ TEST_F(HealthCheckTest, ROOT_DOCKER_DockerHealthyTask)
Fetcher fetcher;
- Try<DockerContainerizer*> containerizer =
- DockerContainerizer::create(flags, &fetcher);
- CHECK_SOME(containerizer);
+ Try<ContainerLogger*> logger =
+ ContainerLogger::create(flags.container_logger);
- Try<PID<Slave>> slave = StartSlave(containerizer.get());
+ ASSERT_SOME(logger);
+
+ MockDockerContainerizer containerizer(
+ flags,
+ &fetcher,
+ Owned<ContainerLogger>(logger.get()),
+ docker);
+
+ Try<PID<Slave>> slave = StartSlave(&containerizer, flags);
ASSERT_SOME(slave);
MockScheduler sched;
@@ -342,6 +354,12 @@ TEST_F(HealthCheckTest, ROOT_DOCKER_DockerHealthyTask)
vector<TaskInfo> tasks = populateTasks(
"sleep 120", "exit 0", offers.get()[0], 0, None(), None(), containerInfo);
+ Future<ContainerID> containerId;
+ EXPECT_CALL(containerizer, launch(_, _, _, _, _, _, _, _))
+ .WillOnce(DoAll(FutureArg<0>(&containerId),
+ Invoke(&containerizer,
+ &MockDockerContainerizer::_launch)));
+
Future<TaskStatus> statusRunning;
Future<TaskStatus> statusHealth;
@@ -351,6 +369,8 @@ TEST_F(HealthCheckTest, ROOT_DOCKER_DockerHealthyTask)
driver.launchTasks(offers.get()[0].id(), tasks);
+ AWAIT_READY(containerId);
+
AWAIT_READY(statusRunning);
EXPECT_EQ(TASK_RUNNING, statusRunning.get().state());
@@ -359,9 +379,14 @@ TEST_F(HealthCheckTest, ROOT_DOCKER_DockerHealthyTask)
EXPECT_TRUE(statusHealth.get().has_healthy());
EXPECT_TRUE(statusHealth.get().healthy());
+ Future<containerizer::Termination> termination =
+ containerizer.wait(containerId.get());
+
driver.stop();
driver.join();
+ AWAIT_READY(termination);
+
Shutdown();
Future<std::list<Docker::Container>> containers =
@@ -618,9 +643,11 @@ TEST_F(HealthCheckTest, HealthStatusChange)
// Testing health status change reporting to scheduler for docker executor.
TEST_F(HealthCheckTest, ROOT_DOCKER_DockerHealthStatusChange)
{
- Owned<Docker> docker(Docker::create(tests::flags.docker,
- tests::flags.docker_socket,
- false).get());
+ MockDocker* mockDocker =
+ new MockDocker(tests::flags.docker, tests::flags.docker_socket);
+
+ Shared<Docker> docker(mockDocker);
+
Try<Nothing> validateResult = docker->validateVersion(Version(1, 3, 0));
ASSERT_SOME(validateResult)
<< "-------------------------------------------------------------\n"
@@ -637,11 +664,18 @@ TEST_F(HealthCheckTest, ROOT_DOCKER_DockerHealthStatusChange)
Fetcher fetcher;
- Try<DockerContainerizer*> containerizer =
- DockerContainerizer::create(flags, &fetcher);
- CHECK_SOME(containerizer);
+ Try<ContainerLogger*> logger =
+ ContainerLogger::create(flags.container_logger);
- Try<PID<Slave>> slave = StartSlave(containerizer.get());
+ ASSERT_SOME(logger);
+
+ MockDockerContainerizer containerizer(
+ flags,
+ &fetcher,
+ Owned<ContainerLogger>(logger.get()),
+ docker);
+
+ Try<PID<Slave>> slave = StartSlave(&containerizer, flags);
ASSERT_SOME(slave);
MockScheduler sched;
@@ -689,6 +723,12 @@ TEST_F(HealthCheckTest, ROOT_DOCKER_DockerHealthStatusChange)
vector<TaskInfo> tasks = populateTasks(
"sleep 120", alt, offers.get()[0], 0, 3, None(), containerInfo);
+ Future<ContainerID> containerId;
+ EXPECT_CALL(containerizer, launch(_, _, _, _, _, _, _, _))
+ .WillOnce(DoAll(FutureArg<0>(&containerId),
+ Invoke(&containerizer,
+ &MockDockerContainerizer::_launch)));
+
Future<TaskStatus> statusRunning;
Future<TaskStatus> statusHealth1;
Future<TaskStatus> statusHealth2;
@@ -722,9 +762,14 @@ TEST_F(HealthCheckTest, ROOT_DOCKER_DockerHealthStatusChange)
ASSERT_SOME(os::read(tmpPath));
EXPECT_EQ("bar", os::read(tmpPath).get());
+ Future<containerizer::Termination> termination =
+ containerizer.wait(containerId.get());
+
driver.stop();
driver.join();
+ AWAIT_READY(termination);
+
Shutdown();
Future<std::list<Docker::Container>> containers =