From 1b5aa81f00e7405ddcc1b453139db2136d42bda8 Mon Sep 17 00:00:00 2001 From: Aled Sage Date: Thu, 15 Mar 2012 15:15:01 +0000 Subject: [PATCH] Issue #830: more VAppTemplate live test fixes --- .../features/VAppTemplateAsyncClient.java | 3 +- .../v1_5/features/VAppTemplateClient.java | 2 +- .../VAppTemplateClientExpectTest.java | 9 ++-- .../features/VAppTemplateClientLiveTest.java | 52 +++++++++++++++++-- 4 files changed, 54 insertions(+), 12 deletions(-) diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateAsyncClient.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateAsyncClient.java index 73c494985f..8019474210 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateAsyncClient.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateAsyncClient.java @@ -119,11 +119,10 @@ public interface VAppTemplateAsyncClient { * @see VAppTemplateClient#disableDownloadVappTemplate(URI) */ @POST - @Consumes(TASK) @Path("/action/disableDownload") @JAXBResponseParser @ExceptionParser(ThrowVCloudErrorOn4xx.class) - ListenableFuture disableDownloadVappTemplate(@EndpointParam URI templateURI); + ListenableFuture disableDownloadVappTemplate(@EndpointParam URI templateURI); /** * @see VAppTemplateClient#enableDownloadVappTemplate(URI) diff --git a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateClient.java b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateClient.java index a96934335b..b404b81ee1 100644 --- a/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateClient.java +++ b/labs/vcloud-director/src/main/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateClient.java @@ -85,7 +85,7 @@ public interface VAppTemplateClient { * @param templateUri the URI of the template * @return the task performing the action */ - Task disableDownloadVappTemplate(URI templateUri); + void disableDownloadVappTemplate(URI templateUri); /** * Enables downloading of the ovf of a vApp template. diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateClientExpectTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateClientExpectTest.java index 681dcc2b72..215543424d 100644 --- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateClientExpectTest.java +++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateClientExpectTest.java @@ -174,13 +174,12 @@ public class VAppTemplateClientExpectTest extends BaseVCloudDirectorRestClientEx URI uri = URI.create(endpoint + templateId); VAppTemplateClient client = requestsSendResponses(loginRequest, sessionResponse, - new VcloudHttpRequestPrimer().apiCommand("POST", templateId + "/action/disableDownload").acceptMedia(TASK).httpRequestBuilder().build(), - new VcloudHttpResponsePrimer().xmlFilePayload("/task/task.xml", TASK).httpResponseBuilder().build() + new VcloudHttpRequestPrimer().apiCommand("POST", templateId + "/action/disableDownload").httpRequestBuilder().build(), + new VcloudHttpResponsePrimer().httpResponseBuilder().build() ).getVAppTemplateClient(); assertNotNull(client); - Task task = client.disableDownloadVappTemplate(uri); - assertNotNull(task); + client.disableDownloadVappTemplate(uri); } @Test(expectedExceptions = VCloudDirectorException.class) @@ -189,7 +188,7 @@ public class VAppTemplateClientExpectTest extends BaseVCloudDirectorRestClientEx URI uri = URI.create(endpoint + templateId); VAppTemplateClient client = orderedRequestsSendResponses(loginRequest, sessionResponse, - new VcloudHttpRequestPrimer().apiCommand("POST", templateId + "/action/disableDownload").acceptMedia(TASK).httpRequestBuilder().build(), + new VcloudHttpRequestPrimer().apiCommand("POST", templateId + "/action/disableDownload").httpRequestBuilder().build(), new VcloudHttpResponsePrimer().xmlFilePayload("/vapptemplate/error400.xml", ERROR).httpResponseBuilder().statusCode(400).build()).getVAppTemplateClient(); client.disableDownloadVappTemplate(uri); diff --git a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateClientLiveTest.java b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateClientLiveTest.java index c967a82eeb..595357cf4a 100644 --- a/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateClientLiveTest.java +++ b/labs/vcloud-director/src/test/java/org/jclouds/vcloud/director/v1_5/features/VAppTemplateClientLiveTest.java @@ -20,6 +20,8 @@ package org.jclouds.vcloud.director.v1_5.features; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertFalse; +import static org.testng.Assert.assertTrue; +import static org.testng.Assert.fail; import java.net.URI; import java.util.Map; @@ -31,6 +33,7 @@ import org.jclouds.vcloud.director.v1_5.domain.Checks; import org.jclouds.vcloud.director.v1_5.domain.CustomizationSection; 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.Link; import org.jclouds.vcloud.director.v1_5.domain.Metadata; import org.jclouds.vcloud.director.v1_5.domain.MetadataEntry; import org.jclouds.vcloud.director.v1_5.domain.MetadataValue; @@ -316,6 +319,7 @@ public class VAppTemplateClientLiveTest extends BaseVCloudDirectorClientLiveTest .build(); Set vappNetworkConfigurations = ImmutableSet.of(vappNetworkConfiguration); NetworkConfigSection networkConfigSection = NetworkConfigSection.builder() + .info("my info") .networkConfigs(vappNetworkConfigurations) .build(); @@ -363,16 +367,34 @@ public class VAppTemplateClientLiveTest extends BaseVCloudDirectorClientLiveTest @Test public void testDisableVAppTemplateDownload() throws Exception { - // TODO Need assertion that command had effect - final Task task = vappTemplateClient.disableDownloadVappTemplate(vAppTemplateURI); - retryTaskSuccess.apply(task); + vappTemplateClient.disableDownloadVappTemplate(vAppTemplateURI); + + // Assert that "download" link is now not offered + VAppTemplate vAppTemplate = vappTemplateClient.getVAppTemplate(vAppTemplateURI); + Set links = vAppTemplate.getLinks(); + assertFalse(hasLinkMatchingRel(links, "download.*"), "Should not offer download link after disabling download: "+vAppTemplate); } @Test public void testEnableVAppTemplateDownload() throws Exception { - // TODO Need assertion that command had effect + // First disable so that enable really has some work to do... + vappTemplateClient.disableDownloadVappTemplate(vAppTemplateURI); final Task task = vappTemplateClient.enableDownloadVappTemplate(vAppTemplateURI); retryTaskSuccess.apply(task); + + // Assert that "download" link is now offered + VAppTemplate vAppTemplate = vappTemplateClient.getVAppTemplate(vAppTemplateURI); + Set links = vAppTemplate.getLinks(); + assertTrue(hasLinkMatchingRel(links, "download.*"), "Should offer download link after enabling download: "+vAppTemplate); + } + + private boolean hasLinkMatchingRel(Set links, String regex) { + for (Link link : links) { + if (link.getRel() != null && link.getRel().matches(regex)) { + return true; + } + } + return false; } @Test @@ -393,4 +415,26 @@ public class VAppTemplateClientLiveTest extends BaseVCloudDirectorClientLiveTest final Task task = vappTemplateClient.relocateVappTemplate(vAppTemplateURI, relocateParams); retryTaskSuccess.apply(task); } + + @Test + public void testCompletedTaskNotIncludedInVAppTemplate() throws Exception { + // Kick off a task, and wait for it to complete + vappTemplateClient.disableDownloadVappTemplate(vAppTemplateURI); + final Task task = vappTemplateClient.enableDownloadVappTemplate(vAppTemplateURI); + retryTaskSuccess.apply(task); + + // Ask the VAppTemplate for its tasks, and the status of the matching task if it exists + VAppTemplate vAppTemplate = vappTemplateClient.getVAppTemplate(vAppTemplateURI); + Set tasks = vAppTemplate.getTasks(); + if (tasks != null) { + for (Task contender : tasks) { + if (task.getId().equals(contender.getId())) { + String status = contender.getStatus(); + if (status.equals(Task.Status.QUEUED) || status.equals(Task.Status.PRE_RUNNING) || status.equals(Task.Status.RUNNING)) { + fail("Task "+contender+" reported complete, but is included in VAppTemplate in status "+status); + } + } + } + } + } }