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/30 09:36:07 UTC

[43/50] jclouds git commit: Add Network autovalue builder and tests

Add Network autovalue builder and tests


Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/6408c3a8
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/6408c3a8
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/6408c3a8

Branch: refs/heads/master
Commit: 6408c3a8353d80ca19fccc3d0bf4078e31dffa57
Parents: f2ce567
Author: Andrew Donald Kennedy <an...@cloudsoftcorp.com>
Authored: Sat Jul 2 15:39:49 2016 +0100
Committer: Ignasi Barrera <na...@apache.org>
Committed: Mon Aug 1 11:42:31 2016 +0200

----------------------------------------------------------------------
 .../java/org/jclouds/docker/domain/Network.java | 152 ++++++++++++++++---
 .../DockerComputeServiceAdapterLiveTest.java    |  39 ++++-
 2 files changed, 161 insertions(+), 30 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/6408c3a8/apis/docker/src/main/java/org/jclouds/docker/domain/Network.java
----------------------------------------------------------------------
diff --git a/apis/docker/src/main/java/org/jclouds/docker/domain/Network.java b/apis/docker/src/main/java/org/jclouds/docker/domain/Network.java
index 74f9e81..d6de0d7 100644
--- a/apis/docker/src/main/java/org/jclouds/docker/domain/Network.java
+++ b/apis/docker/src/main/java/org/jclouds/docker/domain/Network.java
@@ -17,48 +17,91 @@
 package org.jclouds.docker.domain;
 
 import static org.jclouds.docker.internal.NullSafeCopies.copyOf;
+import static org.jclouds.docker.internal.NullSafeCopies.copyWithNullOf;
+
 import java.util.List;
 import java.util.Map;
 
+import com.google.auto.value.AutoValue;
+
 import org.jclouds.javax.annotation.Nullable;
 import org.jclouds.json.SerializedNames;
 
-import com.google.auto.value.AutoValue;
-
 @AutoValue
 public abstract class Network {
 
    @AutoValue
    public abstract static class IPAM {
 
-      IPAM() {} // For AutoValue only!
+      IPAM() { }
 
-      @Nullable
-      public abstract String driver();
+      @Nullable public abstract String driver();
 
       public abstract List<Config> config();
 
       @SerializedNames({"Driver", "Config"})
-      public static IPAM create(String driver, List<Config> config) {
-         return new AutoValue_Network_IPAM(driver, copyOf(config));
+      public static IPAM create(@Nullable String driver, List<Config> config) {
+         return builder()
+               .driver(driver)
+               .config(config)
+               .build();
+      }
+
+      public static Builder builder() {
+         return new AutoValue_Network_IPAM.Builder();
+      }
+
+      @AutoValue.Builder
+      public abstract static class Builder {
+
+         public abstract Builder driver(@Nullable String driver);
+
+         public abstract Builder config(List<Config> config);
+
+         abstract List<Config> config();
+
+         abstract IPAM autoBuild();
+
+         public IPAM build() {
+            return config(copyOf(config()))
+                  .autoBuild();
+         }
       }
 
       @AutoValue
       public abstract static class Config {
 
-         Config() {} // For AutoValue only!
+         Config() { }
 
          public abstract String subnet();
 
-         @Nullable
-         public abstract String ipRange();
+         @Nullable public abstract String ipRange();
 
-         @Nullable
-         public abstract String gateway();
+         @Nullable public abstract String gateway();
 
          @SerializedNames({"Subnet", "IPRange", "Gateway"})
-         public static Config create(String subnet, String ipRange, String gateway) {
-            return new AutoValue_Network_IPAM_Config(subnet, ipRange, gateway);
+         public static Config create(String subnet, @Nullable String ipRange, @Nullable String gateway) {
+            return builder()
+                  .subnet(subnet)
+                  .ipRange(ipRange)
+                  .gateway(gateway)
+                  .build();
+         }
+
+         public static Builder builder() {
+            return new AutoValue_Network_IPAM_Config.Builder();
+         }
+
+         @AutoValue.Builder
+         public abstract static class Builder {
+
+            public abstract Builder subnet(String subnet);
+
+            public abstract Builder ipRange(@Nullable String ipRange);
+
+            public abstract Builder gateway(@Nullable String gateway);
+
+            abstract Config build();
          }
       }
    }
@@ -66,7 +109,7 @@ public abstract class Network {
    @AutoValue
    public abstract static class Details {
 
-      Details() {} // For AutoValue only!
+      Details() { }
 
       public abstract String endpoint();
 
@@ -78,7 +121,30 @@ public abstract class Network {
 
       @SerializedNames({ "EndpointID", "MacAddress", "IPv4Address", "IPv6Address" })
       public static Details create(String endpoint, String macAddress, String ipv4address, String ipv6address) {
-         return new AutoValue_Network_Details(endpoint, macAddress, ipv4address, ipv6address);
+         return builder()
+               .endpoint(endpoint)
+               .macAddress(macAddress)
+               .ipv4address(ipv4address)
+               .ipv6address(ipv6address)
+               .build();
+      }
+
+      public static Builder builder() {
+         return new AutoValue_Network_Details.Builder();
+      }
+
+      @AutoValue.Builder
+      public abstract static class Builder {
+
+         public abstract Builder endpoint(String endpoint);
+
+         public abstract Builder macAddress(String macAddress);
+
+         public abstract Builder ipv4address(String ipv4address);
+
+         public abstract Builder ipv6address(String ipv6address);
+
+         abstract Details build();
       }
    }
 
@@ -92,16 +158,58 @@ public abstract class Network {
 
    @Nullable public abstract IPAM ipam();
 
-   public abstract Map<String, Details> containers();
+   @Nullable public abstract Map<String, Details> containers();
 
-   public abstract Map<String, String> options();
+   @Nullable public abstract Map<String, String> options();
 
-   Network() {}
+   Network() { }
 
    @SerializedNames({ "Name", "Id", "Scope", "Driver", "IPAM", "Containers", "Options" })
-   public static Network create(String name, String id, String scope, String driver, IPAM ipam,
-                                Map<String, Details> containers, Map<String, String> options) {
-      return new AutoValue_Network(name, id, scope, driver, ipam, copyOf(containers), copyOf(options));
+   public static Network create(@Nullable String name, @Nullable String id, @Nullable String scope,
+         @Nullable String driver, @Nullable IPAM ipam, @Nullable Map<String, Details> containers,
+         @Nullable Map<String, String> options) {
+      return builder()
+            .name(name)
+            .id(id)
+            .scope(scope)
+            .driver(driver)
+            .ipam(ipam)
+            .containers(containers)
+            .options(options)
+            .build();
+   }
+
+   public static Builder builder() {
+      return new AutoValue_Network.Builder();
    }
 
+   @AutoValue.Builder
+   public abstract static class Builder {
+
+      public abstract Builder name(@Nullable String name);
+
+      public abstract Builder id(@Nullable String id);
+
+      public abstract Builder scope(@Nullable String scope);
+
+      public abstract Builder driver(@Nullable String driver);
+
+      public abstract Builder ipam(@Nullable IPAM ipam);
+
+      public abstract Builder containers(@Nullable Map<String, Details> containers);
+
+      public abstract Builder options(@Nullable Map<String, String> options);
+
+      abstract Map<String, Details> containers();
+
+      abstract Map<String, String> options();
+
+      abstract Network autoBuild();
+
+      public Network build() {
+         return containers(copyWithNullOf(containers()))
+               .options(copyOf(options()))
+               .autoBuild();
+      }
+   }
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/6408c3a8/apis/docker/src/test/java/org/jclouds/docker/compute/DockerComputeServiceAdapterLiveTest.java
----------------------------------------------------------------------
diff --git a/apis/docker/src/test/java/org/jclouds/docker/compute/DockerComputeServiceAdapterLiveTest.java b/apis/docker/src/test/java/org/jclouds/docker/compute/DockerComputeServiceAdapterLiveTest.java
index 3480d88..cb8ca3e 100644
--- a/apis/docker/src/test/java/org/jclouds/docker/compute/DockerComputeServiceAdapterLiveTest.java
+++ b/apis/docker/src/test/java/org/jclouds/docker/compute/DockerComputeServiceAdapterLiveTest.java
@@ -18,12 +18,17 @@ package org.jclouds.docker.compute;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
 import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.assertNull;
 
 import java.util.Properties;
 import java.util.Random;
 
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
 import com.google.common.base.Predicate;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
@@ -40,10 +45,8 @@ import org.jclouds.docker.compute.options.DockerTemplateOptions;
 import org.jclouds.docker.compute.strategy.DockerComputeServiceAdapter;
 import org.jclouds.docker.domain.Container;
 import org.jclouds.docker.domain.Image;
+import org.jclouds.docker.domain.Network;
 import org.jclouds.sshj.config.SshjSshClientModule;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
 
 @Test(groups = "live", singleThreaded = true, testName = "DockerComputeServiceAdapterLiveTest")
 public class DockerComputeServiceAdapterLiveTest extends BaseDockerApiLiveTest {
@@ -51,6 +54,8 @@ public class DockerComputeServiceAdapterLiveTest extends BaseDockerApiLiveTest {
    private static final String SSHABLE_IMAGE = "kwart/alpine-ext";
    private static final String SSHABLE_IMAGE_TAG = "3.3-ssh";
    private Image defaultImage;
+   private Network network1;
+   private Network network2;
 
    private DockerComputeServiceAdapter adapter;
    private TemplateBuilder templateBuilder;
@@ -62,6 +67,8 @@ public class DockerComputeServiceAdapterLiveTest extends BaseDockerApiLiveTest {
       super.initialize();
       String imageName = SSHABLE_IMAGE + ":" + SSHABLE_IMAGE_TAG;
       defaultImage = adapter.getImage(imageName);
+      network1 = api.getNetworkApi().createNetwork(Network.builder().name("network1").driver("overlay").build());
+      network2 = api.getNetworkApi().createNetwork(Network.builder().name("network2").driver("overlay").build());
       assertNotNull(defaultImage);
    }
 
@@ -73,6 +80,12 @@ public class DockerComputeServiceAdapterLiveTest extends BaseDockerApiLiveTest {
       if (api.getImageApi().inspectImage(CHUANWEN_COWSAY) != null) {
          api.getImageApi().deleteImage(CHUANWEN_COWSAY);
       }
+      if (api.getNetworkApi().inspectNetwork("network1") != null) {
+         api.getNetworkApi().removeNetwork("network1");
+      }
+      if (api.getNetworkApi().inspectNetwork("network2") != null) {
+         api.getNetworkApi().removeNetwork("network2");
+      }
       super.tearDown();
    }
 
@@ -85,14 +98,11 @@ public class DockerComputeServiceAdapterLiveTest extends BaseDockerApiLiveTest {
    }
 
    public void testCreateNodeWithGroupEncodedIntoNameThenStoreCredentials() {
-      String group = "foo";
       String name = "container" + new Random().nextInt();
-
       Template template = templateBuilder.imageId(defaultImage.id()).build();
-
       DockerTemplateOptions options = template.getOptions().as(DockerTemplateOptions.class);
       options.env(ImmutableList.of("ROOT_PASSWORD=password"));
-      guest = adapter.createNodeWithGroupEncodedIntoName(group, name, template);
+      guest = adapter.createNodeWithGroupEncodedIntoName("test", name, template);
       assertEquals(guest.getNodeId(), guest.getNode().id());
    }
 
@@ -106,7 +116,6 @@ public class DockerComputeServiceAdapterLiveTest extends BaseDockerApiLiveTest {
    }
 
    public void testGetImageNotHiddenByCache() {
-
       //Ensure image to be tested is unknown to jclouds and docker and that cache is warm
       assertNull(findImageFromListImages(CHUANWEN_COWSAY));
       assertNull(api.getImageApi().inspectImage(CHUANWEN_COWSAY));
@@ -117,6 +126,20 @@ public class DockerComputeServiceAdapterLiveTest extends BaseDockerApiLiveTest {
       assertNotNull(findImageFromListImages(CHUANWEN_COWSAY), "New image is not available from listImages presumably due to caching");
    }
 
+   public void testCreateNodeWithMultipleNetworks() {
+       String name = "container" + new Random().nextInt();
+       Template template = templateBuilder.imageId(defaultImage.id()).build();
+       DockerTemplateOptions options = template.getOptions().as(DockerTemplateOptions.class);
+       options.env(ImmutableList.of("ROOT_PASSWORD=password"));
+       options.networkMode("bridge");
+       options.networks(network1.name(), network2.name());
+       guest = adapter.createNodeWithGroupEncodedIntoName("test", name, template);
+
+       assertTrue(guest.getNode().networkSettings().networks().containsKey("network1"));
+       assertTrue(guest.getNode().networkSettings().networks().containsKey("network2"));
+       assertEquals(guest.getNode().networkSettings().secondaryIPAddresses().size(), 2);
+    }
+
    private Image findImageFromListImages(final String image) {
       return Iterables.find(adapter.listImages(), new Predicate<Image>() {
         @Override