JCLOUDS-1153 Fix empty Docker repoTags field in ImageToImage function
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/9af44965 Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/9af44965 Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/9af44965 Branch: refs/heads/master Commit: 9af449651de4a6b19c59029190cc0635df6f732f Parents: 6408c3a Author: Josef Cacek <[email protected]> Authored: Thu Aug 11 16:53:00 2016 +0200 Committer: Ignasi Barrera <[email protected]> Committed: Fri Aug 12 09:27:08 2016 +0200 ---------------------------------------------------------------------- .../docker/compute/functions/ImageToImage.java | 43 +++++++------- .../compute/functions/ImageToImageTest.java | 59 ++++++++++++++++++++ 2 files changed, 82 insertions(+), 20 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds/blob/9af44965/apis/docker/src/main/java/org/jclouds/docker/compute/functions/ImageToImage.java ---------------------------------------------------------------------- diff --git a/apis/docker/src/main/java/org/jclouds/docker/compute/functions/ImageToImage.java b/apis/docker/src/main/java/org/jclouds/docker/compute/functions/ImageToImage.java index 7e9de03..f030d9a 100644 --- a/apis/docker/src/main/java/org/jclouds/docker/compute/functions/ImageToImage.java +++ b/apis/docker/src/main/java/org/jclouds/docker/compute/functions/ImageToImage.java @@ -16,9 +16,10 @@ */ package org.jclouds.docker.compute.functions; -import com.google.common.base.Function; -import com.google.common.base.Splitter; -import com.google.common.collect.Iterables; +import static com.google.common.base.Preconditions.checkNotNull; + +import javax.annotation.Resource; +import javax.inject.Named; import org.jclouds.compute.domain.Image; import org.jclouds.compute.domain.ImageBuilder; @@ -27,11 +28,8 @@ import org.jclouds.compute.domain.OsFamily; import org.jclouds.compute.reference.ComputeServiceConstants; import org.jclouds.logging.Logger; -import javax.annotation.Resource; -import javax.inject.Named; - -import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.collect.Iterables.get; +import com.google.common.base.Function; +import com.google.common.collect.Iterables; public class ImageToImage implements Function<org.jclouds.docker.domain.Image, org.jclouds.compute.domain.Image> { @@ -46,13 +44,24 @@ public class ImageToImage implements Function<org.jclouds.docker.domain.Image, o public Image apply(org.jclouds.docker.domain.Image from) { checkNotNull(from, "image"); - String description = checkNotNull(Iterables.getFirst(from.repoTags(), "image must have at least one repo tag")); + String firstRepoTag = Iterables.getFirst(from.repoTags(), "<none>"); + final int versionSeparatorPos = firstRepoTag.lastIndexOf(':'); - OsFamily osFamily = osFamily().apply(description); - String osVersion = parseVersion(description); + final String name; + final String osVersion; + if (versionSeparatorPos > -1) { + name = firstRepoTag.substring(0, versionSeparatorPos); + osVersion = firstRepoTag.substring(versionSeparatorPos + 1); + } else { + name = firstRepoTag; + osVersion = firstRepoTag; + } + logger.debug("os version for item: %s is %s", firstRepoTag, osVersion); + + OsFamily osFamily = osFamily().apply(firstRepoTag); OperatingSystem os = OperatingSystem.builder() - .description(description) + .description(firstRepoTag) .family(osFamily) .version(osVersion) .is64Bit(is64bit(from)) @@ -60,8 +69,8 @@ public class ImageToImage implements Function<org.jclouds.docker.domain.Image, o return new ImageBuilder() .ids(from.id()) - .name(get(Splitter.on(":").split(description), 0)) - .description(description) + .name(name) + .description(firstRepoTag) .operatingSystem(os) .status(Image.Status.AVAILABLE) .build(); @@ -91,10 +100,4 @@ public class ImageToImage implements Function<org.jclouds.docker.domain.Image, o }; } - private String parseVersion(String description) { - String version = get(Splitter.on(":").split(description), 1); - logger.debug("os version for item: %s is %s", description, version); - return version; - } - } http://git-wip-us.apache.org/repos/asf/jclouds/blob/9af44965/apis/docker/src/test/java/org/jclouds/docker/compute/functions/ImageToImageTest.java ---------------------------------------------------------------------- diff --git a/apis/docker/src/test/java/org/jclouds/docker/compute/functions/ImageToImageTest.java b/apis/docker/src/test/java/org/jclouds/docker/compute/functions/ImageToImageTest.java index db02e3d..83c1c3b 100644 --- a/apis/docker/src/test/java/org/jclouds/docker/compute/functions/ImageToImageTest.java +++ b/apis/docker/src/test/java/org/jclouds/docker/compute/functions/ImageToImageTest.java @@ -37,6 +37,48 @@ import com.google.common.collect.ImmutableList; @Test(groups = "unit", testName = "ImageToImageTest") public class ImageToImageTest { + private static final org.jclouds.docker.domain.Image IMAGE_EMPTY_REPOTAGS = org.jclouds.docker.domain.Image.create( + "id", // id + "author", + "comment", + Config.builder() + .image("imageId") + .build(), + Config.builder() + .image("imageId") + .build(), + "parent", // parent + new Date(), // created + "containerId", // container + "1.3.1", // dockerVersion + "x86_64", // architecture + "os", // os + 0l, // size + 0l, // virtualSize + ImmutableList.<String> of() // repoTags + ); + + private static final org.jclouds.docker.domain.Image IMAGE_REPOTAG_WITH_PORT = org.jclouds.docker.domain.Image.create( + "id", // id + "author", + "comment", + Config.builder() + .image("imageId") + .build(), + Config.builder() + .image("imageId") + .build(), + "parent", // parent + new Date(), // created + "containerId", // container + "1.3.1", // dockerVersion + "x86_64", // architecture + "os", // os + 0l, // size + 0l, // virtualSize + ImmutableList.of("registry.company.example:8888/a/b/c/d:latest") // repoTags + ); + private ImageToImage function; private org.jclouds.docker.domain.Image image; @@ -76,6 +118,23 @@ public class ImageToImageTest { assertEquals(mockImage.id(), image.getId().toString()); } + public void testEmptyRepoTags() { + Image image = function.apply(IMAGE_EMPTY_REPOTAGS); + + assertEquals(image.getId(), "id"); + assertEquals(image.getDescription(), "<none>"); + assertEquals(image.getOperatingSystem().getVersion(), "<none>"); + assertEquals(image.getName(), "<none>"); + } + + public void testRepoTagWithHostPort() { + Image image = function.apply(IMAGE_REPOTAG_WITH_PORT); + + assertEquals(image.getDescription(), "registry.company.example:8888/a/b/c/d:latest"); + assertEquals(image.getOperatingSystem().getVersion(), "latest"); + assertEquals(image.getName(), "registry.company.example:8888/a/b/c/d"); + } + private org.jclouds.docker.domain.Image mockImage() { org.jclouds.docker.domain.Image mockImage = EasyMock.createMock(org.jclouds.docker.domain.Image.class);
