You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by na...@apache.org on 2016/08/15 22:38:31 UTC
jclouds git commit: JCLOUDS-1145: Fix DigitalOceanImageExtension and
live tests
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 <na...@apache.org>
Authored: Fri Aug 12 00:32:07 2016 +0200
Committer: Ignasi Barrera <na...@apache.org>
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) {