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/11 02:07:52 UTC
[2/5] mesos git commit: Refactored AppcImageFetcherTest.
Refactored AppcImageFetcherTest.
Changes:
- Changed TestAppcImageServer mock methods to real implementation that
serves http requests. This will allow the TestAppcImageServer to
serve multiple images in a test.
- Made TestAppcImageServer loadable so that it can serve images from
its 'images' directory (currently defaulted to 'server').
- Renamed prepareServerImage to prepareImage to reflect the semantics.
Review: https://reviews.apache.org/r/44534/
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/c245ce7d
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/c245ce7d
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/c245ce7d
Branch: refs/heads/master
Commit: c245ce7d3ccd396d6781fee66c933385b16f89da
Parents: 867aa31
Author: Jojy Varghese <jo...@mesosphere.io>
Authored: Thu Mar 10 17:05:40 2016 -0800
Committer: Jie Yu <yu...@gmail.com>
Committed: Thu Mar 10 17:05:40 2016 -0800
----------------------------------------------------------------------
.../containerizer/provisioner_appc_tests.cpp | 111 +++++++++++--------
1 file changed, 66 insertions(+), 45 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/c245ce7d/src/tests/containerizer/provisioner_appc_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/containerizer/provisioner_appc_tests.cpp b/src/tests/containerizer/provisioner_appc_tests.cpp
index 2041424..9e06f25 100644
--- a/src/tests/containerizer/provisioner_appc_tests.cpp
+++ b/src/tests/containerizer/provisioner_appc_tests.cpp
@@ -451,14 +451,48 @@ TEST_F(ProvisionerAppcTest, Recover)
class TestAppcImageServer : public Process<TestAppcImageServer>
{
public:
- TestAppcImageServer() : ProcessBase("TestAppcImageServer") {}
+ TestAppcImageServer()
+ : ProcessBase("TestAppcImageServer"),
+ imagesDirName("server") {}
- void addRoute(const string& imageName)
+ void load()
{
- route("/" + imageName, None(), &TestAppcImageServer::serveRequest);
+ const string imagesDir = path::join(os::getcwd(), imagesDirName);
+
+ Try<list<string>> imageBundles = os::ls(imagesDir);
+ ASSERT_SOME(imageBundles);
+
+ foreach (const string& imageName, imageBundles.get()) {
+ route("/" + imageName, None(), &TestAppcImageServer::serveRequest);
+ }
+ }
+
+ Future<http::Response> serveRequest(const http::Request& request)
+ {
+ const string imageBundleName = request.url.path;
+
+ const string imageBundlePath = path::join(
+ os::getcwd(),
+ imagesDirName,
+ Path(imageBundleName).basename());
+
+ http::OK response;
+
+ response.type = response.PATH;
+ response.path = imageBundlePath;
+ response.headers["Content-Type"] = "application/octet-stream";
+ response.headers["Content-Disposition"] = strings::format(
+ "attachment; filename=%s",
+ imageBundlePath).get();
+
+ return response;
}
- MOCK_METHOD1(serveRequest, Future<http::Response>(const http::Request&));
+private:
+ // TODO(jojy): Currently hard-codes the images dierctory name.
+ // Consider parameterizing the directory name. This could be done
+ // by removing the 'const' ness of teh variable and adding mutator.
+ const string imagesDirName;
};
@@ -505,36 +539,21 @@ protected:
})~").get();
}
- // TODO(jojy): Currently only supports serving one image. Consider adding
- // support serving any image on the server. One way to do this is to add a map
- // of image name -> server path for each image.
- Future<http::Response> serveImage()
- {
- http::OK response;
-
- response.type = response.PATH;
- response.path = imageBundlePath;
- response.headers["Content-Type"] = "application/octet-stream";
- response.headers["Content-Disposition"] = strings::format(
- "attachment; filename=%s",
- imageBundlePath).get();
-
- return response;
- }
-
- // TODO(jojy): Currently just uses 'imageId' to prepare a image on
- // the server. Consider adding more parameters(e.g, 'labels').
- void prepareServerImage(const string& fileName, const string& imageId)
+ void prepareImage(
+ const string& directory,
+ const string& imageBundlePath,
+ const JSON::Value& manifest)
{
- const Path serverDir(path::join(os::getcwd(), "server"));
-
- Try<string> createImage = createTestImage(serverDir, getManifest());
+ // Place the image in dir '@imageTopDir/images'.
+ Try<string> createImage = createTestImage(directory, getManifest());
ASSERT_SOME(createImage);
- // Set image file path for the test.
- imageBundlePath = path::join(serverDir, fileName);
+ // Test image is created in a directory with this name.
+ const string imageId =
+ "sha512-e77d96aa0240eedf134b8c90baeaf76dca8e78691836301d7498c8402044604"
+ "2e797b296d6ab296e0954c2626bfb264322ebeb8f447dac4fac6511ea06bc61f0";
- const Path imageDir(path::join(serverDir, "images", imageId));
+ const Path imageDir(path::join(directory, "images", imageId));
Future<Nothing> future = command::tar(
Path("."),
@@ -543,9 +562,6 @@ protected:
command::Compression::GZIP);
AWAIT_READY(future);
-
- // Now add route on the server for the image.
- server.addRoute(fileName);
}
virtual void SetUp()
@@ -564,7 +580,6 @@ protected:
TemporaryDirectoryTest::TearDown();
}
- string imageBundlePath;
TestAppcImageServer server;
};
@@ -574,22 +589,28 @@ protected:
// verifies its content. The image is served in 'tar + gzip' format.
TEST_F(AppcImageFetcherTest, CURL_SimpleFetch)
{
- // Setup the image on the image server.
- prepareServerImage(
- "image-latest-linux-amd64.aci",
- "sha512-e77d96aa0240eedf134b8c90baeaf76dca8e78691836301d7498c8402044604"
- "2e797b296d6ab296e0954c2626bfb264322ebeb8f447dac4fac6511ea06bc61f0");
+ const string imageName = "image";
+
+ const string imageBundleName = imageName + "-latest-linux-amd64.aci";
+
+ // Use the default server directory of the image server.
+ const Path serverDir(path::join(os::getcwd(), "server"));
+ const string imageBundlePath = path::join(serverDir, imageBundleName);
+
+ // Setup the image.
+ prepareImage(serverDir, imageBundlePath, getManifest());
- // Setup server.
- EXPECT_CALL(server, serveRequest(_))
- .WillOnce(Return(serveImage()));
+ // Setup http server to serve the image prepared above.
+ server.load();
// Appc Image to be fetched.
- const string imageName =
- stringify(server.self().address) + "/TestAppcImageServer/image";
+ const string discoverableImageName = strings::format(
+ "%s/TestAppcImageServer/%s",
+ stringify(server.self().address) ,
+ imageName).get();
Image::Appc imageInfo;
- imageInfo.set_name(imageName);
+ imageInfo.set_name(discoverableImageName);
Label archLabel;
archLabel.set_key("arch");