You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by na...@apache.org on 2016/08/12 07:37:57 UTC

jclouds-labs git commit: JCLOUDS-1153 Fix empty Docker repoTags field in ImageToImage function

Repository: jclouds-labs
Updated Branches:
  refs/heads/master 76d7aae6e -> 05a5ae2eb


JCLOUDS-1153 Fix empty Docker repoTags field in ImageToImage function


Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs/commit/05a5ae2e
Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs/tree/05a5ae2e
Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs/diff/05a5ae2e

Branch: refs/heads/master
Commit: 05a5ae2ebd64895fc4ccd639d85b484968d7fb3b
Parents: 76d7aae
Author: Josef Cacek <jc...@redhat.com>
Authored: Thu Aug 11 16:53:00 2016 +0200
Committer: Ignasi Barrera <na...@apache.org>
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-labs/blob/05a5ae2e/docker/src/main/java/org/jclouds/docker/compute/functions/ImageToImage.java
----------------------------------------------------------------------
diff --git a/docker/src/main/java/org/jclouds/docker/compute/functions/ImageToImage.java b/docker/src/main/java/org/jclouds/docker/compute/functions/ImageToImage.java
index 7e9de03..f030d9a 100644
--- a/docker/src/main/java/org/jclouds/docker/compute/functions/ImageToImage.java
+++ b/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-labs/blob/05a5ae2e/docker/src/test/java/org/jclouds/docker/compute/functions/ImageToImageTest.java
----------------------------------------------------------------------
diff --git a/docker/src/test/java/org/jclouds/docker/compute/functions/ImageToImageTest.java b/docker/src/test/java/org/jclouds/docker/compute/functions/ImageToImageTest.java
index db02e3d..83c1c3b 100644
--- a/docker/src/test/java/org/jclouds/docker/compute/functions/ImageToImageTest.java
+++ b/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);