Repository: mesos
Updated Branches:
  refs/heads/master f56b5c013 -> 9cea997c8


Added the test `ProvisionerDockerWhiteoutTest`.

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


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

Branch: refs/heads/master
Commit: 9cea997c811b869d54b5c892710efbf074b08e3a
Parents: f56b5c0
Author: Qian Zhang <zhq527...@gmail.com>
Authored: Mon Oct 24 16:23:12 2016 +0800
Committer: Qian Zhang <zhq527...@gmail.com>
Committed: Sun Nov 6 09:42:09 2016 +0800

----------------------------------------------------------------------
 .../containerizer/provisioner_docker_tests.cpp  | 95 ++++++++++++++------
 1 file changed, 70 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/9cea997c/src/tests/containerizer/provisioner_docker_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/containerizer/provisioner_docker_tests.cpp 
b/src/tests/containerizer/provisioner_docker_tests.cpp
index d8fb7ab..9682169 100644
--- a/src/tests/containerizer/provisioner_docker_tests.cpp
+++ b/src/tests/containerizer/provisioner_docker_tests.cpp
@@ -28,6 +28,12 @@
 
 #include <mesos/docker/spec.hpp>
 
+#ifdef __linux__
+#include "linux/fs.hpp"
+#endif
+
+#include "slave/containerizer/mesos/provisioner/constants.hpp"
+
 #include "slave/containerizer/mesos/provisioner/docker/metadata_manager.hpp"
 #include "slave/containerizer/mesos/provisioner/docker/paths.hpp"
 #include "slave/containerizer/mesos/provisioner/docker/puller.hpp"
@@ -55,6 +61,10 @@ using process::Promise;
 
 using master::Master;
 
+using mesos::internal::slave::AUFS_BACKEND;
+using mesos::internal::slave::COPY_BACKEND;
+using mesos::internal::slave::OVERLAY_BACKEND;
+
 using mesos::master::detector::MasterDetector;
 
 using slave::ImageInfo;
@@ -64,6 +74,8 @@ using slave::docker::Puller;
 using slave::docker::RegistryPuller;
 using slave::docker::Store;
 
+using testing::WithParamInterface;
+
 namespace mesos {
 namespace internal {
 namespace tests {
@@ -552,9 +564,10 @@ TEST_F(ProvisionerDockerPullerTest, 
ROOT_INTERNET_CURL_Normalize)
 }
 
 
-// This test verifies that any docker image containing whiteout files
-// will be processed correctly.
-TEST_F(ProvisionerDockerPullerTest, ROOT_INTERNET_CURL_Whiteout)
+// This test verifies that the scratch based docker image (that
+// only contain a single binary and its dependencies) can be
+// launched correctly.
+TEST_F(ProvisionerDockerPullerTest, ROOT_INTERNET_CURL_ScratchImage)
 {
   Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
@@ -585,17 +598,8 @@ TEST_F(ProvisionerDockerPullerTest, 
ROOT_INTERNET_CURL_Whiteout)
 
   const Offer& offer = offers.get()[0];
 
-  // We are using the docker image 'cirros' to verify that
-  // the symlink /etc/rc3.d/S40-network does not exist in
-  // container's rootfs because it is labeled by a '.wh.'
-  // whiteout file, and both should be removed.
   CommandInfo command;
   command.set_shell(false);
-  command.set_value("/usr/bin/test");
-  command.add_arguments("test");
-  command.add_arguments("!");
-  command.add_arguments("-f");
-  command.add_arguments("/etc/rc3.d/S40-network");
 
   TaskInfo task = createTask(
       offer.slave_id(),
@@ -604,7 +608,10 @@ TEST_F(ProvisionerDockerPullerTest, 
ROOT_INTERNET_CURL_Whiteout)
 
   Image image;
   image.set_type(Image::DOCKER);
-  image.mutable_docker()->set_name("cirros");
+
+  // 'hello-world' is a scratch image. It contains only one
+  // binary 'hello' in its rootfs.
+  image.mutable_docker()->set_name("hello-world");
 
   ContainerInfo* container = task.mutable_container();
   container->set_type(ContainerInfo::MESOS);
@@ -631,10 +638,40 @@ TEST_F(ProvisionerDockerPullerTest, 
ROOT_INTERNET_CURL_Whiteout)
 }
 
 
-// This test verifies that the scratch based docker image (that
-// only contain a single binary and its dependencies) can be
-// launched correctly.
-TEST_F(ProvisionerDockerPullerTest, ROOT_INTERNET_CURL_ScratchImage)
+class ProvisionerDockerWhiteoutTest
+  : public MesosTest,
+    public WithParamInterface<string>
+{
+public:
+  // Returns the supported backends.
+  static vector<string> parameters()
+  {
+    vector<string> backends = {COPY_BACKEND};
+
+    Try<bool> aufsSupported = fs::supported("aufs");
+    if (aufsSupported.isSome() && aufsSupported.get()) {
+      backends.push_back(AUFS_BACKEND);
+    }
+
+    Try<bool> overlayfsSupported = fs::supported("overlayfs");
+    if (overlayfsSupported.isSome() && overlayfsSupported.get()) {
+      backends.push_back(OVERLAY_BACKEND);
+    }
+
+    return backends;
+  }
+};
+
+
+INSTANTIATE_TEST_CASE_P(
+    BackendFlag,
+    ProvisionerDockerWhiteoutTest,
+    ::testing::ValuesIn(ProvisionerDockerWhiteoutTest::parameters()));
+
+
+// This test verifies that a docker image containing whiteout files
+// will be processed correctly by copy, aufs and overlay backends.
+TEST_P(ProvisionerDockerWhiteoutTest, ROOT_INTERNET_CURL_Whiteout)
 {
   Try<Owned<cluster::Master>> master = StartMaster();
   ASSERT_SOME(master);
@@ -642,6 +679,7 @@ TEST_F(ProvisionerDockerPullerTest, 
ROOT_INTERNET_CURL_ScratchImage)
   slave::Flags flags = CreateSlaveFlags();
   flags.isolation = "docker/runtime,filesystem/linux";
   flags.image_providers = "docker";
+  flags.image_provisioner_backend = GetParam();
 
   Owned<MasterDetector> detector = master.get()->createDetector();
   Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), flags);
@@ -665,20 +703,27 @@ TEST_F(ProvisionerDockerPullerTest, 
ROOT_INTERNET_CURL_ScratchImage)
 
   const Offer& offer = offers.get()[0];
 
-  CommandInfo command;
-  command.set_shell(false);
+  // We are using the docker image 'zhq527725/whiteout' to verify that the
+  // files '/dir1/file1' and '/dir1/dir2/file2' do not exist in container's
+  // rootfs because of the following two whiteout files in the image:
+  //   '/dir1/.wh.file1'
+  //   '/dir1/dir2/.wh..wh..opq'
+  // And we also verify that the file '/dir1/dir2/file3' exists in container's
+  // rootfs which will NOT be applied by '/dir1/dir2/.wh..wh..opq' since they
+  // are in the same layer.
+  // See more details about this docker image in the link below:
+  //   https://hub.docker.com/r/zhq527725/whiteout/
+  CommandInfo command = createCommandInfo(
+      "test ! -f /dir1/file1 && "
+      "test ! -f /dir1/dir2/file2 && "
+      "test -f /dir1/dir2/file3");
 
   TaskInfo task = createTask(
       offer.slave_id(),
       Resources::parse("cpus:1;mem:128").get(),
       command);
 
-  Image image;
-  image.set_type(Image::DOCKER);
-
-  // 'hello-world' is a scratch image. It contains only one
-  // binary 'hello' in its rootfs.
-  image.mutable_docker()->set_name("hello-world");
+  Image image = createDockerImage("zhq527725/whiteout");
 
   ContainerInfo* container = task.mutable_container();
   container->set_type(ContainerInfo::MESOS);

Reply via email to