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 <[email protected]> Authored: Wed Jan 13 14:42:49 2016 -0800 Committer: Jie Yu <[email protected]> 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 {
