From 87f6bdcce8080097ed1f21a03187bb8e7821154c Mon Sep 17 00:00:00 2001 From: Adrian Cole Date: Fri, 4 Mar 2011 18:23:16 -0500 Subject: [PATCH] cleaned up org and vdc for savvis --- .../org/jclouds/vcloud/xml/VDCHandler.java | 32 +- .../savvis/vpdc/SymphonyVPDCAsyncClient.java | 295 +++++++++++++++--- .../savvis/vpdc/SymphonyVPDCClient.java | 6 + .../savvis/vpdc/domain/SymphonyVPDCVDC.java | 34 ++ .../domain/internal/SymphonyVPDCVDCImpl.java | 75 +++++ .../vpdc/xml/SymphonyVPDCVDCHandler.java | 58 ++++ .../vpdc/SymphonyVPDCAsyncClientTest.java | 51 ++- .../vpdc/SymphonyVPDCClientLiveTest.java | 280 ++++++++++++++++- .../SymphonyVPDCComputeServiceLiveTest.java | 2 +- .../SymphonyVPDCTemplateBuilderLiveTest.java | 2 +- .../savvis/vpdc/xml/OrgHandlerTest.java | 66 ++++ .../vpdc/xml/SymphonyVPDCVDCHandlerTest.java | 93 ++++++ .../src/test/resources/savvis/org.xml | 5 + .../src/test/resources/savvis/vdc.xml | 13 + 14 files changed, 926 insertions(+), 86 deletions(-) create mode 100644 sandbox-providers/savvis-symphony-vpdc/src/main/java/org/jclouds/savvis/vpdc/domain/SymphonyVPDCVDC.java create mode 100644 sandbox-providers/savvis-symphony-vpdc/src/main/java/org/jclouds/savvis/vpdc/domain/internal/SymphonyVPDCVDCImpl.java create mode 100644 sandbox-providers/savvis-symphony-vpdc/src/main/java/org/jclouds/savvis/vpdc/xml/SymphonyVPDCVDCHandler.java create mode 100644 sandbox-providers/savvis-symphony-vpdc/src/test/java/org/jclouds/savvis/vpdc/xml/OrgHandlerTest.java create mode 100644 sandbox-providers/savvis-symphony-vpdc/src/test/java/org/jclouds/savvis/vpdc/xml/SymphonyVPDCVDCHandlerTest.java create mode 100644 sandbox-providers/savvis-symphony-vpdc/src/test/resources/savvis/org.xml create mode 100644 sandbox-providers/savvis-symphony-vpdc/src/test/resources/savvis/vdc.xml diff --git a/common/vcloud/src/main/java/org/jclouds/vcloud/xml/VDCHandler.java b/common/vcloud/src/main/java/org/jclouds/vcloud/xml/VDCHandler.java index c0270a84ef..8343314f9a 100644 --- a/common/vcloud/src/main/java/org/jclouds/vcloud/xml/VDCHandler.java +++ b/common/vcloud/src/main/java/org/jclouds/vcloud/xml/VDCHandler.java @@ -117,43 +117,43 @@ public class VDCHandler extends ParseSax.HandlerWithResult { public void endElement(String uri, String name, String qName) { taskHandler.endElement(uri, name, qName); - if (qName.equals("Task")) { + if (qName.endsWith("Task")) { this.tasks.add(taskHandler.getResult()); - } else if (qName.equals("Description")) { + } else if (qName.endsWith("Description")) { description = currentOrNull(); - } else if (qName.equals("AllocationModel")) { + } else if (qName.endsWith("AllocationModel")) { allocationModel = AllocationModel.fromValue(currentOrNull()); - } else if (qName.equals("Units")) { + } else if (qName.endsWith("Units")) { units = currentOrNull(); - } else if (qName.equals("Allocated")) { + } else if (qName.endsWith("Allocated")) { allocated = Integer.parseInt(currentOrNull()); - } else if (qName.equals("Used")) { + } else if (qName.endsWith("Used")) { used = Integer.parseInt(currentOrNull()); - } else if (qName.equals("Limit")) { + } else if (qName.endsWith("Limit")) { limit = Integer.parseInt(currentOrNull()); - } else if (qName.equals("Overhead")) { + } else if (qName.endsWith("Overhead")) { overhead = Integer.parseInt(currentOrNull()); - } else if (qName.equals("StorageCapacity")) { + } else if (qName.endsWith("StorageCapacity")) { storageCapacity = new Capacity(units, allocated, limit, used, overhead); resetCapacity(); - } else if (qName.equals("Cpu")) { + } else if (qName.endsWith("Cpu")) { cpuCapacity = new Capacity(units, allocated, limit, used, overhead); resetCapacity(); - } else if (qName.equals("Memory")) { + } else if (qName.endsWith("Memory")) { memoryCapacity = new Capacity(units, allocated, limit, used, overhead); resetCapacity(); - } else if (qName.equals("DeployedVmsQuota")) { + } else if (qName.endsWith("DeployedVmsQuota")) { vmQuota = (int) limit; // vcloud express doesn't have the zero is unlimited rule if (vmQuota == -1) vmQuota = 0; - } else if (qName.equals("VmQuota")) { + } else if (qName.endsWith("VmQuota")) { vmQuota = Integer.parseInt(currentOrNull()); - } else if (qName.equals("NicQuota")) { + } else if (qName.endsWith("NicQuota")) { nicQuota = Integer.parseInt(currentOrNull()); - } else if (qName.equals("NetworkQuota")) { + } else if (qName.endsWith("NetworkQuota")) { networkQuota = Integer.parseInt(currentOrNull()); - } else if (qName.equals("IsEnabled")) { + } else if (qName.endsWith("IsEnabled")) { isEnabled = Boolean.parseBoolean(currentOrNull()); } currentText = new StringBuilder(); diff --git a/sandbox-providers/savvis-symphony-vpdc/src/main/java/org/jclouds/savvis/vpdc/SymphonyVPDCAsyncClient.java b/sandbox-providers/savvis-symphony-vpdc/src/main/java/org/jclouds/savvis/vpdc/SymphonyVPDCAsyncClient.java index a0ebf6572c..2a6f8f6954 100644 --- a/sandbox-providers/savvis-symphony-vpdc/src/main/java/org/jclouds/savvis/vpdc/SymphonyVPDCAsyncClient.java +++ b/sandbox-providers/savvis-symphony-vpdc/src/main/java/org/jclouds/savvis/vpdc/SymphonyVPDCAsyncClient.java @@ -23,26 +23,53 @@ import java.net.URI; import javax.annotation.Nullable; import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import org.jclouds.predicates.validators.DnsNameValidator; import org.jclouds.rest.annotations.EndpointParam; import org.jclouds.rest.annotations.ExceptionParser; +import org.jclouds.rest.annotations.MapBinder; +import org.jclouds.rest.annotations.ParamValidators; +import org.jclouds.rest.annotations.PayloadParam; import org.jclouds.rest.annotations.RequestFilters; import org.jclouds.rest.annotations.XMLResponseParser; import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404; +import org.jclouds.savvis.vpdc.domain.SymphonyVPDCVDC; import org.jclouds.savvis.vpdc.xml.SymphonyVPDCNetworkHandler; import org.jclouds.savvis.vpdc.xml.SymphonyVPDCVAppHandler; +import org.jclouds.savvis.vpdc.xml.SymphonyVPDCVDCHandler; import org.jclouds.vcloud.CommonVCloudClient; import org.jclouds.vcloud.VCloudExpressAsyncClient; +import org.jclouds.vcloud.VCloudExpressClient; +import org.jclouds.vcloud.binders.BindCloneVAppParamsToXmlPayload; +import org.jclouds.vcloud.binders.BindInstantiateVCloudExpressVAppTemplateParamsToXmlPayload; +import org.jclouds.vcloud.domain.Catalog; +import org.jclouds.vcloud.domain.CatalogItem; import org.jclouds.vcloud.domain.Org; +import org.jclouds.vcloud.domain.Task; +import org.jclouds.vcloud.domain.TasksList; import org.jclouds.vcloud.domain.VCloudExpressVApp; -import org.jclouds.vcloud.domain.VDC; +import org.jclouds.vcloud.domain.VCloudExpressVAppTemplate; import org.jclouds.vcloud.domain.network.OrgNetwork; import org.jclouds.vcloud.filters.SetVCloudTokenCookie; +import org.jclouds.vcloud.functions.OrgNameAndCatalogNameToEndpoint; import org.jclouds.vcloud.functions.OrgNameAndVDCNameToEndpoint; +import org.jclouds.vcloud.functions.OrgNameCatalogNameItemNameToEndpoint; +import org.jclouds.vcloud.functions.OrgNameCatalogNameVAppTemplateNameToEndpoint; import org.jclouds.vcloud.functions.OrgNameToEndpoint; +import org.jclouds.vcloud.functions.OrgNameToTasksListEndpoint; import org.jclouds.vcloud.functions.OrgNameVDCNameResourceEntityNameToEndpoint; +import org.jclouds.vcloud.options.CloneVAppOptions; +import org.jclouds.vcloud.options.InstantiateVAppTemplateOptions; +import org.jclouds.vcloud.xml.CatalogHandler; +import org.jclouds.vcloud.xml.CatalogItemHandler; import org.jclouds.vcloud.xml.OrgHandler; -import org.jclouds.vcloud.xml.VDCHandler; +import org.jclouds.vcloud.xml.TaskHandler; +import org.jclouds.vcloud.xml.TasksListHandler; +import org.jclouds.vcloud.xml.VCloudExpressVAppHandler; +import org.jclouds.vcloud.xml.VCloudExpressVAppTemplateHandler; import com.google.common.util.concurrent.ListenableFuture; @@ -59,86 +86,278 @@ public interface SymphonyVPDCAsyncClient extends VCloudExpressAsyncClient { /** * {@inheritDoc} */ - // savvis doesn't work with accept header - @Override @GET + // no accept header @XMLResponseParser(OrgHandler.class) @ExceptionParser(ReturnNullOnNotFoundOr404.class) + @Override ListenableFuture findOrgNamed( - @Nullable @EndpointParam(parser = OrgNameToEndpoint.class) String orgName); + @Nullable @EndpointParam(parser = OrgNameToEndpoint.class) String orgName); /** * {@inheritDoc} */ - // savvis doesn't work with accept header - @Override + @GET + // no accept header @XMLResponseParser(OrgHandler.class) @ExceptionParser(ReturnNullOnNotFoundOr404.class) + @Override ListenableFuture getOrg(@EndpointParam URI orgId); - + /** * @see CommonVCloudClient#getVDC(URI) */ @GET - @XMLResponseParser(VDCHandler.class) + // no accept header + @XMLResponseParser(SymphonyVPDCVDCHandler.class) @ExceptionParser(ReturnNullOnNotFoundOr404.class) - ListenableFuture getVDC(@EndpointParam URI vdc); + @Override + ListenableFuture getVDC(@EndpointParam URI vdc); /** * @see CommonVCloudClient#findVDCInOrgNamed(String, String) */ @GET - @XMLResponseParser(VDCHandler.class) + // no accept header + @XMLResponseParser(SymphonyVPDCVDCHandler.class) @ExceptionParser(ReturnNullOnNotFoundOr404.class) - ListenableFuture findVDCInOrgNamed( - @Nullable @EndpointParam(parser = OrgNameAndVDCNameToEndpoint.class) String orgName, - @Nullable @EndpointParam(parser = OrgNameAndVDCNameToEndpoint.class) String vdcName); - - /** - * @see CommonVCloudClient#findNetworkInOrgVDCNamed - *//* - @GET - @XMLResponseParser(TerremarkOrgNetworkFromTerremarkVCloudExpressNetworkHandler.class) - @ExceptionParser(ReturnNullOnNotFoundOr404.class) - ListenableFuture findNetworkInOrgVDCNamed( - @Nullable @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String orgName, - @Nullable @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String catalogName, - @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String networkName); + @Override + ListenableFuture findVDCInOrgNamed( + @Nullable @EndpointParam(parser = OrgNameAndVDCNameToEndpoint.class) String orgName, + @Nullable @EndpointParam(parser = OrgNameAndVDCNameToEndpoint.class) String vdcName); - *//** - * @see CommonVCloudClient#getNetwork - *//* - @GET - @XMLResponseParser(TerremarkOrgNetworkFromTerremarkVCloudExpressNetworkHandler.class) - @ExceptionParser(ReturnNullOnNotFoundOr404.class) - ListenableFuture getNetwork(@EndpointParam URI network);*/ - /** * @see CommonVCloudClient#findNetworkInOrgVDCNamed */ @GET + // no accept header @XMLResponseParser(SymphonyVPDCNetworkHandler.class) @ExceptionParser(ReturnNullOnNotFoundOr404.class) + @Override ListenableFuture findNetworkInOrgVDCNamed( - @Nullable @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String orgName, - @Nullable @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String catalogName, - @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String networkName); + @Nullable @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String orgName, + @Nullable @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String catalogName, + @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String networkName); /** * @see CommonVCloudClient#getNetwork */ @GET + // no accept header @XMLResponseParser(SymphonyVPDCNetworkHandler.class) @ExceptionParser(ReturnNullOnNotFoundOr404.class) + @Override ListenableFuture getNetwork(@EndpointParam URI network); - + /** * @see VCloudClient#getVApp */ @GET + // no accept header @XMLResponseParser(SymphonyVPDCVAppHandler.class) @ExceptionParser(ReturnNullOnNotFoundOr404.class) + @Override ListenableFuture getVApp(@EndpointParam URI vApp); - + + /** + * @see VCloudClient#getVAppTemplate + */ + @GET + // no accept header + @XMLResponseParser(VCloudExpressVAppTemplateHandler.class) + @ExceptionParser(ReturnNullOnNotFoundOr404.class) + @Override + ListenableFuture getVAppTemplate(@EndpointParam URI vAppTemplate); + + /** + * @see VCloudClient#findVAppTemplateInOrgCatalogNamed + */ + @GET + // no accept header + @XMLResponseParser(VCloudExpressVAppTemplateHandler.class) + @ExceptionParser(ReturnNullOnNotFoundOr404.class) + @Override + ListenableFuture findVAppTemplateInOrgCatalogNamed( + @Nullable @EndpointParam(parser = OrgNameCatalogNameVAppTemplateNameToEndpoint.class) String orgName, + @Nullable @EndpointParam(parser = OrgNameCatalogNameVAppTemplateNameToEndpoint.class) String catalogName, + @EndpointParam(parser = OrgNameCatalogNameVAppTemplateNameToEndpoint.class) String itemName); + + /** + * @see VCloudExpressClient#instantiateVAppTemplateInVDC + */ + @POST + @Path("/action/instantiateVAppTemplate") + @Produces("application/vnd.vmware.vcloud.instantiateVAppTemplateParams+xml") + // no accept header + @XMLResponseParser(VCloudExpressVAppHandler.class) + @MapBinder(BindInstantiateVCloudExpressVAppTemplateParamsToXmlPayload.class) + @Override + ListenableFuture instantiateVAppTemplateInVDC(@EndpointParam URI vdc, + @PayloadParam("template") URI template, + @PayloadParam("name") @ParamValidators(DnsNameValidator.class) String appName, + InstantiateVAppTemplateOptions... options); + + /** + * @see VCloudExpressClient#cloneVAppInVDC + */ + @POST + @Path("/action/cloneVApp") + @Produces("application/vnd.vmware.vcloud.cloneVAppParams+xml") + // no accept header + @XMLResponseParser(TaskHandler.class) + @MapBinder(BindCloneVAppParamsToXmlPayload.class) + @Override + ListenableFuture cloneVAppInVDC(@EndpointParam URI vdc, @PayloadParam("vApp") URI toClone, + @PayloadParam("newName") @ParamValidators(DnsNameValidator.class) String newName, CloneVAppOptions... options); + + /** + * @see VCloudClient#findVAppInOrgVDCNamed + */ + @GET + // no accept header + @XMLResponseParser(VCloudExpressVAppHandler.class) + @ExceptionParser(ReturnNullOnNotFoundOr404.class) + @Override + ListenableFuture findVAppInOrgVDCNamed( + @Nullable @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String orgName, + @Nullable @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String catalogName, + @EndpointParam(parser = OrgNameVDCNameResourceEntityNameToEndpoint.class) String vAppName); + + /** + * @see CommonVCloudClient#deployVApp + */ + @POST + // no accept header + @Path("/action/deploy") + @XMLResponseParser(TaskHandler.class) + @Override + ListenableFuture deployVApp(@EndpointParam URI vAppId); + + /** + * @see CommonVCloudClient#undeployVApp + */ + @POST + // no accept header + @Path("/action/undeploy") + @XMLResponseParser(TaskHandler.class) + @Override + ListenableFuture undeployVApp(@EndpointParam URI vAppId); + + /** + * @see CommonVCloudClient#powerOnVApp + */ + @POST + // no accept header + @Path("/power/action/powerOn") + @XMLResponseParser(TaskHandler.class) + @Override + ListenableFuture powerOnVApp(@EndpointParam URI vAppId); + + /** + * @see CommonVCloudClient#powerOffVApp + */ + @POST + // no accept header + @Path("/power/action/powerOff") + @XMLResponseParser(TaskHandler.class) + @Override + ListenableFuture powerOffVApp(@EndpointParam URI vAppId); + + /** + * @see CommonVCloudClient#resetVApp + */ + @POST + // no accept header + @Path("/power/action/reset") + @XMLResponseParser(TaskHandler.class) + @Override + ListenableFuture resetVApp(@EndpointParam URI vAppId); + + /** + * @see CommonVCloudClient#suspendVApp + */ + @POST + // no accept header + @Path("/power/action/suspend") + @XMLResponseParser(TaskHandler.class) + @Override + ListenableFuture suspendVApp(@EndpointParam URI vAppId); + + /** + * @see CommonVCloudClient#getCatalog + */ + @GET + @XMLResponseParser(CatalogHandler.class) + @ExceptionParser(ReturnNullOnNotFoundOr404.class) + // no accept header + @Override + ListenableFuture getCatalog(@EndpointParam URI catalogId); + + /** + * @see CommonVCloudClient#findCatalogInOrgNamed + */ + @GET + @XMLResponseParser(CatalogHandler.class) + @ExceptionParser(ReturnNullOnNotFoundOr404.class) + // no accept header + @Override + ListenableFuture findCatalogInOrgNamed( + @Nullable @EndpointParam(parser = OrgNameAndCatalogNameToEndpoint.class) String orgName, + @Nullable @EndpointParam(parser = OrgNameAndCatalogNameToEndpoint.class) String catalogName); + + /** + * @see CommonVCloudClient#getCatalogItem + */ + @GET + // no accept header + @XMLResponseParser(CatalogItemHandler.class) + @ExceptionParser(ReturnNullOnNotFoundOr404.class) + @Override + ListenableFuture getCatalogItem(@EndpointParam URI catalogItem); + + /** + * @see CommonVCloudClient#getCatalogItemInOrg + */ + @GET + // no accept header + @XMLResponseParser(CatalogItemHandler.class) + @ExceptionParser(ReturnNullOnNotFoundOr404.class) + @Override + ListenableFuture findCatalogItemInOrgCatalogNamed( + @Nullable @EndpointParam(parser = OrgNameCatalogNameItemNameToEndpoint.class) String orgName, + @Nullable @EndpointParam(parser = OrgNameCatalogNameItemNameToEndpoint.class) String catalogName, + @EndpointParam(parser = OrgNameCatalogNameItemNameToEndpoint.class) String itemName); + + /** + * @see CommonVCloudClient#getTasksList + */ + @GET + // no accept header + @XMLResponseParser(TasksListHandler.class) + @ExceptionParser(ReturnNullOnNotFoundOr404.class) + @Override + ListenableFuture getTasksList(@EndpointParam URI tasksListId); + + /** + * @see CommonVCloudClient#findTasksListInOrgNamed + */ + @GET + // no accept header + @XMLResponseParser(TasksListHandler.class) + @ExceptionParser(ReturnNullOnNotFoundOr404.class) + @Override + ListenableFuture findTasksListInOrgNamed( + @Nullable @EndpointParam(parser = OrgNameToTasksListEndpoint.class) String orgName); + + /** + * @see CommonVCloudClient#getTask + */ + @GET + // no accept header + @XMLResponseParser(TaskHandler.class) + @ExceptionParser(ReturnNullOnNotFoundOr404.class) + @Override + ListenableFuture getTask(@EndpointParam URI taskId); + } diff --git a/sandbox-providers/savvis-symphony-vpdc/src/main/java/org/jclouds/savvis/vpdc/SymphonyVPDCClient.java b/sandbox-providers/savvis-symphony-vpdc/src/main/java/org/jclouds/savvis/vpdc/SymphonyVPDCClient.java index 04a012f2ad..236c990cb3 100644 --- a/sandbox-providers/savvis-symphony-vpdc/src/main/java/org/jclouds/savvis/vpdc/SymphonyVPDCClient.java +++ b/sandbox-providers/savvis-symphony-vpdc/src/main/java/org/jclouds/savvis/vpdc/SymphonyVPDCClient.java @@ -19,9 +19,11 @@ package org.jclouds.savvis.vpdc; +import java.net.URI; import java.util.concurrent.TimeUnit; import org.jclouds.concurrent.Timeout; +import org.jclouds.savvis.vpdc.domain.SymphonyVPDCVDC; import org.jclouds.vcloud.VCloudExpressClient; /** @@ -33,5 +35,9 @@ import org.jclouds.vcloud.VCloudExpressClient; */ @Timeout(duration = 300, timeUnit = TimeUnit.SECONDS) public interface SymphonyVPDCClient extends VCloudExpressClient { + @Override + SymphonyVPDCVDC findVDCInOrgNamed(String orgName, String vdcName); + @Override + SymphonyVPDCVDC getVDC(URI vdc); } \ No newline at end of file diff --git a/sandbox-providers/savvis-symphony-vpdc/src/main/java/org/jclouds/savvis/vpdc/domain/SymphonyVPDCVDC.java b/sandbox-providers/savvis-symphony-vpdc/src/main/java/org/jclouds/savvis/vpdc/domain/SymphonyVPDCVDC.java new file mode 100644 index 0000000000..7c8913dbf5 --- /dev/null +++ b/sandbox-providers/savvis-symphony-vpdc/src/main/java/org/jclouds/savvis/vpdc/domain/SymphonyVPDCVDC.java @@ -0,0 +1,34 @@ +/** + * + * Copyright (C) 2010 Cloud Conscious, LLC. + * + * ==================================================================== + * Licensed 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.savvis.vpdc.domain; + +import org.jclouds.savvis.vpdc.domain.internal.SymphonyVPDCVDCImpl; +import org.jclouds.vcloud.domain.ReferenceType; +import org.jclouds.vcloud.domain.VDC; + +import com.google.inject.ImplementedBy; + +/** + * @author Adrian Cole + */ +@ImplementedBy(SymphonyVPDCVDCImpl.class) +public interface SymphonyVPDCVDC extends VDC { + String getOfferingTag(); +} \ No newline at end of file diff --git a/sandbox-providers/savvis-symphony-vpdc/src/main/java/org/jclouds/savvis/vpdc/domain/internal/SymphonyVPDCVDCImpl.java b/sandbox-providers/savvis-symphony-vpdc/src/main/java/org/jclouds/savvis/vpdc/domain/internal/SymphonyVPDCVDCImpl.java new file mode 100644 index 0000000000..5a8d829b7f --- /dev/null +++ b/sandbox-providers/savvis-symphony-vpdc/src/main/java/org/jclouds/savvis/vpdc/domain/internal/SymphonyVPDCVDCImpl.java @@ -0,0 +1,75 @@ +package org.jclouds.savvis.vpdc.domain.internal; + +import static com.google.common.base.Preconditions.checkNotNull; + +import java.net.URI; +import java.util.Map; + +import javax.annotation.Nullable; + +import org.jclouds.savvis.vpdc.domain.SymphonyVPDCVDC; +import org.jclouds.vcloud.domain.AllocationModel; +import org.jclouds.vcloud.domain.Capacity; +import org.jclouds.vcloud.domain.ReferenceType; +import org.jclouds.vcloud.domain.Task; +import org.jclouds.vcloud.domain.VDCStatus; +import org.jclouds.vcloud.domain.internal.VDCImpl; + +/** + * Locations of resources in SymphonyVPDC vDC + * + * @author Adrian Cole + * + */ +public class SymphonyVPDCVDCImpl extends VDCImpl implements SymphonyVPDCVDC { + private final String offeringTag; + + /** The serialVersionUID */ + private static final long serialVersionUID = 8464716396538298809L; + + public SymphonyVPDCVDCImpl(String name, String type, URI id, VDCStatus status, ReferenceType org, + @Nullable String description, Iterable tasks, AllocationModel allocationModel, + @Nullable Capacity storageCapacity, @Nullable Capacity cpuCapacity, @Nullable Capacity memoryCapacity, + Map resourceEntities, Map availableNetworks, int nicQuota, + int networkQuota, int vmQuota, boolean isEnabled, String offeringTag) { + super(name, type, id, status, org, description, tasks, allocationModel, storageCapacity, cpuCapacity, + memoryCapacity, resourceEntities, availableNetworks, nicQuota, networkQuota, vmQuota, isEnabled); + this.offeringTag = checkNotNull(offeringTag, "offeringTag"); + } + + @Override + public String getOfferingTag() { + return offeringTag; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + ((offeringTag == null) ? 0 : offeringTag.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (!super.equals(obj)) + return false; + if (getClass() != obj.getClass()) + return false; + SymphonyVPDCVDCImpl other = (SymphonyVPDCVDCImpl) obj; + if (offeringTag == null) { + if (other.offeringTag != null) + return false; + } else if (!offeringTag.equals(other.offeringTag)) + return false; + return true; + } + + @Override + public String toString() { + return "[id=" + getHref() + ", name=" + getName() + ", description=" + getDescription() + ", offeringTag=" + + offeringTag + "]"; + } +} \ No newline at end of file diff --git a/sandbox-providers/savvis-symphony-vpdc/src/main/java/org/jclouds/savvis/vpdc/xml/SymphonyVPDCVDCHandler.java b/sandbox-providers/savvis-symphony-vpdc/src/main/java/org/jclouds/savvis/vpdc/xml/SymphonyVPDCVDCHandler.java new file mode 100644 index 0000000000..b1295f29c6 --- /dev/null +++ b/sandbox-providers/savvis-symphony-vpdc/src/main/java/org/jclouds/savvis/vpdc/xml/SymphonyVPDCVDCHandler.java @@ -0,0 +1,58 @@ +/** + * + * Copyright (C) 2010 Cloud Conscious, LLC. + * + * ==================================================================== + * Licensed 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.savvis.vpdc.xml; + +import javax.inject.Inject; + +import org.jclouds.savvis.vpdc.domain.SymphonyVPDCVDC; +import org.jclouds.savvis.vpdc.domain.internal.SymphonyVPDCVDCImpl; +import org.jclouds.vcloud.domain.VDC; +import org.jclouds.vcloud.xml.TaskHandler; +import org.jclouds.vcloud.xml.VDCHandler; + +/** + * @author Adrian Cole + */ +public class SymphonyVPDCVDCHandler extends VDCHandler { + + @Inject + public SymphonyVPDCVDCHandler(TaskHandler taskHandler) { + super(taskHandler); + } + + private String offeringTag; + + public SymphonyVPDCVDC getResult() { + VDC vDC = super.getResult(); + return new SymphonyVPDCVDCImpl(vDC.getName(), vDC.getType(), vDC.getHref(), status, org, description, tasks, + allocationModel, storageCapacity, cpuCapacity, memoryCapacity, resourceEntities, availableNetworks, + nicQuota, networkQuota, vmQuota, isEnabled, offeringTag); + } + + @Override + public void endElement(String uri, String name, String qName) { + if (qName.endsWith("OfferingTag")) { + this.offeringTag = currentOrNull(); + } + super.endElement(uri, name, qName); + + } + +} diff --git a/sandbox-providers/savvis-symphony-vpdc/src/test/java/org/jclouds/savvis/vpdc/SymphonyVPDCAsyncClientTest.java b/sandbox-providers/savvis-symphony-vpdc/src/test/java/org/jclouds/savvis/vpdc/SymphonyVPDCAsyncClientTest.java index 79c6e9c0f8..3a7b8a5e2e 100644 --- a/sandbox-providers/savvis-symphony-vpdc/src/test/java/org/jclouds/savvis/vpdc/SymphonyVPDCAsyncClientTest.java +++ b/sandbox-providers/savvis-symphony-vpdc/src/test/java/org/jclouds/savvis/vpdc/SymphonyVPDCAsyncClientTest.java @@ -50,9 +50,9 @@ import org.jclouds.rest.internal.RestAnnotationProcessor; import org.jclouds.savvis.vpdc.config.SymphonyVPDCRestClientModule; import org.jclouds.savvis.vpdc.xml.SymphonyVPDCNetworkHandler; import org.jclouds.savvis.vpdc.xml.SymphonyVPDCVAppHandler; +import org.jclouds.savvis.vpdc.xml.SymphonyVPDCVDCHandler; import org.jclouds.util.Strings2; import org.jclouds.vcloud.CommonVCloudClient; -import org.jclouds.vcloud.VCloudExpressAsyncClient; import org.jclouds.vcloud.VCloudExpressLoginAsyncClient; import org.jclouds.vcloud.VCloudExpressMediaType; import org.jclouds.vcloud.VCloudVersionsAsyncClient; @@ -77,7 +77,6 @@ import org.jclouds.vcloud.xml.TaskHandler; import org.jclouds.vcloud.xml.TasksListHandler; import org.jclouds.vcloud.xml.VCloudExpressVAppHandler; import org.jclouds.vcloud.xml.VCloudExpressVAppTemplateHandler; -import org.jclouds.vcloud.xml.VDCHandler; import org.testng.annotations.Test; import com.google.common.base.Supplier; @@ -104,7 +103,7 @@ public class SymphonyVPDCAsyncClientTest extends RestClientTest of(new Log4JLoggingModule()), overrides).getProviderSpecificContext(); + Injector injector = new RestContextFactory(restProperties).createContextBuilder(provider, + ImmutableSet. of(new Log4JLoggingModule(), new JschSshClientModule()), overrides).buildInjector(); + + connection = injector.getInstance(SymphonyVPDCClient.class); + + sshFactory = injector.getInstance(SshClient.Factory.class); + socketTester = new RetryablePredicate(injector.getInstance(SocketOpen.class), 130, 10, TimeUnit.SECONDS);// make + // it + // longer + // then + // default internet + // service timeout + successTester = new RetryablePredicate(injector.getInstance(TaskSuccess.class), 650, 10, TimeUnit.SECONDS); + } + + protected String expectedOs = "Ubuntu Linux (64-bit)"; + protected String itemName = "Ubuntu JeOS 9.10 (64-bit)"; + + protected Factory sshFactory; + private VCloudExpressVApp vApp; + private RetryablePredicate socketTester; + private RetryablePredicate successTester; + private VCloudExpressVApp clone; + private VDC vdc; + public static final String PREFIX = System.getProperty("user.name") + "-savvis"; + + @Test(enabled = true) + public void testInstantiateAndPowerOn() throws InterruptedException, ExecutionException, TimeoutException, + IOException { + prepare(); + StringBuffer name = new StringBuffer(); + for (int i = 0; i < 15; i++) + name.append("c"); + String serverName = name.toString();// "adriantest"; + + long hardDisk = 4194304; + + // long hardDisk = 4194304 / 4 * 10; + // String catalogOs = "CentOS 5.3 (64-bit)"; + // String expectedOs = "Red Hat Enterprise Linux 5 (64-bit)"; + + // lookup the datacenter you are deploying into + vdc = connection.findVDCInOrgNamed(null, null); + + ReferenceType vAppTemplateId = Iterables.find(vdc.getResourceEntities().values(), new Predicate() { + + @Override + public boolean apply(ReferenceType arg0) { + return arg0.getType().equals(VCloudMediaType.VAPPTEMPLATE_XML); + } + + }); + + VCloudExpressVAppTemplate vAppTemplate = connection.getVAppTemplate(vAppTemplateId.getHref()); + + assert vAppTemplate != null; + + // create an options object to collect the configuration we want. + InstantiateVAppTemplateOptions instantiateOptions = new InstantiateVAppTemplateOptions(); + + // instantiate, noting vApp returned has minimal details + vApp = connection.instantiateVAppTemplateInVDC(vdc.getHref(), vAppTemplate.getHref(), serverName, + instantiateOptions); + + assertEquals(vApp.getStatus(), Status.RESOLVED); + + Task deployTask = connection.deployVApp(vApp.getHref()); + + // check to see the result of calling deploy twice + deployTask = connection.deployVApp(vApp.getHref()); + assertEquals(deployTask.getHref(), deployTask.getHref()); + + vApp = connection.getVApp(vApp.getHref()); + + assertEquals(vApp.getStatus(), Status.RESOLVED); + + try {// per docs, this is not supported + connection.cancelTask(deployTask.getHref()); + } catch (UnsupportedOperationException e) { + } + + assert successTester.apply(deployTask.getHref()); + System.out.printf("%d: done deploying vApp%n", System.currentTimeMillis()); + + vApp = connection.getVApp(vApp.getHref()); + + ReferenceType vAppResource = connection.findVDCInOrgNamed(null, null).getResourceEntities().get(serverName); + assertEquals(vAppResource.getHref(), vApp.getHref()); + + int processorCount = 1; + long memory = 512; + verifyConfigurationOfVApp(vApp, serverName, expectedOs, processorCount, memory, hardDisk); + assertEquals(vApp.getStatus(), Status.OFF); + + assert successTester.apply(connection.powerOnVApp(vApp.getHref()).getHref()); + System.out.printf("%d: done powering on vApp%n", System.currentTimeMillis()); + + vApp = connection.getVApp(vApp.getHref()); + assertEquals(vApp.getStatus(), Status.ON); + } + + protected void prepare() { + + } + + @Test(enabled = true, dependsOnMethods = "testInstantiateAndPowerOn") + public void testCloneVApp() throws IOException { + assert successTester.apply(connection.powerOffVApp(vApp.getHref()).getHref()); + System.out.printf("%d: done powering off vApp%n", System.currentTimeMillis()); + + StringBuffer name = new StringBuffer(); + for (int i = 0; i < 15; i++) + name.append("b"); + String newName = name.toString(); + + CloneVAppOptions options = deploy().powerOn().withDescription("The description of " + newName); + + System.out.printf("%d: cloning vApp%n", System.currentTimeMillis()); + Task task = connection.cloneVAppInVDC(vdc.getHref(), vApp.getHref(), newName, options); + + // wait for the task to complete + assert successTester.apply(task.getHref()); + System.out.printf("%d: done cloning vApp%n", System.currentTimeMillis()); + + assert successTester.apply(connection.powerOnVApp(vApp.getHref()).getHref()); + System.out.printf("%d: done powering on vApp%n", System.currentTimeMillis()); + + // refresh task to get the new vApp location + task = connection.getTask(task.getHref()); + + clone = connection.getVApp(task.getOwner().getHref()); + assertEquals(clone.getStatus(), Status.ON); + + assertEquals(clone.getName(), newName); + assertEquals(clone.getNetworkToAddresses().values().size(), 1); + } + + private void loopAndCheckPass(String publicIp) throws IOException { + for (int i = 0; i < 5; i++) {// retry loop TODO replace with predicate. + try { + doCheckPass(publicIp); + return; + } catch (SshException e) { + try { + Thread.sleep(10 * 1000); + } catch (InterruptedException e1) { + } + continue; + } + } + } + + @Test(enabled = true, dependsOnMethods = "testCloneVApp") + public void testLifeCycle() throws InterruptedException, ExecutionException, TimeoutException, IOException { + + try {// per docs, this is not supported + connection.undeployVApp(vApp.getHref()); + assert false; + } catch (UnsupportedOperationException e) { + } + + try {// per docs, this is not supported + connection.suspendVApp(vApp.getHref()); + assert false; + } catch (UnsupportedOperationException e) { + } + + assert successTester.apply(connection.resetVApp(vApp.getHref()).getHref()); + + vApp = connection.getVApp(vApp.getHref()); + + assertEquals(vApp.getStatus(), Status.ON); + + // TODO we need to determine whether shutdown is supported before invoking + // it. + // connection.shutdownVApp(vApp.getId()); + // vApp = connection.getVApp(vApp.getId()); + // assertEquals(vApp.getStatus(), VAppStatus.ON); + + assert successTester.apply(connection.powerOffVApp(vApp.getHref()).getHref()); + + vApp = connection.getVApp(vApp.getHref()); + assertEquals(vApp.getStatus(), Status.OFF); + } + + private void verifyConfigurationOfVApp(VCloudExpressVApp vApp, String serverName, String expectedOs, + int processorCount, long memory, long hardDisk) { + assertEquals(vApp.getName(), serverName); + assertEquals(vApp.getOperatingSystemDescription(), expectedOs); + assertEquals(find(vApp.getResourceAllocations(), resourceType(ResourceType.PROCESSOR)).getVirtualQuantity(), + processorCount); + assertEquals( + find(vApp.getResourceAllocations(), resourceType(ResourceType.SCSI_CONTROLLER)).getVirtualQuantity(), 1); + assertEquals(find(vApp.getResourceAllocations(), resourceType(ResourceType.MEMORY)).getVirtualQuantity(), memory); + assertEquals(find(vApp.getResourceAllocations(), resourceType(ResourceType.DISK_DRIVE)).getVirtualQuantity(), + hardDisk); + assertEquals(vApp.getSize().longValue(), + find(vApp.getResourceAllocations(), resourceType(ResourceType.DISK_DRIVE)).getVirtualQuantity()); + } + + private void doCheckPass(String address) throws IOException { + IPSocket socket = new IPSocket(address, 22); + + System.out.printf("%d: %s awaiting ssh service to start%n", System.currentTimeMillis(), socket); + assert socketTester.apply(socket); + System.out.printf("%d: %s ssh service started%n", System.currentTimeMillis(), socket); + + SshClient connection = getConnectionFor(socket); + try { + connection.connect(); + System.out.printf("%d: %s ssh connection made%n", System.currentTimeMillis(), socket); + System.out.println(connection.exec("df -h")); + } finally { + if (connection != null) + connection.disconnect(); + } + } + + protected SshClient getConnectionFor(IPSocket socket) { + // TODO add in the correct login credentials for the vApp template + return sshFactory.create(socket, new Credentials("root", "password")); + } + + @AfterTest + void cleanup() throws InterruptedException, ExecutionException, TimeoutException { + if (vApp != null) { + try { + successTester.apply(connection.powerOffVApp(vApp.getHref()).getHref()); + } catch (Exception e) { + + } + connection.deleteVApp(vApp.getHref()); + } + if (clone != null) { + try { + successTester.apply(connection.powerOffVApp(clone.getHref()).getHref()); + } catch (Exception e) { + + } + connection.deleteVApp(clone.getHref()); + } - connection = context.getApi(); } } \ No newline at end of file diff --git a/sandbox-providers/savvis-symphony-vpdc/src/test/java/org/jclouds/savvis/vpdc/compute/SymphonyVPDCComputeServiceLiveTest.java b/sandbox-providers/savvis-symphony-vpdc/src/test/java/org/jclouds/savvis/vpdc/compute/SymphonyVPDCComputeServiceLiveTest.java index 34fa9efc0b..f269cb8723 100644 --- a/sandbox-providers/savvis-symphony-vpdc/src/test/java/org/jclouds/savvis/vpdc/compute/SymphonyVPDCComputeServiceLiveTest.java +++ b/sandbox-providers/savvis-symphony-vpdc/src/test/java/org/jclouds/savvis/vpdc/compute/SymphonyVPDCComputeServiceLiveTest.java @@ -32,7 +32,7 @@ import org.testng.annotations.Test; * * @author Kedar Dave */ -@Test(groups = "live", enabled = true, sequential = true) +@Test(groups = "live", enabled = false, sequential = true) public class SymphonyVPDCComputeServiceLiveTest extends BaseComputeServiceLiveTest { public SymphonyVPDCComputeServiceLiveTest() { provider = "savvis-symphony-vpdc"; diff --git a/sandbox-providers/savvis-symphony-vpdc/src/test/java/org/jclouds/savvis/vpdc/compute/SymphonyVPDCTemplateBuilderLiveTest.java b/sandbox-providers/savvis-symphony-vpdc/src/test/java/org/jclouds/savvis/vpdc/compute/SymphonyVPDCTemplateBuilderLiveTest.java index 21082ea684..30cd9d297c 100644 --- a/sandbox-providers/savvis-symphony-vpdc/src/test/java/org/jclouds/savvis/vpdc/compute/SymphonyVPDCTemplateBuilderLiveTest.java +++ b/sandbox-providers/savvis-symphony-vpdc/src/test/java/org/jclouds/savvis/vpdc/compute/SymphonyVPDCTemplateBuilderLiveTest.java @@ -28,7 +28,7 @@ import com.google.inject.Module; * * @author Adrian Cole */ -@Test(groups = "live") +@Test(groups = "live", enabled = false) public class SymphonyVPDCTemplateBuilderLiveTest extends BaseTemplateBuilderLiveTest { public SymphonyVPDCTemplateBuilderLiveTest() { diff --git a/sandbox-providers/savvis-symphony-vpdc/src/test/java/org/jclouds/savvis/vpdc/xml/OrgHandlerTest.java b/sandbox-providers/savvis-symphony-vpdc/src/test/java/org/jclouds/savvis/vpdc/xml/OrgHandlerTest.java new file mode 100644 index 0000000000..3725b4cacb --- /dev/null +++ b/sandbox-providers/savvis-symphony-vpdc/src/test/java/org/jclouds/savvis/vpdc/xml/OrgHandlerTest.java @@ -0,0 +1,66 @@ +/** + * + * Copyright (C) 2010 Cloud Conscious, LLC. + * + * ==================================================================== + * Licensed 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.savvis.vpdc.xml; + +import static org.testng.Assert.assertEquals; + +import java.io.InputStream; +import java.net.URI; + +import org.jclouds.http.functions.ParseSax; +import org.jclouds.http.functions.ParseSax.Factory; +import org.jclouds.http.functions.config.SaxParserModule; +import org.jclouds.vcloud.domain.Org; +import org.jclouds.vcloud.domain.ReferenceType; +import org.jclouds.vcloud.domain.Task; +import org.jclouds.vcloud.domain.internal.OrgImpl; +import org.jclouds.vcloud.domain.internal.ReferenceTypeImpl; +import org.jclouds.vcloud.xml.OrgHandler; +import org.testng.annotations.Test; + +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import com.google.inject.Guice; +import com.google.inject.Injector; + +/** + * Tests behavior of {@code OrgHandler} + * + * @author Adrian Cole + */ +@Test(groups = "unit") +public class OrgHandlerTest { + + public void testSavvis() { + InputStream is = getClass().getResourceAsStream("/savvis/org.xml"); + Injector injector = Guice.createInjector(new SaxParserModule()); + Factory factory = injector.getInstance(ParseSax.Factory.class); + Org result = (Org) factory.create(injector.getInstance(OrgHandler.class)).parse(is); + assertEquals( + result, + new OrgImpl("100000.0", null, null, "100000.0", "SAVVISStation Integration Testing", ImmutableMap + . of(), ImmutableMap. of( + "demo_vpdcname", + new ReferenceTypeImpl("demo_vpdcname", "application/vnd.vmware.vcloud.vdc+xml", URI + .create("https://api.sandbox.symphonyvpdc.savvis.net/rest/api/v0.8/org/100000.0/vdc/2736"))), + ImmutableMap. of(), null, ImmutableSet. of())); + + } +} diff --git a/sandbox-providers/savvis-symphony-vpdc/src/test/java/org/jclouds/savvis/vpdc/xml/SymphonyVPDCVDCHandlerTest.java b/sandbox-providers/savvis-symphony-vpdc/src/test/java/org/jclouds/savvis/vpdc/xml/SymphonyVPDCVDCHandlerTest.java new file mode 100644 index 0000000000..9a19945b85 --- /dev/null +++ b/sandbox-providers/savvis-symphony-vpdc/src/test/java/org/jclouds/savvis/vpdc/xml/SymphonyVPDCVDCHandlerTest.java @@ -0,0 +1,93 @@ +/** + * + * Copyright (C) 2010 Cloud Conscious, LLC. + * + * ==================================================================== + * Licensed 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.savvis.vpdc.xml; + +import static org.testng.Assert.assertEquals; + +import java.io.InputStream; +import java.net.URI; + +import org.jclouds.http.functions.ParseSax; +import org.jclouds.http.functions.ParseSax.Factory; +import org.jclouds.http.functions.config.SaxParserModule; +import org.jclouds.savvis.vpdc.domain.SymphonyVPDCVDC; +import org.jclouds.vcloud.VCloudMediaType; +import org.jclouds.vcloud.domain.ReferenceType; +import org.jclouds.vcloud.domain.internal.ReferenceTypeImpl; +import org.testng.annotations.Test; + +import com.google.common.collect.ImmutableMap; +import com.google.inject.Guice; +import com.google.inject.Injector; + +/** + * Tests behavior of {@code SymphonyVPDCVDCHandler} + * + * @author Adrian Cole + */ +@Test(groups = "unit") +public class SymphonyVPDCVDCHandlerTest { + + public void test() { + InputStream is = getClass().getResourceAsStream("/savvis/vdc.xml"); + Injector injector = Guice.createInjector(new SaxParserModule()); + Factory factory = injector.getInstance(ParseSax.Factory.class); + SymphonyVPDCVDC result = (SymphonyVPDCVDC) factory.create(injector.getInstance(SymphonyVPDCVDCHandler.class)) + .parse(is); + assertEquals(result.getName(), "demo_vpdcname"); + assertEquals(result.getHref(), null); + assertEquals(result.getDescription(), + "ServiceProfileName = Balanced; ServiceLocation = North America; Email = jim@company.com;"); + assertEquals(result.getOfferingTag(), "Deployed"); + assertEquals(result.getStorageCapacity(), null); + assertEquals(result.getCpuCapacity(), null); + assertEquals(result.getMemoryCapacity(), null); + assertEquals(result.getVmQuota(), 0); + assertEquals( + result.getResourceEntities(), + ImmutableMap. of( + "DemoHost-1", + new ReferenceTypeImpl( + "DemoHost-1", + VCloudMediaType.VAPP_XML, + URI.create("https://api.sandbox.symphonyvpdc.savvis.net/rest/api/v0.8/org/100000.0/vdc/2736/vApp/1001")), + "DemoHost-2", + new ReferenceTypeImpl( + "DemoHost-2", + VCloudMediaType.VAPP_XML, + URI.create("https://api.sandbox.symphonyvpdc.savvis.net/rest/api/v0.8/org/100000.0/vdc/2736/vApp/1002")), + "DemoHost-3", + new ReferenceTypeImpl( + "DemoHost-3", + VCloudMediaType.VAPP_XML, + URI.create("https://api.sandbox.symphonyvpdc.savvis.net/rest/api/v0.8/org/100000.0/vdc/2736/vApp/1003")), + "CustomerTemplateName", + new ReferenceTypeImpl( + "CustomerTemplateName", + VCloudMediaType.VAPPTEMPLATE_XML, + URI.create("https://api.sandbox.symphonyvpdc.savvis.net/rest/api/v0.8/org/100000.0/vdc/2736/vAppTemplate/1234")), + "firewall", + new ReferenceTypeImpl( + "firewall", + "api.sandbox.symphonyVPDC.savvis.net+xml", + URI.create("https://api.sandbox.symphonyvpdc.savvis.net/rest/api/v0.8/org/100000.0/vdc/2736/FirewallService")))); + assertEquals(result.getAvailableNetworks(), ImmutableMap.of()); + } +} diff --git a/sandbox-providers/savvis-symphony-vpdc/src/test/resources/savvis/org.xml b/sandbox-providers/savvis-symphony-vpdc/src/test/resources/savvis/org.xml new file mode 100644 index 0000000000..22f18b1b1f --- /dev/null +++ b/sandbox-providers/savvis-symphony-vpdc/src/test/resources/savvis/org.xml @@ -0,0 +1,5 @@ + + + + SAVVISStation Integration Testing + \ No newline at end of file diff --git a/sandbox-providers/savvis-symphony-vpdc/src/test/resources/savvis/vdc.xml b/sandbox-providers/savvis-symphony-vpdc/src/test/resources/savvis/vdc.xml new file mode 100644 index 0000000000..57d28ef190 --- /dev/null +++ b/sandbox-providers/savvis-symphony-vpdc/src/test/resources/savvis/vdc.xml @@ -0,0 +1,13 @@ + + + ServiceProfileName = Balanced; ServiceLocation = North America; Email = jim@company.com; + Deployed + + + + + + + + + \ No newline at end of file