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());
+}

Reply via email to