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/03/12 02:07:45 UTC

[3/4] mesos git commit: Implemented runtime isolator default cmd test.

Implemented runtime isolator default cmd test.

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


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

Branch: refs/heads/master
Commit: 2e4784487bd085d6f7f7b086a7117aaac512e923
Parents: ef3eb54
Author: Gilbert Song <so...@gmail.com>
Authored: Fri Mar 11 17:07:30 2016 -0800
Committer: Jie Yu <yu...@gmail.com>
Committed: Fri Mar 11 17:07:30 2016 -0800

----------------------------------------------------------------------
 .../containerizer/runtime_isolator_tests.cpp    | 105 +++++++++++++++++++
 1 file changed, 105 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/2e478448/src/tests/containerizer/runtime_isolator_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/containerizer/runtime_isolator_tests.cpp b/src/tests/containerizer/runtime_isolator_tests.cpp
index ed48fc7..6c2c3ed 100644
--- a/src/tests/containerizer/runtime_isolator_tests.cpp
+++ b/src/tests/containerizer/runtime_isolator_tests.cpp
@@ -19,17 +19,28 @@
 #include <stout/os.hpp>
 #include <stout/path.hpp>
 #include <stout/try.hpp>
+#include <stout/uuid.hpp>
 
 #include <process/owned.hpp>
 
+#include "tests/environment.hpp"
 #include "tests/mesos.hpp"
 
 #include "tests/containerizer/docker_archive.hpp"
 
+namespace master = mesos::internal::master;
+namespace slave = mesos::internal::slave;
+
 using std::string;
+using std::vector;
 
 using process::Future;
 using process::Owned;
+using process::PID;
+
+using master::Master;
+
+using slave::Slave;
 
 namespace mesos {
 namespace internal {
@@ -53,6 +64,100 @@ TEST_F(DockerArchiveTest, ROOT_CreateDockerLocalTar)
   EXPECT_FALSE(os::exists(path::join(directory, "alpine")));
 }
 
+
+class DockerRuntimeIsolatorTest : public MesosTest {};
+
+
+// This test verifies that docker image default cmd is executed correctly.
+// This corresponds to the case in runtime isolator logic table: sh=0,
+// value=0, argv=1, entrypoint=0, cmd=1.
+TEST_F(DockerRuntimeIsolatorTest, ROOT_DockerDefaultCmdLocalPuller)
+{
+  Try<PID<Master>> master = StartMaster();
+  ASSERT_SOME(master);
+
+  Try<string> mkdtemp = environment->mkdtemp();
+  ASSERT_SOME(mkdtemp);
+
+  const string directory = path::join(mkdtemp.get(), "archives");
+
+  Future<Nothing> testImage =
+    DockerArchive::create(directory, "alpine", "null", "[\"sh\"]");
+
+  AWAIT_READY(testImage);
+
+  ASSERT_TRUE(os::exists(path::join(directory, "alpine.tar")));
+
+  slave::Flags flags = CreateSlaveFlags();
+  flags.isolation = "docker/runtime,filesystem/linux";
+  flags.image_providers = "docker";
+  flags.docker_registry = directory;
+
+  // Make docker store directory as a temparary directory. Because the
+  // manifest of the test image is changeable, the image cached on
+  // previous tests should never be used.
+  flags.docker_store_dir = path::join(flags.work_dir, "docker");
+
+  Try<PID<Slave>> slave = StartSlave(flags);
+  ASSERT_SOME(slave);
+
+  MockScheduler sched;
+  MesosSchedulerDriver driver(
+      &sched, DEFAULT_FRAMEWORK_INFO, master.get(), DEFAULT_CREDENTIAL);
+
+  EXPECT_CALL(sched, registered(&driver, _, _));
+
+  Future<vector<Offer>> offers;
+  EXPECT_CALL(sched, resourceOffers(&driver, _))
+    .WillOnce(FutureArg<1>(&offers))
+    .WillRepeatedly(Return()); // Ignore subsequent offers.
+
+  driver.start();
+
+  AWAIT_READY(offers);
+  ASSERT_EQ(1u, offers->size());
+
+  const Offer& offer = offers.get()[0];
+
+  TaskInfo task;
+  task.set_name("test-task");
+  task.mutable_task_id()->set_value(UUID::random().toString());
+  task.mutable_slave_id()->CopyFrom(offer.slave_id());
+  task.mutable_resources()->CopyFrom(Resources::parse("cpus:1;mem:128").get());
+  task.mutable_command()->set_shell(false);
+  task.mutable_command()->add_arguments("-c");
+  task.mutable_command()->add_arguments("echo 'hello world'");
+
+  Image image;
+  image.set_type(Image::DOCKER);
+  image.mutable_docker()->set_name("alpine");
+
+  ContainerInfo* container = task.mutable_container();
+  container->set_type(ContainerInfo::MESOS);
+  container->mutable_mesos()->mutable_image()->CopyFrom(image);
+
+  Future<TaskStatus> statusRunning;
+  Future<TaskStatus> statusFinished;
+  EXPECT_CALL(sched, statusUpdate(&driver, _))
+    .WillOnce(FutureArg<1>(&statusRunning))
+    .WillOnce(FutureArg<1>(&statusFinished));
+
+  driver.launchTasks(offer.id(), {task});
+
+  AWAIT_READY_FOR(statusRunning, Seconds(60));
+  EXPECT_EQ(task.task_id(), statusRunning->task_id());
+  EXPECT_EQ(TASK_RUNNING, statusRunning->state());
+
+  AWAIT_READY(statusFinished);
+  EXPECT_EQ(task.task_id(), statusFinished->task_id());
+  EXPECT_EQ(TASK_FINISHED, statusFinished->state());
+
+  driver.stop();
+  driver.join();
+
+  Shutdown();
+}
+
 #endif // __linux__
 
 } // namespace tests {