Repository: mesos Updated Branches: refs/heads/master ff9c9769a -> 1830a28bf
Made docker version parsing resilient to trailing version components. Review: https://reviews.apache.org/r/37669 Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/1830a28b Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/1830a28b Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/1830a28b Branch: refs/heads/master Commit: 1830a28bfbe2c53136896b467b749c34910ef5b4 Parents: ff9c976 Author: haosdent huang <[email protected]> Authored: Fri Sep 4 11:24:45 2015 +0200 Committer: Bernd Mathiske <[email protected]> Committed: Fri Sep 4 11:57:15 2015 +0200 ---------------------------------------------------------------------- src/docker/docker.cpp | 13 ++++++++++++- src/tests/containerizer/docker_tests.cpp | 26 ++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/1830a28b/src/docker/docker.cpp ---------------------------------------------------------------------- diff --git a/src/docker/docker.cpp b/src/docker/docker.cpp index 2e17ced..ec2de54 100755 --- a/src/docker/docker.cpp +++ b/src/docker/docker.cpp @@ -198,7 +198,18 @@ Future<Version> Docker::__version(const Future<string>& output) vector<string> subParts = strings::split(parts.front(), " "); if (!subParts.empty()) { - Try<Version> version = Version::parse(subParts.back()); + // Docker version output in Fedora 22 is "x.x.x.fc22" which does not match + // the Semantic Versioning specification(<major>[.<minor>[.<patch>]]). We + // remove the overflow components here before parsing the docker version + // output to a Version struct. + string versionString = subParts.back(); + vector<string> components = strings::split(versionString, "."); + if (components.size() > 3) { + components.erase(components.begin() + 3, components.end()); + } + versionString = strings::join(".", components); + + Try<Version> version = Version::parse(versionString); if (version.isError()) { return Failure("Failed to parse docker version: " + http://git-wip-us.apache.org/repos/asf/mesos/blob/1830a28b/src/tests/containerizer/docker_tests.cpp ---------------------------------------------------------------------- diff --git a/src/tests/containerizer/docker_tests.cpp b/src/tests/containerizer/docker_tests.cpp index cfad368..babc7d8 100644 --- a/src/tests/containerizer/docker_tests.cpp +++ b/src/tests/containerizer/docker_tests.cpp @@ -225,6 +225,32 @@ TEST_F(DockerTest, ROOT_DOCKER_interface) } +// This test tests parsing docker version output. +TEST_F(DockerTest, ROOT_DOCKER_parsing_version) +{ + Owned<Docker> docker1(Docker::create("echo Docker version 1.7.1, build", + tests::flags.docker_socket, + false).get()); + Future<Version> version1 = docker1->version(); + AWAIT_READY(version1); + EXPECT_EQ(version1.get(), Version::parse("1.7.1").get()); + + Owned<Docker> docker2(Docker::create("echo Docker version 1.7.1.fc22, build", + tests::flags.docker_socket, + false).get()); + Future<Version> version2 = docker2->version(); + AWAIT_READY(version2); + EXPECT_EQ(version2.get(), Version::parse("1.7.1").get()); + + Owned<Docker> docker3(Docker::create("echo Docker version 1.7.1-fc22, build", + tests::flags.docker_socket, + false).get()); + Future<Version> version3 = docker3->version(); + AWAIT_READY(version3); + EXPECT_EQ(version3.get(), Version::parse("1.7.1").get()); +} + + TEST_F(DockerTest, ROOT_DOCKER_CheckCommandWithShell) { Owned<Docker> docker(Docker::create(tests::flags.docker,
