[JCLOUDS-1017] add tagImage() method to ImageApi

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

Branch: refs/heads/master
Commit: 3342e88f8083922abbfdcd1d60fd2fbb70dc2309
Parents: 9271c11
Author: Josef Cacek <[email protected]>
Authored: Tue Oct 20 15:08:16 2015 +0200
Committer: Ignasi Barrera <[email protected]>
Committed: Wed Oct 21 16:10:21 2015 +0200

----------------------------------------------------------------------
 .../org/jclouds/docker/features/ImageApi.java   | 18 ++++
 .../docker/features/ImageApiLiveTest.java       | 38 +++++++-
 .../docker/features/ImageApiMockTest.java       | 12 +++
 .../jclouds/docker/parse/ImagesParseTest.java   | 48 +++++------
 apis/docker/src/test/resources/images.json      | 91 +++++++++++---------
 5 files changed, 139 insertions(+), 68 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/3342e88f/apis/docker/src/main/java/org/jclouds/docker/features/ImageApi.java
----------------------------------------------------------------------
diff --git 
a/apis/docker/src/main/java/org/jclouds/docker/features/ImageApi.java 
b/apis/docker/src/main/java/org/jclouds/docker/features/ImageApi.java
index 9f7cebc..cfca40d 100644
--- a/apis/docker/src/main/java/org/jclouds/docker/features/ImageApi.java
+++ b/apis/docker/src/main/java/org/jclouds/docker/features/ImageApi.java
@@ -26,6 +26,7 @@ import javax.ws.rs.GET;
 import javax.ws.rs.POST;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
+import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.MediaType;
 
 import org.jclouds.Fallbacks.EmptyListOnNotFoundOr404;
@@ -102,4 +103,21 @@ public interface ImageApi {
    @Path("/images/{name}")
    InputStream deleteImage(@PathParam("name") String name, DeleteImageOptions 
options);
 
+   /**
+    * Tag the image name into a repository.
+    *
+    * @param name
+    *           the name of the image to be tagged
+    * @param repoName
+    *           the repository to tag in
+    * @param tag
+    *           the new tag name
+    * @param force
+    *           force create if tag already exists
+    */
+   @Named("image:tag")
+   @POST
+   @Path("/images/{name}/tag")
+   void tagImage(@PathParam("name") String name, @QueryParam("repo") String 
repoName,
+         @QueryParam("tag") String tag, @QueryParam("force") boolean force);
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/3342e88f/apis/docker/src/test/java/org/jclouds/docker/features/ImageApiLiveTest.java
----------------------------------------------------------------------
diff --git 
a/apis/docker/src/test/java/org/jclouds/docker/features/ImageApiLiveTest.java 
b/apis/docker/src/test/java/org/jclouds/docker/features/ImageApiLiveTest.java
index a145417..1249f2f 100644
--- 
a/apis/docker/src/test/java/org/jclouds/docker/features/ImageApiLiveTest.java
+++ 
b/apis/docker/src/test/java/org/jclouds/docker/features/ImageApiLiveTest.java
@@ -16,20 +16,30 @@
  */
 package org.jclouds.docker.features;
 
+import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.assertNull;
+
 import java.io.InputStream;
+import java.util.List;
 
 import org.jclouds.docker.compute.BaseDockerApiLiveTest;
+import org.jclouds.docker.domain.Image;
+import org.jclouds.docker.domain.ImageSummary;
 import org.jclouds.docker.options.CreateImageOptions;
 import org.testng.annotations.Test;
 
-@Test(groups = "live", testName = "RemoteApiLiveTest", singleThreaded = true)
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
+
+@Test(groups = "live", testName = "ImageApiLiveTest", singleThreaded = true)
 public class ImageApiLiveTest extends BaseDockerApiLiveTest {
 
    private static final String DEFAULT_IMAGE = "busybox";
    private static final String DEFAULT_TAG = "ubuntu-14.04";
 
+   private Image image;
+
    @Test
    public void testCreateImage() {
       InputStream createImageStream = 
api().createImage(CreateImageOptions.Builder.fromImage(DEFAULT_IMAGE).tag(DEFAULT_TAG));
@@ -38,18 +48,38 @@ public class ImageApiLiveTest extends BaseDockerApiLiveTest 
{
 
    @Test(dependsOnMethods = "testCreateImage")
    public void testInspectImage() {
-      assertNotNull(api.getImageApi().inspectImage(String.format("%s:%s", 
DEFAULT_IMAGE, DEFAULT_TAG)));
+      image = api.getImageApi().inspectImage(String.format("%s:%s", 
DEFAULT_IMAGE, DEFAULT_TAG));
+      assertNotNull(image);
    }
 
    @Test(dependsOnMethods = "testInspectImage")
+   public void testTagImage() {
+      api.getImageApi().tagImage(image.id(), "jclouds", "testTag", true);
+      Image taggedImage = api.getImageApi().inspectImage("jclouds:testTag");
+      assertEquals(taggedImage.id(), image.id(), "Newly added image tag should 
point to the same image ID.");
+   }
+
+   @Test(dependsOnMethods = "testTagImage")
    public void testListImages() {
-      assertNotNull(api().listImages());
+      List<ImageSummary> listImages = api().listImages();
+      assertNotNull(listImages);
+
+      Iterables.find(listImages, new Predicate<ImageSummary>() {
+         @Override
+         public boolean apply(ImageSummary input) {
+            return input.repoTags().contains("jclouds:testTag");
+         }
+      });
    }
 
-   @Test(dependsOnMethods = "testListImages")
+   @Test(dependsOnMethods = "testListImages", alwaysRun = true)
    public void testDeleteImage() {
       consumeStream(api().deleteImage(String.format("%s:%s", DEFAULT_IMAGE, 
DEFAULT_TAG)));
       assertNull(api().inspectImage(String.format("%s:%s", DEFAULT_IMAGE, 
DEFAULT_TAG)));
+
+      assertNotNull(api().inspectImage(image.id()), "Image should should still 
exist after removing original tag. There is a newly added tag referencing it.");
+      consumeStream(api().deleteImage("jclouds:testTag"));
+      assertNull(api().inspectImage("jclouds:testTag"));
    }
 
    private ImageApi api() {

http://git-wip-us.apache.org/repos/asf/jclouds/blob/3342e88f/apis/docker/src/test/java/org/jclouds/docker/features/ImageApiMockTest.java
----------------------------------------------------------------------
diff --git 
a/apis/docker/src/test/java/org/jclouds/docker/features/ImageApiMockTest.java 
b/apis/docker/src/test/java/org/jclouds/docker/features/ImageApiMockTest.java
index 5349c39..f789b6d 100644
--- 
a/apis/docker/src/test/java/org/jclouds/docker/features/ImageApiMockTest.java
+++ 
b/apis/docker/src/test/java/org/jclouds/docker/features/ImageApiMockTest.java
@@ -69,6 +69,18 @@ public class ImageApiMockTest extends BaseDockerMockTest {
       }
    }
 
+   public void testTagImage() throws Exception {
+      MockWebServer server = mockWebServer(new 
MockResponse().setResponseCode(201));
+      ImageApi api = api(DockerApi.class, 
server.getUrl("/").toString()).getImageApi();
+      try {
+         
api.tagImage("633fcd11259e8d6bccfbb59a4086b95b0d0fb44edfc3912000ef1f70e8a7bfc6",
 "jclouds", "testTag", true);
+         assertSent(server, "POST",
+               
"/images/633fcd11259e8d6bccfbb59a4086b95b0d0fb44edfc3912000ef1f70e8a7bfc6/tag?repo=jclouds&tag=testTag&force=true");
+      } finally {
+         server.shutdown();
+      }
+   }
+
    public void testDeleteImage() throws Exception {
       MockWebServer server = mockWebServer(new 
MockResponse().setResponseCode(204));
       ImageApi api = api(DockerApi.class, 
server.getUrl("/").toString()).getImageApi();

http://git-wip-us.apache.org/repos/asf/jclouds/blob/3342e88f/apis/docker/src/test/java/org/jclouds/docker/parse/ImagesParseTest.java
----------------------------------------------------------------------
diff --git 
a/apis/docker/src/test/java/org/jclouds/docker/parse/ImagesParseTest.java 
b/apis/docker/src/test/java/org/jclouds/docker/parse/ImagesParseTest.java
index d2ef5b6..1042da0 100644
--- a/apis/docker/src/test/java/org/jclouds/docker/parse/ImagesParseTest.java
+++ b/apis/docker/src/test/java/org/jclouds/docker/parse/ImagesParseTest.java
@@ -39,30 +39,30 @@ public class ImagesParseTest extends 
BaseDockerParseTest<List<ImageSummary>> {
    @Consumes(MediaType.APPLICATION_JSON)
    public List<ImageSummary> expected() {
       return ImmutableList.of(
-              
ImageSummary.create("cbba6639a342646deed70d7ea6162fa2a0acea9300f911f4e014555fe37d3456",
-                      1416827360,
-                      
"05794515afd5724df1cdf0e674ae932455fce7dea3c70a94d77119ad1fa954ba",
-                      0,
-                      808709069,
-                      ImmutableList.of("test:latest")),
-              
ImageSummary.create("e1e548b03259ae30ba12232b6c16ef5205cf71b0363848e78b0394e1ecba4f57",
-                      1416826851,
-                      
"6f36bec79c7f184ceebf7000cfb7244c4bc9b397b6659ac7f420a53d114250d9",
-                      0,
-                      5609404,
-                      ImmutableList.of("<none>:<none>")),
-              
ImageSummary.create("8201388d2b288539aab6aabf5d3b15ec269eba95c6baa9d6771f16540abf3a3f",
-                      1414247273,
-                      
"4671e2c549c5b60063e349f520c801dc73b53d2226a5a8e5501845ebe94761ca",
-                      0,
-                      755313702,
-                      ImmutableList.of("dockerfile/java:openjdk-7-jdk")),
-              
ImageSummary.create("5506de2b643be1e6febbf3b8a240760c6843244c41e12aa2f60ccbb7153d17f5",
-                      1414108439,
-                      
"22093c35d77bb609b9257ffb2640845ec05018e3d96cb939f68d0e19127f1723",
-                      0,
-                      199257566,
-                      ImmutableList.of("ubuntu:14.04"))
+            
ImageSummary.create("d7057cb020844f245031d27b76cb18af05db1cc3a96a29fa7777af75f5ac91a3",
+                  1442866547,
+                  
"cfa753dfea5e68a24366dfba16e6edf573daa447abf65bc11619c1a98a3aff54",
+                  0,
+                  1095501,
+                  ImmutableList.of("docker.io/busybox:1.23.2", 
"docker.io/busybox:latest")),
+            
ImageSummary.create("633fcd11259e8d6bccfbb59a4086b95b0d0fb44edfc3912000ef1f70e8a7bfc6",
+                  1442598293,
+                  
"b65c936b5fb601d680ed656b1ccf8ab857c0e5cb521043a005405c194e9a69f3",
+                  0,
+                  5607885,
+                  ImmutableList.of("docker.io/busybox:ubuntu-14.04", 
"jclouds:testTag")),
+            
ImageSummary.create("f4fddc471ec22fc1f7d37768132f1753bc171121e30ac2af7fcb0302588197c0",
+                  1442260874,
+                  "",
+                  5244426,
+                  5244426,
+                  ImmutableList.of("docker.io/alpine:3.2")),
+            
ImageSummary.create("91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c",
+                  1440102075,
+                  
"d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82",
+                  0,
+                  188333286,
+                  ImmutableList.of("docker.io/ubuntu:14.04", 
"docker.io/ubuntu:latest"))
       );
    }
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/3342e88f/apis/docker/src/test/resources/images.json
----------------------------------------------------------------------
diff --git a/apis/docker/src/test/resources/images.json 
b/apis/docker/src/test/resources/images.json
index 41d4f12..63bec4f 100644
--- a/apis/docker/src/test/resources/images.json
+++ b/apis/docker/src/test/resources/images.json
@@ -1,42 +1,53 @@
 [
-  {
-    "Created": 1416827360,
-    "Id": "cbba6639a342646deed70d7ea6162fa2a0acea9300f911f4e014555fe37d3456",
-    "ParentId": 
"05794515afd5724df1cdf0e674ae932455fce7dea3c70a94d77119ad1fa954ba",
-    "RepoTags": [
-      "test:latest"
-    ],
-    "Size": 0,
-    "VirtualSize": 808709069
-  },
-  {
-    "Created": 1416826851,
-    "Id": "e1e548b03259ae30ba12232b6c16ef5205cf71b0363848e78b0394e1ecba4f57",
-    "ParentId": 
"6f36bec79c7f184ceebf7000cfb7244c4bc9b397b6659ac7f420a53d114250d9",
-    "RepoTags": [
-      "<none>:<none>"
-    ],
-    "Size": 0,
-    "VirtualSize": 5609404
-  },
-  {
-    "Created": 1414247273,
-    "Id": "8201388d2b288539aab6aabf5d3b15ec269eba95c6baa9d6771f16540abf3a3f",
-    "ParentId": 
"4671e2c549c5b60063e349f520c801dc73b53d2226a5a8e5501845ebe94761ca",
-    "RepoTags": [
-      "dockerfile/java:openjdk-7-jdk"
-    ],
-    "Size": 0,
-    "VirtualSize": 755313702
-  },
-  {
-    "Created": 1414108439,
-    "Id": "5506de2b643be1e6febbf3b8a240760c6843244c41e12aa2f60ccbb7153d17f5",
-    "ParentId": 
"22093c35d77bb609b9257ffb2640845ec05018e3d96cb939f68d0e19127f1723",
-    "RepoTags": [
-      "ubuntu:14.04"
-    ],
-    "Size": 0,
-    "VirtualSize": 199257566
-  }
+    {
+        "Created": 1442866547,
+        "Id": 
"d7057cb020844f245031d27b76cb18af05db1cc3a96a29fa7777af75f5ac91a3",
+        "Labels": null,
+        "ParentId": 
"cfa753dfea5e68a24366dfba16e6edf573daa447abf65bc11619c1a98a3aff54",
+        "RepoDigests": [],
+        "RepoTags": [
+            "docker.io/busybox:1.23.2",
+            "docker.io/busybox:latest"
+        ],
+        "Size": 0,
+        "VirtualSize": 1095501
+    },
+    {
+        "Created": 1442598293,
+        "Id": 
"633fcd11259e8d6bccfbb59a4086b95b0d0fb44edfc3912000ef1f70e8a7bfc6",
+        "Labels": null,
+        "ParentId": 
"b65c936b5fb601d680ed656b1ccf8ab857c0e5cb521043a005405c194e9a69f3",
+        "RepoDigests": [],
+        "RepoTags": [
+            "docker.io/busybox:ubuntu-14.04",
+            "jclouds:testTag"
+        ],
+        "Size": 0,
+        "VirtualSize": 5607885
+    },
+    {
+        "Created": 1442260874,
+        "Id": 
"f4fddc471ec22fc1f7d37768132f1753bc171121e30ac2af7fcb0302588197c0",
+        "Labels": null,
+        "ParentId": "",
+        "RepoDigests": [],
+        "RepoTags": [
+            "docker.io/alpine:3.2"
+        ],
+        "Size": 5244426,
+        "VirtualSize": 5244426
+    },
+    {
+        "Created": 1440102075,
+        "Id": 
"91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c",
+        "Labels": {},
+        "ParentId": 
"d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82",
+        "RepoDigests": [],
+        "RepoTags": [
+            "docker.io/ubuntu:14.04",
+            "docker.io/ubuntu:latest"
+        ],
+        "Size": 0,
+        "VirtualSize": 188333286
+    }
 ]
\ No newline at end of file

Reply via email to