Added a DockerContainerizer::recover test.
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/81782c0a Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/81782c0a Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/81782c0a Branch: refs/heads/master Commit: 81782c0a97e576bf7e2edf0e64c179d17a5d510d Parents: ee998e4 Author: Timothy Chen <[email protected]> Authored: Mon Jul 7 17:37:21 2014 -0700 Committer: Benjamin Hindman <[email protected]> Committed: Mon Aug 4 15:08:16 2014 -0700 ---------------------------------------------------------------------- src/tests/docker_containerizer_tests.cpp | 90 +++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/81782c0a/src/tests/docker_containerizer_tests.cpp ---------------------------------------------------------------------- diff --git a/src/tests/docker_containerizer_tests.cpp b/src/tests/docker_containerizer_tests.cpp index a6cae24..b0b8b39 100644 --- a/src/tests/docker_containerizer_tests.cpp +++ b/src/tests/docker_containerizer_tests.cpp @@ -20,6 +20,7 @@ #include <gtest/gtest.h> #include <process/future.hpp> +#include <process/subprocess.hpp> #include "tests/flags.hpp" #include "tests/mesos.hpp" @@ -31,6 +32,7 @@ using namespace mesos; using namespace mesos::internal; +using namespace mesos::internal::slave::state; using namespace mesos::internal::tests; using mesos::internal::master::Master; @@ -313,3 +315,91 @@ TEST_F(DockerContainerizerTest, DOCKER_Usage) Shutdown(); } + + +TEST_F(DockerContainerizerTest, DOCKER_Recover) +{ + slave::Flags flags = CreateSlaveFlags(); + + Docker docker(tests::flags.docker); + + MockDockerContainerizer dockerContainerizer(flags, true, docker); + + ContainerID containerId; + containerId.set_value("c1"); + ContainerID reapedContainerId; + reapedContainerId.set_value("c2"); + + Resources resources = Resources::parse("cpus:1;mem:512").get(); + + Future<Option<int> > d1 = + docker.run( + "busybox", + "sleep 360", + slave::DOCKER_NAME_PREFIX + stringify(containerId), + resources); + + Future<Option<int> > d2 = + docker.run( + "busybox", + "sleep 360", + slave::DOCKER_NAME_PREFIX + stringify(reapedContainerId), + resources); + + AWAIT_READY(d1); + AWAIT_READY(d2); + + SlaveState slaveState; + FrameworkState frameworkState; + + ExecutorID execId; + execId.set_value("e1"); + + ExecutorState execState; + ExecutorInfo execInfo; + execState.info = execInfo; + execState.latest = containerId; + + Try<process::Subprocess> wait = + process::subprocess( + "docker wait " + + slave::DOCKER_NAME_PREFIX + + stringify(containerId)); + + ASSERT_SOME(wait); + + Try<process::Subprocess> reaped = + process::subprocess( + "docker wait " + + slave::DOCKER_NAME_PREFIX + + stringify(reapedContainerId)); + + ASSERT_SOME(reaped); + + FrameworkID frameworkId; + + RunState runState; + runState.id = containerId; + runState.forkedPid = wait.get().pid(); + execState.runs.put(containerId, runState); + frameworkState.executors.put(execId, execState); + + slaveState.frameworks.put(frameworkId, frameworkState); + + Future<Nothing> recover = dockerContainerizer.recover(slaveState); + + AWAIT_READY(recover); + + Future<containerizer::Termination> termination = + dockerContainerizer.wait(containerId); + + ASSERT_FALSE(termination.isFailed()); + + AWAIT_FAILED(dockerContainerizer.wait(reapedContainerId)); + + dockerContainerizer.destroy(containerId); + + AWAIT_READY(termination); + + AWAIT_READY(reaped.get().status()); +}
