mirror of https://github.com/apache/jclouds.git
Better error checking and logging in test tear down/clean up methods
This commit is contained in:
parent
98a89aa68d
commit
b786178a90
|
@ -18,6 +18,8 @@
|
||||||
*/
|
*/
|
||||||
package org.jclouds.vcloud.director.v1_5.predicates;
|
package org.jclouds.vcloud.director.v1_5.predicates;
|
||||||
|
|
||||||
|
import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
@ -34,7 +36,7 @@ import com.google.common.base.Predicate;
|
||||||
import com.google.common.collect.Iterables;
|
import com.google.common.collect.Iterables;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test a {@link Task} to see if it has succeeded.
|
* Test a {@link Task} status is in a particular set of {@link Task.Status statuses}.
|
||||||
*
|
*
|
||||||
* @author grkvlt@apache.org
|
* @author grkvlt@apache.org
|
||||||
*/
|
*/
|
||||||
|
@ -61,6 +63,7 @@ public class TaskStatusEquals implements Predicate<Task> {
|
||||||
/** @see Predicate#apply(Object) */
|
/** @see Predicate#apply(Object) */
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Task task) {
|
public boolean apply(Task task) {
|
||||||
|
checkNotNull(task, "task");
|
||||||
logger.trace("looking for status on task %s", task);
|
logger.trace("looking for status on task %s", task);
|
||||||
|
|
||||||
// TODO shouldn't we see if it's already done before getting it from API server?
|
// TODO shouldn't we see if it's already done before getting it from API server?
|
||||||
|
|
|
@ -18,6 +18,10 @@
|
||||||
*/
|
*/
|
||||||
package org.jclouds.vcloud.director.v1_5.predicates;
|
package org.jclouds.vcloud.director.v1_5.predicates;
|
||||||
|
|
||||||
|
import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
|
|
||||||
|
import java.util.EnumSet;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
|
@ -30,7 +34,7 @@ import org.jclouds.vcloud.director.v1_5.features.TaskClient;
|
||||||
import com.google.common.base.Predicate;
|
import com.google.common.base.Predicate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test a {@link Task} to see if it has succeeded.
|
* Test a {@link Task} to see if it has {@link Task.Status#SUCCESS succeeded}.
|
||||||
*
|
*
|
||||||
* @author grkvlt@apache.org
|
* @author grkvlt@apache.org
|
||||||
*/
|
*/
|
||||||
|
@ -50,21 +54,19 @@ public class TaskSuccess implements Predicate<Task> {
|
||||||
/** @see Predicate#apply(Object) */
|
/** @see Predicate#apply(Object) */
|
||||||
@Override
|
@Override
|
||||||
public boolean apply(Task task) {
|
public boolean apply(Task task) {
|
||||||
logger.trace("looking for status on task %s", task);
|
checkNotNull(task, "task");
|
||||||
|
logger.trace("looking for status on task %s", task.getOperationName());
|
||||||
|
|
||||||
// TODO shouldn't we see if it's already done before getting it from API server?
|
// TODO shouldn't we see if it's already done before getting it from API server?
|
||||||
task = taskClient.getTask(task.getHref());
|
task = taskClient.getTask(task.getHref());
|
||||||
|
|
||||||
// perhaps task isn't available, yet
|
// perhaps task isn't available, yet
|
||||||
if (task == null) return false;
|
if (task == null) return false;
|
||||||
logger.trace("%s: looking for status %s: currently: %s", task, Task.Status.SUCCESS, task.getStatus());
|
|
||||||
if (task.getStatus().equals(Task.Status.ERROR))
|
logger.trace("%s: looking for status %s: currently: %s", task.getOperationName(), Task.Status.SUCCESS, task.getStatus());
|
||||||
|
if (EnumSet.of(Task.Status.ERROR, Task.Status.CANCELED, Task.Status.ABORTED).contains(task.getStatus())) {
|
||||||
throw new VCloudDirectorException(task);
|
throw new VCloudDirectorException(task);
|
||||||
if (task.getStatus().equals(Task.Status.CANCELED))
|
} else return task.getStatus().equals(Task.Status.SUCCESS);
|
||||||
throw new VCloudDirectorException(task);
|
|
||||||
if (task.getStatus().equals(Task.Status.ABORTED))
|
|
||||||
throw new VCloudDirectorException(task);
|
|
||||||
return task.getStatus().equals(Task.Status.SUCCESS);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -582,6 +582,8 @@ public class Checks {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void checkVmPendingQuestion(VmPendingQuestion question) {
|
public static void checkVmPendingQuestion(VmPendingQuestion question) {
|
||||||
|
assertNotNull(question, String.format(NOT_NULL_OBJ_FMT, "VmPendingQuestion"));
|
||||||
|
|
||||||
// Check required fields
|
// Check required fields
|
||||||
assertNotNull(question.getQuestion(), String.format(OBJ_FIELD_REQ, "VmPendingQuestion", "Question"));
|
assertNotNull(question.getQuestion(), String.format(OBJ_FIELD_REQ, "VmPendingQuestion", "Question"));
|
||||||
assertNotNull(question.getQuestionId(), String.format(OBJ_FIELD_REQ, "VmPendingQuestion", "QuestionId"));
|
assertNotNull(question.getQuestionId(), String.format(OBJ_FIELD_REQ, "VmPendingQuestion", "QuestionId"));
|
||||||
|
|
|
@ -25,7 +25,6 @@ import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.O
|
||||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.REF_REQ_LIVE;
|
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.REF_REQ_LIVE;
|
||||||
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.TASK_COMPLETE_TIMELY;
|
import static org.jclouds.vcloud.director.v1_5.VCloudDirectorLiveTestConstants.TASK_COMPLETE_TIMELY;
|
||||||
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkCatalogItem;
|
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkCatalogItem;
|
||||||
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkError;
|
|
||||||
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkMetadata;
|
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkMetadata;
|
||||||
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.checkTask;
|
import static org.jclouds.vcloud.director.v1_5.domain.Checks.checkTask;
|
||||||
|
@ -35,9 +34,7 @@ import static org.testng.Assert.assertEquals;
|
||||||
import static org.testng.Assert.assertNotNull;
|
import static org.testng.Assert.assertNotNull;
|
||||||
import static org.testng.Assert.assertNull;
|
import static org.testng.Assert.assertNull;
|
||||||
import static org.testng.Assert.assertTrue;
|
import static org.testng.Assert.assertTrue;
|
||||||
import static org.testng.Assert.fail;
|
|
||||||
|
|
||||||
import org.jclouds.vcloud.director.v1_5.VCloudDirectorException;
|
|
||||||
import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
|
import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.AdminCatalog;
|
import org.jclouds.vcloud.director.v1_5.domain.AdminCatalog;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.CatalogItem;
|
import org.jclouds.vcloud.director.v1_5.domain.CatalogItem;
|
||||||
|
@ -112,22 +109,29 @@ public class CatalogClientLiveTest extends BaseVCloudDirectorClientLiveTest {
|
||||||
|
|
||||||
@AfterClass(alwaysRun = true)
|
@AfterClass(alwaysRun = true)
|
||||||
public void tearDown() {
|
public void tearDown() {
|
||||||
if (catalogItem != null)
|
if (catalogItem != null) {
|
||||||
catalogClient.deleteCatalogItem(catalogItem.getHref());
|
|
||||||
|
|
||||||
if (media != null)
|
|
||||||
context.getApi().getMediaClient().deleteMedia(media.getHref());
|
|
||||||
|
|
||||||
if (adminCatalog != null) {
|
|
||||||
adminContext.getApi().getCatalogClient().deleteCatalog(adminCatalog.getHref());
|
|
||||||
try {
|
try {
|
||||||
catalogClient.getCatalog(catalogRef.getHref());
|
catalogClient.deleteCatalogItem(catalogItem.getHref());
|
||||||
fail("The Catalog should have been deleted");
|
} catch (Exception e) {
|
||||||
} catch (VCloudDirectorException vcde) {
|
logger.warn(e, "Error when deleting catalog item '%s'", catalogItem.getName());
|
||||||
checkError(vcde.getError());
|
|
||||||
assertEquals(vcde.getError().getMajorErrorCode(), Integer.valueOf(403), "The majorErrorCode should be 403 since the item has been deleted");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (media != null) {
|
||||||
|
try {
|
||||||
|
Task delete = context.getApi().getMediaClient().deleteMedia(media.getHref());
|
||||||
|
taskDoneEventually(delete);
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.warn(e, "Error when deleting media '%s'", media.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (adminContext != null && adminCatalog != null) {
|
||||||
|
try {
|
||||||
|
adminContext.getApi().getCatalogClient().deleteCatalog(adminCatalog.getHref());
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.warn(e, "Error when deleting catalog '%s'", adminCatalog.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// TODO wait for tasks
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(description = "GET /catalog/{id}")
|
@Test(description = "GET /catalog/{id}")
|
||||||
|
|
|
@ -42,18 +42,15 @@ import static org.testng.Assert.assertFalse;
|
||||||
import static org.testng.Assert.assertNotNull;
|
import static org.testng.Assert.assertNotNull;
|
||||||
import static org.testng.Assert.assertNull;
|
import static org.testng.Assert.assertNull;
|
||||||
import static org.testng.Assert.assertTrue;
|
import static org.testng.Assert.assertTrue;
|
||||||
import static org.testng.Assert.fail;
|
|
||||||
|
|
||||||
import java.net.URISyntaxException;
|
import java.net.URISyntaxException;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import org.jclouds.io.Payloads;
|
import org.jclouds.io.Payloads;
|
||||||
import org.jclouds.vcloud.director.v1_5.VCloudDirectorException;
|
|
||||||
import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
|
import org.jclouds.vcloud.director.v1_5.VCloudDirectorMediaType;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.Checks;
|
import org.jclouds.vcloud.director.v1_5.domain.Checks;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.CloneMediaParams;
|
import org.jclouds.vcloud.director.v1_5.domain.CloneMediaParams;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.Error;
|
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.File;
|
import org.jclouds.vcloud.director.v1_5.domain.File;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.Link;
|
import org.jclouds.vcloud.director.v1_5.domain.Link;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.Media;
|
import org.jclouds.vcloud.director.v1_5.domain.Media;
|
||||||
|
@ -108,10 +105,20 @@ public class MediaClientLiveTest extends BaseVCloudDirectorClientLiveTest {
|
||||||
@AfterClass(alwaysRun = true)
|
@AfterClass(alwaysRun = true)
|
||||||
protected void tidyUp() {
|
protected void tidyUp() {
|
||||||
if (media != null) {
|
if (media != null) {
|
||||||
assertTaskSucceeds(mediaClient.deleteMedia(media.getHref()));
|
try {
|
||||||
|
Task delete = mediaClient.deleteMedia(media.getHref());
|
||||||
|
taskDoneEventually(delete);
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.warn(e, "Error when deleting media '%s': %s", media.getName());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (oldMedia != null) {
|
if (oldMedia != null) {
|
||||||
assertTaskSucceeds(mediaClient.deleteMedia(oldMedia.getHref()));
|
try {
|
||||||
|
Task delete = mediaClient.deleteMedia(oldMedia.getHref());
|
||||||
|
taskDoneEventually(delete);
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.warn(e, "Error when deleting media '%s': %s", oldMedia.getName());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,7 @@ import org.jclouds.vcloud.director.v1_5.domain.MetadataEntry;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.MetadataValue;
|
import org.jclouds.vcloud.director.v1_5.domain.MetadataValue;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.Network;
|
import org.jclouds.vcloud.director.v1_5.domain.Network;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.OrgNetwork;
|
import org.jclouds.vcloud.director.v1_5.domain.OrgNetwork;
|
||||||
|
import org.jclouds.vcloud.director.v1_5.domain.Task;
|
||||||
import org.jclouds.vcloud.director.v1_5.internal.BaseVCloudDirectorClientLiveTest;
|
import org.jclouds.vcloud.director.v1_5.internal.BaseVCloudDirectorClientLiveTest;
|
||||||
import org.testng.annotations.AfterClass;
|
import org.testng.annotations.AfterClass;
|
||||||
import org.testng.annotations.BeforeClass;
|
import org.testng.annotations.BeforeClass;
|
||||||
|
@ -67,10 +68,14 @@ public class NetworkClientLiveTest extends BaseVCloudDirectorClientLiveTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@AfterClass(alwaysRun = true)
|
@AfterClass(alwaysRun = true)
|
||||||
public void cleanUp() throws Exception {
|
public void cleanUp() {
|
||||||
if (metadataSet) {
|
if (metadataSet) {
|
||||||
adminContext.getApi().getNetworkClient().getMetadataClient()
|
try {
|
||||||
.deleteMetadataEntry(toAdminUri(networkURI), "key");
|
Task delete = adminContext.getApi().getNetworkClient().getMetadataClient().deleteMetadataEntry(toAdminUri(networkURI), "key");
|
||||||
|
taskDoneEventually(delete);
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.warn(e, "Error when deleting metadata");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,6 +40,7 @@ import org.jclouds.vcloud.director.v1_5.domain.MetadataValue;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.Org;
|
import org.jclouds.vcloud.director.v1_5.domain.Org;
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.OrgList;
|
import org.jclouds.vcloud.director.v1_5.domain.OrgList;
|
||||||
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.internal.BaseVCloudDirectorClientLiveTest;
|
import org.jclouds.vcloud.director.v1_5.internal.BaseVCloudDirectorClientLiveTest;
|
||||||
import org.testng.annotations.AfterClass;
|
import org.testng.annotations.AfterClass;
|
||||||
import org.testng.annotations.BeforeClass;
|
import org.testng.annotations.BeforeClass;
|
||||||
|
@ -73,11 +74,17 @@ public class OrgClientLiveTest extends BaseVCloudDirectorClientLiveTest {
|
||||||
@AfterClass(alwaysRun = true)
|
@AfterClass(alwaysRun = true)
|
||||||
public void cleanUp() throws Exception {
|
public void cleanUp() throws Exception {
|
||||||
if (adminMembersSet) {
|
if (adminMembersSet) {
|
||||||
adminContext.getApi().getOrgClient().getMetadataClient()
|
try {
|
||||||
.deleteMetadataEntry(toAdminUri(orgURI), "KEY");
|
Task delete = adminContext.getApi().getOrgClient().getMetadataClient().deleteMetadataEntry(toAdminUri(orgURI), "KEY");
|
||||||
|
taskDoneEventually(delete);
|
||||||
adminContext.getApi().getCatalogClient()
|
} catch (Exception e) {
|
||||||
.deleteCatalog(catalogRef);
|
logger.warn(e, "Error when deleting metadata entry");
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
adminContext.getApi().getCatalogClient().deleteCatalog(catalogRef);
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.warn(e, "Error when deleting catalog'%s': %s", catalogRef);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -76,9 +76,7 @@ public class QueryClientLiveTest extends BaseVCloudDirectorClientLiveTest {
|
||||||
|
|
||||||
@AfterClass(alwaysRun = true)
|
@AfterClass(alwaysRun = true)
|
||||||
public void cleanUp() throws Exception {
|
public void cleanUp() throws Exception {
|
||||||
if (vApp != null) {
|
if (vApp != null) cleanUpVApp(vApp);
|
||||||
cleanUpVApp(vApp);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -134,16 +134,16 @@ public class VAppClientLiveTest extends AbstractVAppClientLiveTest {
|
||||||
|
|
||||||
private MetadataValue metadataValue;
|
private MetadataValue metadataValue;
|
||||||
private String key;
|
private String key;
|
||||||
private URI mediaURI;
|
|
||||||
private URI testUserURI;
|
private URI testUserURI;
|
||||||
|
private boolean mediaCreated = false;
|
||||||
|
private boolean testUserCreated = false;
|
||||||
|
|
||||||
@Override
|
@BeforeClass(alwaysRun = true, dependsOnMethods = { "setupRequiredClients" })
|
||||||
@BeforeClass(alwaysRun = true)
|
protected void setupRequiredEntities() {
|
||||||
protected void setupRequiredClients() {
|
|
||||||
super.setupRequiredClients();
|
|
||||||
|
|
||||||
Set<Link> links = vdcClient.getVdc(vdcURI).getLinks();
|
Set<Link> links = vdcClient.getVdc(vdcURI).getLinks();
|
||||||
Predicate<Link> addMediaLink = and(relEquals("add"), typeEquals(VCloudDirectorMediaType.MEDIA));
|
|
||||||
|
if (mediaURI == null) {
|
||||||
|
Predicate<Link> addMediaLink = and(relEquals(Link.Rel.ADD), typeEquals(VCloudDirectorMediaType.MEDIA));
|
||||||
|
|
||||||
if (contains(links, addMediaLink)) {
|
if (contains(links, addMediaLink)) {
|
||||||
Link addMedia = find(links, addMediaLink);
|
Link addMedia = find(links, addMediaLink);
|
||||||
|
@ -172,8 +172,8 @@ public class VAppClientLiveTest extends AbstractVAppClientLiveTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
mediaURI = media.getHref();
|
mediaURI = media.getHref();
|
||||||
} else {
|
mediaCreated = true;
|
||||||
mediaURI = super.mediaURI;
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (adminContext != null) {
|
if (adminContext != null) {
|
||||||
|
@ -187,8 +187,20 @@ public class VAppClientLiveTest extends AbstractVAppClientLiveTest {
|
||||||
@Override
|
@Override
|
||||||
@AfterClass(alwaysRun = true)
|
@AfterClass(alwaysRun = true)
|
||||||
public void cleanUp() {
|
public void cleanUp() {
|
||||||
if (adminContext != null && mediaURI != null) {
|
if (adminContext != null && mediaCreated && mediaURI != null) {
|
||||||
assertTaskDoneEventually(context.getApi().getMediaClient().deleteMedia(mediaURI));
|
try {
|
||||||
|
Task delete = context.getApi().getMediaClient().deleteMedia(mediaURI);
|
||||||
|
taskDoneEventually(delete);
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.warn("Error when deleting media: %s", e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (adminContext != null && testUserCreated && testUserURI != null) {
|
||||||
|
try {
|
||||||
|
adminContext.getApi().getUserClient().deleteUser(testUserURI);
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.warn("Error when deleting user: %s", e.getMessage());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -93,7 +93,12 @@ public class VAppTemplateClientLiveTest extends AbstractVAppClientLiveTest {
|
||||||
@AfterClass(alwaysRun = true)
|
@AfterClass(alwaysRun = true)
|
||||||
protected void tidyUp() {
|
protected void tidyUp() {
|
||||||
if (key != null) {
|
if (key != null) {
|
||||||
assertTaskSucceeds(vAppTemplateClient.getMetadataClient().deleteMetadataEntry(vAppTemplateURI, key));
|
try {
|
||||||
|
Task delete = vAppTemplateClient.getMetadataClient().deleteMetadataEntry(vAppTemplateURI, key);
|
||||||
|
taskDoneEventually(delete);
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.warn(e, "Error when deleting metadata entry '%s'", key);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -118,8 +118,12 @@ public class VdcClientLiveTest extends BaseVCloudDirectorClientLiveTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (metadataSet) {
|
if (metadataSet) {
|
||||||
adminContext.getApi().getVdcClient().getMetadataClient()
|
try {
|
||||||
.deleteMetadataEntry(toAdminUri(vdcURI), "key");
|
Task delete = adminContext.getApi().getVdcClient().getMetadataClient().deleteMetadataEntry(toAdminUri(vdcURI), "key");
|
||||||
|
taskDoneEventually(delete);
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.warn(e, "Error deleting metadata entry");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -83,13 +83,10 @@ public class AdminCatalogClientLiveTest extends BaseVCloudDirectorClientLiveTest
|
||||||
@AfterClass(alwaysRun = true)
|
@AfterClass(alwaysRun = true)
|
||||||
protected void tidyUp() {
|
protected void tidyUp() {
|
||||||
if (catalog != null) {
|
if (catalog != null) {
|
||||||
|
try {
|
||||||
catalogClient.deleteCatalog(catalog.getHref());
|
catalogClient.deleteCatalog(catalog.getHref());
|
||||||
try { //TODO: predicate to retry for a short while?
|
} catch (Exception e) {
|
||||||
catalogClient.getCatalog(catalog.getHref());
|
logger.warn(e, "Error deleting admin catalog '%s'", catalog.getName());
|
||||||
fail("The Catalog should have been deleted");
|
|
||||||
} catch (VCloudDirectorException vcde) {
|
|
||||||
checkError(vcde.getError());
|
|
||||||
assertEquals(vcde.getError().getMajorErrorCode(), Integer.valueOf(403), "The majorErrorCode should be 403 since the item has been deleted");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,7 +75,7 @@ public class AdminVdcClientLiveTest extends BaseVCloudDirectorClientLiveTest {
|
||||||
if (metadataKey != null) {
|
if (metadataKey != null) {
|
||||||
try {
|
try {
|
||||||
Task task = metadataClient.deleteMetadataEntry(adminVdcUri, metadataKey);
|
Task task = metadataClient.deleteMetadataEntry(adminVdcUri, metadataKey);
|
||||||
assertTaskSucceeds(task);
|
taskDoneEventually(task);
|
||||||
} catch (VCloudDirectorException e) {
|
} catch (VCloudDirectorException e) {
|
||||||
logger.warn(e, "Error deleting metadata-value (perhaps it doesn't exist?); continuing...");
|
logger.warn(e, "Error deleting metadata-value (perhaps it doesn't exist?); continuing...");
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,6 @@ import static org.testng.AssertJUnit.assertFalse;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
|
|
||||||
import org.jclouds.rest.AuthorizationException;
|
import org.jclouds.rest.AuthorizationException;
|
||||||
import org.jclouds.vcloud.director.v1_5.VCloudDirectorException;
|
|
||||||
import org.jclouds.vcloud.director.v1_5.domain.OrgPasswordPolicySettings;
|
import org.jclouds.vcloud.director.v1_5.domain.OrgPasswordPolicySettings;
|
||||||
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.Role.DefaultRoles;
|
import org.jclouds.vcloud.director.v1_5.domain.Role.DefaultRoles;
|
||||||
|
@ -77,8 +76,8 @@ public class UserClientLiveTest extends BaseVCloudDirectorClientLiveTest {
|
||||||
if (user != null) {
|
if (user != null) {
|
||||||
try {
|
try {
|
||||||
userClient.deleteUser(user.getHref());
|
userClient.deleteUser(user.getHref());
|
||||||
} catch (VCloudDirectorException e) {
|
} catch (Exception e) {
|
||||||
// ignore; user probably already deleted
|
logger.warn(e, "Error deleting user '%s'", user.getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -181,7 +180,9 @@ public class UserClientLiveTest extends BaseVCloudDirectorClientLiveTest {
|
||||||
try {
|
try {
|
||||||
sessionClient.loginUserInOrgWithPassword(URI.create(endpoint + "/sessions"), user.getName(), orgRef.getName(), "wrongpassword!");
|
sessionClient.loginUserInOrgWithPassword(URI.create(endpoint + "/sessions"), user.getName(), orgRef.getName(), "wrongpassword!");
|
||||||
fail("Managed to login using the wrong password!");
|
fail("Managed to login using the wrong password!");
|
||||||
} catch(AuthorizationException ex) {
|
} catch (AuthorizationException e) {
|
||||||
|
} catch (Exception e) {
|
||||||
|
fail("Expected AuthorizationException", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -191,7 +192,9 @@ public class UserClientLiveTest extends BaseVCloudDirectorClientLiveTest {
|
||||||
try {
|
try {
|
||||||
sessionClient.loginUserInOrgWithPassword(URI.create(endpoint + "/sessions"), user.getName(), orgRef.getName(), "newPassword");
|
sessionClient.loginUserInOrgWithPassword(URI.create(endpoint + "/sessions"), user.getName(), orgRef.getName(), "newPassword");
|
||||||
fail("Managed to login to locked account!");
|
fail("Managed to login to locked account!");
|
||||||
} catch(AuthorizationException ex) {
|
} catch (AuthorizationException e) {
|
||||||
|
} catch (Exception e) {
|
||||||
|
fail("Expected AuthorizationException", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
userClient.unlockUser(user.getHref());
|
userClient.unlockUser(user.getHref());
|
||||||
|
|
|
@ -303,21 +303,31 @@ public abstract class BaseVCloudDirectorClientLiveTest extends BaseVersionedServ
|
||||||
assertTrue(retryTaskSuccessLong.apply(task), String.format(TASK_COMPLETE_TIMELY, task));
|
assertTrue(retryTaskSuccessLong.apply(task), String.format(TASK_COMPLETE_TIMELY, task));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void assertTaskStatusEventually(Task task, Task.Status running, ImmutableSet<Task.Status> immutableSet) {
|
protected boolean taskStatusEventually(Task task, Task.Status running, ImmutableSet<Task.Status> immutableSet) {
|
||||||
TaskClient taskClient = context.getApi().getTaskClient();
|
TaskClient taskClient = context.getApi().getTaskClient();
|
||||||
TaskStatusEquals predicate = new TaskStatusEquals(taskClient, running, immutableSet);
|
TaskStatusEquals predicate = new TaskStatusEquals(taskClient, running, immutableSet);
|
||||||
RetryablePredicate<Task> retryablePredicate = new RetryablePredicate<Task>(predicate, TASK_TIMEOUT_SECONDS * 1000L);
|
RetryablePredicate<Task> retryablePredicate = new RetryablePredicate<Task>(predicate, TASK_TIMEOUT_SECONDS * 1000L);
|
||||||
assertTrue(retryablePredicate.apply(task), "Task must enter status "+running);
|
return retryablePredicate.apply(task);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void assertTaskDoneEventually(Task task) {
|
protected void assertTaskStatusEventually(Task task, Task.Status running, ImmutableSet<Task.Status> immutableSet) {
|
||||||
|
assertTrue(taskStatusEventually(task, running, immutableSet),
|
||||||
|
String.format("Task '%s' must reach status %s", task.getOperationName(), running));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected boolean taskDoneEventually(Task task) {
|
||||||
TaskClient taskClient = context.getApi().getTaskClient();
|
TaskClient taskClient = context.getApi().getTaskClient();
|
||||||
TaskStatusEquals predicate = new TaskStatusEquals(
|
TaskStatusEquals predicate = new TaskStatusEquals(
|
||||||
taskClient,
|
taskClient,
|
||||||
ImmutableSet.of(Task.Status.ABORTED, Task.Status.CANCELED, Task.Status.ERROR, Task.Status.SUCCESS),
|
ImmutableSet.of(Task.Status.ABORTED, Task.Status.CANCELED, Task.Status.ERROR, Task.Status.SUCCESS),
|
||||||
Collections.<Task.Status>emptySet());
|
Collections.<Task.Status>emptySet());
|
||||||
RetryablePredicate<Task> retryablePredicate = new RetryablePredicate<Task>(predicate, LONG_TASK_TIMEOUT_SECONDS * 1000L);
|
RetryablePredicate<Task> retryablePredicate = new RetryablePredicate<Task>(predicate, LONG_TASK_TIMEOUT_SECONDS * 1000L);
|
||||||
assertTrue(retryablePredicate.apply(task), "Task must be done");
|
return retryablePredicate.apply(task);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void assertTaskDoneEventually(Task task) {
|
||||||
|
assertTrue(taskDoneEventually(task),
|
||||||
|
String.format("Task '%s' must complete", task.getOperationName()));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -407,9 +417,12 @@ public abstract class BaseVCloudDirectorClientLiveTest extends BaseVersionedServ
|
||||||
|
|
||||||
protected void cleanUpVAppTemplate(VAppTemplate vAppTemplate) {
|
protected void cleanUpVAppTemplate(VAppTemplate vAppTemplate) {
|
||||||
VAppTemplateClient vappTemplateClient = context.getApi().getVAppTemplateClient();
|
VAppTemplateClient vappTemplateClient = context.getApi().getVAppTemplateClient();
|
||||||
|
try {
|
||||||
Task task = vappTemplateClient.deleteVappTemplate(vAppTemplate.getHref());
|
Task task = vappTemplateClient.deleteVappTemplate(vAppTemplate.getHref());
|
||||||
assertTaskSucceeds(task);
|
taskDoneEventually(task);
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.warn(e, "Error deleting template '%s'", vAppTemplate.getName());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void cleanUpVApp(VApp vApp) {
|
protected void cleanUpVApp(VApp vApp) {
|
||||||
|
@ -434,7 +447,9 @@ public abstract class BaseVCloudDirectorClientLiveTest extends BaseVersionedServ
|
||||||
// Otherwise, get error on delete "entity is busy completing an operation.
|
// Otherwise, get error on delete "entity is busy completing an operation.
|
||||||
if (vApp.getTasks() != null) {
|
if (vApp.getTasks() != null) {
|
||||||
for (Task task : vApp.getTasks()) {
|
for (Task task : vApp.getTasks()) {
|
||||||
assertTaskDoneEventually(task);
|
if (!taskDoneEventually(task)) {
|
||||||
|
logger.warn("Task '%s' did not complete", task.getOperationName());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -442,7 +457,7 @@ public abstract class BaseVCloudDirectorClientLiveTest extends BaseVersionedServ
|
||||||
if (vApp.getStatus().equals(Status.POWERED_ON.getValue())) {
|
if (vApp.getStatus().equals(Status.POWERED_ON.getValue())) {
|
||||||
try {
|
try {
|
||||||
Task shutdownTask = vAppClient.shutdown(vAppURI);
|
Task shutdownTask = vAppClient.shutdown(vAppURI);
|
||||||
retryTaskSuccess.apply(shutdownTask);
|
taskDoneEventually(shutdownTask);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// keep going; cleanup as much as possible
|
// keep going; cleanup as much as possible
|
||||||
logger.warn(e, "Continuing cleanup after error shutting down VApp %s", vApp.getName());
|
logger.warn(e, "Continuing cleanup after error shutting down VApp %s", vApp.getName());
|
||||||
|
@ -454,7 +469,7 @@ public abstract class BaseVCloudDirectorClientLiveTest extends BaseVersionedServ
|
||||||
try {
|
try {
|
||||||
UndeployVAppParams params = UndeployVAppParams.builder().build();
|
UndeployVAppParams params = UndeployVAppParams.builder().build();
|
||||||
Task undeployTask = vAppClient.undeploy(vAppURI, params);
|
Task undeployTask = vAppClient.undeploy(vAppURI, params);
|
||||||
retryTaskSuccess.apply(undeployTask);
|
taskDoneEventually(undeployTask);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// keep going; cleanup as much as possible
|
// keep going; cleanup as much as possible
|
||||||
logger.warn(e, "Continuing cleanup after error undeploying VApp %s", vApp.getName());
|
logger.warn(e, "Continuing cleanup after error undeploying VApp %s", vApp.getName());
|
||||||
|
@ -463,7 +478,7 @@ public abstract class BaseVCloudDirectorClientLiveTest extends BaseVersionedServ
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Task task = vAppClient.deleteVApp(vAppURI);
|
Task task = vAppClient.deleteVApp(vAppURI);
|
||||||
assertTaskSucceeds(task);
|
taskDoneEventually(task);
|
||||||
vAppNames.remove(vApp.getName());
|
vAppNames.remove(vApp.getName());
|
||||||
logger.info("Deleted VApp %s", vApp.getName());
|
logger.info("Deleted VApp %s", vApp.getName());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|
Loading…
Reference in New Issue