diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorMediaType.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorMediaType.java index 8a24111ebc..4e8fb0cf83 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorMediaType.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorMediaType.java @@ -18,6 +18,9 @@ */ package org.jclouds.vcloud.director.v1_5; +import java.util.Arrays; +import java.util.List; + /** * Resource Types used in VCloud. * @@ -60,4 +63,9 @@ public class VCloudDirectorMediaType { public static final String PROPERTY = "application/vnd.vmware.vcloud.property+xml"; + public static final List ALL = Arrays.asList( + SESSION, ERROR, ORG_LIST, METADATA, METADATA_ENTRY, + METADATA_VALUE, ORG, TASKS_LIST, TASK, ORG_NETWORK, + CATALOG, CATALOG_ITEM, CATALOG_ITEMS, CATALOGS_LIST, PROPERTY + ); } diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/EntityType.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/EntityType.java index 6a9c68def2..ced3b93561 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/EntityType.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/EntityType.java @@ -161,7 +161,7 @@ public class EntityType> extends ResourceType { private TasksInProgress tasksInProgress; @XmlAttribute private String id; - @XmlAttribute + @XmlAttribute(required = true) private String name; protected EntityType(URI href, String name) { diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Link.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Link.java index ed4d5de848..7779d9a929 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Link.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Link.java @@ -22,6 +22,8 @@ import static com.google.common.base.Objects.*; import static com.google.common.base.Preconditions.*; import java.net.URI; +import java.util.Arrays; +import java.util.List; import java.util.Map; import javax.xml.bind.annotation.XmlAttribute; @@ -40,6 +42,18 @@ import com.google.common.base.Objects.ToStringHelper; */ public class Link extends ReferenceType { + public static final class Rel { + public static final String UP = "up"; + public static final String DOWN = "down"; + public static final String EDIT = "edit"; + public static final String DELETE = "delete"; + public static final String TASK_CANCEL = "task:cancel"; + + public static final List ALL = Arrays.asList( + UP, DOWN, EDIT, DELETE, TASK_CANCEL + ); + } + @SuppressWarnings("unchecked") public static Builder builder() { return new Builder(); @@ -133,7 +147,7 @@ public class Link extends ReferenceType { } } - @XmlAttribute + @XmlAttribute(required = true) private String rel; private Link(URI href, String rel) { diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Metadata.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Metadata.java index baee875246..8589652fc1 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Metadata.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Metadata.java @@ -125,7 +125,7 @@ public class Metadata extends ResourceType { } public Builder fromMetadata(Metadata in) { - return fromResourceType(in).metadata(in.getMetadata()); + return fromResourceType(in).metadata(in.getMetadataEntries()); } /** @@ -149,7 +149,7 @@ public class Metadata extends ResourceType { @XmlElement(namespace = VCLOUD_1_5_NS, name = "MetadataEntry") private Set metadataEntries = Sets.newLinkedHashSet(); - public Set getMetadata() { + public Set getMetadataEntries() { return ImmutableSet.copyOf(metadataEntries); } diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ReferenceType.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ReferenceType.java index e9444d8ef7..4992ba8e54 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ReferenceType.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/ReferenceType.java @@ -108,7 +108,7 @@ public class ReferenceType> implements URISupplier { } } - @XmlAttribute + @XmlAttribute(required = true) private URI href; @XmlAttribute private String id; diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Task.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Task.java index 11d79f6143..dfe569d62a 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Task.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/Task.java @@ -23,7 +23,9 @@ import static com.google.common.base.Preconditions.*; import static org.jclouds.vcloud.director.v1_5.VCloudDirectorConstants.*; import java.net.URI; +import java.util.Arrays; import java.util.Date; +import java.util.List; import java.util.Set; import javax.xml.bind.annotation.XmlAttribute; @@ -49,6 +51,21 @@ import com.google.common.collect.Sets; public class Task extends EntityType { public static final String MEDIA_TYPE = VCloudDirectorMediaType.TASK; + + public static class Status { + public static final String QUEUED = "queued"; + public static final String PRE_RUNNING = "preRunning"; + public static final String RUNNING = "running"; + public static final String SUCCESS = "success"; + public static final String ERROR = "error"; + public static final String CANCELED = "canceled"; + public static final String ABORTED = "aborted"; + + public static final List ALL = Arrays.asList( + QUEUED, PRE_RUNNING, RUNNING, SUCCESS, + ERROR, CANCELED, ABORTED + ); + } @SuppressWarnings("unchecked") public static Builder builder() { diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/TasksList.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/TasksList.java index 7ffd1550d5..de51ef357d 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/TasksList.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/domain/TasksList.java @@ -7,7 +7,7 @@ * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * - * http://www.apache.task/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/CatalogAsyncClient.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/CatalogAsyncClient.java index e3b8815d23..b250c47b05 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/CatalogAsyncClient.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/CatalogAsyncClient.java @@ -140,8 +140,8 @@ public interface CatalogAsyncClient { */ @POST @Path("/metadata") - @Consumes(VCloudDirectorMediaType.METADATA) - @Produces(VCloudDirectorMediaType.TASK) + @Consumes(VCloudDirectorMediaType.TASK) + @Produces(VCloudDirectorMediaType.METADATA) @JAXBResponseParser @ExceptionParser(ThrowVCloudErrorOn4xx.class) ListenableFuture mergeCatalogItemMetadata(@EndpointParam(parser = ReferenceToEndpoint.class) ReferenceType catalogItemRef, @@ -163,8 +163,8 @@ public interface CatalogAsyncClient { */ @PUT @Path("/metadata/{key}") - @Consumes(VCloudDirectorMediaType.METADATA_VALUE) - @Produces(VCloudDirectorMediaType.TASK) + @Consumes(VCloudDirectorMediaType.TASK) + @Produces(VCloudDirectorMediaType.METADATA_VALUE) @JAXBResponseParser @ExceptionParser(ThrowVCloudErrorOn4xx.class) ListenableFuture setCatalogItemMetadataEntry(@EndpointParam(parser = ReferenceToEndpoint.class) ReferenceType catalogItemRef, diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/OrgAsyncClient.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/OrgAsyncClient.java index 75c82d4acc..9fda1f293a 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/OrgAsyncClient.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/OrgAsyncClient.java @@ -49,7 +49,7 @@ public interface OrgAsyncClient { * @see OrgClient#getOrgList() */ @GET - @Path("/org") + @Path("/org/") @Consumes @JAXBResponseParser ListenableFuture getOrgList(); @@ -71,7 +71,7 @@ public interface OrgAsyncClient { @Consumes @JAXBResponseParser @ExceptionParser(ThrowVCloudErrorOn4xx.class) - ListenableFuture getMetadata(@EndpointParam(parser = ReferenceToEndpoint.class) ReferenceType orgRef); + ListenableFuture getOrgMetadata(@EndpointParam(parser = ReferenceToEndpoint.class) ReferenceType orgRef); /** * @see OrgClient#getMetadataEntry(ReferenceType, String) @@ -81,6 +81,6 @@ public interface OrgAsyncClient { @Consumes @JAXBResponseParser @ExceptionParser(ThrowVCloudErrorOn4xx.class) - ListenableFuture getMetadataEntry(@EndpointParam(parser = ReferenceToEndpoint.class) ReferenceType orgRef, + ListenableFuture getOrgMetadataEntry(@EndpointParam(parser = ReferenceToEndpoint.class) ReferenceType orgRef, @PathParam("key") String key); } diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/OrgClient.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/OrgClient.java index e52ac68748..96125cca70 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/OrgClient.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/OrgClient.java @@ -69,7 +69,7 @@ public interface OrgClient { * * @return a list of metadata */ - Metadata getMetadata(ReferenceType orgRef); + Metadata getOrgMetadata(ReferenceType orgRef); /** * Retrieves a metadata entry. @@ -80,6 +80,6 @@ public interface OrgClient { * * @return the metadata entry or null if not found */ - MetadataEntry getMetadataEntry(ReferenceType orgRef, String key); + MetadataEntry getOrgMetadataEntry(ReferenceType orgRef, String key); // FIXME throws exception on not found currently } diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/TaskAsyncClient.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/TaskAsyncClient.java index 41050aee94..9eeb7340e7 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/TaskAsyncClient.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/TaskAsyncClient.java @@ -18,6 +18,8 @@ */ package org.jclouds.vcloud.director.v1_5.features; +import java.net.URI; + import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.POST; @@ -54,13 +56,13 @@ public interface TaskAsyncClient { ListenableFuture getTaskList(@EndpointParam(parser = OrgReferenceToTaskListEndpoint.class) ReferenceType orgRef); /** - * @see TaskClient#getTask(ReferenceType) + * @see TaskClient#getTask(URI) */ @GET @Consumes @JAXBResponseParser @ExceptionParser(ThrowVCloudErrorOn4xx.class) - ListenableFuture getTask(@EndpointParam(parser = ReferenceToEndpoint.class) ReferenceType taskRef); + ListenableFuture getTask(@EndpointParam URI taskUri); /** * @see TaskClient#cancelTask(URI) @@ -70,5 +72,5 @@ public interface TaskAsyncClient { @Consumes @JAXBResponseParser @ExceptionParser(ThrowVCloudErrorOn4xx.class) - ListenableFuture cancelTask(@EndpointParam(parser = ReferenceToEndpoint.class) ReferenceType taskRef); + ListenableFuture cancelTask(@EndpointParam URI taskUri); } diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/TaskClient.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/TaskClient.java index 9682316877..990ad8b613 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/TaskClient.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/TaskClient.java @@ -18,6 +18,7 @@ */ package org.jclouds.vcloud.director.v1_5.features; +import java.net.URI; import java.util.concurrent.TimeUnit; import org.jclouds.concurrent.Timeout; @@ -55,7 +56,7 @@ public interface TaskClient { * * @return the task or null if not found */ - Task getTask(ReferenceType taskRef); + Task getTask(URI taskUri); /** * Cancels a task. @@ -64,5 +65,5 @@ public interface TaskClient { * POST /task/{id}/action/cancel * */ - void cancelTask(ReferenceType taskRef); + void cancelTask(URI taskUri); } diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorClientExpectTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorClientExpectTest.java index 2806e74726..3aa3533b34 100644 --- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorClientExpectTest.java +++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorClientExpectTest.java @@ -1,4 +1,4 @@ -/** +/* * Licensed to jclouds, Inc. (jclouds) under one or more * contributor license agreements. See the NOTICE file * distributed with this work for additional information @@ -25,7 +25,6 @@ import org.jclouds.vcloud.director.v1_5.login.SessionClientExpectTest; import org.testng.annotations.Test; /** - * * @author Adrian Cole */ @Test(groups = "unit", testName = "VCloudDirectorClient") diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorLiveTestConstants.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorLiveTestConstants.java new file mode 100644 index 0000000000..709183d374 --- /dev/null +++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/VCloudDirectorLiveTestConstants.java @@ -0,0 +1,28 @@ +/** + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.jclouds.vcloud.director.v1_5; + +/** + * @author grkvlt@apache.org + */ +public class VCloudDirectorLiveTestConstants { + + public static final String FIELD_NOT_NULL_FMT = "The %s field of the %s must not be null"; + +} 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 new file mode 100644 index 0000000000..f994c1b270 --- /dev/null +++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/domain/Checks.java @@ -0,0 +1,153 @@ +/** + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.jclouds.vcloud.director.v1_5.domain; + +import static org.testng.Assert.*; + +import java.net.URI; +import java.util.Set; +import java.util.UUID; + +import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType; + +import com.google.common.base.Splitter; +import com.google.common.collect.Iterables; + +/** + * @author grkvlt@apache.org + */ +public class Checks { + + public static void checkEntityType(EntityType entity) { + // Check required fields + assertNotNull(entity.getName(), "The Name attribute of an EntityType must be set"); + + // Check optional fields + // NOTE description cannot be checked + TasksInProgress tasksInProgress = entity.getTasksInProgress(); + if (tasksInProgress != null && tasksInProgress.getTasks() != null && !tasksInProgress.getTasks().isEmpty()) { + for (Task task : tasksInProgress.getTasks()) checkTask(task); + } + + // Check parent type + checkResourceType(entity); + } + + public static void checkReferenceType(ReferenceType reference) { + // Check required fields + assertNotNull(reference.getHref(), "The Href attribute of a ReferenceType must be set"); + + // Check optional fields + String id = reference.getId(); + if (id != null) checkId(id); + String type = reference.getType(); + if (type != null) checkType(type); + // NOTE name cannot be checked + } + + public static void checkResourceType(ResourceType resource) { + // Check optional fields + URI href = resource.getHref(); + if (href != null) checkHref(href); + String type = resource.getType(); + if (type != null) checkType(type); + Set links = resource.getLinks(); + if (links != null && !links.isEmpty()) { + for (Link link : links) checkLink(link); + } + } + + public static void checkId(String id) { + Iterable parts = Splitter.on(':').split(id); + assertEquals(Iterables.size(parts), 4, "The Id must be well formed"); + assertEquals(Iterables.get(parts, 0), "urn", "The Id must start with 'urn'"); + assertEquals(Iterables.get(parts, 1), "vcloud", "The Id must include 'vcloud'"); + try { + UUID uuid = UUID.fromString(Iterables.get(parts, 3)); + assertNotNull(uuid, "The UUID part of an Id must be well formed"); + } catch (IllegalArgumentException iae) { + fail("The UUID part of an Id must be well formed"); + } + } + + public static void checkType(String type) { + assertTrue(VCloudDirectorMediaType.ALL.contains(type), "The Type must be a valid media type"); + } + + // NOTE this does not currently check anything + public static void checkHref(URI href) { + String uri = href.toASCIIString(); + String auth = href.getAuthority(); + String host = href.getHost(); + String path = href.getPath(); + // TODO inject the endpoint of the provider here for rudimentary checks as below + // assertEquals(auth + "://" + host + path, endpoint, "The Href must contain the provider endpoint"); + // assertTrue(uri.startsWith(endpoint), "The Href must contain the provider endpoint"); + } + + public static void checkLink(Link link) { + // Check required fields + assertNotNull(link.getRel(), "The Rel attribute of a Link must be set"); + assertTrue(Link.Rel.ALL.contains(link.getRel()), "The Rel attribute of a Link must be one of the allowed list"); + + // Check parent type + checkReferenceType(link); + } + + public static void checkTask(Task task) { + // Check required fields + assertNotNull(task.getStatus(), "The Status attribute of a Task must be set"); + assertTrue(Task.Status.ALL.contains(task.getStatus()), "The Status of a Task must be one of the allowed list"); + + // Check optional fields + // NOTE operation cannot be checked + // NOTE operationName cannot be checked + // NOTE startTime cannot be checked + // NOTE endTime cannot be checked + // NOTE expiryTimecannot be checked + ReferenceType owner = task.getOwner(); + if (owner != null) checkReferenceType(owner); + Error error = task.getError(); + if (error != null) checkError(error); + ReferenceType user = task.getUser(); + if (user != null) checkReferenceType(user); + ReferenceType org = task.getOrg(); + if (org != null) checkReferenceType(org); + Integer progress = task.getProgress(); + if (progress != null) checkProgress(progress); + // NOTE params cannot be checked + + // Check parent type + checkEntityType(task); + } + + public static void checkProgress(Integer progress) { + assertTrue(progress >= 0 && progress <= 100, "The Progress attribute must be between 0 and 100"); + } + + public static void checkError(Error error) { + // Check required fields + assertNotNull(error.getMessage(), "The Message attribute of an Error must be set"); + assertNotNull(error.getMajorErrorCode(), "The MajorErrorCode attribute of an Error must be set"); + assertNotNull(error.getMinorErrorCode(), "The MinorErrorCode attribute of an Error must be set"); + + // NOTE vendorSpecificErrorCode cannot be checked + // NOTE stackTrace cannot be checked + } +} diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/CatalogClientExpectTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/CatalogClientExpectTest.java index 31590b21bd..5a192b3b8f 100644 --- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/CatalogClientExpectTest.java +++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/CatalogClientExpectTest.java @@ -1,15 +1,15 @@ -/** +/* * Licensed to jclouds, Inc. (jclouds) under one or more * contributor license agreements. See the NOTICE file * distributed with this work for additional information - *(Link.builder().regarding copyright ownership. jclouds licenses this file + * regarding copyright ownership. jclouds licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless(Link.builder().required by applicable law or agreed to in writing, + * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the @@ -34,6 +34,7 @@ import org.jclouds.vcloud.director.v1_5.domain.Metadata; import org.jclouds.vcloud.director.v1_5.domain.MetadataEntry; import org.jclouds.vcloud.director.v1_5.domain.MetadataValue; import org.jclouds.vcloud.director.v1_5.domain.Reference; +import org.jclouds.vcloud.director.v1_5.domain.Task; import org.jclouds.vcloud.director.v1_5.internal.BaseVCloudDirectorRestClientExpectTest; import org.testng.annotations.Test; @@ -66,40 +67,7 @@ public class CatalogClientExpectTest extends BaseVCloudDirectorRestClientExpectT VCloudDirectorClient client = requestsSendResponses(loginRequest, sessionResponse, catalogRequest, catalogResponse); - Catalog expected = Catalog.builder() - .name("QunyingTestCatalog") - .type("application/vnd.vmware.vcloud.catalog+xml") - .id("urn:vcloud:catalog:7212e451-76e1-4631-b2de-ba1dfd8080e4") - .href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4")) - .link(Link.builder() - .rel("up") - .type("application/vnd.vmware.vcloud.org+xml") - .href(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0")) - .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("down") - .type("application/vnd.vmware.vcloud.metadata+xml") - .href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4/metadata")) - .build()) - .catalogItems(CatalogItems.builder() - .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()) - .build()) - .description("Testing") - .build(); + Catalog expected = catalog(); Reference catalogRef = Reference.builder() .type("application/vnd.vmware.vcloud.catalog+xml") @@ -124,7 +92,7 @@ public class CatalogClientExpectTest extends BaseVCloudDirectorRestClientExpectT HttpResponse catalogItemResponse = HttpResponse.builder() .statusCode(200) - .payload(payloadFromResourceWithContentType("/catalog/catalogItem.xml", VCloudDirectorMediaType.CATALOG_ITEM + ";version=1.5")) + .payload(payloadFromResourceWithContentType("/catalog/createdCatalogItem.xml", VCloudDirectorMediaType.CATALOG_ITEM + ";version=1.5")) .build(); VCloudDirectorClient client = requestsSendResponses(loginRequest, sessionResponse, catalogItemRequest, catalogItemResponse); @@ -135,20 +103,431 @@ public class CatalogClientExpectTest extends BaseVCloudDirectorRestClientExpectT .href(URI.create(endpoint + "/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4")) .build(); - Reference ubuntu = Reference.builder() - .type("application/vnd.vmware.vcloud.vAppTemplate+xml") - .name("ubuntu10") - .href(URI.create("https://vcloudbeta.bluelock.com/api/vAppTemplate/vappTemplate-ef4415e6-d413-4cbb-9262-f9bbec5f2ea9")) - .build(); - CatalogItem newItem = CatalogItem.builder() .name("newCatalogItem") .description("New Catalog Item") - .entity(ubuntu) + .entity(ubuntuVappTemplateReference()) .build(); - CatalogItem expected = CatalogItem.builder() - .name("newCatalogItem") + CatalogItem expected = createdCatalogItem(); + + assertEquals(client.getCatalogClient().addCatalogItem(catalogRef, newItem), expected); + } + + @Test + public void testGetCatalogMetadata() { + HttpRequest catalogRequest = HttpRequest.builder() + .method("GET") + .endpoint(URI.create(endpoint + "/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4/metadata")) + .headers(ImmutableMultimap. builder() + .put("Accept", "*/*") + .put("x-vcloud-authorization", token) + .build()) + .build(); + + HttpResponse catalogResponse = HttpResponse.builder() + .statusCode(200) + .payload(payloadFromResourceWithContentType("/catalog/catalogMetadata.xml", VCloudDirectorMediaType.METADATA)) + .build(); + + VCloudDirectorClient client = requestsSendResponses(loginRequest, sessionResponse, catalogRequest, catalogResponse); + + Reference catalogRef = Reference.builder() + .type("application/vnd.vmware.vcloud.catalog+xml") + .name("QunyingTestCatalog") + .href(URI.create(endpoint + "/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4")) + .build(); + + Metadata expected = Metadata.builder() + .type("application/vnd.vmware.vcloud.metadata+xml") + .href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4/metadata")) + .link(Link.builder() + .rel("up") + .type("application/vnd.vmware.vcloud.catalog+xml") + .href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4")) + .build()) + .metadata(ImmutableSet.of(metadataEntry())) + .build(); + + assertEquals(client.getCatalogClient().getCatalogMetadata(catalogRef), expected); + } + + @Test + public void testGetCatalogMetadataEntry() { + HttpRequest catalogRequest = HttpRequest.builder() + .method("GET") + .endpoint(URI.create(endpoint + "/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4/metadata/KEY")) + .headers(ImmutableMultimap. builder() + .put("Accept", "*/*") + .put("x-vcloud-authorization", token) + .build()) + .build(); + + HttpResponse catalogResponse = HttpResponse.builder() + .statusCode(200) + .payload(payloadFromResourceWithContentType("/catalog/catalogMetadataEntry.xml", VCloudDirectorMediaType.METADATA_ENTRY)) + .build(); + + VCloudDirectorClient client = requestsSendResponses(loginRequest, sessionResponse, catalogRequest, catalogResponse); + + Reference catalogRef = Reference.builder() + .type("application/vnd.vmware.vcloud.catalog+xml") + .name("QunyingTestCatalog") + .href(URI.create(endpoint + "/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4")) + .build(); + + MetadataEntry expected = metadataEntry(); + + assertEquals(client.getCatalogClient().getCatalogMetadataEntry(catalogRef, "KEY"), expected); + } + + @Test + public void testGetCatalogItem() { + HttpRequest catalogItemRequest = HttpRequest.builder() + .method("GET") + .endpoint(URI.create(endpoint + "/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df")) + .headers(ImmutableMultimap. builder() + .put("Accept", "*/*") + .put("x-vcloud-authorization", token) + .build()) + .build(); + + HttpResponse catalogItemResponse = HttpResponse.builder() + .statusCode(200) + .payload(payloadFromResourceWithContentType("/catalog/catalogItem.xml", VCloudDirectorMediaType.CATALOG_ITEM)) + .build(); + + VCloudDirectorClient client = requestsSendResponses(loginRequest, sessionResponse, catalogItemRequest, catalogItemResponse); + + Reference catalogItemReference = 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(); + + CatalogItem expected = catalogItem(); + + assertEquals(client.getCatalogClient().getCatalogItem(catalogItemReference), expected); + } + + @Test + public void testUpdateCatalogItem() { + HttpRequest catalogItemRequest = HttpRequest.builder() + .method("PUT") + .endpoint(URI.create(endpoint + "/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df")) + .headers(ImmutableMultimap. builder() + .put("Accept", "application/vnd.vmware.vcloud.catalogItem+xml") + .put("x-vcloud-authorization", token) + .build()) + .payload(payloadFromResourceWithContentType("/catalog/updateCatalogItem.xml", VCloudDirectorMediaType.CATALOG_ITEM)) + .build(); + + HttpResponse catalogItemResponse = HttpResponse.builder() + .statusCode(200) + .payload(payloadFromResourceWithContentType("/catalog/updateCatalogItem.xml", VCloudDirectorMediaType.CATALOG_ITEM + ";version=1.5")) + .build(); + + VCloudDirectorClient client = requestsSendResponses(loginRequest, sessionResponse, catalogItemRequest, catalogItemResponse); + + Reference catalogItemReference = 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(); + + CatalogItem expected = catalogItem(); + + assertEquals(client.getCatalogClient().updateCatalogItem(catalogItemReference, expected), expected); + } + + @Test + public void testDeleteCatalogItem() { + HttpRequest catalogItemRequest = HttpRequest.builder() + .method("DELETE") + .endpoint(URI.create(endpoint + "/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df")) + .headers(ImmutableMultimap. builder() + .put("Accept", "*/*") + .put("x-vcloud-authorization", token) + .build()) + .build(); + + HttpResponse catalogItemResponse = HttpResponse.builder() + .statusCode(200) + .build(); + + VCloudDirectorClient client = requestsSendResponses(loginRequest, sessionResponse, catalogItemRequest, catalogItemResponse); + + Reference catalogItemReference = 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(); + + client.getCatalogClient().deleteCatalogItem(catalogItemReference); + } + + @Test + public void testGetCatalogItemMetadata() { + HttpRequest catalogItemRequest = HttpRequest.builder() + .method("GET") + .endpoint(URI.create(endpoint + "/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df/metadata")) + .headers(ImmutableMultimap. builder() + .put("Accept", "*/*") + .put("x-vcloud-authorization", token) + .build()) + .build(); + + HttpResponse catalogItemResponse = HttpResponse.builder() + .statusCode(200) + .payload(payloadFromResourceWithContentType("/catalog/catalogItemMetadata.xml", VCloudDirectorMediaType.METADATA)) + .build(); + + VCloudDirectorClient client = requestsSendResponses(loginRequest, sessionResponse, catalogItemRequest, catalogItemResponse); + + Reference catalogItemReference = 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(); + + Metadata expected = Metadata.builder() + .type("application/vnd.vmware.vcloud.metadata+xml") + .href(URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df/metadata")) + .link(Link.builder() + .rel("up") + .type("application/vnd.vmware.vcloud.catalogItem+xml") + .href(URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df")) + .build()) + .metadata(ImmutableSet.of(itemMetadataEntry())) + .build(); + + assertEquals(client.getCatalogClient().getCatalogItemMetadata(catalogItemReference), expected); + } + + @Test + public void testMergeCatalogItemMetadata() { + HttpRequest catalogItemRequest = HttpRequest.builder() + .method("POST") + .endpoint(URI.create(endpoint + "/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df/metadata")) + .headers(ImmutableMultimap. builder() + .put("Accept", "application/vnd.vmware.vcloud.task+xml") + .put("x-vcloud-authorization", token) + .build()) + .payload(payloadFromResourceWithContentType("/catalog/mergeCatalogItemMetadata.xml", VCloudDirectorMediaType.METADATA)) + .build(); + + HttpResponse catalogItemResponse = HttpResponse.builder() + .statusCode(200) + .payload(payloadFromResourceWithContentType("/catalog/mergeMetadataTask.xml", VCloudDirectorMediaType.TASK + ";version=1.5")) + .build(); + + VCloudDirectorClient client = requestsSendResponses(loginRequest, sessionResponse, catalogItemRequest, catalogItemResponse); + + Reference catalogItemReference = 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(); + + Metadata metadata = Metadata.builder().entry(MetadataEntry.builder().entry("KEY", "VALUE").build()).build(); + + Task expected = mergeMetadataTask(); + + assertEquals(client.getCatalogClient().mergeCatalogItemMetadata(catalogItemReference, metadata), expected); + } + + @Test + public void testGetCatalogItemMetadataEntry() { + HttpRequest catalogItemRequest = HttpRequest.builder() + .method("GET") + .endpoint(URI.create(endpoint + "/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df/metadata/KEY")) + .headers(ImmutableMultimap. builder() + .put("Accept", "*/*") + .put("x-vcloud-authorization", token) + .build()) + .build(); + + HttpResponse catalogItemResponse = HttpResponse.builder() + .statusCode(200) + .payload(payloadFromResourceWithContentType("/catalog/catalogItemMetadataEntry.xml", VCloudDirectorMediaType.METADATA_ENTRY + ";version=1.5")) + .build(); + + VCloudDirectorClient client = requestsSendResponses(loginRequest, sessionResponse, catalogItemRequest, catalogItemResponse); + + Reference catalogItemReference = 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(); + + MetadataEntry expected = itemMetadataEntry(); + + assertEquals(client.getCatalogClient().getCatalogItemMetadataEntry(catalogItemReference, "KEY"), expected); + } + + @Test + public void testSetCatalogItemMetadataEntry() { + HttpRequest catalogItemRequest = HttpRequest.builder() + .method("PUT") + .endpoint(URI.create(endpoint + "/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df/metadata/KEY")) + .headers(ImmutableMultimap. builder() + .put("Accept", "application/vnd.vmware.vcloud.task+xml") + .put("x-vcloud-authorization", token) + .build()) + .payload(payloadFromResourceWithContentType("/catalog/setCatalogItemMetadataValue.xml", VCloudDirectorMediaType.METADATA_VALUE)) + .build(); + + HttpResponse catalogItemResponse = HttpResponse.builder() + .statusCode(200) + .payload(payloadFromResourceWithContentType("/catalog/setMetadataValueTask.xml", VCloudDirectorMediaType.TASK + ";version=1.5")) + .build(); + + VCloudDirectorClient client = requestsSendResponses(loginRequest, sessionResponse, catalogItemRequest, catalogItemResponse); + + Reference catalogItemReference = 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(); + + MetadataValue value = MetadataValue.builder().value("KITTENS").build(); + + Task expected = setMetadataValueTask(); + + assertEquals(client.getCatalogClient().setCatalogItemMetadataEntry(catalogItemReference, "KEY", value), expected); + } + + @Test + public void testDeleteCatalogItemMetadataEntry() { + HttpRequest catalogItemRequest = HttpRequest.builder() + .method("DELETE") + .endpoint(URI.create(endpoint + "/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df/metadata/KEY")) + .headers(ImmutableMultimap. builder() + .put("Accept", "*/*") + .put("x-vcloud-authorization", token) + .build()) + .build(); + + HttpResponse catalogItemResponse = HttpResponse.builder() + .statusCode(200) + .payload(payloadFromResourceWithContentType("/catalog/deleteMetadataEntryTask.xml", VCloudDirectorMediaType.TASK)) + .build(); + + VCloudDirectorClient client = requestsSendResponses(loginRequest, sessionResponse, catalogItemRequest, catalogItemResponse); + + Reference catalogItemReference = 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(); + + Task expected = deleteMetadataEntryTask(); + + assertEquals(client.getCatalogClient().deleteCatalogItemMetadataEntry(catalogItemReference, "KEY"), expected); + } + + public static final Catalog catalog() { + return Catalog.builder() + .name("QunyingTestCatalog") + .type("application/vnd.vmware.vcloud.catalog+xml") + .id("urn:vcloud:catalog:7212e451-76e1-4631-b2de-ba1dfd8080e4") + .href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4")) + .link(Link.builder() + .rel("up") + .type("application/vnd.vmware.vcloud.org+xml") + .href(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0")) + .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("down") + .type("application/vnd.vmware.vcloud.metadata+xml") + .href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4/metadata")) + .build()) + .catalogItems(CatalogItems.builder() + .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()) + .build()) + .description("Testing") + .build(); + } + + public static CatalogItem createdCatalogItem() { + return CatalogItem.builder() + .name("newCatalogItem") + .id("urn:vcloud:catalogitem:a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df") + .type("application/vnd.vmware.vcloud.catalogItem+xml") + .href(URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df")) + .link(Link.builder() + .rel("up") + .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.metadata+xml") + .href(URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df/metadata")) + .build()) + .link(Link.builder() + .rel("edit") + .type("application/vnd.vmware.vcloud.catalogItem+xml") + .href(URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df")) + .build()) + .link(Link.builder() + .rel("remove") + .href(URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df")) + .build()) + .description("New Catalog Item") + .entity(ubuntuVappTemplateReference()) + .build(); + } + + public static Reference ubuntuVappTemplateReference() { + return Reference.builder() + .type("application/vnd.vmware.vcloud.vAppTemplate+xml") + .name("ubuntu10") + .href(URI.create("https://vcloudbeta.bluelock.com/api/vAppTemplate/vappTemplate-ef4415e6-d413-4cbb-9262-f9bbec5f2ea9")) + .build(); + } + + public static MetadataEntry metadataEntry() { + return MetadataEntry.builder() + .href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4/metadata/KEY")) + .link(Link.builder() + .rel("up") + .type("application/vnd.vmware.vcloud.metadata+xml") + .href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4/metadata")) + .build()) + .entry("KEY", "VALUE") + .build(); + } + + public static MetadataEntry itemMetadataEntry() { + return MetadataEntry.builder() + .href(URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df/metadata/KEY")) + .link(Link.builder() + .rel("up") + .type("application/vnd.vmware.vcloud.metadata+xml") + .href(URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df/metadata")) + .build()) + .entry("KEY", "VALUE") + .build(); + } + + public static CatalogItem catalogItem() { + return CatalogItem.builder() + .name("ubuntu10") .id("urn:vcloud:catalogitem:a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df") .type("application/vnd.vmware.vcloud.catalogItem+xml") .href(URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df")) @@ -171,48 +550,108 @@ public class CatalogClientExpectTest extends BaseVCloudDirectorRestClientExpectT .rel("remove") .href(URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df")) .build()) - .description("New Catalog Item") - .entity(ubuntu) + .description("For testing") + .entity(ubuntuVappTemplateReference()) .build(); - - assertEquals(client.getCatalogClient().addCatalogItem(catalogRef, newItem), expected); } - @Test - public void testGetCatalogMetadata() { - HttpRequest catalogItemRequest = HttpRequest.builder() - .method("GET") - .endpoint(URI.create(endpoint + "/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4/metadata")) - .headers(ImmutableMultimap. builder() - .put("Accept", "*/*") - .put("x-vcloud-authorization", token) - .build()) - .build(); - - HttpResponse catalogItemResponse = HttpResponse.builder() - .statusCode(200) - .payload(payloadFromResourceWithContentType("/catalog/catalogMetadata.xml", VCloudDirectorMediaType.METADATA + ";version=1.5")) - .build(); - - VCloudDirectorClient client = requestsSendResponses(loginRequest, sessionResponse, catalogItemRequest, catalogItemResponse); - - Reference catalogRef = Reference.builder() - .type("application/vnd.vmware.vcloud.catalog+xml") - .name("QunyingTestCatalog") - .href(URI.create(endpoint + "/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4")) - .build(); - - Metadata expected = Metadata.builder() - .type("application/vnd.vmware.vcloud.metadata+xml") - .href(URI.create("https://vcloudbeta.bluelock.com/api//catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4/metadata")) + public static Task mergeMetadataTask() { + return Task.builder() + .name("task") + .id("urn:vcloud:task:c6dca927-eab4-41fa-ad6a-3ac58602541c") + .type("application/vnd.vmware.vcloud.task+xml") + .href(URI.create("https://vcloudbeta.bluelock.com/api/task/c6dca927-eab4-41fa-ad6a-3ac58602541c")) + .status("running") + .startTime(dateService.iso8601DateParse("2012-02-13T06:35:08.011-05:00")) + .expiryTime(dateService.iso8601DateParse("2012-05-13T06:35:08.011-04:00")) + .operationName("metadataUpdate") + .operation("Updating metadata for Catalog Item (a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df)") .link(Link.builder() - .rel("up") - .type("application/vnd.vmware.vcloud.catalog+xml") - .href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4")) + .rel("task:cancel") + .href(URI.create("https://vcloudbeta.bluelock.com/api/task/c6dca927-eab4-41fa-ad6a-3ac58602541c/action/cancel")) + .build()) + .owner(Reference.builder() + .type("application/vnd.vmware.vcloud.catalogItem+xml") + .name("") + .href(URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df")) + .build()) + .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()) + .org(Reference.builder() + .type("application/vnd.vmware.vcloud.org+xml") + .name("JClouds") + .href(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0")) + .build()) + .build(); + } + + public static Task setMetadataValueTask() { + return Task.builder() + .name("task") + .id("urn:vcloud:task:c6dca927-eab4-41fa-ad6a-3ac58602541c") + .type("application/vnd.vmware.vcloud.task+xml") + .href(URI.create("https://vcloudbeta.bluelock.com/api/task/c6dca927-eab4-41fa-ad6a-3ac58602541c")) + .status("running") + .startTime(dateService.iso8601DateParse("2012-02-13T06:35:08.011-05:00")) + .expiryTime(dateService.iso8601DateParse("2012-05-13T06:35:08.011-04:00")) + .operationName("metadataSet") + .operation("Setting metadata for Catalog Item (a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df)") + .link(Link.builder() + .rel("task:cancel") + .href(URI.create("https://vcloudbeta.bluelock.com/api/task/c6dca927-eab4-41fa-ad6a-3ac58602541c/action/cancel")) + .build()) + .owner(Reference.builder() + .type("application/vnd.vmware.vcloud.catalogItem+xml") + .name("") + .href(URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df")) + .build()) + .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()) + .org(Reference.builder() + .type("application/vnd.vmware.vcloud.org+xml") + .name("JClouds") + .href(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0")) + .build()) + .build(); + } + + public static Task deleteMetadataEntryTask() { + return Task.builder() + .name("task") + .id("urn:vcloud:task:c6dca927-eab4-41fa-ad6a-3ac58602541c") + .type("application/vnd.vmware.vcloud.task+xml") + .href(URI.create("https://vcloudbeta.bluelock.com/api/task/c6dca927-eab4-41fa-ad6a-3ac58602541c")) + .status("running") + .startTime(dateService.iso8601DateParse("2012-02-13T06:35:08.011-05:00")) + .expiryTime(dateService.iso8601DateParse("2012-05-13T06:35:08.011-04:00")) + .operationName("metadataDelete") + .operation("Deleting metadata for Catalog Item (a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df)") + .link(Link.builder() + .rel("task:cancel") + .href(URI.create("https://vcloudbeta.bluelock.com/api/task/c6dca927-eab4-41fa-ad6a-3ac58602541c/action/cancel")) + .build()) + .owner(Reference.builder() + .type("application/vnd.vmware.vcloud.catalogItem+xml") + .name("") + .href(URI.create("https://vcloudbeta.bluelock.com/api/catalogItem/a36fdac9-b8c2-43e2-9a4c-2ffaf3ee13df")) + .build()) + .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()) + .org(Reference.builder() + .type("application/vnd.vmware.vcloud.org+xml") + .name("JClouds") + .href(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0")) .build()) - .metadata(ImmutableSet.of(MetadataEntry.builder().entry("key", "value").build())) .build(); - - assertEquals(client.getCatalogClient().getCatalogMetadata(catalogRef), expected); } } + diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/CatalogClientLiveTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/CatalogClientLiveTest.java new file mode 100644 index 0000000000..b34e37ee8a --- /dev/null +++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/CatalogClientLiveTest.java @@ -0,0 +1,90 @@ +/* + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.jclouds.vcloud.director.v1_5.features; + +import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.*; +import static org.jclouds.vcloud.director.v1_5.domain.Checks.*; +import static org.testng.Assert.*; + +import java.net.URI; + +import org.jclouds.vcloud.director.v1_5.domain.Metadata; +import org.jclouds.vcloud.director.v1_5.domain.MetadataEntry; +import org.jclouds.vcloud.director.v1_5.domain.OrgList; +import org.jclouds.vcloud.director.v1_5.domain.Reference; +import org.jclouds.vcloud.director.v1_5.domain.Task; +import org.jclouds.vcloud.director.v1_5.domain.TasksList; +import org.jclouds.vcloud.director.v1_5.internal.BaseVCloudDirectorClientLiveTest; +import org.testng.annotations.Test; + +import com.google.common.collect.Iterables; + +/** +* Tests live behavior of {@link taskClient}. +* +* @author grkvlt@apache.task +*/ +@Test(groups = { "live", "apitests" }, testName = "TaskClientLiveTest") +public class CatalogClientLiveTest extends BaseVCloudDirectorClientLiveTest { + + /* + * Shared state between dependant tests. + */ + + private OrgList orgList; + private Reference orgRef; + private TasksList taskList; + private Task task; + private URI taskUri; + + @Test(testName = "GET /tasksList/{id}") + public void testGetTaskList() { + orgList = getOrgList(); + orgRef = Iterables.getFirst(orgList.getOrgs(), null); + + // Call the method being tested + taskList = getTaskList(orgRef); + + // NOTE The environment MUST have ... + + // Check required elements and attributes + assertFalse(Iterables.isEmpty(taskList.getTasks()), "There must always be Task elements in the TaskList"); + + for (Task task : taskList.getTasks()) { + checkTask(task); + } + } + + @Test(testName = "GET /task/{id}", dependsOnMethods = { "testGetTaskList" }) + public void testGetTask() { + taskUri = Iterables.getFirst(taskList.getTasks(), null).getHref(); + + // Call the method being tested + task = getTask(taskUri); + + // Check required elements and attributes + checkTask(task); + } + + @Test(testName = "GET /task/{id}/metadata/", dependsOnMethods = { "testGetTask" }) + public void testCancelTask() { + // Call the method being tested + cancelTask(taskUri); + } +} \ No newline at end of file diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/NetworkClientExpectTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/NetworkClientExpectTest.java index 5d2f897f85..7d80c72009 100644 --- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/NetworkClientExpectTest.java +++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/NetworkClientExpectTest.java @@ -1,15 +1,15 @@ -/** +/* * Licensed to jclouds, Inc. (jclouds) under one or more * contributor license agreements. See the NOTICE file * distributed with this work for additional information - *(Link.builder().regarding copyright ownership. jclouds licenses this file + * regarding copyright ownership. jclouds licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless(Link.builder().required by applicable law or agreed to in writing, + * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/OrgClientExpectTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/OrgClientExpectTest.java index b7c3dc7f6d..5e5b9119f5 100644 --- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/OrgClientExpectTest.java +++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/OrgClientExpectTest.java @@ -1,15 +1,15 @@ -/** +/* * Licensed to jclouds, Inc. (jclouds) under one or more * contributor license agreements. See the NOTICE file * distributed with this work for additional information - *(Link.builder().regarding copyright ownership. jclouds licenses this file + * regarding copyright ownership. jclouds licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless(Link.builder().required by applicable law or agreed to in writing, + * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the @@ -35,10 +35,11 @@ import org.jclouds.vcloud.director.v1_5.domain.Reference; import org.jclouds.vcloud.director.v1_5.internal.BaseVCloudDirectorRestClientExpectTest; import org.testng.annotations.Test; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; /** - * Allows us to test a client via its side effects. + * Allows us to test the {@link OrgClient} via its side effects. * * @author Adrian Cole */ @@ -46,9 +47,9 @@ import com.google.common.collect.Iterables; public class OrgClientExpectTest extends BaseVCloudDirectorRestClientExpectTest { @Test - public void testWhenResponseIs2xxLoginReturnsValidOrgList() { + public void testGetOrgList() { VCloudDirectorClient client = requestsSendResponses(loginRequest, sessionResponse, - getStandardRequest("GET", "/org"), + getStandardRequest("GET", "/org/"), getStandardPayloadResponse("/org/orglist.xml", VCloudDirectorMediaType.ORG_LIST)); OrgList expected = OrgList.builder() @@ -63,9 +64,9 @@ public class OrgClientExpectTest extends BaseVCloudDirectorRestClientExpectTest } @Test - public void testWhenResponseIs2xxLoginReturnsValidOrgFromListByReference() { + public void testGetOrgFromOrgListReference() { VCloudDirectorClient client = requestsSendResponses(loginRequest, sessionResponse, - getStandardRequest("GET", "/org"), + getStandardRequest("GET", "/org/"), getStandardPayloadResponse("/org/orglist.xml", VCloudDirectorMediaType.ORG_LIST)); Reference org = Iterables.getOnlyElement(client.getOrgClient().getOrgList().getOrgs()); @@ -80,7 +81,7 @@ public class OrgClientExpectTest extends BaseVCloudDirectorRestClientExpectTest } @Test - public void testWhenResponseIs2xxLoginReturnsValidOrg() { + public void testGetOrg() { URI orgUri = URI.create(endpoint + "/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"); VCloudDirectorClient client = requestsSendResponses(loginRequest, sessionResponse, @@ -95,7 +96,7 @@ public class OrgClientExpectTest extends BaseVCloudDirectorRestClientExpectTest } @Test - public void testWhenResponseIs400ForInvalidOrgId() { + public void testGetOrgFailOnInvalidOrgId() { URI orgUri = URI.create(endpoint + "/org/NOTAUUID"); VCloudDirectorClient client = requestsSendResponses(loginRequest, sessionResponse, @@ -120,7 +121,7 @@ public class OrgClientExpectTest extends BaseVCloudDirectorRestClientExpectTest } @Test - public void testWhenResponseIs403ForCatalogIdUsedAsOrgId() { + public void testGetOrgFailOnWrongOrgId() { URI orgUri = URI.create(endpoint + "/org/9e08c2f6-077a-42ce-bece-d5332e2ebb5c"); VCloudDirectorClient client = requestsSendResponses(loginRequest, sessionResponse, @@ -146,7 +147,7 @@ public class OrgClientExpectTest extends BaseVCloudDirectorRestClientExpectTest } @Test - public void testWhenResponseIs403ForFakeOrgId() { + public void testGetOrgFailOnFakeOrgId() { URI orgUri = URI.create(endpoint + "/org/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"); VCloudDirectorClient client = requestsSendResponses(loginRequest, sessionResponse, @@ -172,12 +173,12 @@ public class OrgClientExpectTest extends BaseVCloudDirectorRestClientExpectTest } @Test - public void testWhenResponseIs2xxLoginReturnsValidMetadataList() { + public void testGetOrgMetadata() { URI orgUri = URI.create(endpoint + "/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"); VCloudDirectorClient client = requestsSendResponses(loginRequest, sessionResponse, getStandardRequest("GET", "/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/metadata"), - getStandardPayloadResponse("/org/metadata.xml", VCloudDirectorMediaType.METADATA)); + getStandardPayloadResponse("/org/orgMetadata.xml", VCloudDirectorMediaType.METADATA)); Metadata expected = Metadata.builder() .type("application/vnd.vmware.vcloud.metadata+xml") @@ -187,28 +188,27 @@ public class OrgClientExpectTest extends BaseVCloudDirectorRestClientExpectTest .type("application/vnd.vmware.vcloud.org+xml") .href(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0")) .build()) + .metadata(ImmutableSet.of(metadataEntry())) .build(); Reference orgRef = Reference.builder().href(orgUri).build(); - assertEquals(client.getOrgClient().getMetadata(orgRef), expected); + assertEquals(client.getOrgClient().getOrgMetadata(orgRef), expected); } - @Test(enabled=false) // No metadata in exemplar xml... - public void testWhenResponseIs2xxLoginReturnsValidMetadata() { + @Test + public void testGetOrgMetadataEntry() { URI orgUri = URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0"); VCloudDirectorClient client = requestsSendResponses(loginRequest, sessionResponse, getStandardRequest("GET", "/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/metadata/KEY"), - getStandardPayloadResponse("/org/metadata.xml", VCloudDirectorMediaType.METADATA_ENTRY)); + getStandardPayloadResponse("/org/orgMetadataEntry.xml", VCloudDirectorMediaType.METADATA_ENTRY)); - MetadataEntry expected = MetadataEntry.builder() - .key("KEY") - .build(); + MetadataEntry expected = metadataEntry(); Reference orgRef = Reference.builder().href(orgUri).build(); - assertEquals(client.getOrgClient().getMetadataEntry(orgRef, "KEY"), expected); + assertEquals(client.getOrgClient().getOrgMetadataEntry(orgRef, "KEY"), expected); } public static Org org() { @@ -234,7 +234,7 @@ public class OrgClientExpectTest extends BaseVCloudDirectorRestClientExpectTest .rel("down") .type("application/vnd.vmware.vcloud.catalog+xml") .name("Public") - .href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/9e08c2f6-077a-42ce-bece-d5332e2ebb5c")) + .href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4")) .build()) .link(Link.builder() .rel("down") @@ -260,4 +260,16 @@ public class OrgClientExpectTest extends BaseVCloudDirectorRestClientExpectTest .build()) .build(); } + + public static MetadataEntry metadataEntry() { + return MetadataEntry.builder() + .href(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/metadata/KEY")) + .link(Link.builder() + .rel("up") + .type("application/vnd.vmware.vcloud.metadata+xml") + .href(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0/metadata")) + .build()) + .entry("KEY", "VALUE") + .build(); + } } diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/OrgClientLiveTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/OrgClientLiveTest.java new file mode 100644 index 0000000000..5d493ea9fc --- /dev/null +++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/OrgClientLiveTest.java @@ -0,0 +1,127 @@ +/* + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.jclouds.vcloud.director.v1_5.features; + +import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.*; +import static org.jclouds.vcloud.director.v1_5.domain.Checks.*; +import static org.testng.Assert.*; + +import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType; +import org.jclouds.vcloud.director.v1_5.domain.Metadata; +import org.jclouds.vcloud.director.v1_5.domain.MetadataEntry; +import org.jclouds.vcloud.director.v1_5.domain.Org; +import org.jclouds.vcloud.director.v1_5.domain.OrgList; +import org.jclouds.vcloud.director.v1_5.domain.Reference; +import org.jclouds.vcloud.director.v1_5.internal.BaseVCloudDirectorClientLiveTest; +import org.testng.annotations.Test; + +import com.google.common.collect.Iterables; + +/** +* Tests live behavior of {@link OrgClient}. +* +* @author grkvlt@apache.org +*/ +@Test(groups = { "live", "apitests" }, testName = "OrgClientLiveTest") +public class OrgClientLiveTest extends BaseVCloudDirectorClientLiveTest { + + /* + * Convenience references to API clients. + */ + + private final OrgClient orgClient = context.getApi().getOrgClient(); + + /* + * Shared state between dependant tests. + */ + + private OrgList orgList; + private Reference orgRef; + private Org org; + + @Test(testName = "GET /org/") + public void testGetOrgList() { + // Call the method being tested + orgList = orgClient.getOrgList(); + + // NOTE The environment MUST have at least one organisation configured + + // Check required elements and attributes + assertFalse(Iterables.isEmpty(orgList.getOrgs()), "There must always be Org elements in the OrgList"); + + for (Reference orgRef : orgList.getOrgs()) { + assertEquals(orgRef.getType(), VCloudDirectorMediaType.ORG, "The Refernce must be to an Org type"); + checkReferenceType(orgRef); + } + } + + @Test(testName = "GET /org/{id}", dependsOnMethods = { "testGetOrgList" }) + public void testGetOrg() { + orgRef = Iterables.getFirst(orgList.getOrgs(), null); + + // Call the method being tested + org = orgClient.getOrg(orgRef); + + // Check required elements and attributes + assertNotNull(org.getFullName(), String.format(FIELD_NOT_NULL_FMT, "FullName", "Org")); + + // Check parent type + checkEntityType(org); + } + + @Test(testName = "GET /org/{id}/metadata/", dependsOnMethods = { "testGetOrg" }) + public void testGetOrgMetadata() { + // Call the method being tested + Metadata metadata = orgClient.getOrgMetadata(orgRef); + + // NOTE The environment MUST have at one metadata entry for the first organisation configured + + // Check required elements and attributes + assertFalse(Iterables.isEmpty(metadata.getMetadataEntries()), "There must always be MetadataEntry elements in the Org"); + + // Check parent type + checkResourceType(metadata); + + for (MetadataEntry entry : metadata.getMetadataEntries()) { + // Check required elements and attributes + assertNotNull(entry.getKey(), String.format(FIELD_NOT_NULL_FMT, "Key", "MetadataEntry")); + assertNotNull(entry.getValue(), String.format(FIELD_NOT_NULL_FMT, "Value", "MetadataEntry")); + + // Check parent type + checkResourceType(entry); + } + } + + @Test(testName = "GET /org/{id}/metadata/{key}", dependsOnMethods = { "testGetOrgMetadata" }) + public void testGetOrgMetadataEntry() { + // Call the method being tested + MetadataEntry entry = orgClient.getOrgMetadataEntry(orgRef, "KEY"); + + // NOTE The environment MUST have configured the metadata entry as '{ key="KEY", value="VALUE" )' + + // Check required elements and attributes + assertNotNull(entry.getKey(), String.format(FIELD_NOT_NULL_FMT, "Key", "MetadataEntry")); + assertEquals(entry.getKey(), "KEY", "The Key field must have the value \"KEY\""); + assertNotNull(entry.getValue(), String.format(FIELD_NOT_NULL_FMT, "Value", "MetadataEntry")); + assertEquals(entry.getValue(), "VALUE", "The Value field must have the value \"VALUE\""); + + // Check parent type + checkResourceType(entry); + } +} diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/TaskClientExpectTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/TaskClientExpectTest.java index fae7bebf13..716ec3e286 100644 --- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/TaskClientExpectTest.java +++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/TaskClientExpectTest.java @@ -1,15 +1,15 @@ -/** +/* * Licensed to jclouds, Inc. (jclouds) under one or more * contributor license agreements. See the NOTICE file * distributed with this work for additional information - *(Link.builder().regarding copyright ownership. jclouds licenses this file + * regarding copyright ownership. jclouds licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * - * Unless(Link.builder().required by applicable law or agreed to in writing, + * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the @@ -80,55 +80,8 @@ public class TaskClientExpectTest extends BaseVCloudDirectorRestClientExpectTest .name("Tasks Lists") .type("application/vnd.vmware.vcloud.tasksList+xml") .href(URI.create("https://vcloudbeta.bluelock.com/api/tasksList/6f312e42-cd2b-488d-a2bb-97519cd57ed0")) - .task(Task.builder() - .type("application/vnd.vmware.vcloud.task+xml") - .name("task") - .id("urn:vcloud:task:5fcd2af3-d0ec-45ce-9451-8c585a2c766b") - .href(URI.create("https://vcloudbeta.bluelock.com/api/task/5fcd2af3-d0ec-45ce-9451-8c585a2c766b")) - .status("success") - .operation("Created Catalog QunyingTestCatalog(7212e451-76e1-4631-b2de-ba1dfd8080e4)") - .operationName("catalogCreateCatalog") - .startTime(dateService.iso8601DateParse("2012-02-07T00:16:28.450-05:00")) - .endTime(dateService.iso8601DateParse("2012-02-07T00:16:28.867-05:00")) - .expiryTime(dateService.iso8601DateParse("2012-05-07T00:16:28.450-04:00")) - .owner(Reference.builder() - .type("application/vnd.vmware.vcloud.catalog+xml") - .name("QunyingTestCatalog") - .href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4")) - .build()) - .user(Reference.builder() - .type("application/vnd.vmware.admin.user+xml") - .name("JClouds") - .href(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0")) - .build()) - .org(Reference.builder() - .type("application/vnd.vmware.vcloud.org+xml") - .name("JClouds") - .href(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0")) - .build()) - .build()) - .task(Task.builder() - .type("application/vnd.vmware.vcloud.task+xml") - .name("task") - .id("urn:vcloud:task:bd22e745-9c2a-4f82-a954-0e35b6f76ba5") - .href(URI.create("https://vcloudbeta.bluelock.com/api/task/bd22e745-9c2a-4f82-a954-0e35b6f76ba5")) - .status("success") - .operation("Enabled User (967d317c-4273-4a95-b8a4-bf63b78e9c69)") - .operationName("jobEnable") - .startTime(dateService.iso8601DateParse("2012-02-06T17:30:38.507-05:00")) - .endTime(dateService.iso8601DateParse("2012-02-06T17:30:38.507-05:00")) - .expiryTime(dateService.iso8601DateParse("2012-05-06T17:30:38.507-04:00")) - .user(Reference.builder() - .type("application/vnd.vmware.admin.user+xml") - .name("adrian@jclouds.org") - .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/user/8c360b93-ed25-4c9a-8e24-d48cd9966d93")) - .build()) - .org(Reference.builder() - .type("application/vnd.vmware.vcloud.org+xml") - .name("JClouds") - .href(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0")) - .build()) - .build()) + .task(taskOne()) + .task(taskTwo()) .build(); Reference orgRef = Reference.builder().href(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0")).build(); @@ -248,41 +201,11 @@ public class TaskClientExpectTest extends BaseVCloudDirectorRestClientExpectTest VCloudDirectorClient client = requestsSendResponses(loginRequest, sessionResponse, taskRequest, taskResponse); - Reference taskRef = Reference.builder() - .type("application/vnd.vmware.vcloud.task+xml") - .name("task") - .href(URI.create(endpoint + "/task/5fcd2af3-d0ec-45ce-9451-8c585a2c766b")) - .build(); + URI taskUri = URI.create(endpoint + "/task/5fcd2af3-d0ec-45ce-9451-8c585a2c766b"); - Task expected = Task.builder() - .type("application/vnd.vmware.vcloud.task+xml") - .name("task") - .id("urn:vcloud:task:5fcd2af3-d0ec-45ce-9451-8c585a2c766b") - .href(URI.create("https://vcloudbeta.bluelock.com/api/task/5fcd2af3-d0ec-45ce-9451-8c585a2c766b")) - .status("success") - .operation("Created Catalog QunyingTestCatalog(7212e451-76e1-4631-b2de-ba1dfd8080e4)") - .operationName("catalogCreateCatalog") - .startTime(dateService.iso8601DateParse("2012-02-07T00:16:28.450-05:00")) - .endTime(dateService.iso8601DateParse("2012-02-07T00:16:28.867-05:00")) - .expiryTime(dateService.iso8601DateParse("2012-05-07T00:16:28.450-04:00")) - .owner(Reference.builder() - .type("application/vnd.vmware.vcloud.catalog+xml") - .name("QunyingTestCatalog") - .href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4")) - .build()) - .user(Reference.builder() - .type("application/vnd.vmware.admin.user+xml") - .name("JClouds") - .href(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0")) - .build()) - .org(Reference.builder() - .type("application/vnd.vmware.vcloud.org+xml") - .name("JClouds") - .href(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0")) - .build()) - .build(); + Task expected = taskOne(); - assertEquals(client.getTaskClient().getTask(taskRef), expected); + assertEquals(client.getTaskClient().getTask(taskUri), expected); } @Test @@ -296,18 +219,70 @@ public class TaskClientExpectTest extends BaseVCloudDirectorRestClientExpectTest .build()) .build(); - HttpResponse taskResponse = HttpResponse.builder() + HttpResponse taskResponse = HttpResponse.builder() .statusCode(200) .build(); VCloudDirectorClient client = requestsSendResponses(loginRequest, sessionResponse, taskRequest, taskResponse); - Reference taskRef = Reference.builder() - .type("application/vnd.vmware.vcloud.task+xml") - .name("task") - .href(URI.create(endpoint + "/task/5fcd2af3-d0ec-45ce-9451-8c585a2c766b")) - .build(); + URI taskUri = URI.create(endpoint + "/task/5fcd2af3-d0ec-45ce-9451-8c585a2c766b"); - client.getTaskClient().cancelTask(taskRef); + client.getTaskClient().cancelTask(taskUri); + } + + public static Task taskOne() { + return Task.builder() + .type("application/vnd.vmware.vcloud.task+xml") + .name("task") + .id("urn:vcloud:task:5fcd2af3-d0ec-45ce-9451-8c585a2c766b") + .href(URI.create("https://vcloudbeta.bluelock.com/api/task/5fcd2af3-d0ec-45ce-9451-8c585a2c766b")) + .status("success") + .operation("Created Catalog QunyingTestCatalog(7212e451-76e1-4631-b2de-ba1dfd8080e4)") + .operationName("catalogCreateCatalog") + .startTime(dateService.iso8601DateParse("2012-02-07T00:16:28.450-05:00")) + .endTime(dateService.iso8601DateParse("2012-02-07T00:16:28.867-05:00")) + .expiryTime(dateService.iso8601DateParse("2012-05-07T00:16:28.450-04:00")) + .owner(Reference.builder() + .type("application/vnd.vmware.vcloud.catalog+xml") + .name("QunyingTestCatalog") + .href(URI.create("https://vcloudbeta.bluelock.com/api/catalog/7212e451-76e1-4631-b2de-ba1dfd8080e4")) + .build()) + .user(Reference.builder() + .type("application/vnd.vmware.admin.user+xml") + .name("JClouds") + .href(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0")) + .build()) + .org(Reference.builder() + .type("application/vnd.vmware.vcloud.org+xml") + .name("JClouds") + .href(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0")) + .build()) + .build(); + } + + public static Task taskTwo() { + return Task.builder() + .type("application/vnd.vmware.vcloud.task+xml") + .name("task") + .id("urn:vcloud:task:bd22e745-9c2a-4f82-a954-0e35b6f76ba5") + .href(URI.create("https://vcloudbeta.bluelock.com/api/task/bd22e745-9c2a-4f82-a954-0e35b6f76ba5")) + .status("success") + .operation("Enabled User (967d317c-4273-4a95-b8a4-bf63b78e9c69)") + .operationName("jobEnable") + .startTime(dateService.iso8601DateParse("2012-02-06T17:30:38.507-05:00")) + .endTime(dateService.iso8601DateParse("2012-02-06T17:30:38.507-05:00")) + .expiryTime(dateService.iso8601DateParse("2012-05-06T17:30:38.507-04:00")) + .user(Reference.builder() + .type("application/vnd.vmware.admin.user+xml") + .name("adrian@jclouds.org") + .href(URI.create("https://vcloudbeta.bluelock.com/api/admin/user/8c360b93-ed25-4c9a-8e24-d48cd9966d93")) + .build()) + .org(Reference.builder() + .type("application/vnd.vmware.vcloud.org+xml") + .name("JClouds") + .href(URI.create("https://vcloudbeta.bluelock.com/api/org/6f312e42-cd2b-488d-a2bb-97519cd57ed0")) + .build()) + .build(); } } + \ No newline at end of file diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/TaskClientLiveTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/TaskClientLiveTest.java new file mode 100644 index 0000000000..622020fb27 --- /dev/null +++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/TaskClientLiveTest.java @@ -0,0 +1,95 @@ +/* + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.jclouds.vcloud.director.v1_5.features; + +import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.*; +import static org.jclouds.vcloud.director.v1_5.domain.Checks.*; +import static org.testng.Assert.*; + +import java.net.URI; + +import org.jclouds.vcloud.director.v1_5.domain.OrgList; +import org.jclouds.vcloud.director.v1_5.domain.Reference; +import org.jclouds.vcloud.director.v1_5.domain.Task; +import org.jclouds.vcloud.director.v1_5.domain.TasksList; +import org.jclouds.vcloud.director.v1_5.internal.BaseVCloudDirectorClientLiveTest; +import org.testng.annotations.Test; + +import com.google.common.collect.Iterables; + +/** + * Tests live behavior of {@link TaskClient}. + * + * @author grkvlt@apache.org + */ +@Test(groups = { "live", "apitests" }, testName = "TaskClientLiveTest") +public class TaskClientLiveTest extends BaseVCloudDirectorClientLiveTest { + + /* + * Convenience references to API clients. + */ + + private final OrgClient orgClient = context.getApi().getOrgClient(); + private final TaskClient taskClient = context.getApi().getTaskClient(); + + /* + * Shared state between dependant tests. + */ + + private OrgList orgList; + private Reference orgRef; + private TasksList taskList; + private Task task; + private URI taskUri; + + @Test(testName = "GET /tasksList/{id}") + public void testGetTaskList() { + orgList = orgClient.getOrgList(); + orgRef = Iterables.getFirst(orgList.getOrgs(), null); + + // Call the method being tested + taskList = taskClient.getTaskList(orgRef); + + // NOTE The environment MUST have ... + + // Check required elements and attributes + assertFalse(Iterables.isEmpty(taskList.getTasks()), "There must always be Task elements in the TaskList"); + + for (Task task : taskList.getTasks()) { + checkTask(task); + } + } + + @Test(testName = "GET /task/{id}", dependsOnMethods = { "testGetTaskList" }) + public void testGetTask() { + taskUri = Iterables.getFirst(taskList.getTasks(), null).getHref(); + + // Call the method being tested + task = taskClient.getTask(taskUri); + + // Check required elements and attributes + checkTask(task); + } + + @Test(testName = "GET /task/{id}/metadata/", dependsOnMethods = { "testGetTask" }) + public void testCancelTask() { + // Call the method being tested + taskClient.cancelTask(taskUri); + } +} diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/internal/BaseVCloudDirectorClientLiveTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/internal/BaseVCloudDirectorClientLiveTest.java index 74662b0bdd..15f785c189 100644 --- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/internal/BaseVCloudDirectorClientLiveTest.java +++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/internal/BaseVCloudDirectorClientLiveTest.java @@ -18,15 +18,25 @@ */ package org.jclouds.vcloud.director.v1_5.internal; +import java.net.URI; import java.util.Properties; import org.jclouds.compute.BaseVersionedServiceLiveTest; import org.jclouds.logging.slf4j.config.SLF4JLoggingModule; -import org.jclouds.vcloud.director.v1_5.VCloudDirectorAsyncClient; -import org.jclouds.vcloud.director.v1_5.VCloudDirectorClient; import org.jclouds.rest.RestContext; import org.jclouds.rest.RestContextFactory; import org.jclouds.sshj.config.SshjSshClientModule; +import org.jclouds.vcloud.director.v1_5.VCloudDirectorAsyncClient; +import org.jclouds.vcloud.director.v1_5.VCloudDirectorClient; +import org.jclouds.vcloud.director.v1_5.domain.Metadata; +import org.jclouds.vcloud.director.v1_5.domain.MetadataEntry; +import org.jclouds.vcloud.director.v1_5.domain.Org; +import org.jclouds.vcloud.director.v1_5.domain.OrgList; +import org.jclouds.vcloud.director.v1_5.domain.ReferenceType; +import org.jclouds.vcloud.director.v1_5.domain.Task; +import org.jclouds.vcloud.director.v1_5.domain.TasksList; +import org.jclouds.vcloud.director.v1_5.features.OrgClient; +import org.jclouds.vcloud.director.v1_5.features.TaskClient; import org.testng.annotations.AfterGroups; import org.testng.annotations.BeforeGroups; import org.testng.annotations.Test; @@ -40,7 +50,7 @@ import com.google.inject.Module; * @author Adrian Cole */ @Test(groups = "live") -public class BaseVCloudDirectorClientLiveTest extends BaseVersionedServiceLiveTest { +public class BaseVCloudDirectorClientLiveTest extends BaseVersionedServiceLiveTest implements OrgClient, TaskClient { public BaseVCloudDirectorClientLiveTest() { provider = "vcloud-director"; } @@ -61,4 +71,57 @@ public class BaseVCloudDirectorClientLiveTest extends BaseVersionedServiceLiveTe context.close(); } + + private final OrgClient orgClient = context.getApi().getOrgClient(); + private final TaskClient taskClient = context.getApi().getTaskClient(); + + /* + * Proxying implementations of OrgClient. + */ + + /** @see OrgClient#getOrgList() */ + @Override + public OrgList getOrgList() { + return orgClient.getOrgList(); + } + + /** @see OrgClient#getOrg(ReferenceType) */ + @Override + public Org getOrg(ReferenceType orgRef) { + return orgClient.getOrg(orgRef); + } + + /** @see OrgClient#getOrgMetadata(ReferenceType) */ + @Override + public Metadata getOrgMetadata(ReferenceType orgRef) { + return orgClient.getOrgMetadata(orgRef); + } + + /** @see OrgClient#getOrgMetadataEntry(ReferenceType, String) */ + @Override + public MetadataEntry getOrgMetadataEntry(ReferenceType orgRef, String key) { + return orgClient.getOrgMetadataEntry(orgRef, key); + } + + /* + * Proxying implementations of TaskClient. + */ + + /** @see TaskClient#getTaskList(ReferenceType) */ + @Override + public TasksList getTaskList(ReferenceType orgRef) { + return taskClient.getTaskList(orgRef); + } + + /** @see TaskClient#getTask(URI) */ + @Override + public Task getTask(URI taskUri) { + return taskClient.getTask(taskUri); + } + + /** @see TaskClient#cancelTask(URI */ + @Override + public void cancelTask(URI taskUri) { + taskClient.cancelTask(taskUri); + } } diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/internal/BaseVCloudDirectorRestClientExpectTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/internal/BaseVCloudDirectorRestClientExpectTest.java index ff01e2a85a..29a4231d65 100644 --- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/internal/BaseVCloudDirectorRestClientExpectTest.java +++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/internal/BaseVCloudDirectorRestClientExpectTest.java @@ -18,6 +18,8 @@ */ package org.jclouds.vcloud.director.v1_5.internal; +import static org.testng.Assert.*; + import java.net.URI; import org.jclouds.date.DateService; @@ -26,13 +28,9 @@ import org.jclouds.http.HttpResponse; import org.jclouds.rest.BaseRestClientExpectTest; import org.jclouds.vcloud.director.v1_5.VCloudDirectorClient; import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType; -import org.jclouds.vcloud.director.v1_5.domain.ReferenceType; -import org.testng.annotations.BeforeClass; +import org.testng.annotations.BeforeGroups; -import com.google.common.base.Function; -import com.google.common.base.Splitter; import com.google.common.collect.ImmutableMultimap; -import com.google.common.collect.Iterables; import com.google.inject.Guice; /** @@ -48,12 +46,12 @@ public class BaseVCloudDirectorRestClientExpectTest extends BaseRestClientExpect public static final String token = "mIaR3/6Lna8DWImd7/JPR5rK8FcUHabt+G/UCJV5pJQ="; public static final String endpoint = "https://vcloudbeta.bluelock.com/api"; - protected DateService dateService; + protected static DateService dateService; - @BeforeClass - protected void setUpInjector() { + @BeforeGroups("unit") + protected static void setUpInjector() { dateService = Guice.createInjector().getInstance(DateService.class); - assert dateService != null; + assertNotNull(dateService); } protected HttpRequest loginRequest = HttpRequest.builder() @@ -80,14 +78,18 @@ public class BaseVCloudDirectorRestClientExpectTest extends BaseRestClientExpect credential = password; } - protected HttpRequest getStandardRequest(String method, String command) { - return getStandardRequest(method, URI.create(endpoint + command)); + protected HttpRequest getStandardRequest(String method, String path) { + return getStandardRequest(method, path, VCloudDirectorMediaType.ANY); } protected HttpRequest getStandardRequest(String method, URI uri) { return getStandardRequest(method, uri, VCloudDirectorMediaType.ANY); } + protected HttpRequest getStandardRequest(String method, String path, String mediaType) { + return getStandardRequest(method, URI.create(endpoint + path), VCloudDirectorMediaType.ANY); + } + protected HttpRequest getStandardRequest(String method, URI uri, String mediaType) { return HttpRequest.builder() .method(method) @@ -99,6 +101,31 @@ public class BaseVCloudDirectorRestClientExpectTest extends BaseRestClientExpect .build(); } + protected HttpRequest getStandardRequestWithPayload(String method, String path, String relativeFilePath, String mediaType) { + return getStandardRequestWithPayload(method, path, VCloudDirectorMediaType.ANY, relativeFilePath, mediaType); + } + + protected HttpRequest getStandardRequestWithPayload(String method, URI uri, String relativeFilePath, String mediaType) { + return getStandardRequestWithPayload(method, uri, VCloudDirectorMediaType.ANY, relativeFilePath, mediaType); + } + + protected HttpRequest getStandardRequestWithPayload(String method, String path, String acceptType, String relativeFilePath, String mediaType) { + URI uri = URI.create(endpoint + path); + return getStandardRequestWithPayload(method, uri, acceptType, relativeFilePath, mediaType); + } + + protected HttpRequest getStandardRequestWithPayload(String method, URI uri, String acceptType, String relativeFilePath, String mediaType) { + return HttpRequest.builder() + .method(method) + .endpoint(uri) + .headers(ImmutableMultimap. builder() + .put("Accept", acceptType) + .put("x-vcloud-authorization", token) + .build()) + .payload(payloadFromResourceWithContentType(relativeFilePath, mediaType)) + .build(); + } + protected HttpResponse getStandardPayloadResponse(String relativeFilePath, String mediaType) { return getStandardPayloadResponse(200, relativeFilePath, mediaType); } @@ -106,6 +133,7 @@ public class BaseVCloudDirectorRestClientExpectTest extends BaseRestClientExpect protected HttpResponse getStandardPayloadResponse(int statusCode, String relativeFilePath, String mediaType) { return HttpResponse.builder() .statusCode(statusCode) - .payload(payloadFromResourceWithContentType(relativeFilePath, mediaType + ";version=1.5")).build(); + .payload(payloadFromResourceWithContentType(relativeFilePath, mediaType + ";version=1.5")) + .build(); } } diff --git a/labs/vcloud-director/src/test/resources/catalog/catalogItem.xml b/labs/vcloud-director/src/test/resources/catalog/catalogItem.xml index 39021f96d9..6157c73f21 100644 --- a/labs/vcloud-director/src/test/resources/catalog/catalogItem.xml +++ b/labs/vcloud-director/src/test/resources/catalog/catalogItem.xml @@ -1,9 +1,9 @@ - - + + - New Catalog Item + For testing - \ No newline at end of file + diff --git a/labs/vcloud-director/src/test/resources/catalog/catalogItemMetadata.xml b/labs/vcloud-director/src/test/resources/catalog/catalogItemMetadata.xml new file mode 100644 index 0000000000..e642235ba5 --- /dev/null +++ b/labs/vcloud-director/src/test/resources/catalog/catalogItemMetadata.xml @@ -0,0 +1,9 @@ + + + + + + KEY + VALUE + + \ No newline at end of file diff --git a/labs/vcloud-director/src/test/resources/catalog/catalogItemMetadataEntry.xml b/labs/vcloud-director/src/test/resources/catalog/catalogItemMetadataEntry.xml new file mode 100644 index 0000000000..23cef493a4 --- /dev/null +++ b/labs/vcloud-director/src/test/resources/catalog/catalogItemMetadataEntry.xml @@ -0,0 +1,6 @@ + + + + KEY + VALUE + diff --git a/labs/vcloud-director/src/test/resources/catalog/catalogMetadata.xml b/labs/vcloud-director/src/test/resources/catalog/catalogMetadata.xml index 0ff3052583..3db76a66c5 100644 --- a/labs/vcloud-director/src/test/resources/catalog/catalogMetadata.xml +++ b/labs/vcloud-director/src/test/resources/catalog/catalogMetadata.xml @@ -1,8 +1,9 @@ - + - - key - value - + + + KEY + VALUE + \ No newline at end of file diff --git a/labs/vcloud-director/src/test/resources/catalog/catalogMetadataEntry.xml b/labs/vcloud-director/src/test/resources/catalog/catalogMetadataEntry.xml new file mode 100644 index 0000000000..345afec682 --- /dev/null +++ b/labs/vcloud-director/src/test/resources/catalog/catalogMetadataEntry.xml @@ -0,0 +1,6 @@ + + + + KEY + VALUE + diff --git a/labs/vcloud-director/src/test/resources/catalog/createdCatalogItem.xml b/labs/vcloud-director/src/test/resources/catalog/createdCatalogItem.xml new file mode 100644 index 0000000000..39021f96d9 --- /dev/null +++ b/labs/vcloud-director/src/test/resources/catalog/createdCatalogItem.xml @@ -0,0 +1,9 @@ + + + + + + + New Catalog Item + + \ No newline at end of file diff --git a/labs/vcloud-director/src/test/resources/catalog/deleteMetadataEntryTask.xml b/labs/vcloud-director/src/test/resources/catalog/deleteMetadataEntryTask.xml new file mode 100644 index 0000000000..1968b62eea --- /dev/null +++ b/labs/vcloud-director/src/test/resources/catalog/deleteMetadataEntryTask.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/labs/vcloud-director/src/test/resources/catalog/mergeCatalogItemMetadata.xml b/labs/vcloud-director/src/test/resources/catalog/mergeCatalogItemMetadata.xml new file mode 100644 index 0000000000..5f76b5fcd7 --- /dev/null +++ b/labs/vcloud-director/src/test/resources/catalog/mergeCatalogItemMetadata.xml @@ -0,0 +1,7 @@ + + + + KEY + VALUE + + diff --git a/labs/vcloud-director/src/test/resources/catalog/mergeMetadataTask.xml b/labs/vcloud-director/src/test/resources/catalog/mergeMetadataTask.xml new file mode 100644 index 0000000000..bc7beb6a6a --- /dev/null +++ b/labs/vcloud-director/src/test/resources/catalog/mergeMetadataTask.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/labs/vcloud-director/src/test/resources/catalog/setCatalogItemMetadataValue.xml b/labs/vcloud-director/src/test/resources/catalog/setCatalogItemMetadataValue.xml new file mode 100644 index 0000000000..2032bf58cc --- /dev/null +++ b/labs/vcloud-director/src/test/resources/catalog/setCatalogItemMetadataValue.xml @@ -0,0 +1,4 @@ + + + KITTENS + diff --git a/labs/vcloud-director/src/test/resources/catalog/setMetadataValueTask.xml b/labs/vcloud-director/src/test/resources/catalog/setMetadataValueTask.xml new file mode 100644 index 0000000000..6596608513 --- /dev/null +++ b/labs/vcloud-director/src/test/resources/catalog/setMetadataValueTask.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/labs/vcloud-director/src/test/resources/catalog/updateCatalogItem.xml b/labs/vcloud-director/src/test/resources/catalog/updateCatalogItem.xml new file mode 100644 index 0000000000..6157c73f21 --- /dev/null +++ b/labs/vcloud-director/src/test/resources/catalog/updateCatalogItem.xml @@ -0,0 +1,9 @@ + + + + + + + For testing + + diff --git a/labs/vcloud-director/src/test/resources/org/org.xml b/labs/vcloud-director/src/test/resources/org/org.xml index 941eb7dbd0..f87c5a9913 100644 --- a/labs/vcloud-director/src/test/resources/org/org.xml +++ b/labs/vcloud-director/src/test/resources/org/org.xml @@ -2,7 +2,7 @@ - + diff --git a/labs/vcloud-director/src/test/resources/org/metadata.xml b/labs/vcloud-director/src/test/resources/org/orgMetadata.xml similarity index 50% rename from labs/vcloud-director/src/test/resources/org/metadata.xml rename to labs/vcloud-director/src/test/resources/org/orgMetadata.xml index 992459fd0d..f8595dc89e 100644 --- a/labs/vcloud-director/src/test/resources/org/metadata.xml +++ b/labs/vcloud-director/src/test/resources/org/orgMetadata.xml @@ -1,4 +1,9 @@ + + + KEY + VALUE + diff --git a/labs/vcloud-director/src/test/resources/org/orgMetadataEntry.xml b/labs/vcloud-director/src/test/resources/org/orgMetadataEntry.xml new file mode 100644 index 0000000000..8cb2bd63c9 --- /dev/null +++ b/labs/vcloud-director/src/test/resources/org/orgMetadataEntry.xml @@ -0,0 +1,6 @@ + + + + KEY + VALUE +