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/01/21 18:38:27 UTC

mesos git commit: Added tests for the Docker URI fetcher plugin.

Repository: mesos
Updated Branches:
  refs/heads/master 51a93ae09 -> aa3cc2d27


Added tests for the Docker URI fetcher plugin.

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


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

Branch: refs/heads/master
Commit: aa3cc2d27e4a8ee07d620950b39410d2b43111cd
Parents: 51a93ae
Author: Jie Yu <yu...@gmail.com>
Authored: Wed Jan 13 14:42:49 2016 -0800
Committer: Jie Yu <yu...@gmail.com>
Committed: Thu Jan 21 09:36:06 2016 -0800

----------------------------------------------------------------------
 src/tests/uri_fetcher_tests.cpp | 95 ++++++++++++++++++++++++++++++++++++
 1 file changed, 95 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/aa3cc2d2/src/tests/uri_fetcher_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/uri_fetcher_tests.cpp b/src/tests/uri_fetcher_tests.cpp
index c3bc4ea..6ffe3f4 100644
--- a/src/tests/uri_fetcher_tests.cpp
+++ b/src/tests/uri_fetcher_tests.cpp
@@ -28,17 +28,22 @@
 
 #include <stout/os/exists.hpp>
 #include <stout/os/getcwd.hpp>
+#include <stout/os/ls.hpp>
 #include <stout/os/write.hpp>
 
 #include <stout/tests/utils.hpp>
 
+#include <mesos/docker/spec.hpp>
+
 #include "uri/fetcher.hpp"
 
+#include "uri/schemes/docker.hpp"
 #include "uri/schemes/hdfs.hpp"
 #include "uri/schemes/http.hpp"
 
 namespace http = process::http;
 
+using std::list;
 using std::string;
 
 using process::Future;
@@ -199,6 +204,96 @@ TEST_F(HadoopFetcherPluginTest, FetchNonExistingFile)
   AWAIT_FAILED(fetcher.get()->fetch(uri, dir));
 }
 
+
+// TODO(jieyu): Expose this constant so that other docker related
+// tests can use this as well.
+static constexpr char DOCKER_REGISTRY_HOST[] = "registry-1.docker.io";
+
+
+class DockerFetcherPluginTest : public TemporaryDirectoryTest {};
+
+
+TEST_F(DockerFetcherPluginTest, INTERNET_CURL_FetchManifest)
+{
+  URI uri = uri::docker::manifest(
+      "library/busybox",
+      "latest",
+      DOCKER_REGISTRY_HOST);
+
+  Try<Owned<uri::Fetcher>> fetcher = uri::fetcher::create();
+  ASSERT_SOME(fetcher);
+
+  string dir = path::join(os::getcwd(), "dir");
+
+  AWAIT_READY(fetcher.get()->fetch(uri, dir));
+
+  Try<string> _manifest = os::read(path::join(dir, "manifest"));
+  ASSERT_SOME(_manifest);
+
+  Try<docker::spec::v2::ImageManifest> manifest =
+    docker::spec::v2::parse(_manifest.get());
+
+  ASSERT_SOME(manifest);
+  EXPECT_EQ("library/busybox", manifest->name());
+  EXPECT_EQ("latest", manifest->tag());
+}
+
+
+TEST_F(DockerFetcherPluginTest, INTERNET_CURL_FetchBlob)
+{
+  const string digest =
+    "sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4";
+
+  URI uri = uri::docker::blob(
+      "library/busybox",
+      digest,
+      DOCKER_REGISTRY_HOST);
+
+  Try<Owned<uri::Fetcher>> fetcher = uri::fetcher::create();
+  ASSERT_SOME(fetcher);
+
+  string dir = path::join(os::getcwd(), "dir");
+
+  AWAIT_READY(fetcher.get()->fetch(uri, dir));
+
+  EXPECT_TRUE(os::exists(path::join(dir, digest)));
+}
+
+
+// Fetches the image manifest and all blobs in that image.
+TEST_F(DockerFetcherPluginTest, INTERNET_CURL_FetchImage)
+{
+  URI uri = uri::docker::image(
+      "library/busybox",
+      "latest",
+      DOCKER_REGISTRY_HOST);
+
+  Try<Owned<uri::Fetcher>> fetcher = uri::fetcher::create();
+  ASSERT_SOME(fetcher);
+
+  string dir = path::join(os::getcwd(), "dir");
+
+  AWAIT_READY(fetcher.get()->fetch(uri, dir));
+
+  Try<string> _manifest = os::read(path::join(dir, "manifest"));
+  ASSERT_SOME(_manifest);
+
+  Try<docker::spec::v2::ImageManifest> manifest =
+    docker::spec::v2::parse(_manifest.get());
+
+  ASSERT_SOME(manifest);
+  EXPECT_EQ("library/busybox", manifest->name());
+  EXPECT_EQ("latest", manifest->tag());
+
+  for (int i = 0; i < manifest->fslayers_size(); i++) {
+    EXPECT_TRUE(os::exists(path::join(dir, manifest->fslayers(i).blobsum())));
+  }
+}
+
+
+// TODO(jieyu): Add Docker fetcher plugin tests to test with a local
+// registry server (w/ or w/o authentication).
+
 } // namespace tests {
 } // namespace internal {
 } // namespace mesos {