From a4a496672051bdb01ce2351baa5e313994e66939 Mon Sep 17 00:00:00 2001 From: danikov Date: Tue, 6 Mar 2012 14:57:38 +0000 Subject: [PATCH 1/4] added tests for get/set Owner + minor improvements --- .../AdminCatalogClientExpectTest.java | 145 +++++++----------- .../features/AdminCatalogClientLiveTest.java | 38 ++++- 2 files changed, 94 insertions(+), 89 deletions(-) diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/AdminCatalogClientExpectTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/AdminCatalogClientExpectTest.java index 0ca55acc96..ae0d374bb6 100644 --- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/AdminCatalogClientExpectTest.java +++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/AdminCatalogClientExpectTest.java @@ -39,6 +39,12 @@ import org.testng.annotations.Test; */ @Test(groups = { "unit", "user" }, singleThreaded = true, testName = "CatalogClientExpectTest") public class AdminCatalogClientExpectTest extends BaseVCloudDirectorRestClientExpectTest { + + private Reference catalogRef = Reference.builder() + .type("application/vnd.vmware.vcloud.catalog+xml") + .name("QunyingTestCatalog") + .href(URI.create(endpoint + "/admin/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4")) + .build(); @Test public void testGetCatalog() { @@ -53,12 +59,6 @@ public class AdminCatalogClientExpectTest extends BaseVCloudDirectorRestClientEx AdminCatalog expected = catalog(); - Reference catalogRef = Reference.builder() - .type("application/vnd.vmware.vcloud.catalog+xml") - .name("QunyingTestCatalog") - .href(URI.create(endpoint + "/admin/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4")) - .build(); - assertEquals(client.getAdminCatalogClient().getCatalog(catalogRef.getURI()), expected); } @@ -76,13 +76,46 @@ public class AdminCatalogClientExpectTest extends BaseVCloudDirectorRestClientEx AdminCatalog expected = modifyCatalog(); - Reference catalogRef = Reference.builder() - .type("application/vnd.vmware.vcloud.catalog+xml") - .name("QunyingTestCatalog") - .href(URI.create(endpoint + "/admin/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4")) + assertEquals(client.getAdminCatalogClient().updateCatalog(catalogRef.getURI(), expected), expected); + } + + @Test + public void testGetOwner() { + VCloudDirectorClient client = requestsSendResponses(loginRequest, sessionResponse, + new VcloudHttpRequestPrimer() + .apiCommand("GET", "/admin/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4/owner") + .acceptAnyMedia() + .httpRequestBuilder().build(), + new VcloudHttpResponsePrimer() + .xmlFilePayload("/catalog/admin/owner.xml", VCloudDirectorMediaType.OWNER) + .httpResponseBuilder().build()); + + Owner expected = owner(); + + assertEquals(client.getAdminCatalogClient().getOwner(catalogRef.getURI()), expected); + } + + @Test + public void testSetOwner() { + VCloudDirectorClient client = requestsSendResponses(loginRequest, sessionResponse, + new VcloudHttpRequestPrimer() + .apiCommand("PUT", "/admin/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4/owner") + .xmlFilePayload("/catalog/admin/updateOwnerSource.xml", VCloudDirectorMediaType.OWNER) + .acceptAnyMedia() + .httpRequestBuilder().build(), + new VcloudHttpResponsePrimer() + .httpResponseBuilder().statusCode(204).build()); + + Owner newOwner = Owner.builder() + .type("application/vnd.vmware.vcloud.owner+xml") + .user(Reference.builder() + .type("application/vnd.vmware.admin.user+xml") + .name("adk@cloudsoftcorp.com") + .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/user/e9eb1b29-0404-4c5e-8ef7-e584acc51da9")) + .build()) .build(); - assertEquals(client.getAdminCatalogClient().updateCatalog(catalogRef.getURI(), expected), expected); + client.getAdminCatalogClient().setOwner(catalogRef.getURI(), newOwner); } public static final AdminCatalog catalog() { @@ -126,14 +159,7 @@ public class AdminCatalogClientExpectTest extends BaseVCloudDirectorRestClientEx .href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4/metadata")) .build()) .description("Testing") - .owner(Owner.builder() - .type("application/vnd.vmware.vcloud.owner+xml") - .user(Reference.builder() - .type("application/vnd.vmware.admin.user+xml") - .name("qunying.huang@enstratus.com") - .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/user/967d317c-4273-4a95-b8a4-bf63b78e9c69")) - .build()) - .build()) + .owner(owner()) .catalogItems(CatalogItems.builder() .item(Reference.builder() .type("application/vnd.vmware.vcloud.catalogItem+xml") @@ -160,78 +186,21 @@ public class AdminCatalogClientExpectTest extends BaseVCloudDirectorRestClientEx .build(); } + private static Owner owner() { + return Owner.builder() + .type("application/vnd.vmware.vcloud.owner+xml") + .user(Reference.builder() + .type("application/vnd.vmware.admin.user+xml") + .name("qunying.huang@enstratus.com") + .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/user/967d317c-4273-4a95-b8a4-bf63b78e9c69")) + .build()) + .build(); + } + public static final AdminCatalog modifyCatalog() { - return AdminCatalog.builder() + return catalog().toBuilder() .name("new QunyingTestCatalog") - .id("urn:vcloud:catalog:7212e451-76e1-4631-b2de-ba1dfd8080e4") - .type("application/vnd.vmware.admin.catalog+xml") - .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4")) - .link(Link.builder() - .rel("up") - .type("application/vnd.vmware.admin.organization+xml") - .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0")) - .build()) - .link(Link.builder() - .rel("alternate") - .type("application/vnd.vmware.vcloud.catalog+xml") - .href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4")) - .build()) - .link(Link.builder() - .rel("down") - .type("application/vnd.vmware.vcloud.owner+xml") - .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4/owner")) - .build()) - .link(Link.builder() - .rel("add") - .type("application/vnd.vmware.vcloud.catalogItem+xml") - .href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4/catalogItems")) - .build()) - .link(Link.builder() - .rel("edit") - .type("application/vnd.vmware.admin.catalog+xml") - .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4")) - .build()) - .link(Link.builder() - .rel("remove") - .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4")) - .build()) - .link(Link.builder() - .rel("down") - .type("application/vnd.vmware.vcloud.metadata+xml") - .href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4/metadata")) - .build()) .description("new Testing") - .owner(Owner.builder() - .type("application/vnd.vmware.vcloud.owner+xml") - .user(Reference.builder() - .type("application/vnd.vmware.admin.user+xml") - .name("qunying.huang@enstratus.com") - .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/user/967d317c-4273-4a95-b8a4-bf63b78e9c69")) - .build()) - .build()) - .catalogItems(CatalogItems.builder() - .item(Reference.builder() - .type("application/vnd.vmware.vcloud.catalogItem+xml") - .name("image") - .href(URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/67a469a1-aafe-4b5b-bb31-a6202ad8961f")) - .build()) - .item(Reference.builder() - .type("application/vnd.vmware.vcloud.catalogItem+xml") - .name("ubuntu10") - .href(URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df")) - .build()) - .item(Reference.builder() - .type("application/vnd.vmware.vcloud.catalogItem+xml") - .name("imageTesting") - .href(URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a9e0afdb-a42b-4688-8409-2ac68cf22939")) - .build()) - .item(Reference.builder() - .type("application/vnd.vmware.vcloud.catalogItem+xml") - .name("TestCase") - .href(URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/f7598606-aea4-41d7-8f67-2090e28e7876")) - .build()) - .build()) - .isPublished(false) .build(); } } diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/AdminCatalogClientLiveTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/AdminCatalogClientLiveTest.java index 571af3179e..af2a1c2b74 100644 --- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/AdminCatalogClientLiveTest.java +++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/AdminCatalogClientLiveTest.java @@ -19,8 +19,11 @@ package org.jclouds.vcloud.director.v1_5.features; import static com.google.common.base.Objects.equal; +import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.GETTER_RETURNS_SAME_OBJ; +import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_FIELD_REQ; import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_FIELD_UPDATABLE; import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.REF_REQ_LIVE; +import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertTrue; @@ -28,6 +31,7 @@ import java.net.URI; import org.jclouds.vcloud.director.v1_5.domain.AdminCatalog; import org.jclouds.vcloud.director.v1_5.domain.Checks; +import org.jclouds.vcloud.director.v1_5.domain.Owner; import org.jclouds.vcloud.director.v1_5.domain.Reference; import org.jclouds.vcloud.director.v1_5.domain.ReferenceType; import org.jclouds.vcloud.director.v1_5.internal.BaseVCloudDirectorClientLiveTest; @@ -55,6 +59,7 @@ public class AdminCatalogClientLiveTest extends BaseVCloudDirectorClientLiveTest */ private ReferenceType catalogRef; private AdminCatalog catalog; + private Owner owner; @BeforeClass(inheritGroups = true) public void setupRequiredClients() { @@ -72,7 +77,38 @@ public class AdminCatalogClientLiveTest extends BaseVCloudDirectorClientLiveTest Checks.checkAdminCatalog(catalog); } - @Test(testName = "PUT /admin/catalog/{id}", dependsOnMethods = { "testGetCatalog" }) + @Test(testName = "GET /admin/catalog/{id}/owner", + dependsOnMethods = { "testGetCatalog" }) + public void testGetCatalogOwner() { + owner = catalogClient.getOwner(catalog.getURI()); + Checks.checkOwner(owner); + } + + @Test(testName = "PUT /admin/catalog/{id}/owner", + dependsOnMethods = { "testGetCatalog" }) + public void updateCatalogOwner() { + Owner oldOwner = owner; + Owner newOwner = Owner.builder() // TODO auto-find a new owner? + .type("application/vnd.vmware.vcloud.owner+xml") + .user(Reference.builder() + .type("application/vnd.vmware.admin.user+xml") + .name("adk@cloudsoftcorp.com") + .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/user/e9eb1b29-0404-4c5e-8ef7-e584acc51da9")) + .build()) + .build(); + + try { + catalogClient.setOwner(catalog.getURI(), newOwner); + owner = catalogClient.getOwner(catalog.getURI()); + Checks.checkOwner(owner); + assertTrue(equal(owner, newOwner), String.format(OBJ_FIELD_UPDATABLE, CATALOG, "owner")); + } finally { + catalogClient.setOwner(catalog.getURI(), oldOwner); + owner = catalogClient.getOwner(catalog.getURI()); + } + } + + @Test(testName = "PUT /admin/catalog/{id}", dependsOnMethods = { "testGetCatalogOwner" }) public void testUpdateCatalog() { String oldName = catalog.getName(); String newName = "new "+oldName; From 8d2b4f38b4b340e9698b3bd2056296a8cb65deff Mon Sep 17 00:00:00 2001 From: danikov Date: Tue, 6 Mar 2012 14:57:53 +0000 Subject: [PATCH 2/4] made Owner check public --- .../java/org/jclouds/vcloud/director/v1_5/domain/Checks.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/domain/Checks.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/domain/Checks.java index 9e6044946d..409e34e873 100644 --- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/domain/Checks.java +++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/domain/Checks.java @@ -250,7 +250,7 @@ public class Checks { checkEntityType(catalog); } - private static void checkOwner(Owner owner) { + public static void checkOwner(Owner owner) { // Check optional elements/attributes if (owner.getUser() != null) { checkReferenceType(owner.getUser()); From 61def9d7074ea257739ce3d26bb0c96c58741dba Mon Sep 17 00:00:00 2001 From: danikov Date: Tue, 6 Mar 2012 14:58:05 +0000 Subject: [PATCH 3/4] added exemplar xml --- .../src/test/resources/catalog/admin/owner.xml | 6 ++++++ .../src/test/resources/catalog/admin/updateOwnerSource.xml | 4 ++++ 2 files changed, 10 insertions(+) create mode 100644 labs/vcloud-director/src/test/resources/catalog/admin/owner.xml create mode 100644 labs/vcloud-director/src/test/resources/catalog/admin/updateOwnerSource.xml diff --git a/labs/vcloud-director/src/test/resources/catalog/admin/owner.xml b/labs/vcloud-director/src/test/resources/catalog/admin/owner.xml new file mode 100644 index 0000000000..ac4a90882c --- /dev/null +++ b/labs/vcloud-director/src/test/resources/catalog/admin/owner.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/labs/vcloud-director/src/test/resources/catalog/admin/updateOwnerSource.xml b/labs/vcloud-director/src/test/resources/catalog/admin/updateOwnerSource.xml new file mode 100644 index 0000000000..04c2b7d0c8 --- /dev/null +++ b/labs/vcloud-director/src/test/resources/catalog/admin/updateOwnerSource.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file From d85e8ca587a208d8ce844d48ba47a9f7e87ef780 Mon Sep 17 00:00:00 2001 From: danikov Date: Tue, 6 Mar 2012 14:58:24 +0000 Subject: [PATCH 4/4] implemented get/set owner methods on client --- .../features/AdminCatalogAsyncClient.java | 26 +++++++++++++++++-- .../v1_5/features/AdminCatalogClient.java | 21 +++++++++++++++ 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/AdminCatalogAsyncClient.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/AdminCatalogAsyncClient.java index d52f34f6ab..b27edc92f2 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/AdminCatalogAsyncClient.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/AdminCatalogAsyncClient.java @@ -23,6 +23,7 @@ import java.net.URI; import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.PUT; +import javax.ws.rs.Path; import javax.ws.rs.Produces; import org.jclouds.rest.annotations.BinderParam; @@ -33,6 +34,7 @@ import org.jclouds.rest.annotations.RequestFilters; import org.jclouds.rest.binders.BindToXMLPayload; import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType; import org.jclouds.vcloud.director.v1_5.domain.AdminCatalog; +import org.jclouds.vcloud.director.v1_5.domain.Owner; import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationToRequest; import org.jclouds.vcloud.director.v1_5.functions.ThrowVCloudErrorOn4xx; @@ -65,8 +67,28 @@ public interface AdminCatalogAsyncClient { ListenableFuture updateCatalog(@EndpointParam URI catalogRef, @BinderParam(BindToXMLPayload.class) AdminCatalog catalog); + /** + * @see AdminClient#getOwner(URI) + */ + @GET + @Path("/owner") + @Consumes + @JAXBResponseParser + @ExceptionParser(ThrowVCloudErrorOn4xx.class) + ListenableFuture getOwner(@EndpointParam URI catalogRef); + + /** + * @see AdminClient#setOwner(URI, Owner) + */ + @PUT + @Path("/owner") + @Consumes + @Produces(VCloudDirectorMediaType.OWNER) + @JAXBResponseParser + @ExceptionParser(ThrowVCloudErrorOn4xx.class) + ListenableFuture setOwner(@EndpointParam URI catalogRef, + @BinderParam(BindToXMLPayload.class) Owner newOwner); + // DELETE /admin/catalog/{id} // POST /admin/catalog/{id}/action/publish -// GET /admin/catalog/{id}/owner -// PUT /admin/catalog/{id}/owner } diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/AdminCatalogClient.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/AdminCatalogClient.java index 872c9978b6..5a3673aaca 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/AdminCatalogClient.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/AdminCatalogClient.java @@ -23,6 +23,7 @@ import java.util.concurrent.TimeUnit; import org.jclouds.concurrent.Timeout; import org.jclouds.vcloud.director.v1_5.domain.AdminCatalog; +import org.jclouds.vcloud.director.v1_5.domain.Owner; /** * Provides synchronous access to {@link AdminCatalog} objects. @@ -56,4 +57,24 @@ public interface AdminCatalogClient { * @return the updated catalog */ AdminCatalog updateCatalog(URI catalogRef, AdminCatalog catalog); + + /** + * Retrieves the owner of a catalog. + * + *
+    * GET /admin/catalog/{id}/owner
+    * 
+ * + * @return the owner or null if not found + */ + Owner getOwner(URI catalogRef); + + /** + * Changes owner for catalog. + * + *
+    * PUT /admin/catalog/{id}/owner
+    * 
+ */ + void setOwner(URI catalogRef, Owner newOwner); }