mirror of https://github.com/apache/jclouds.git
Merge pull request #774 from andreaturli/vcloud-director
issue 830: fixing vAppTemplateApi*Test, vAppApiLiveTest and vmApiLiveTest
This commit is contained in:
commit
0e7c963b05
|
@ -222,8 +222,8 @@ public class NetworkConnection {
|
||||||
this.externalIpAddress = externalIpAddress;
|
this.externalIpAddress = externalIpAddress;
|
||||||
this.isConnected = connected;
|
this.isConnected = connected;
|
||||||
this.macAddress = macAddress;
|
this.macAddress = macAddress;
|
||||||
this.ipAddressAllocationMode = ipAddressAllocationMode;
|
this.ipAddressAllocationMode = checkNotNull(ipAddressAllocationMode, "ipAddressAllocationMode");
|
||||||
this.network = network;
|
this.network = checkNotNull(network, "network");
|
||||||
this.needsCustomization = needsCustomization;
|
this.needsCustomization = needsCustomization;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -165,20 +165,6 @@ public interface VAppTemplateApi {
|
||||||
*/
|
*/
|
||||||
CustomizationSection getCustomizationSection(URI templateUri);
|
CustomizationSection getCustomizationSection(URI templateUri);
|
||||||
|
|
||||||
/**
|
|
||||||
* Modifies the vApp template customization information.
|
|
||||||
*
|
|
||||||
* <pre>
|
|
||||||
* PUT /vAppTemplate/{id}/customizationSection
|
|
||||||
* </pre>
|
|
||||||
*
|
|
||||||
* @param templateUri the URI of the template
|
|
||||||
* @param section the new configuration to apply
|
|
||||||
* @return the task performing the action. This operation is asynchronous and the user should monitor the returned
|
|
||||||
* task status in order to check when it is completed.
|
|
||||||
*/
|
|
||||||
Task modifyCustomizationSection(URI templateUri, CustomizationSection section);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves the Guest Customization Section of a VM
|
* Retrieves the Guest Customization Section of a VM
|
||||||
*
|
*
|
||||||
|
@ -243,20 +229,6 @@ public interface VAppTemplateApi {
|
||||||
*/
|
*/
|
||||||
NetworkConfigSection getNetworkConfigSection(URI templateUri);
|
NetworkConfigSection getNetworkConfigSection(URI templateUri);
|
||||||
|
|
||||||
/**
|
|
||||||
* Modifies the network config section of a vApp.
|
|
||||||
*
|
|
||||||
* <pre>
|
|
||||||
* PUT /vAppTemplate/{id}/networkConfigSection
|
|
||||||
* </pre>
|
|
||||||
*
|
|
||||||
* @param templateUri the URI of the template
|
|
||||||
* @param section the new configuration to apply
|
|
||||||
* @return the task performing the action. This operation is asynchronous and the user should monitor the returned
|
|
||||||
* task status in order to check when it is completed.
|
|
||||||
*/
|
|
||||||
Task modifyNetworkConfigSection(URI templateUri, NetworkConfigSection section);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves the network connection section of a VM
|
* Retrieves the network connection section of a VM
|
||||||
*
|
*
|
||||||
|
@ -269,20 +241,6 @@ public interface VAppTemplateApi {
|
||||||
*/
|
*/
|
||||||
NetworkConnectionSection getNetworkConnectionSection(URI templateUri);
|
NetworkConnectionSection getNetworkConnectionSection(URI templateUri);
|
||||||
|
|
||||||
/**
|
|
||||||
* Modifies the network connection section of a VM.
|
|
||||||
*
|
|
||||||
* <pre>
|
|
||||||
* PUT /vAppTemplate/{id}/networkConnectionSection
|
|
||||||
* </pre>
|
|
||||||
*
|
|
||||||
* @param templateUri the URI of the template
|
|
||||||
* @param section the new configuration to apply
|
|
||||||
* @return the task performing the action. This operation is asynchronous and the user should monitor the returned
|
|
||||||
* task status in order to check when it is completed.
|
|
||||||
*/
|
|
||||||
Task modifyNetworkConnectionSection(URI templateUri, NetworkConnectionSection section);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves the network section of a vApp or vApp template.
|
* Retrieves the network section of a vApp or vApp template.
|
||||||
*
|
*
|
||||||
|
|
|
@ -147,17 +147,6 @@ public interface VAppTemplateAsyncApi {
|
||||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||||
ListenableFuture<CustomizationSection> getCustomizationSection(@EndpointParam URI templateURI);
|
ListenableFuture<CustomizationSection> getCustomizationSection(@EndpointParam URI templateURI);
|
||||||
|
|
||||||
/**
|
|
||||||
* @see VAppTemplateApi#modifyCustomizationSection(URI, CustomizationSection)
|
|
||||||
*/
|
|
||||||
@PUT
|
|
||||||
@Produces(CUSTOMIZATION_SECTION)
|
|
||||||
@Consumes(TASK)
|
|
||||||
@Path("/customizationSection")
|
|
||||||
@JAXBResponseParser
|
|
||||||
ListenableFuture<Task> modifyCustomizationSection(@EndpointParam URI templateURI,
|
|
||||||
@BinderParam(BindToXMLPayload.class) CustomizationSection sectionType);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see VAppTemplateApi#getGuestCustomizationSection(URI)
|
* @see VAppTemplateApi#getGuestCustomizationSection(URI)
|
||||||
*/
|
*/
|
||||||
|
@ -220,17 +209,6 @@ public interface VAppTemplateAsyncApi {
|
||||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||||
ListenableFuture<NetworkConfigSection> getNetworkConfigSection(@EndpointParam URI templateURI);
|
ListenableFuture<NetworkConfigSection> getNetworkConfigSection(@EndpointParam URI templateURI);
|
||||||
|
|
||||||
/**
|
|
||||||
* @see VAppTemplateApi#modifyNetworkConfigSection(URI, NetworkConfigSection)
|
|
||||||
*/
|
|
||||||
@PUT
|
|
||||||
@Produces(NETWORK_CONFIG_SECTION)
|
|
||||||
@Consumes(TASK)
|
|
||||||
@Path("/networkConfigSection")
|
|
||||||
@JAXBResponseParser
|
|
||||||
ListenableFuture<Task> modifyNetworkConfigSection(@EndpointParam URI templateURI,
|
|
||||||
@BinderParam(BindToXMLPayload.class) NetworkConfigSection section);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see VAppTemplateApi#getNetworkConnectionSection(URI)
|
* @see VAppTemplateApi#getNetworkConnectionSection(URI)
|
||||||
*/
|
*/
|
||||||
|
@ -241,17 +219,6 @@ public interface VAppTemplateAsyncApi {
|
||||||
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
|
||||||
ListenableFuture<NetworkConnectionSection> getVAppTemplateNetworkConnectionSection(@EndpointParam URI templateURI);
|
ListenableFuture<NetworkConnectionSection> getVAppTemplateNetworkConnectionSection(@EndpointParam URI templateURI);
|
||||||
|
|
||||||
/**
|
|
||||||
* @see VAppTemplateApi#modifyNetworkConnectionSection(URI, NetworkConnectionSection)
|
|
||||||
*/
|
|
||||||
@PUT
|
|
||||||
@Produces(NETWORK_CONNECTION_SECTION)
|
|
||||||
@Consumes(TASK)
|
|
||||||
@Path("/networkConnectionSection")
|
|
||||||
@JAXBResponseParser
|
|
||||||
ListenableFuture<Task> modifyNetworkConnectionSection(@EndpointParam URI templateURI,
|
|
||||||
@BinderParam(BindToXMLPayload.class) NetworkConnectionSection section);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see VAppTemplateApi#getNetworkSection(URI)
|
* @see VAppTemplateApi#getNetworkSection(URI)
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -47,6 +47,7 @@ import org.jclouds.vcloud.director.v1_5.domain.VAppTemplate;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.Vdc;
|
import org.jclouds.vcloud.director.v1_5.domain.Vdc;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.Vm;
|
import org.jclouds.vcloud.director.v1_5.domain.Vm;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.dmtf.RasdItem;
|
import org.jclouds.vcloud.director.v1_5.domain.dmtf.RasdItem;
|
||||||
|
import org.jclouds.vcloud.director.v1_5.domain.params.UndeployVAppParams;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.section.GuestCustomizationSection;
|
import org.jclouds.vcloud.director.v1_5.domain.section.GuestCustomizationSection;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.section.NetworkConnectionSection;
|
import org.jclouds.vcloud.director.v1_5.domain.section.NetworkConnectionSection;
|
||||||
import org.jclouds.vcloud.director.v1_5.features.CatalogApi;
|
import org.jclouds.vcloud.director.v1_5.features.CatalogApi;
|
||||||
|
@ -112,7 +113,6 @@ public abstract class AbstractVAppApiLiveTest extends BaseVCloudDirectorApiLiveT
|
||||||
* @see BaseVCloudDirectorApiLiveTest#setupRequiredApis()
|
* @see BaseVCloudDirectorApiLiveTest#setupRequiredApis()
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
@BeforeClass(alwaysRun = true, description = "Retrieves the required apis from the REST API context")
|
|
||||||
protected void setupRequiredApis() {
|
protected void setupRequiredApis() {
|
||||||
assertNotNull(context.getApi());
|
assertNotNull(context.getApi());
|
||||||
|
|
||||||
|
@ -122,14 +122,13 @@ public abstract class AbstractVAppApiLiveTest extends BaseVCloudDirectorApiLiveT
|
||||||
vAppTemplateApi = context.getApi().getVAppTemplateApi();
|
vAppTemplateApi = context.getApi().getVAppTemplateApi();
|
||||||
vdcApi = context.getApi().getVdcApi();
|
vdcApi = context.getApi().getVdcApi();
|
||||||
vmApi = context.getApi().getVmApi();
|
vmApi = context.getApi().getVmApi();
|
||||||
|
|
||||||
setupEnvironment();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets up the environment. Retrieves the test {@link Vdc} and {@link VAppTemplate} from their
|
* Sets up the environment. Retrieves the test {@link Vdc} and {@link VAppTemplate} from their
|
||||||
* configured {@link URI}s. Instantiates a new test VApp.
|
* configured {@link URI}s. Instantiates a new test VApp.
|
||||||
*/
|
*/
|
||||||
|
@BeforeClass(alwaysRun = true, description = "Retrieves the required apis from the REST API context")
|
||||||
protected void setupEnvironment() {
|
protected void setupEnvironment() {
|
||||||
// Get the configured Vdc for the tests
|
// Get the configured Vdc for the tests
|
||||||
vdc = vdcApi.getVdc(vdcURI);
|
vdc = vdcApi.getVdc(vdcURI);
|
||||||
|
@ -295,9 +294,10 @@ public abstract class AbstractVAppApiLiveTest extends BaseVCloudDirectorApiLiveT
|
||||||
protected Vm powerOffVm(final URI testVmURI) {
|
protected Vm powerOffVm(final URI testVmURI) {
|
||||||
Vm test = vmApi.getVm(testVmURI);
|
Vm test = vmApi.getVm(testVmURI);
|
||||||
Status status = test.getStatus();
|
Status status = test.getStatus();
|
||||||
if (status != Status.POWERED_OFF) {
|
if (status != Status.POWERED_OFF || test.isDeployed()) {
|
||||||
Task powerOff = vmApi.powerOff(vm.getHref());
|
UndeployVAppParams undeployParams = UndeployVAppParams.builder().build();
|
||||||
assertTaskSucceedsLong(powerOff);
|
Task shutdownVapp = vAppApi.undeploy(test.getHref(), undeployParams);
|
||||||
|
assertTaskSucceedsLong(shutdownVapp);
|
||||||
}
|
}
|
||||||
test = vmApi.getVm(testVmURI);
|
test = vmApi.getVm(testVmURI);
|
||||||
assertStatus(VM, test, Status.POWERED_OFF);
|
assertStatus(VM, test, Status.POWERED_OFF);
|
||||||
|
|
|
@ -103,7 +103,7 @@ public class VAppApiLiveTest extends AbstractVAppApiLiveTest {
|
||||||
private boolean mediaCreated = false;
|
private boolean mediaCreated = false;
|
||||||
private boolean testUserCreated = false;
|
private boolean testUserCreated = false;
|
||||||
|
|
||||||
@BeforeClass(alwaysRun = true, dependsOnMethods = { "setupRequiredApis" })
|
@BeforeClass(alwaysRun = true)
|
||||||
protected void setupRequiredEntities() {
|
protected void setupRequiredEntities() {
|
||||||
Set<Link> links = vdcApi.getVdc(vdcURI).getLinks();
|
Set<Link> links = vdcApi.getVdc(vdcURI).getLinks();
|
||||||
|
|
||||||
|
|
|
@ -49,24 +49,10 @@ import org.jclouds.vcloud.director.v1_5.domain.Owner;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.Reference;
|
import org.jclouds.vcloud.director.v1_5.domain.Reference;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.Task;
|
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.VAppTemplate;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.network.FirewallRule;
|
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.network.FirewallRuleProtocols;
|
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.network.FirewallService;
|
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.network.IpRange;
|
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.network.IpRanges;
|
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.network.IpScope;
|
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.network.NatOneToOneVmRule;
|
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.network.NatRule;
|
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.network.NatService;
|
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.network.Network.FenceMode;
|
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.network.NetworkConfiguration;
|
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.network.NetworkFeatures;
|
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.network.VAppNetworkConfiguration;
|
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.params.RelocateParams;
|
import org.jclouds.vcloud.director.v1_5.domain.params.RelocateParams;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.section.CustomizationSection;
|
import org.jclouds.vcloud.director.v1_5.domain.section.CustomizationSection;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.section.GuestCustomizationSection;
|
import org.jclouds.vcloud.director.v1_5.domain.section.GuestCustomizationSection;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.section.LeaseSettingsSection;
|
import org.jclouds.vcloud.director.v1_5.domain.section.LeaseSettingsSection;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.section.NetworkConfigSection;
|
|
||||||
import org.jclouds.vcloud.director.v1_5.internal.VCloudDirectorAdminApiExpectTest;
|
import org.jclouds.vcloud.director.v1_5.internal.VCloudDirectorAdminApiExpectTest;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
|
@ -256,27 +242,6 @@ public class VAppTemplateApiExpectTest extends VCloudDirectorAdminApiExpectTest
|
||||||
api.relocateVm(uri, params);
|
api.relocateVm(uri, params);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testCustomizationSection() {
|
|
||||||
final String templateId = "/vAppTemplate/vappTemplate-ef4415e6-d413-4cbb-9262-f9bbec5f2ea9";
|
|
||||||
URI uri = URI.create(endpoint + templateId);
|
|
||||||
|
|
||||||
VAppTemplateApi api = orderedRequestsSendResponses(loginRequest, sessionResponse,
|
|
||||||
new VcloudHttpRequestPrimer().apiCommand("GET", templateId + "/customizationSection").acceptMedia(CUSTOMIZATION_SECTION).httpRequestBuilder().build(),
|
|
||||||
new VcloudHttpResponsePrimer().xmlFilePayload("/vapptemplate/customizationSection.xml", CUSTOMIZATION_SECTION).httpResponseBuilder().build(),
|
|
||||||
new VcloudHttpRequestPrimer().apiCommand("PUT", templateId + "/customizationSection").xmlFilePayload("/vapptemplate/customizationSection.xml", CUSTOMIZATION_SECTION).acceptMedia(TASK).httpRequestBuilder().build(),
|
|
||||||
new VcloudHttpResponsePrimer().xmlFilePayload("/task/task.xml", TASK).httpResponseBuilder().build()
|
|
||||||
).getVAppTemplateApi();
|
|
||||||
|
|
||||||
assertNotNull(api);
|
|
||||||
CustomizationSection section = api.getCustomizationSection(uri);
|
|
||||||
|
|
||||||
assertEquals(section, exampleCustomizationSection());
|
|
||||||
|
|
||||||
Task task = api.modifyCustomizationSection(uri, exampleCustomizationSection());
|
|
||||||
assertNotNull(task);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testErrorGetCustomizationSection() {
|
public void testErrorGetCustomizationSection() {
|
||||||
final String templateId = "/vAppTemplate/vappTemplate-ef4415e6-d413-4cbb-9262-f9bbec5f2ea9";
|
final String templateId = "/vAppTemplate/vappTemplate-ef4415e6-d413-4cbb-9262-f9bbec5f2ea9";
|
||||||
URI uri = URI.create(endpoint + templateId);
|
URI uri = URI.create(endpoint + templateId);
|
||||||
|
@ -288,18 +253,6 @@ public class VAppTemplateApiExpectTest extends VCloudDirectorAdminApiExpectTest
|
||||||
assertNull(api.getCustomizationSection(uri));
|
assertNull(api.getCustomizationSection(uri));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expectedExceptions = ResourceNotFoundException.class)
|
|
||||||
public void testErrorEditCustomizationSection() {
|
|
||||||
final String templateId = "/vAppTemplate/vappTemplate-ef4415e6-d413-4cbb-9262-f9bbec5f2ea9";
|
|
||||||
URI uri = URI.create(endpoint + templateId);
|
|
||||||
|
|
||||||
VAppTemplateApi api = orderedRequestsSendResponses(loginRequest, sessionResponse,
|
|
||||||
new VcloudHttpRequestPrimer().apiCommand("PUT", templateId + "/customizationSection").xmlFilePayload("/vapptemplate/customizationSection.xml", CUSTOMIZATION_SECTION).acceptMedia(TASK).httpRequestBuilder().build(),
|
|
||||||
new VcloudHttpResponsePrimer().xmlFilePayload("/vapptemplate/error403.xml", ERROR).httpResponseBuilder().statusCode(403).build()).getVAppTemplateApi();
|
|
||||||
|
|
||||||
api.modifyCustomizationSection(uri, exampleCustomizationSection());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testGuestCustomizationSection() {
|
public void testGuestCustomizationSection() {
|
||||||
final String templateId = "/vAppTemplate/vappTemplate-ef4415e6-d413-4cbb-9262-f9bbec5f2ea9";
|
final String templateId = "/vAppTemplate/vappTemplate-ef4415e6-d413-4cbb-9262-f9bbec5f2ea9";
|
||||||
URI uri = URI.create(endpoint + templateId);
|
URI uri = URI.create(endpoint + templateId);
|
||||||
|
@ -491,27 +444,6 @@ public class VAppTemplateApiExpectTest extends VCloudDirectorAdminApiExpectTest
|
||||||
api.getMetadataApi().deleteMetadataEntry(uri, "12345");
|
api.getMetadataApi().deleteMetadataEntry(uri, "12345");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testNetworkConfigSection() throws ParseException {
|
|
||||||
final String templateId = "/vAppTemplate/vappTemplate-ef4415e6-d413-4cbb-9262-f9bbec5f2ea9";
|
|
||||||
URI uri = URI.create(endpoint + templateId);
|
|
||||||
|
|
||||||
VAppTemplateApi api = orderedRequestsSendResponses(loginRequest, sessionResponse,
|
|
||||||
new VcloudHttpRequestPrimer().apiCommand("GET", templateId + "/networkConfigSection").acceptMedia(NETWORK_CONFIG_SECTION).httpRequestBuilder().build(),
|
|
||||||
new VcloudHttpResponsePrimer().xmlFilePayload("/vapptemplate/networkConfigSection.xml", NETWORK_CONFIG_SECTION).httpResponseBuilder().build(),
|
|
||||||
new VcloudHttpRequestPrimer().apiCommand("PUT", templateId + "/networkConfigSection").xmlFilePayload("/vapptemplate/networkConfigSection.xml", NETWORK_CONFIG_SECTION).acceptMedia(TASK).httpRequestBuilder().build(),
|
|
||||||
new VcloudHttpResponsePrimer().xmlFilePayload("/task/task.xml", TASK).httpResponseBuilder().build()
|
|
||||||
).getVAppTemplateApi();
|
|
||||||
|
|
||||||
assertNotNull(api);
|
|
||||||
|
|
||||||
NetworkConfigSection section = api.getNetworkConfigSection(uri);
|
|
||||||
|
|
||||||
assertEquals(section, exampleNetworkConfigSection());
|
|
||||||
|
|
||||||
Task task = api.modifyNetworkConfigSection(uri, exampleNetworkConfigSection());
|
|
||||||
assertNotNull(task);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test(expectedExceptions = VCloudDirectorException.class)
|
@Test(expectedExceptions = VCloudDirectorException.class)
|
||||||
public void testErrorGetNetworkConfigSection() {
|
public void testErrorGetNetworkConfigSection() {
|
||||||
final String templateId = "/vAppTemplate/vappTemplate-ef4415e6-d413-4cbb-9262-f9bbec5f2ea9";
|
final String templateId = "/vAppTemplate/vappTemplate-ef4415e6-d413-4cbb-9262-f9bbec5f2ea9";
|
||||||
|
@ -524,18 +456,6 @@ public class VAppTemplateApiExpectTest extends VCloudDirectorAdminApiExpectTest
|
||||||
api.getNetworkConfigSection(uri);
|
api.getNetworkConfigSection(uri);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(expectedExceptions = VCloudDirectorException.class)
|
|
||||||
public void testErrorEditNetworkConfigSection() throws ParseException {
|
|
||||||
final String templateId = "/vAppTemplate/vappTemplate-ef4415e6-d413-4cbb-9262-f9bbec5f2ea9";
|
|
||||||
URI uri = URI.create(endpoint + templateId);
|
|
||||||
|
|
||||||
VAppTemplateApi api = orderedRequestsSendResponses(loginRequest, sessionResponse,
|
|
||||||
new VcloudHttpRequestPrimer().apiCommand("PUT", templateId + "/networkConfigSection").xmlFilePayload("/vapptemplate/networkConfigSection.xml", NETWORK_CONFIG_SECTION).acceptMedia(TASK).httpRequestBuilder().build(),
|
|
||||||
new VcloudHttpResponsePrimer().xmlFilePayload("/vapptemplate/error400.xml", ERROR).httpResponseBuilder().statusCode(400).build()).getVAppTemplateApi();
|
|
||||||
|
|
||||||
api.modifyNetworkConfigSection(uri, exampleNetworkConfigSection());
|
|
||||||
}
|
|
||||||
|
|
||||||
private VAppTemplate exampleTemplate() {
|
private VAppTemplate exampleTemplate() {
|
||||||
Link aLink = Link.builder().href(URI.create("https://vcloudbeta.bluelock.com/api/vdc/d16d333b-e3c0-4176-845d-a5ee6392df07"))
|
Link aLink = Link.builder().href(URI.create("https://vcloudbeta.bluelock.com/api/vdc/d16d333b-e3c0-4176-845d-a5ee6392df07"))
|
||||||
.type("application/vnd.vmware.vcloud.vdc+xml").rel("up").build();
|
.type("application/vnd.vmware.vcloud.vdc+xml").rel("up").build();
|
||||||
|
@ -575,20 +495,6 @@ public class VAppTemplateApiExpectTest extends VCloudDirectorAdminApiExpectTest
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
private CustomizationSection exampleCustomizationSection() {
|
|
||||||
return CustomizationSection.builder()
|
|
||||||
.links(ImmutableSet.of(
|
|
||||||
Link.builder().href(URI.create("https://vcloudbeta.bluelock.com/api/vAppTemplate/vappTemplate-ef4415e6-d413-4cbb-9262-f9bbec5f2ea9/customizationSection/"))
|
|
||||||
.type("application/vnd.vmware.vcloud.customizationSection+xml").rel("edit").build()
|
|
||||||
))
|
|
||||||
.type("application/vnd.vmware.vcloud.customizationSection+xml")
|
|
||||||
.info("VApp template customization section")
|
|
||||||
.customizeOnInstantiate(true)
|
|
||||||
.href(URI.create("https://vcloudbeta.bluelock.com/api/vAppTemplate/vappTemplate-ef4415e6-d413-4cbb-9262-f9bbec5f2ea9/customizationSection/"))
|
|
||||||
.required(false)
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
private GuestCustomizationSection exampleGuestCustomizationSection() {
|
private GuestCustomizationSection exampleGuestCustomizationSection() {
|
||||||
return GuestCustomizationSection.builder()
|
return GuestCustomizationSection.builder()
|
||||||
.links(ImmutableSet.of(
|
.links(ImmutableSet.of(
|
||||||
|
@ -640,59 +546,4 @@ public class VAppTemplateApiExpectTest extends VCloudDirectorAdminApiExpectTest
|
||||||
return MetadataValue.builder().value("some value").build();
|
return MetadataValue.builder().value("some value").build();
|
||||||
}
|
}
|
||||||
|
|
||||||
private NetworkConfigSection exampleNetworkConfigSection() throws ParseException {
|
|
||||||
|
|
||||||
FirewallService firewallService =
|
|
||||||
FirewallService.builder()
|
|
||||||
.enabled(true)
|
|
||||||
.firewallRules(
|
|
||||||
ImmutableSet.of(
|
|
||||||
FirewallRule.builder()
|
|
||||||
.isEnabled(true)
|
|
||||||
.description("FTP Rule")
|
|
||||||
.policy("allow")
|
|
||||||
.protocols(FirewallRuleProtocols.builder().tcp(true).build())
|
|
||||||
.port(21)
|
|
||||||
.destinationIp("10.147.115.1")
|
|
||||||
.build(),
|
|
||||||
FirewallRule.builder()
|
|
||||||
.isEnabled(true)
|
|
||||||
.description("SSH Rule")
|
|
||||||
.policy("allow")
|
|
||||||
.protocols(FirewallRuleProtocols.builder().tcp(true).build())
|
|
||||||
.port(22)
|
|
||||||
.destinationIp("10.147.115.1")
|
|
||||||
.build())).build();
|
|
||||||
|
|
||||||
NatService natService = NatService.builder().enabled(true).natType("ipTranslation").policy("allowTraffic")
|
|
||||||
.natRules(ImmutableSet.of(NatRule.builder().oneToOneVmRule(
|
|
||||||
NatOneToOneVmRule.builder().mappingMode("manual").externalIpAddress("64.100.10.1").vAppScopedVmId("20ea086f-1a6a-4fb2-8e2e-23372facf7de").vmNicId(0).build()).build()
|
|
||||||
)).build();
|
|
||||||
|
|
||||||
NetworkConfiguration networkConfiguration = NetworkConfiguration.builder().ipScope(
|
|
||||||
IpScope.builder()
|
|
||||||
.isInherited(false)
|
|
||||||
.gateway("10.147.56.253")
|
|
||||||
.netmask("255.255.255.0")
|
|
||||||
.dns1("10.147.115.1")
|
|
||||||
.dns2("10.147.115.2")
|
|
||||||
.dnsSuffix("example.com")
|
|
||||||
.ipRanges(IpRanges.builder().ipRange(IpRange.builder().startAddress("10.147.56.1").endAddress("10.147.56.1").build()).build())
|
|
||||||
.build())
|
|
||||||
.parentNetwork(Reference.builder().href(URI.create("http://vcloud.example.com/api/v1.0/network/54")).type("application/vnd.vmware.vcloud.network+xml").name("Internet").build())
|
|
||||||
.fenceMode(FenceMode.NAT_ROUTED)
|
|
||||||
.features(NetworkFeatures.builder().services(ImmutableSet.of(firewallService, natService)).build())
|
|
||||||
.build();
|
|
||||||
|
|
||||||
return NetworkConfigSection.builder()
|
|
||||||
.info("Configuration parameters for logical networks")
|
|
||||||
.networkConfigs(
|
|
||||||
ImmutableSet.of(
|
|
||||||
VAppNetworkConfiguration.builder()
|
|
||||||
.networkName("vAppNetwork")
|
|
||||||
.configuration(
|
|
||||||
networkConfiguration
|
|
||||||
).build()
|
|
||||||
)).build();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,6 @@ import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkMetadataFor;
|
||||||
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkMetadataKeyAbsentFor;
|
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkMetadataKeyAbsentFor;
|
||||||
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkMetadataValue;
|
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkMetadataValue;
|
||||||
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkNetworkConfigSection;
|
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkNetworkConfigSection;
|
||||||
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkNetworkConnectionSection;
|
|
||||||
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkOvfEnvelope;
|
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkOvfEnvelope;
|
||||||
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkOvfNetworkSection;
|
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkOvfNetworkSection;
|
||||||
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkOwner;
|
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkOwner;
|
||||||
|
@ -60,8 +59,6 @@ import org.jclouds.vcloud.director.v1_5.domain.References;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.Task;
|
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.VAppTemplate;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.dmtf.Envelope;
|
import org.jclouds.vcloud.director.v1_5.domain.dmtf.Envelope;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.network.NetworkConnection;
|
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.network.NetworkConnection.IpAddressAllocationMode;
|
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.params.CloneVAppTemplateParams;
|
import org.jclouds.vcloud.director.v1_5.domain.params.CloneVAppTemplateParams;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.params.RelocateParams;
|
import org.jclouds.vcloud.director.v1_5.domain.params.RelocateParams;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.section.CustomizationSection;
|
import org.jclouds.vcloud.director.v1_5.domain.section.CustomizationSection;
|
||||||
|
@ -102,10 +99,11 @@ public class VAppTemplateApiLiveTest extends AbstractVAppApiLiveTest {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME cloneVAppTemplate is giving back 500 error
|
|
||||||
private VAppTemplate cloneVAppTemplate(boolean waitForTask) throws Exception {
|
private VAppTemplate cloneVAppTemplate(boolean waitForTask) throws Exception {
|
||||||
CloneVAppTemplateParams cloneVAppTemplateParams = CloneVAppTemplateParams.builder()
|
CloneVAppTemplateParams cloneVAppTemplateParams = CloneVAppTemplateParams.builder()
|
||||||
.source(Reference.builder().href(vAppTemplateURI).build())
|
.source(Reference.builder().href(vAppTemplateURI).build())
|
||||||
|
.isSourceDelete(false)
|
||||||
|
.name("clone")
|
||||||
.build();
|
.build();
|
||||||
VAppTemplate clonedVappTemplate = vdcApi.cloneVAppTemplate(vdcURI, cloneVAppTemplateParams);
|
VAppTemplate clonedVappTemplate = vdcApi.cloneVAppTemplate(vdcURI, cloneVAppTemplateParams);
|
||||||
|
|
||||||
|
@ -114,7 +112,6 @@ public class VAppTemplateApiLiveTest extends AbstractVAppApiLiveTest {
|
||||||
assertNotNull(cloneTask, "vdcApi.cloneVAppTemplate returned VAppTemplate that did not contain any tasks");
|
assertNotNull(cloneTask, "vdcApi.cloneVAppTemplate returned VAppTemplate that did not contain any tasks");
|
||||||
assertTaskSucceeds(cloneTask);
|
assertTaskSucceeds(cloneTask);
|
||||||
}
|
}
|
||||||
|
|
||||||
return clonedVappTemplate;
|
return clonedVappTemplate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -306,34 +303,15 @@ public class VAppTemplateApiLiveTest extends AbstractVAppApiLiveTest {
|
||||||
assertEquals(modified.getComputerName(), computerName);
|
assertEquals(modified.getComputerName(), computerName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(description = "PUT /vAppTemplate/{id}/customizationSection")
|
// NOTE vAppTemplate supports only storageLease (deployment lease applies to vApp too)
|
||||||
public void testEditCustomizationSection() {
|
|
||||||
boolean oldVal = vAppTemplateApi.getCustomizationSection(vAppTemplateURI).isCustomizeOnInstantiate();
|
|
||||||
boolean newVal = !oldVal;
|
|
||||||
|
|
||||||
CustomizationSection customizationSection = CustomizationSection.builder()
|
|
||||||
.info("")
|
|
||||||
.customizeOnInstantiate(newVal)
|
|
||||||
.build();
|
|
||||||
|
|
||||||
final Task task = vAppTemplateApi.modifyCustomizationSection(vAppTemplateURI, customizationSection);
|
|
||||||
assertTaskSucceeds(task);
|
|
||||||
|
|
||||||
CustomizationSection newCustomizationSection = vAppTemplateApi.getCustomizationSection(vAppTemplateURI);
|
|
||||||
assertEquals(newCustomizationSection.isCustomizeOnInstantiate(), newVal);
|
|
||||||
}
|
|
||||||
|
|
||||||
// FIXME deploymentLeaseInSeconds returned is null
|
|
||||||
@Test(description = "PUT /vAppTemplate/{id}/leaseSettingsSection")
|
@Test(description = "PUT /vAppTemplate/{id}/leaseSettingsSection")
|
||||||
public void testEditLeaseSettingsSection() throws Exception {
|
public void testEditLeaseSettingsSection() throws Exception {
|
||||||
int deploymentLeaseInSeconds = random.nextInt(10000)+1;
|
|
||||||
// NOTE use smallish number for storageLeaseInSeconds; it seems to be capped at 5184000?
|
// NOTE use smallish number for storageLeaseInSeconds; it seems to be capped at 5184000?
|
||||||
int storageLeaseInSeconds = random.nextInt(10000)+1;
|
int storageLeaseInSeconds = random.nextInt(10000)+1;
|
||||||
|
|
||||||
LeaseSettingsSection leaseSettingSection = LeaseSettingsSection.builder()
|
LeaseSettingsSection leaseSettingSection = LeaseSettingsSection.builder()
|
||||||
.info("my info")
|
.info("my info")
|
||||||
.storageLeaseInSeconds(storageLeaseInSeconds)
|
.storageLeaseInSeconds(storageLeaseInSeconds)
|
||||||
.deploymentLeaseInSeconds(deploymentLeaseInSeconds)
|
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
final Task task = vAppTemplateApi.modifyLeaseSettingsSection(vAppTemplateURI, leaseSettingSection);
|
final Task task = vAppTemplateApi.modifyLeaseSettingsSection(vAppTemplateURI, leaseSettingSection);
|
||||||
|
@ -341,65 +319,8 @@ public class VAppTemplateApiLiveTest extends AbstractVAppApiLiveTest {
|
||||||
|
|
||||||
LeaseSettingsSection newLeaseSettingsSection = vAppTemplateApi.getLeaseSettingsSection(vAppTemplateURI);
|
LeaseSettingsSection newLeaseSettingsSection = vAppTemplateApi.getLeaseSettingsSection(vAppTemplateURI);
|
||||||
assertEquals(newLeaseSettingsSection.getStorageLeaseInSeconds(), (Integer) storageLeaseInSeconds);
|
assertEquals(newLeaseSettingsSection.getStorageLeaseInSeconds(), (Integer) storageLeaseInSeconds);
|
||||||
assertEquals(newLeaseSettingsSection.getDeploymentLeaseInSeconds(), (Integer) deploymentLeaseInSeconds);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(description = "PUT /vAppTemplate/{id}/networkConfigSection")
|
|
||||||
public void testEditNetworkConfigSection() {
|
|
||||||
// TODO What to modify?
|
|
||||||
|
|
||||||
NetworkConfigSection oldSection = vAppTemplateApi.getNetworkConfigSection(vApp.getHref());
|
|
||||||
NetworkConfigSection newSection = oldSection.toBuilder().build();
|
|
||||||
|
|
||||||
// String networkName = ""+random.nextInt();
|
|
||||||
// NetworkConfiguration networkConfiguration = NetworkConfiguration.builder()
|
|
||||||
// .fenceMode("isolated")
|
|
||||||
// .build();
|
|
||||||
// VAppNetworkConfiguration vappNetworkConfiguration = VAppNetworkConfiguration.builder()
|
|
||||||
// .networkName(networkName)
|
|
||||||
// .configuration(networkConfiguration)
|
|
||||||
// .build();
|
|
||||||
// Set<VAppNetworkConfiguration> vappNetworkConfigurations = ImmutableSet.of(vappNetworkConfiguration);
|
|
||||||
// NetworkConfigSection networkConfigSection = NetworkConfigSection.builder()
|
|
||||||
// .info("my info")
|
|
||||||
// .networkConfigs(vappNetworkConfigurations)
|
|
||||||
// .build();
|
|
||||||
|
|
||||||
final Task task = vAppTemplateApi.modifyNetworkConfigSection(vApp.getHref(), newSection);
|
|
||||||
assertTaskSucceeds(task);
|
|
||||||
|
|
||||||
NetworkConfigSection modified = vAppTemplateApi.getNetworkConfigSection(vAppTemplateURI);
|
|
||||||
checkNetworkConfigSection(modified);
|
|
||||||
|
|
||||||
// assertEquals(modified§.getNetworkConfigs().size(), 1);
|
|
||||||
//
|
|
||||||
// VAppNetworkConfiguration newVAppNetworkConfig = Iterables.get(modified§.getNetworkConfigs(), 0);
|
|
||||||
// assertEquals(newVAppNetworkConfig.getNetworkName(), networkName);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test(description = "PUT /vAppTemplate/{id}/networkConnectionSection")
|
|
||||||
public void testEditNetworkConnectionSection() {
|
|
||||||
// Look up a network in the Vdc
|
|
||||||
Set<Reference> networks = vdc.getAvailableNetworks();
|
|
||||||
Reference network = Iterables.getLast(networks);
|
|
||||||
|
|
||||||
// Copy existing section and update fields
|
|
||||||
NetworkConnectionSection oldSection = vAppTemplateApi.getNetworkConnectionSection(vm.getHref());
|
|
||||||
NetworkConnectionSection newSection = oldSection.toBuilder()
|
|
||||||
.networkConnection(NetworkConnection.builder()
|
|
||||||
.ipAddressAllocationMode(IpAddressAllocationMode.DHCP.toString())
|
|
||||||
.network(network.getName())
|
|
||||||
.build())
|
|
||||||
.build();
|
|
||||||
|
|
||||||
Task task = vAppTemplateApi.modifyNetworkConnectionSection(vm.getHref(), newSection);
|
|
||||||
assertTaskSucceeds(task);
|
|
||||||
|
|
||||||
NetworkConnectionSection modified = vAppTemplateApi.getNetworkConnectionSection(vm.getHref());
|
|
||||||
checkNetworkConnectionSection(modified);
|
|
||||||
}
|
|
||||||
|
|
||||||
// FIXME cloneVAppTemplate is giving back 500 error
|
|
||||||
@Test(description = "DELETE /vAppTemplate/{id}", dependsOnMethods = { "testGetVAppTemplate" })
|
@Test(description = "DELETE /vAppTemplate/{id}", dependsOnMethods = { "testGetVAppTemplate" })
|
||||||
public void testDeleteVAppTemplate() throws Exception {
|
public void testDeleteVAppTemplate() throws Exception {
|
||||||
VAppTemplate clonedVappTemplate = cloneVAppTemplate(true);
|
VAppTemplate clonedVappTemplate = cloneVAppTemplate(true);
|
||||||
|
|
|
@ -121,7 +121,7 @@ public class VmApiLiveTest extends AbstractVAppApiLiveTest {
|
||||||
private boolean mediaCreated = false;
|
private boolean mediaCreated = false;
|
||||||
private boolean testUserCreated = false;
|
private boolean testUserCreated = false;
|
||||||
|
|
||||||
@BeforeClass(alwaysRun = true, dependsOnMethods = { "setupRequiredApis" })
|
@BeforeClass(alwaysRun = true)
|
||||||
protected void setupRequiredEntities() {
|
protected void setupRequiredEntities() {
|
||||||
Set<Link> links = vdcApi.getVdc(vdcURI).getLinks();
|
Set<Link> links = vdcApi.getVdc(vdcURI).getLinks();
|
||||||
|
|
||||||
|
@ -280,23 +280,20 @@ public class VmApiLiveTest extends AbstractVAppApiLiveTest {
|
||||||
assertVmStatus(vmURI, Status.POWERED_OFF);
|
assertVmStatus(vmURI, Status.POWERED_OFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(description = "POST /vApp/{id}/power/action/shutdown", dependsOnMethods = { "testDeployVm" })
|
@Test(description = "POST /vApp/{id}/power/action/shutdown", dependsOnMethods = { "testInstallVMwareTools" })
|
||||||
public void testShutdown() {
|
public void testShutdown() {
|
||||||
// Power on Vm
|
// Power on Vm
|
||||||
vm = powerOnVm(vm.getHref());
|
vm = powerOnVm(vm.getHref());
|
||||||
|
|
||||||
// The method under test
|
// The method under test
|
||||||
Task shutdown = vmApi.shutdown(vmURI);
|
Task shutdown = vmApi.shutdown(vm.getHref());
|
||||||
assertTaskSucceedsLong(shutdown);
|
assertTaskSucceedsLong(shutdown);
|
||||||
|
|
||||||
// Get the updated Vm
|
// Get the updated Vm
|
||||||
vm = vmApi.getVm(vmURI);
|
vm = vmApi.getVm(vm.getHref());
|
||||||
|
|
||||||
// Check status
|
// Check status
|
||||||
assertVmStatus(vmURI, Status.POWERED_OFF);
|
assertVmStatus(vm.getHref(), Status.POWERED_OFF);
|
||||||
|
|
||||||
// Power on the Vm again
|
|
||||||
vm = powerOnVm(vm.getHref());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(description = "POST /vApp/{id}/power/action/suspend", dependsOnMethods = { "testDeployVm" })
|
@Test(description = "POST /vApp/{id}/power/action/suspend", dependsOnMethods = { "testDeployVm" })
|
||||||
|
@ -359,6 +356,7 @@ public class VmApiLiveTest extends AbstractVAppApiLiveTest {
|
||||||
vm = powerOnVm(vm.getHref());
|
vm = powerOnVm(vm.getHref());
|
||||||
|
|
||||||
// The method under test
|
// The method under test
|
||||||
|
// NB this will put the vm in partially powered off state
|
||||||
Task powerOffVm = vmApi.powerOff(vm.getHref());
|
Task powerOffVm = vmApi.powerOff(vm.getHref());
|
||||||
assertTrue(retryTaskSuccess.apply(powerOffVm), String.format(TASK_COMPLETE_TIMELY, "powerOffVm"));
|
assertTrue(retryTaskSuccess.apply(powerOffVm), String.format(TASK_COMPLETE_TIMELY, "powerOffVm"));
|
||||||
|
|
||||||
|
@ -391,7 +389,7 @@ public class VmApiLiveTest extends AbstractVAppApiLiveTest {
|
||||||
|
|
||||||
@Test(description = "POST /vApp/{id}/action/installVMwareTools", dependsOnMethods = { "testDeployVm" })
|
@Test(description = "POST /vApp/{id}/action/installVMwareTools", dependsOnMethods = { "testDeployVm" })
|
||||||
public void testInstallVMwareTools() {
|
public void testInstallVMwareTools() {
|
||||||
// First ensure the vApp is powered n
|
// First ensure the vApp is powered on
|
||||||
vm = powerOnVm(vm.getHref());
|
vm = powerOnVm(vm.getHref());
|
||||||
|
|
||||||
// The method under test
|
// The method under test
|
||||||
|
@ -420,6 +418,9 @@ public class VmApiLiveTest extends AbstractVAppApiLiveTest {
|
||||||
// The method under test
|
// The method under test
|
||||||
Task upgradeHardwareVersion = vmApi.upgradeHardwareVersion(vm.getHref());
|
Task upgradeHardwareVersion = vmApi.upgradeHardwareVersion(vm.getHref());
|
||||||
assertTrue(retryTaskSuccess.apply(upgradeHardwareVersion), String.format(TASK_COMPLETE_TIMELY, "upgradeHardwareVersion"));
|
assertTrue(retryTaskSuccess.apply(upgradeHardwareVersion), String.format(TASK_COMPLETE_TIMELY, "upgradeHardwareVersion"));
|
||||||
|
|
||||||
|
// Power on the Vm again
|
||||||
|
vm = powerOnVm(vm.getHref());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(description = "GET /vApp/{id}/guestCustomizationSection", dependsOnMethods = { "testGetVm" })
|
@Test(description = "GET /vApp/{id}/guestCustomizationSection", dependsOnMethods = { "testGetVm" })
|
||||||
|
@ -438,7 +439,7 @@ public class VmApiLiveTest extends AbstractVAppApiLiveTest {
|
||||||
GuestCustomizationSection oldSection = vmApi.getGuestCustomizationSection(vm.getHref());
|
GuestCustomizationSection oldSection = vmApi.getGuestCustomizationSection(vm.getHref());
|
||||||
GuestCustomizationSection newSection = oldSection.toBuilder()
|
GuestCustomizationSection newSection = oldSection.toBuilder()
|
||||||
.computerName(name("n"))
|
.computerName(name("n"))
|
||||||
.enabled(Boolean.FALSE)
|
.enabled(Boolean.TRUE)
|
||||||
.adminPassword(null) // Not allowed
|
.adminPassword(null) // Not allowed
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
@ -454,7 +455,7 @@ public class VmApiLiveTest extends AbstractVAppApiLiveTest {
|
||||||
|
|
||||||
// Check the modified section fields are set correctly
|
// Check the modified section fields are set correctly
|
||||||
assertEquals(modified.getComputerName(), newSection.getComputerName());
|
assertEquals(modified.getComputerName(), newSection.getComputerName());
|
||||||
assertFalse(modified.isEnabled());
|
assertTrue(modified.isEnabled());
|
||||||
|
|
||||||
// Reset the admin password in the retrieved GuestCustomizationSection for equality check
|
// Reset the admin password in the retrieved GuestCustomizationSection for equality check
|
||||||
modified = modified.toBuilder().adminPassword(null).build();
|
modified = modified.toBuilder().adminPassword(null).build();
|
||||||
|
@ -499,8 +500,9 @@ public class VmApiLiveTest extends AbstractVAppApiLiveTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME "Task error: Unable to perform this action. Contact your cloud administrator."
|
// FIXME "Task error: Unable to perform this action. Contact your cloud administrator."
|
||||||
@Test(description = "PUT /vApp/{id}/networkConnectionSection", dependsOnMethods = { "testGetNetworkConnectionSection" })
|
@Test(description = "PUT /vApp/{id}/networkConnectionSection", dependsOnMethods = { "testModifyGuestCustomizationSection" })
|
||||||
public void testModifyNetworkConnectionSection() {
|
public void testModifyNetworkConnectionSection() {
|
||||||
|
powerOffVm(vm.getHref());
|
||||||
// Look up a network in the Vdc
|
// Look up a network in the Vdc
|
||||||
Set<Reference> networks = vdc.getAvailableNetworks();
|
Set<Reference> networks = vdc.getAvailableNetworks();
|
||||||
Reference network = Iterables.getLast(networks);
|
Reference network = Iterables.getLast(networks);
|
||||||
|
@ -574,6 +576,7 @@ public class VmApiLiveTest extends AbstractVAppApiLiveTest {
|
||||||
|
|
||||||
@Test(description = "PUT /vApp/{id}/productSections", dependsOnMethods = { "testGetProductSections" })
|
@Test(description = "PUT /vApp/{id}/productSections", dependsOnMethods = { "testGetProductSections" })
|
||||||
public void testModifyProductSections() {
|
public void testModifyProductSections() {
|
||||||
|
powerOffVm(vm.getHref());
|
||||||
// Copy existing section and update fields
|
// Copy existing section and update fields
|
||||||
ProductSectionList oldSections = vmApi.getProductSections(vm.getHref());
|
ProductSectionList oldSections = vmApi.getProductSections(vm.getHref());
|
||||||
ProductSectionList newSections = oldSections.toBuilder()
|
ProductSectionList newSections = oldSections.toBuilder()
|
||||||
|
@ -600,7 +603,7 @@ public class VmApiLiveTest extends AbstractVAppApiLiveTest {
|
||||||
assertEquals(modified.getProductSections().size(), oldSections.getProductSections().size() + 1);
|
assertEquals(modified.getProductSections().size(), oldSections.getProductSections().size() + 1);
|
||||||
|
|
||||||
// Check the section was modified correctly
|
// Check the section was modified correctly
|
||||||
assertEquals(modified, newSections, String.format(ENTITY_EQUAL, "ProductSectionList"));
|
assertEquals(modified, newSections);
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME How do we force it to ask a question?
|
// FIXME How do we force it to ask a question?
|
||||||
|
@ -646,7 +649,7 @@ public class VmApiLiveTest extends AbstractVAppApiLiveTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME If still failing, consider escalating?
|
// FIXME If still failing, consider escalating?
|
||||||
@Test(description = "GET /vApp/{id}/screen", dependsOnMethods = { "testDeployVm" })
|
@Test(description = "GET /vApp/{id}/screen", dependsOnMethods = { "testInstallVMwareTools" })
|
||||||
public void testGetScreenImage() {
|
public void testGetScreenImage() {
|
||||||
// Power on Vm
|
// Power on Vm
|
||||||
vm = powerOnVm(vm.getHref());
|
vm = powerOnVm(vm.getHref());
|
||||||
|
@ -933,18 +936,23 @@ public class VmApiLiveTest extends AbstractVAppApiLiveTest {
|
||||||
checkMetadata(metadata);
|
checkMetadata(metadata);
|
||||||
|
|
||||||
// Check requirements for this test
|
// Check requirements for this test
|
||||||
assertFalse(Iterables.isEmpty(metadata.getMetadataEntries()), String.format(NOT_EMPTY_OBJECT_FMT, "MetadataEntry", "vm"));
|
assertTrue(Iterables.isEmpty(metadata.getMetadataEntries()), String.format(NOT_EMPTY_OBJECT_FMT, "MetadataEntry", "vm"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(description = "GET /vApp/{id}/metadata/{key}", dependsOnMethods = { "testGetMetadata" })
|
@Test(description = "GET /vApp/{id}/metadata/{key}", dependsOnMethods = { "testGetMetadata" })
|
||||||
public void testGetOrgMetadataValue() {
|
public void testGetOrgMetadataValue() {
|
||||||
|
key = name("key-");
|
||||||
|
String value = name("value-");
|
||||||
|
metadataValue = MetadataValue.builder().value(value).build();
|
||||||
|
vmApi.getMetadataApi().setMetadata(vm.getHref(), key, metadataValue);
|
||||||
|
|
||||||
// Call the method being tested
|
// Call the method being tested
|
||||||
MetadataValue value = vmApi.getMetadataApi().getMetadataValue(vm.getHref(), key);
|
MetadataValue metadataValue = vmApi.getMetadataApi().getMetadataValue(vm.getHref(), key);
|
||||||
|
|
||||||
String expected = metadataValue.getValue();
|
String expected = metadataValue.getValue();
|
||||||
|
|
||||||
checkMetadataValue(value);
|
checkMetadataValue(metadataValue);
|
||||||
assertEquals(value.getValue(), expected, String.format(CORRECT_VALUE_OBJECT_FMT, "Value", "MetadataValue", expected, value.getValue()));
|
assertEquals(metadataValue.getValue(), expected, String.format(CORRECT_VALUE_OBJECT_FMT, "Value", "MetadataValue", expected, metadataValue.getValue()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(description = "DELETE /vApp/{id}/metadata/{key}", dependsOnMethods = { "testSetMetadataValue" })
|
@Test(description = "DELETE /vApp/{id}/metadata/{key}", dependsOnMethods = { "testSetMetadataValue" })
|
||||||
|
@ -1002,11 +1010,17 @@ public class VmApiLiveTest extends AbstractVAppApiLiveTest {
|
||||||
|
|
||||||
// Get the updated VApp and the Vm
|
// Get the updated VApp and the Vm
|
||||||
delete = vAppApi.getVApp(delete.getHref());
|
delete = vAppApi.getVApp(delete.getHref());
|
||||||
Vm temp = Iterables.getOnlyElement(delete.getChildren().getVms());
|
List<Vm> vms = delete.getChildren().getVms();
|
||||||
|
Vm temp = Iterables.get(vms, 0);
|
||||||
// Power off the Vm
|
|
||||||
temp = powerOffVm(temp.getHref());
|
|
||||||
|
|
||||||
|
// otherwise it's impossible to stop a running vApp with no vms
|
||||||
|
if(vms.size() == 1) {
|
||||||
|
UndeployVAppParams undeployParams = UndeployVAppParams.builder().build();
|
||||||
|
Task shutdownVapp = vAppApi.undeploy(delete.getHref(), undeployParams);
|
||||||
|
assertTaskSucceedsLong(shutdownVapp);
|
||||||
|
} else {
|
||||||
|
powerOffVm(temp.getHref());
|
||||||
|
}
|
||||||
// The method under test
|
// The method under test
|
||||||
Task deleteVm = vmApi.deleteVm(temp.getHref());
|
Task deleteVm = vmApi.deleteVm(temp.getHref());
|
||||||
assertTrue(retryTaskSuccess.apply(deleteVm), String.format(TASK_COMPLETE_TIMELY, "deleteVm"));
|
assertTrue(retryTaskSuccess.apply(deleteVm), String.format(TASK_COMPLETE_TIMELY, "deleteVm"));
|
||||||
|
|
Loading…
Reference in New Issue