You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by ji...@apache.org on 2016/10/07 16:38:53 UTC

[03/10] mesos git commit: Converted the SandboxEnvironmentVariable test to an end to end test.

Converted the SandboxEnvironmentVariable test to an end to end test.

Review: https://reviews.apache.org/r/52540


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/7ffc48f2
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/7ffc48f2
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/7ffc48f2

Branch: refs/heads/master
Commit: 7ffc48f29227ca9a88a4d25b50f0d8acea3f36d0
Parents: a089d4a
Author: Jie Yu <yu...@gmail.com>
Authored: Tue Oct 4 13:56:03 2016 -0700
Committer: Jie Yu <yu...@gmail.com>
Committed: Fri Oct 7 09:31:17 2016 -0700

----------------------------------------------------------------------
 .../containerizer/filesystem_isolator_tests.cpp | 144 ++++++++++---------
 1 file changed, 74 insertions(+), 70 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/7ffc48f2/src/tests/containerizer/filesystem_isolator_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/containerizer/filesystem_isolator_tests.cpp b/src/tests/containerizer/filesystem_isolator_tests.cpp
index 5e75a2c..756c175 100644
--- a/src/tests/containerizer/filesystem_isolator_tests.cpp
+++ b/src/tests/containerizer/filesystem_isolator_tests.cpp
@@ -878,76 +878,6 @@ TEST_F(LinuxFilesystemIsolatorTest, ROOT_MultipleContainers)
 }
 
 
-// This test verifies that the environment variables for sandbox
-// (i.e., MESOS_DIRECTORY and MESOS_SANDBOX) are set properly.
-// TODO(jieyu): Make this an end to end integration tests.
-TEST_F(LinuxFilesystemIsolatorTest, ROOT_SandboxEnvironmentVariable)
-{
-  string registry = path::join(sandbox.get(), "registry");
-  AWAIT_READY(DockerArchive::create(registry, "test_image"));
-
-  slave::Flags flags = CreateSlaveFlags();
-  flags.isolation = "filesystem/linux,docker/runtime";
-  flags.docker_registry = registry;
-  flags.docker_store_dir = path::join(sandbox.get(), "store");
-  flags.image_providers = "docker";
-
-  Try<MesosContainerizer*> create =
-    MesosContainerizer::create(flags, true, &fetcher);
-
-  ASSERT_SOME(create);
-
-  Owned<Containerizer> containerizer(create.get());
-
-  ContainerID containerId;
-  containerId.set_value(UUID::random().toString());
-
-  string directory = path::join(sandbox.get(), "sandbox");
-  ASSERT_SOME(os::mkdir(directory));
-
-  Try<string> script = strings::format(
-      "if [ \"$MESOS_DIRECTORY\" != \"%s\" ]; then exit 1; fi &&"
-      "if [ \"$MESOS_SANDBOX\" != \"%s\" ]; then exit 1; fi",
-      directory,
-      flags.sandbox_directory);
-
-  ASSERT_SOME(script);
-
-  ExecutorInfo executor = createExecutorInfo(
-      "test_executor",
-      script.get());
-
-  executor.mutable_container()->CopyFrom(createContainerInfo("test_image"));
-
-  map<string, string> environment = executorEnvironment(
-      flags,
-      executor,
-      directory,
-      SlaveID(),
-      PID<Slave>(),
-      false);
-
-  Future<bool> launch = containerizer->launch(
-      containerId,
-      None(),
-      executor,
-      directory,
-      None(),
-      SlaveID(),
-      environment,
-      false);
-
-  AWAIT_READY(launch);
-
-  Future<Option<ContainerTermination>> wait = containerizer->wait(containerId);
-
-  AWAIT_READY(wait);
-  ASSERT_SOME(wait.get());
-  ASSERT_TRUE(wait->get().has_status());
-  EXPECT_WEXITSTATUS_EQ(0, wait->get().status());
-}
-
-
 // This test verifies the case where we don't need a bind mount for
 // slave's working directory because the mount containing it is
 // already a shared mount in its own peer group.
@@ -1465,6 +1395,80 @@ TEST_F(LinuxFilesystemIsolatorMesosTest,
 }
 
 
+// This test verifies that the environment variables for sandbox
+// (i.e., MESOS_SANDBOX) is set properly.
+TEST_F(LinuxFilesystemIsolatorMesosTest, ROOT_SandboxEnvironmentVariable)
+{
+  Try<Owned<cluster::Master>> master = StartMaster();
+  ASSERT_SOME(master);
+
+  string registry = path::join(sandbox.get(), "registry");
+  AWAIT_READY(DockerArchive::create(registry, "test_image"));
+
+  slave::Flags flags = CreateSlaveFlags();
+  flags.isolation = "filesystem/linux,docker/runtime";
+  flags.docker_registry = registry;
+  flags.docker_store_dir = path::join(sandbox.get(), "store");
+  flags.image_providers = "docker";
+
+  Owned<MasterDetector> detector = master.get()->createDetector();
+
+  Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), flags);
+  ASSERT_SOME(slave);
+
+  MockScheduler sched;
+
+  MesosSchedulerDriver driver(
+      &sched,
+      DEFAULT_FRAMEWORK_INFO,
+      master.get()->pid,
+      DEFAULT_CREDENTIAL);
+
+  EXPECT_CALL(sched, registered(&driver, _, _))
+    .Times(1);
+
+  Future<vector<Offer>> offers;
+  EXPECT_CALL(sched, resourceOffers(&driver, _))
+    .WillOnce(FutureArg<1>(&offers))
+    .WillRepeatedly(Return()); // Ignore subsequent offers.
+
+  driver.start();
+
+  AWAIT_READY(offers);
+  ASSERT_NE(0u, offers->size());
+
+  const Offer& offer = offers.get()[0];
+
+  TaskInfo task = createTask(
+      offer.slave_id(),
+      offer.resources(),
+      strings::format(
+          "if [ \"$MESOS_SANDBOX\" != \"%s\" ]; then exit 1; fi &&"
+          "if [ ! -d \"$MESOS_SANDBOX\" ]; then exit 1; fi",
+          flags.sandbox_directory).get());
+
+  task.mutable_container()->CopyFrom(createContainerInfo("test_image"));
+
+  driver.launchTasks(offer.id(), {task});
+
+  Future<TaskStatus> statusRunning;
+  Future<TaskStatus> statusFinished;
+
+  EXPECT_CALL(sched, statusUpdate(&driver, _))
+    .WillOnce(FutureArg<1>(&statusRunning))
+    .WillOnce(FutureArg<1>(&statusFinished));
+
+  AWAIT_READY(statusRunning);
+  EXPECT_EQ(TASK_RUNNING, statusRunning->state());
+
+  AWAIT_READY(statusFinished);
+  EXPECT_EQ(TASK_FINISHED, statusFinished->state());
+
+  driver.stop();
+  driver.join();
+}
+
+
 // This test verifies that the volume usage accounting for sandboxes
 // with bind-mounted volumes (while linux filesystem isolator is used)
 // works correctly by creating a file within the volume the size of