Repository: jclouds Updated Branches: refs/heads/master 7dc73ee0b -> 1e4d0beae
JCLOUDS-1145: Fix DigitalOceanImageExtension and live tests Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/1e4d0bea Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/1e4d0bea Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/1e4d0bea Branch: refs/heads/master Commit: 1e4d0beae23ef7981d46dd44eca3e8bdb19d8565 Parents: 7dc73ee Author: Ignasi Barrera <[email protected]> Authored: Fri Aug 12 00:32:07 2016 +0200 Committer: Ignasi Barrera <[email protected]> Committed: Tue Aug 16 00:18:05 2016 +0200 ---------------------------------------------------------------------- providers/digitalocean2/pom.xml | 2 +- .../digitalocean2/DigitalOcean2ApiMetadata.java | 2 +- .../extensions/DigitalOcean2ImageExtension.java | 16 +++++++------- .../DigitalOcean2TemplateBuilderLiveTest.java | 2 +- .../features/DropletApiLiveTest.java | 22 ++++++++------------ .../internal/BaseDigitalOcean2ApiLiveTest.java | 9 +++----- 6 files changed, 23 insertions(+), 30 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds/blob/1e4d0bea/providers/digitalocean2/pom.xml ---------------------------------------------------------------------- diff --git a/providers/digitalocean2/pom.xml b/providers/digitalocean2/pom.xml index f7171d9..0134162 100644 --- a/providers/digitalocean2/pom.xml +++ b/providers/digitalocean2/pom.xml @@ -38,7 +38,7 @@ <test.digitalocean2.api-version>2</test.digitalocean2.api-version> <test.digitalocean2.identity>FIXME</test.digitalocean2.identity> <test.digitalocean2.credential>FIXME</test.digitalocean2.credential> - <test.digitalocean2.template>osFamily=UBUNTU,os64Bit=true</test.digitalocean2.template> + <test.digitalocean2.template>osFamily=UBUNTU,os64Bit=true,osVersionMatches=14.*</test.digitalocean2.template> <jclouds.osgi.export>org.jclouds.digitalocean2*;version="${project.version}"</jclouds.osgi.export> <jclouds.osgi.import> org.jclouds.compute.internal;version="${project.version}", http://git-wip-us.apache.org/repos/asf/jclouds/blob/1e4d0bea/providers/digitalocean2/src/main/java/org/jclouds/digitalocean2/DigitalOcean2ApiMetadata.java ---------------------------------------------------------------------- diff --git a/providers/digitalocean2/src/main/java/org/jclouds/digitalocean2/DigitalOcean2ApiMetadata.java b/providers/digitalocean2/src/main/java/org/jclouds/digitalocean2/DigitalOcean2ApiMetadata.java index 25b42c7..9aedaaa 100644 --- a/providers/digitalocean2/src/main/java/org/jclouds/digitalocean2/DigitalOcean2ApiMetadata.java +++ b/providers/digitalocean2/src/main/java/org/jclouds/digitalocean2/DigitalOcean2ApiMetadata.java @@ -68,7 +68,7 @@ public class DigitalOcean2ApiMetadata extends BaseHttpApiMetadata<DigitalOcean2A properties.put(AUDIENCE, "https://cloud.digitalocean.com/v1/oauth/token"); properties.put(CREDENTIAL_TYPE, BEARER_TOKEN_CREDENTIALS.toString()); properties.put(PROPERTY_SESSION_INTERVAL, 3600); - properties.put(TEMPLATE, "osFamily=UBUNTU,os64Bit=true"); + properties.put(TEMPLATE, "osFamily=UBUNTU,os64Bit=true,osVersionMatches=14.*"); properties.put(POLL_INITIAL_PERIOD, 5000); properties.put(POLL_MAX_PERIOD, 20000); // Node operations in DigitalOcean can be quite slow. Use a 5 minutes http://git-wip-us.apache.org/repos/asf/jclouds/blob/1e4d0bea/providers/digitalocean2/src/main/java/org/jclouds/digitalocean2/compute/extensions/DigitalOcean2ImageExtension.java ---------------------------------------------------------------------- diff --git a/providers/digitalocean2/src/main/java/org/jclouds/digitalocean2/compute/extensions/DigitalOcean2ImageExtension.java b/providers/digitalocean2/src/main/java/org/jclouds/digitalocean2/compute/extensions/DigitalOcean2ImageExtension.java index 3baf146..62d15c0 100644 --- a/providers/digitalocean2/src/main/java/org/jclouds/digitalocean2/compute/extensions/DigitalOcean2ImageExtension.java +++ b/providers/digitalocean2/src/main/java/org/jclouds/digitalocean2/compute/extensions/DigitalOcean2ImageExtension.java @@ -18,7 +18,7 @@ package org.jclouds.digitalocean2.compute.extensions; import static com.google.common.base.Preconditions.checkState; import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_IMAGE_AVAILABLE; -import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_SUSPENDED; +import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_RUNNING; import java.util.NoSuchElementException; import java.util.concurrent.Callable; @@ -61,18 +61,18 @@ public class DigitalOcean2ImageExtension implements ImageExtension { private final DigitalOcean2Api api; private final Predicate<Integer> imageAvailablePredicate; - private final Predicate<Integer> nodeStoppedPredicate; + private final Predicate<Integer> nodeRunningPredicate; private final Function<ImageInRegion, Image> imageTransformer; private final ListeningExecutorService userExecutor; @Inject DigitalOcean2ImageExtension(DigitalOcean2Api api, @Named(TIMEOUT_IMAGE_AVAILABLE) Predicate<Integer> imageAvailablePredicate, - @Named(TIMEOUT_NODE_SUSPENDED) Predicate<Integer> nodeStoppedPredicate, + @Named(TIMEOUT_NODE_RUNNING) Predicate<Integer> nodeRunningPredicate, Function<ImageInRegion, Image> imageTransformer, @Named(Constants.PROPERTY_USER_THREADS) ListeningExecutorService userExecutor) { this.api = api; this.imageAvailablePredicate = imageAvailablePredicate; - this.nodeStoppedPredicate = nodeStoppedPredicate; + this.nodeRunningPredicate = nodeRunningPredicate; this.imageTransformer = imageTransformer; this.userExecutor = userExecutor; } @@ -94,11 +94,11 @@ public class DigitalOcean2ImageExtension implements ImageExtension { final CloneImageTemplate cloneTemplate = (CloneImageTemplate) template; int dropletId = Integer.parseInt(cloneTemplate.getSourceNodeId()); - // Droplet needs to be stopped + // Droplet needs to be active final Droplet droplet = api.dropletApi().get(dropletId); - if (droplet.status() != Status.OFF) { - api.dropletApi().powerOff(dropletId); - checkState(nodeStoppedPredicate.apply(dropletId), "node was not powered off in the configured timeout"); + if (droplet.status() != Status.ACTIVE) { + api.dropletApi().powerOn(dropletId); + checkState(nodeRunningPredicate.apply(dropletId), "node was not powered on in the configured timeout"); } final Action snapshotEvent = api.dropletApi().snapshot(Integer.parseInt(cloneTemplate.getSourceNodeId()), http://git-wip-us.apache.org/repos/asf/jclouds/blob/1e4d0bea/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 ee7b962..698483a 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.10") : defaultTemplate + assert defaultTemplate.getImage().getOperatingSystem().getVersion().startsWith("14.") : 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/1e4d0bea/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 c10fa54..f18a24f 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 @@ -25,7 +25,6 @@ import static org.testng.Assert.assertTrue; import java.util.List; import java.util.Map; -import org.jclouds.compute.ComputeTestUtils; import org.jclouds.digitalocean2.domain.Action; import org.jclouds.digitalocean2.domain.Backup; import org.jclouds.digitalocean2.domain.Droplet; @@ -38,6 +37,7 @@ import org.jclouds.digitalocean2.domain.Size; import org.jclouds.digitalocean2.domain.Snapshot; import org.jclouds.digitalocean2.domain.options.CreateDropletOptions; import org.jclouds.digitalocean2.internal.BaseDigitalOcean2ApiLiveTest; +import org.jclouds.ssh.SshKeys; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; @@ -60,7 +60,7 @@ public class DropletApiLiveTest extends BaseDigitalOcean2ApiLiveTest { size = cheapestSizeInRegion(region); image = ubuntuImageInRegion(region); - Map<String, String> keyPair = ComputeTestUtils.setupKeyPair(); + Map<String, String> keyPair = SshKeys.generate(); key = api.keyApi().create(prefix + "-droplet-livetest", keyPair.get("public")); } @@ -93,7 +93,7 @@ public class DropletApiLiveTest extends BaseDigitalOcean2ApiLiveTest { @Test(dependsOnMethods = "testCreate") public void testListKernels() { Iterable<Kernel> kernels = api().listKernels(dropletId).concat(); - assertEquals(kernels.iterator().next().name(), "DO-recovery-static-fsck"); + assertTrue(kernels.iterator().hasNext()); } @Test(dependsOnMethods = "testListKernels") @@ -103,6 +103,12 @@ public class DropletApiLiveTest extends BaseDigitalOcean2ApiLiveTest { } @Test(groups = "live", dependsOnMethods = "testPowerOff") + public void testPowerOn() { + api().powerOn(dropletId); + assertNodeRunning(dropletId); + } + + @Test(groups = "live", dependsOnMethods = "testPowerOn") public void testSnapshots() { Action action = api().snapshot(dropletId, prefix + dropletId + "-snapshot"); assertActionCompleted(action.id()); @@ -139,16 +145,6 @@ public class DropletApiLiveTest extends BaseDigitalOcean2ApiLiveTest { } @Test(groups = "live", dependsOnMethods = "testSnapshots") - public void testPowerOn() { - // Apparently droplets are automatically powered on after the snapshot process - api().powerOff(dropletId); - assertNodeStopped(dropletId); - - api().powerOn(dropletId); - assertNodeRunning(dropletId); - } - - @Test(groups = "live", dependsOnMethods = "testPowerOn") public void testReboot() { Action action = api().reboot(dropletId); assertActionCompleted(action.id()); http://git-wip-us.apache.org/repos/asf/jclouds/blob/1e4d0bea/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 ee5bb55..722ef97 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 @@ -16,21 +16,19 @@ */ 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.TimeUnit; import org.jclouds.apis.BaseApiLiveTest; import org.jclouds.compute.config.ComputeServiceProperties; import org.jclouds.digitalocean2.DigitalOcean2Api; import org.jclouds.digitalocean2.config.DigitalOcean2RateLimitModule; -import org.jclouds.digitalocean2.domain.Action; import org.jclouds.digitalocean2.domain.Image; import org.jclouds.digitalocean2.domain.Region; import org.jclouds.digitalocean2.domain.Size; @@ -60,6 +58,7 @@ public class BaseDigitalOcean2ApiLiveTest extends BaseApiLiveTest<DigitalOcean2A Properties props = super.setupProperties(); props.put(ComputeServiceProperties.POLL_INITIAL_PERIOD, 1000); props.put(ComputeServiceProperties.POLL_MAX_PERIOD, 10000); + props.put(ComputeServiceProperties.TIMEOUT_IMAGE_AVAILABLE, TimeUnit.MINUTES.toMillis(45)); return props; } @@ -81,9 +80,7 @@ public class BaseDigitalOcean2ApiLiveTest extends BaseApiLiveTest<DigitalOcean2A } protected void assertActionCompleted(int actionId) { - checkState(actionCompleted.apply(actionId), "Timeout waiting for action: %s", actionId); - Action action = api.actionApi().get(actionId); - assertEquals(action.status(), Action.Status.COMPLETED); + assertTrue(actionCompleted.apply(actionId), String.format("Action %s did not complete in the configured timeout", actionId)); } protected void assertNodeStopped(int dropletId) {
