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) {