VAppTemplateLiveTest fixes

This commit is contained in:
Aled Sage 2012-03-14 14:39:25 +00:00 committed by Andrew Donald Kennedy
parent ddb70df2d9
commit d027497d5d
6 changed files with 90 additions and 41 deletions

View File

@ -82,6 +82,8 @@ public class VCloudDirectorMediaType {
public static final String VAPP_TEMPLATE = "application/vnd.vmware.vcloud.vAppTemplate+xml";
public static final String VM = "application/vnd.vmware.vcloud.vm+xml";
public static final String CAPTURE_VAPP_PARAMS = "application/vnd.vmware.vcloud.captureVAppParams+xml";
public static final String CLONE_MEDIA_PARAMS = "application/vnd.vmware.vcloud.cloneMediaParams+xml";
@ -184,8 +186,14 @@ public class VCloudDirectorMediaType {
public static final String ADMIN_VDC = "application/vnd.vmware.admin.vdc+xml";
public static final String OVF_TEXT_XML = "text/xml";
public static final List<String> ALL_OVF = ImmutableList.of(
OVF_TEXT_XML
);
/**
* All acceptable media types.
* All acceptable vcloud-specific media types.
*
* This list must be updated whenever a new media type constant is added.
*/
@ -193,7 +201,7 @@ public class VCloudDirectorMediaType {
SESSION, ERROR, ORG_LIST, METADATA, METADATA_ENTRY, METADATA_VALUE,
ORG, TASKS_LIST, TASK, NETWORK, ORG_NETWORK, CATALOG, CATALOG_ITEM,
CATALOG_ITEMS, CATALOGS_LIST, PROPERTY, MEDIA, OWNER, VDC, ADMIN_USER,
VAPP, VAPP_TEMPLATE, CAPTURE_VAPP_PARAMS, CLONE_MEDIA_PARAMS,
VAPP, VAPP_TEMPLATE, VM, CAPTURE_VAPP_PARAMS, CLONE_MEDIA_PARAMS,
CLONE_VAPP_PARAMS, CLONE_VAPP_TEMPLATE_PARAMS, COMPOSE_VAPP_PARAMS,
INSTANTIATE_VAPP_TEMPLATE_PARAMS, UPLOAD_VAPP_TEMPLATE_PARAMS,
QUERY_RESULT_RECORDS, QUERY_RESULT_REFERENCES, QUERY_RESULT_ID_RECORDS,

View File

@ -29,12 +29,15 @@ import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementRef;
import javax.xml.bind.annotation.XmlType;
import org.jclouds.ovf.DeploymentOptionSection;
import org.jclouds.ovf.DiskSection;
import org.jclouds.ovf.OperatingSystemSection;
import org.jclouds.ovf.ProductSection;
import org.jclouds.ovf.Section;
import org.jclouds.ovf.VirtualHardwareSection;
import org.jclouds.vcloud.director.v1_5.domain.ovf.CustomizationSection;
import org.jclouds.vcloud.director.v1_5.domain.ovf.DeploymentOptionSection;
import org.jclouds.vcloud.director.v1_5.domain.ovf.DiskSection;
import org.jclouds.vcloud.director.v1_5.domain.ovf.NetworkSection;
import org.jclouds.vcloud.director.v1_5.domain.ovf.OperatingSystemSection;
import org.jclouds.vcloud.director.v1_5.domain.ovf.ProductSection;
import org.jclouds.vcloud.director.v1_5.domain.ovf.SectionType;
import org.jclouds.vcloud.director.v1_5.domain.ovf.StartupSection;
import org.jclouds.vcloud.director.v1_5.domain.ovf.VirtualHardwareSection;
import com.google.common.base.Objects;
import com.google.common.collect.ImmutableSet;
@ -83,7 +86,7 @@ public class CaptureVAppParams
public static class Builder extends ParamsType.Builder<CaptureVAppParams> {
private Reference source;
private Set<? extends Section<?>> sections = ImmutableSet.of();
private Set<? extends SectionType<?>> sections = ImmutableSet.of();
/**
* @see CaptureVAppParams#getSource()
@ -96,7 +99,7 @@ public class CaptureVAppParams
/**
* @see CaptureVAppParams#getSections()
*/
public Builder sections(Set<? extends Section<?>> sections) {
public Builder sections(Set<? extends SectionType<?>> sections) {
this.sections = checkNotNull(sections, "sections");
return this;
}
@ -117,7 +120,7 @@ public class CaptureVAppParams
}
}
private CaptureVAppParams(String description, String name, Reference source, Set<? extends Section<?>> sections) {
private CaptureVAppParams(String description, String name, Reference source, Set<? extends SectionType<?>> sections) {
super(description, name);
this.source = source;
this.sections = sections;
@ -127,14 +130,14 @@ public class CaptureVAppParams
// for JAXB
}
private CaptureVAppParams(Set<? extends Section<?>> sections) {
private CaptureVAppParams(Set<? extends SectionType<?>> sections) {
this.sections = ImmutableSet.copyOf(sections);
}
@XmlElement(name = "Source", required = true)
protected Reference source;
@XmlElementRef
protected Set<? extends Section<?>> sections = Sets.newLinkedHashSet();
protected Set<? extends SectionType<?>> sections = Sets.newLinkedHashSet();
/**
* Gets the value of the source property.
@ -152,7 +155,7 @@ public class CaptureVAppParams
* Gets the value of the section property.
*
* Objects of the following type(s) are allowed in the list
* {@link Section }
* {@link SectionType }
* {@link VirtualHardwareSection }
* {@link LeaseSettingsSection }
* {@link EulaSection }
@ -171,7 +174,7 @@ public class CaptureVAppParams
* {@link DiskSection }
* {@link InstallSection }
*/
public Set<? extends Section<?>> getSections() {
public Set<? extends SectionType<?>> getSections() {
return Collections.unmodifiableSet(this.sections);
}

View File

@ -18,7 +18,19 @@
*/
package org.jclouds.vcloud.director.v1_5.features;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.*;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.CUSTOMIZATION_SECTION;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.GUEST_CUSTOMIZATION_SECTION;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.LEASE_SETTINGS_SECTION;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.METADATA;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.METADATA_ENTRY;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.NETWORK_CONFIG_SECTION;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.NETWORK_CONNECTION_SECTION;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.NETWORK_SECTION;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.OWNER;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.PRODUCT_SECTION_LIST;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.RELOCATE_TEMPLATE;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.TASK;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType.VAPP_TEMPLATE;
import java.net.URI;
@ -31,8 +43,6 @@ import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import org.jclouds.ovf.Envelope;
import org.jclouds.ovf.NetworkSection;
import org.jclouds.rest.annotations.BinderParam;
import org.jclouds.rest.annotations.EndpointParam;
import org.jclouds.rest.annotations.ExceptionParser;
@ -51,6 +61,8 @@ import org.jclouds.vcloud.director.v1_5.domain.RelocateParams;
import org.jclouds.vcloud.director.v1_5.domain.Task;
import org.jclouds.vcloud.director.v1_5.domain.VAppTemplate;
import org.jclouds.vcloud.director.v1_5.domain.ovf.CustomizationSection;
import org.jclouds.vcloud.director.v1_5.domain.ovf.Envelope;
import org.jclouds.vcloud.director.v1_5.domain.ovf.NetworkSection;
import org.jclouds.vcloud.director.v1_5.filters.AddVCloudAuthorizationToRequest;
import org.jclouds.vcloud.director.v1_5.functions.ThrowVCloudErrorOn4xx;
@ -139,7 +151,7 @@ public interface VAppTemplateAsyncClient {
* @see VAppTemplateClient#getVAppTemplateCustomizationSection(URI)
*/
@GET
@Consumes(CUSTOMIZATION_SECTION)
@Consumes
@Path("/customizationSection")
@JAXBResponseParser
@ExceptionParser(ThrowVCloudErrorOn4xx.class)
@ -325,7 +337,7 @@ public interface VAppTemplateAsyncClient {
* @see VAppTemplateClient#getVAppTemplateOvf(URI)
*/
@GET
@Consumes(ENVELOPE)
@Consumes
@Path("/ovf")
@JAXBResponseParser
@ExceptionParser(ThrowVCloudErrorOn4xx.class)

View File

@ -22,8 +22,6 @@ import java.net.URI;
import java.util.concurrent.TimeUnit;
import org.jclouds.concurrent.Timeout;
import org.jclouds.ovf.Envelope;
import org.jclouds.ovf.NetworkSection;
import org.jclouds.vcloud.director.v1_5.domain.GuestCustomizationSection;
import org.jclouds.vcloud.director.v1_5.domain.LeaseSettingsSection;
import org.jclouds.vcloud.director.v1_5.domain.Metadata;
@ -36,6 +34,8 @@ import org.jclouds.vcloud.director.v1_5.domain.RelocateParams;
import org.jclouds.vcloud.director.v1_5.domain.Task;
import org.jclouds.vcloud.director.v1_5.domain.VAppTemplate;
import org.jclouds.vcloud.director.v1_5.domain.ovf.CustomizationSection;
import org.jclouds.vcloud.director.v1_5.domain.ovf.Envelope;
import org.jclouds.vcloud.director.v1_5.domain.ovf.NetworkSection;
/**
* Provides synchronous access to {@link org.jclouds.vcloud.director.v1_5.domain.VAppTemplate} objects.

View File

@ -18,10 +18,25 @@
*/
package org.jclouds.vcloud.director.v1_5.domain;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.*;
import static org.testng.Assert.*;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.CONDITION_FMT;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.MUST_BE_WELL_FORMED_FMT;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.MUST_CONTAIN_FMT;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.NOT_NULL_OBJECT_FMT;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_FIELD_ATTRB_REQ;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_FIELD_EQ;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_FIELD_GTE_0;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.OBJ_FIELD_REQ;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.REQUIRED_VALUE_FMT;
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.REQUIRED_VALUE_OBJECT_FMT;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertNull;
import static org.testng.Assert.assertTrue;
import static org.testng.Assert.fail;
import java.net.URI;
import java.util.Collection;
import java.util.Set;
import java.util.UUID;
@ -81,7 +96,16 @@ public class Checks {
checkResourceType(entity);
}
/**
* Assumes the validTypes to be vcloud-specific types.
*
* @see checkReferenceType(ReferenceType, Collection<String>)
*/
public static void checkReferenceType(ReferenceType<?> reference) {
checkReferenceType(reference, VCloudDirectorMediaType.ALL);
}
public static void checkReferenceType(ReferenceType<?> reference, Collection<String> validTypes) {
// Check required fields
assertNotNull(reference.getHref(), String.format(NOT_NULL_OBJECT_FMT, "Href", "ReferenceType"));
@ -89,7 +113,7 @@ public class Checks {
String id = reference.getId();
if (id != null) checkId(id);
String type = reference.getType();
if (type != null) checkType(type);
if (type != null) checkType(type, validTypes);
// NOTE name cannot be checked
}
@ -118,7 +142,11 @@ public class Checks {
}
public static void checkType(String type) {
assertTrue(VCloudDirectorMediaType.ALL.contains(type), String.format(REQUIRED_VALUE_FMT, "Type", type, Iterables.toString(VCloudDirectorMediaType.ALL)));
checkType(type, VCloudDirectorMediaType.ALL);
}
public static void checkType(String type, Collection<String> validTypes) {
assertTrue(validTypes.contains(type), String.format(REQUIRED_VALUE_FMT, "Type", type, Iterables.toString(validTypes)));
}
// NOTE this does not currently check anything
@ -138,7 +166,11 @@ public class Checks {
assertTrue(Link.Rel.ALL.contains(link.getRel()), String.format(REQUIRED_VALUE_OBJECT_FMT, "Rel", "Link", link.getRel(), Iterables.toString(Link.Rel.ALL)));
// Check parent type
checkReferenceType(link);
if (link.getRel().equals(Link.Rel.OVF)) {
checkReferenceType(link, VCloudDirectorMediaType.ALL_OVF);
} else {
checkReferenceType(link);
}
}
public static void checkTask(Task task) {

View File

@ -18,12 +18,9 @@
*/
package org.jclouds.vcloud.director.v1_5.features;
import static org.testng.Assert.*;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
import java.net.URI;
import org.jclouds.ovf.Envelope;
import org.jclouds.ovf.NetworkSection;
import org.jclouds.vcloud.director.v1_5.domain.Checks;
import org.jclouds.vcloud.director.v1_5.domain.GuestCustomizationSection;
import org.jclouds.vcloud.director.v1_5.domain.LeaseSettingsSection;
@ -37,6 +34,8 @@ import org.jclouds.vcloud.director.v1_5.domain.ProductSectionList;
import org.jclouds.vcloud.director.v1_5.domain.Task;
import org.jclouds.vcloud.director.v1_5.domain.VAppTemplate;
import org.jclouds.vcloud.director.v1_5.domain.ovf.CustomizationSection;
import org.jclouds.vcloud.director.v1_5.domain.ovf.Envelope;
import org.jclouds.vcloud.director.v1_5.domain.ovf.NetworkSection;
import org.jclouds.vcloud.director.v1_5.internal.BaseVCloudDirectorClientLiveTest;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
@ -54,11 +53,7 @@ import com.google.common.collect.Iterables;
@Test(groups = {"live", "unit", "user"}, testName = "VAppTemplateClientLiveTest")
public class VAppTemplateClientLiveTest extends BaseVCloudDirectorClientLiveTest {
private static final long TIMEOUT_MS = 60*1000;
private VAppTemplateClient vappTemplateClient;
private TaskClient taskClient;
private URI vAppTemplateURI; // FIXME Delete, and use super's
// FIXME IS timezone setting needed in live test?
// public VAppTemplateClientLiveTest() {
@ -70,7 +65,6 @@ public class VAppTemplateClientLiveTest extends BaseVCloudDirectorClientLiveTest
public void setupRequiredClients() {
try {
vappTemplateClient = context.getApi().getVAppTemplateClient();
taskClient = context.getApi().getTaskClient();
} catch (Exception e) {
// TODO Declare super as throws Exception?
throw Throwables.propagate(e);
@ -90,7 +84,7 @@ public class VAppTemplateClientLiveTest extends BaseVCloudDirectorClientLiveTest
Owner owner = vappTemplateClient.getOwnerOfVAppTemplate(vAppTemplateURI);
Checks.checkOwner(owner);
assertEquals(owner, vappTemplateClient.getVAppTemplate(vAppTemplateURI).getOwner());
assertEquals(owner.getUser(), vappTemplateClient.getVAppTemplate(vAppTemplateURI).getOwner().getUser());
}
@Test
@ -129,7 +123,7 @@ public class VAppTemplateClientLiveTest extends BaseVCloudDirectorClientLiveTest
Checks.checkMetadata(metadata);
}
@Test
@Test(enabled=false) // implicitly tested by testEditVAppTemplateMetadataValue, which first creates the metadata entry; otherwise no entry may exist
public void testGetVAppTemplateMetadataValue() {
Metadata metadata = vappTemplateClient.getVAppTemplateMetadata(vAppTemplateURI);
MetadataEntry entry = Iterables.get(metadata.getMetadataEntries(), 0);
@ -158,14 +152,14 @@ public class VAppTemplateClientLiveTest extends BaseVCloudDirectorClientLiveTest
public void testGetVAppTemplateNetworkSection() {
NetworkSection networkSection = vappTemplateClient.getVAppTemplateNetworkSection(vAppTemplateURI);
// Checks.checkNetworkSection(networkSection);
Checks.checkOvfNetworkSection(networkSection);
}
@Test
public void testGetVAppTemplateOvf() {
Envelope envelope = vappTemplateClient.getVAppTemplateOvf(vAppTemplateURI);
// Checks.checkEnvelope(envelope);
Checks.checkOvfEnvelope(envelope);
}
@Test