Prefer polling the status of the node
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/3fbd399f Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/3fbd399f Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/3fbd399f Branch: refs/heads/master Commit: 3fbd399f6b3c35f1cb2e0b0af797c9db5f72fe39 Parents: 83ff38e Author: Ignasi Barrera <[email protected]> Authored: Wed Oct 28 18:14:42 2015 +0100 Committer: Ignasi Barrera <[email protected]> Committed: Thu Oct 29 15:55:23 2015 +0100 ---------------------------------------------------------------------- .../DigitalOcean2ComputeServiceAdapter.java | 3 +-- .../DigitalOcean2TemplateBuilderLiveTest.java | 2 +- .../features/DropletApiLiveTest.java | 27 +++++++------------- .../digitalocean2/features/KeyApiLiveTest.java | 2 -- .../internal/BaseDigitalOcean2ApiLiveTest.java | 27 +++++++++++++++----- 5 files changed, 31 insertions(+), 30 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds/blob/3fbd399f/providers/digitalocean2/src/main/java/org/jclouds/digitalocean2/compute/DigitalOcean2ComputeServiceAdapter.java ---------------------------------------------------------------------- diff --git a/providers/digitalocean2/src/main/java/org/jclouds/digitalocean2/compute/DigitalOcean2ComputeServiceAdapter.java b/providers/digitalocean2/src/main/java/org/jclouds/digitalocean2/compute/DigitalOcean2ComputeServiceAdapter.java index 2d76176..f520f45 100644 --- a/providers/digitalocean2/src/main/java/org/jclouds/digitalocean2/compute/DigitalOcean2ComputeServiceAdapter.java +++ b/providers/digitalocean2/src/main/java/org/jclouds/digitalocean2/compute/DigitalOcean2ComputeServiceAdapter.java @@ -42,7 +42,6 @@ import org.jclouds.compute.reference.ComputeServiceConstants; import org.jclouds.digitalocean2.DigitalOcean2Api; import org.jclouds.digitalocean2.compute.internal.ImageInRegion; import org.jclouds.digitalocean2.compute.options.DigitalOcean2TemplateOptions; -import org.jclouds.digitalocean2.domain.Action; import org.jclouds.digitalocean2.domain.Droplet; import org.jclouds.digitalocean2.domain.DropletCreate; import org.jclouds.digitalocean2.domain.Image; @@ -237,7 +236,7 @@ public class DigitalOcean2ComputeServiceAdapter implements ComputeServiceAdapter // We have to wait here, as the api does not properly populate the state // but fails if there is a pending event int dropletId = Integer.parseInt(id); - Action action = api.dropletApi().powerOff(dropletId); + api.dropletApi().powerOff(dropletId); checkState(nodeStoppedPredicate.apply(dropletId), "node did not stop in the configured timeout"); } http://git-wip-us.apache.org/repos/asf/jclouds/blob/3fbd399f/providers/digitalocean2/src/test/java/org/jclouds/digitalocean2/compute/DigitalOcean2TemplateBuilderLiveTest.java ---------------------------------------------------------------------- diff --git a/providers/digitalocean2/src/test/java/org/jclouds/digitalocean2/compute/DigitalOcean2TemplateBuilderLiveTest.java b/providers/digitalocean2/src/test/java/org/jclouds/digitalocean2/compute/DigitalOcean2TemplateBuilderLiveTest.java index 8480cc1..ee7b962 100644 --- a/providers/digitalocean2/src/test/java/org/jclouds/digitalocean2/compute/DigitalOcean2TemplateBuilderLiveTest.java +++ b/providers/digitalocean2/src/test/java/org/jclouds/digitalocean2/compute/DigitalOcean2TemplateBuilderLiveTest.java @@ -40,7 +40,7 @@ public class DigitalOcean2TemplateBuilderLiveTest extends BaseTemplateBuilderLiv @Override public void testDefaultTemplateBuilder() throws IOException { Template defaultTemplate = view.getComputeService().templateBuilder().build(); - assert defaultTemplate.getImage().getOperatingSystem().getVersion().equals("15.04") : defaultTemplate + assert defaultTemplate.getImage().getOperatingSystem().getVersion().equals("15.10") : defaultTemplate .getImage().getOperatingSystem().getVersion(); assertEquals(defaultTemplate.getImage().getOperatingSystem().is64Bit(), true); assertEquals(defaultTemplate.getImage().getOperatingSystem().getFamily(), OsFamily.UBUNTU); http://git-wip-us.apache.org/repos/asf/jclouds/blob/3fbd399f/providers/digitalocean2/src/test/java/org/jclouds/digitalocean2/features/DropletApiLiveTest.java ---------------------------------------------------------------------- diff --git a/providers/digitalocean2/src/test/java/org/jclouds/digitalocean2/features/DropletApiLiveTest.java b/providers/digitalocean2/src/test/java/org/jclouds/digitalocean2/features/DropletApiLiveTest.java index f451d2e..c10fa54 100644 --- a/providers/digitalocean2/src/test/java/org/jclouds/digitalocean2/features/DropletApiLiveTest.java +++ b/providers/digitalocean2/src/test/java/org/jclouds/digitalocean2/features/DropletApiLiveTest.java @@ -16,10 +16,7 @@ */ package org.jclouds.digitalocean2.features; -import static com.google.common.collect.Iterables.getOnlyElement; import static java.util.logging.Logger.getAnonymousLogger; -import static org.jclouds.digitalocean2.domain.Droplet.Status.ACTIVE; -import static org.jclouds.digitalocean2.domain.Droplet.Status.OFF; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertNull; @@ -77,8 +74,8 @@ public class DropletApiLiveTest extends BaseDigitalOcean2ApiLiveTest { public void testCreate() { DropletCreate dropletCreate = api().create(prefix + "-droplet-livetest", region.slug(), size.slug(), image.slug(), CreateDropletOptions.builder().backupsEnabled(true).addSshKeyId(key.id()).build()); - assertActionCompleted(getOnlyElement(dropletCreate.links().actions()).id()); dropletId = dropletCreate.droplet().id(); + assertNodeRunning(dropletId); Droplet droplet = api().get(dropletId); assertNotNull(droplet, "Droplet should not be null"); } @@ -101,10 +98,8 @@ public class DropletApiLiveTest extends BaseDigitalOcean2ApiLiveTest { @Test(dependsOnMethods = "testListKernels") public void testPowerOff() { - Action action = api().powerOff(dropletId); - assertActionCompleted(action.id()); - Droplet droplet = api().get(dropletId); - assertEquals(droplet.status(), OFF, "Droplet should be off"); + api().powerOff(dropletId); + assertNodeStopped(dropletId); } @Test(groups = "live", dependsOnMethods = "testPowerOff") @@ -146,29 +141,25 @@ public class DropletApiLiveTest extends BaseDigitalOcean2ApiLiveTest { @Test(groups = "live", dependsOnMethods = "testSnapshots") public void testPowerOn() { // Apparently droplets are automatically powered on after the snapshot process - Action action = api().powerOff(dropletId); - assertActionCompleted(action.id()); + api().powerOff(dropletId); + assertNodeStopped(dropletId); - action = api().powerOn(dropletId); - assertActionCompleted(action.id()); - Droplet droplet = api().get(dropletId); - assertEquals(droplet.status(), ACTIVE, "Droplet should be Active"); + api().powerOn(dropletId); + assertNodeRunning(dropletId); } @Test(groups = "live", dependsOnMethods = "testPowerOn") public void testReboot() { Action action = api().reboot(dropletId); assertActionCompleted(action.id()); - Droplet droplet = api().get(dropletId); - assertEquals(droplet.status(), ACTIVE, "Droplet should be off"); + assertNodeRunning(dropletId); } @Test(groups = "live", dependsOnMethods = "testReboot") public void testPowerCycle() { Action action = api().powerCycle(dropletId); assertActionCompleted(action.id()); - Droplet droplet = api().get(dropletId); - assertEquals(droplet.status(), ACTIVE, "Droplet should be off"); + assertNodeRunning(dropletId); } @Test(groups = "live", dependsOnMethods = "testPowerCycle") http://git-wip-us.apache.org/repos/asf/jclouds/blob/3fbd399f/providers/digitalocean2/src/test/java/org/jclouds/digitalocean2/features/KeyApiLiveTest.java ---------------------------------------------------------------------- diff --git a/providers/digitalocean2/src/test/java/org/jclouds/digitalocean2/features/KeyApiLiveTest.java b/providers/digitalocean2/src/test/java/org/jclouds/digitalocean2/features/KeyApiLiveTest.java index 2911d79..e0ec1c9 100644 --- a/providers/digitalocean2/src/test/java/org/jclouds/digitalocean2/features/KeyApiLiveTest.java +++ b/providers/digitalocean2/src/test/java/org/jclouds/digitalocean2/features/KeyApiLiveTest.java @@ -69,8 +69,6 @@ public class KeyApiLiveTest extends BaseDigitalOcean2ApiLiveTest { public void testUpdateKey() { api().update(dsa.id(), "jclouds-test-dsa-updated"); assertEquals(api().get(dsa.id()).name(), "jclouds-test-dsa-updated"); - api().update(dsa.fingerprint(), "jclouds-test-dsa-updated2"); - assertEquals(api().get(dsa.id()).name(), "jclouds-test-dsa-updated2"); } @AfterClass(alwaysRun = true) http://git-wip-us.apache.org/repos/asf/jclouds/blob/3fbd399f/providers/digitalocean2/src/test/java/org/jclouds/digitalocean2/internal/BaseDigitalOcean2ApiLiveTest.java ---------------------------------------------------------------------- diff --git a/providers/digitalocean2/src/test/java/org/jclouds/digitalocean2/internal/BaseDigitalOcean2ApiLiveTest.java b/providers/digitalocean2/src/test/java/org/jclouds/digitalocean2/internal/BaseDigitalOcean2ApiLiveTest.java index b210c93..ee5bb55 100644 --- a/providers/digitalocean2/src/test/java/org/jclouds/digitalocean2/internal/BaseDigitalOcean2ApiLiveTest.java +++ b/providers/digitalocean2/src/test/java/org/jclouds/digitalocean2/internal/BaseDigitalOcean2ApiLiveTest.java @@ -17,16 +17,17 @@ package org.jclouds.digitalocean2.internal; import static com.google.common.base.Preconditions.checkState; +import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_RUNNING; +import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_SUSPENDED; import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_TERMINATED; import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertTrue; import static org.testng.util.Strings.isNullOrEmpty; import java.util.Properties; -import java.util.concurrent.atomic.AtomicReference; import org.jclouds.apis.BaseApiLiveTest; import org.jclouds.compute.config.ComputeServiceProperties; -import org.jclouds.compute.domain.NodeMetadata; import org.jclouds.digitalocean2.DigitalOcean2Api; import org.jclouds.digitalocean2.config.DigitalOcean2RateLimitModule; import org.jclouds.digitalocean2.domain.Action; @@ -46,10 +47,10 @@ import com.google.inject.name.Names; public class BaseDigitalOcean2ApiLiveTest extends BaseApiLiveTest<DigitalOcean2Api> { - protected Predicate<Integer> actionCompleted; - protected Predicate<AtomicReference<NodeMetadata>> nodeRunning; - protected Predicate<Integer> nodeTerminated; - protected Predicate<Integer> dropletOff; + private Predicate<Integer> actionCompleted; + private Predicate<Integer> nodeTerminated; + private Predicate<Integer> nodeStopped; + private Predicate<Integer> nodeRunning; public BaseDigitalOcean2ApiLiveTest() { provider = "digitalocean2"; @@ -67,6 +68,10 @@ public class BaseDigitalOcean2ApiLiveTest extends BaseApiLiveTest<DigitalOcean2A actionCompleted = injector.getInstance(Key.get(new TypeLiteral<Predicate<Integer>>(){})); nodeTerminated = injector.getInstance(Key.get(new TypeLiteral<Predicate<Integer>>(){}, Names.named(TIMEOUT_NODE_TERMINATED))); + nodeStopped = injector.getInstance(Key.get(new TypeLiteral<Predicate<Integer>>(){}, + Names.named(TIMEOUT_NODE_SUSPENDED))); + nodeRunning = injector.getInstance(Key.get(new TypeLiteral<Predicate<Integer>>(){}, + Names.named(TIMEOUT_NODE_RUNNING))); return injector.getInstance(DigitalOcean2Api.class); } @@ -81,8 +86,16 @@ public class BaseDigitalOcean2ApiLiveTest extends BaseApiLiveTest<DigitalOcean2A assertEquals(action.status(), Action.Status.COMPLETED); } + protected void assertNodeStopped(int dropletId) { + assertTrue(nodeStopped.apply(dropletId), String.format("Droplet %s did not stop in the configured timeout", dropletId)); + } + + protected void assertNodeRunning(int dropletId) { + assertTrue(nodeRunning.apply(dropletId), String.format("Droplet %s did not start in the configured timeout", dropletId)); + } + protected void assertNodeTerminated(int dropletId) { - assertEquals(nodeTerminated.apply(dropletId), true, String.format("Timeout waiting for dropletId: %s", dropletId)); + assertTrue(nodeTerminated.apply(dropletId), String.format("Droplet %s was not terminated in the configured timeout", dropletId)); } protected Region firstAvailableRegion() {
