Add Network autovalue builder and tests

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

Branch: refs/heads/master
Commit: b28fe7c6d8a9fffbb6767b5770bc5b11309aadd3
Parents: 3cd3cac
Author: Andrew Donald Kennedy <[email protected]>
Authored: Sat Jul 2 15:39:49 2016 +0100
Committer: Ignasi Barrera <[email protected]>
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-labs/blob/b28fe7c6/docker/src/main/java/org/jclouds/docker/domain/Network.java
----------------------------------------------------------------------
diff --git a/docker/src/main/java/org/jclouds/docker/domain/Network.java 
b/docker/src/main/java/org/jclouds/docker/domain/Network.java
index 74f9e81..d6de0d7 100644
--- a/docker/src/main/java/org/jclouds/docker/domain/Network.java
+++ b/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-labs/blob/b28fe7c6/docker/src/test/java/org/jclouds/docker/compute/DockerComputeServiceAdapterLiveTest.java
----------------------------------------------------------------------
diff --git 
a/docker/src/test/java/org/jclouds/docker/compute/DockerComputeServiceAdapterLiveTest.java
 
b/docker/src/test/java/org/jclouds/docker/compute/DockerComputeServiceAdapterLiveTest.java
index 3480d88..cb8ca3e 100644
--- 
a/docker/src/test/java/org/jclouds/docker/compute/DockerComputeServiceAdapterLiveTest.java
+++ 
b/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

Reply via email to