You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by an...@apache.org on 2016/06/13 15:19:35 UTC

[1/2] jclouds-labs git commit: docker: get container’s IPs from all networks

Repository: jclouds-labs
Updated Branches:
  refs/heads/master f47223b51 -> 6dcadf1fb


docker: get container\u2019s IPs from all networks


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

Branch: refs/heads/master
Commit: 58104f7cbc7ce337ceb524e457b3bc34e90e5fc8
Parents: f47223b
Author: Aled Sage <al...@gmail.com>
Authored: Mon Jun 13 14:03:26 2016 +0100
Committer: Andrea Turli <an...@gmail.com>
Committed: Mon Jun 13 17:17:56 2016 +0200

----------------------------------------------------------------------
 .../functions/ContainerToNodeMetadata.java      | 20 ++++++-
 .../jclouds/docker/domain/NetworkSettings.java  | 28 +++++++++-
 .../functions/ContainerToNodeMetadataTest.java  | 55 ++++++++++++++++++--
 .../docker/parse/ContainerParseTest.java        |  3 +-
 4 files changed, 97 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/58104f7c/docker/src/main/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadata.java
----------------------------------------------------------------------
diff --git a/docker/src/main/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadata.java b/docker/src/main/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadata.java
index 53b70f1..c3b5831 100644
--- a/docker/src/main/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadata.java
+++ b/docker/src/main/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadata.java
@@ -31,6 +31,7 @@ import org.jclouds.compute.domain.NodeMetadataBuilder;
 import org.jclouds.compute.domain.Processor;
 import org.jclouds.compute.functions.GroupNamingConvention;
 import org.jclouds.docker.domain.Container;
+import org.jclouds.docker.domain.NetworkSettings;
 import org.jclouds.docker.domain.State;
 import org.jclouds.domain.Location;
 import org.jclouds.providers.ProviderMetadata;
@@ -38,6 +39,7 @@ import org.jclouds.providers.ProviderMetadata;
 import com.google.common.base.Function;
 import com.google.common.base.Supplier;
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
 import com.google.inject.Singleton;
 
@@ -106,8 +108,24 @@ public class ContainerToNodeMetadata implements Function<Container, NodeMetadata
    }
 
    private Iterable<String> getPrivateIpAddresses(Container container) {
+      // A container can be attached to multiple networks. It can therefore have multiple private
+      // IPs. The NetworkSettings.ipAddress might in fact be blank, with the only IP being on
+      // network objects.
       if (container.networkSettings() == null) return ImmutableList.of();
-      return ImmutableList.of(container.networkSettings().ipAddress());
+      ImmutableSet.Builder<String> builder = ImmutableSet.<String>builder();
+      NetworkSettings settings = container.networkSettings();
+      if (settings.ipAddress() != null && settings.ipAddress().length() > 0) {
+         builder.add(settings.ipAddress());
+      }
+      if (settings.networks() != null) {
+         for (Map.Entry<String, NetworkSettings.Details> entry : settings.networks().entrySet()) {
+            String ipAddress = entry.getValue().ipAddress();
+            if (ipAddress != null && ipAddress.length() > 0) {
+               builder.add(ipAddress);
+            }
+         }
+      }
+      return builder.build();
    }
 
    private List<String> getPublicIpAddresses(Container container) {

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/58104f7c/docker/src/main/java/org/jclouds/docker/domain/NetworkSettings.java
----------------------------------------------------------------------
diff --git a/docker/src/main/java/org/jclouds/docker/domain/NetworkSettings.java b/docker/src/main/java/org/jclouds/docker/domain/NetworkSettings.java
index 2217992..b8c1a83 100644
--- a/docker/src/main/java/org/jclouds/docker/domain/NetworkSettings.java
+++ b/docker/src/main/java/org/jclouds/docker/domain/NetworkSettings.java
@@ -56,8 +56,32 @@ public abstract class NetworkSettings {
       @SerializedNames({ "EndpointID", "Gateway", "IPAddress", "IPPrefixLen", "IPv6Gateway", "GlobalIPv6Address", "GlobalIPv6PrefixLen", "MacAddress" })
       public static Details create(String endpointId, String gateway, String ipAddress, int ipPrefixLen, String ipv6Gateway, String globalIPv6Address,
                                    int globalIPv6PrefixLen, String macAddress) {
-         return new AutoValue_NetworkSettings_Details(endpointId, gateway, ipAddress, ipPrefixLen, ipv6Gateway, globalIPv6Address, globalIPv6PrefixLen,
-                 macAddress);
+         return builder().endpoint(endpointId).gateway(gateway).ipAddress(ipAddress).ipPrefixLen(ipPrefixLen)
+               .ipv6Gateway(ipv6Gateway).globalIPv6Address(globalIPv6Address)
+               .globalIPv6PrefixLen(globalIPv6PrefixLen).macAddress(macAddress)
+               .build();
+      }
+      
+      public Builder toBuilder() {
+         return new AutoValue_NetworkSettings_Details.Builder(this);
+      }
+
+      public static Builder builder() {
+         return new AutoValue_NetworkSettings_Details.Builder();
+      }
+
+      @AutoValue.Builder
+      public abstract static class Builder {
+         public abstract Builder endpoint(String value);
+         public abstract Builder gateway(String value);
+         public abstract Builder ipAddress(String value);
+         public abstract Builder ipPrefixLen(int value);
+         public abstract Builder ipv6Gateway(String value);
+         public abstract Builder globalIPv6Address(String value);
+         public abstract Builder globalIPv6PrefixLen(int value);
+         public abstract Builder macAddress(String value);
+
+         public abstract Details build();
       }
    }
 

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/58104f7c/docker/src/test/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadataTest.java
----------------------------------------------------------------------
diff --git a/docker/src/test/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadataTest.java b/docker/src/test/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadataTest.java
index 7588174..c439e47 100644
--- a/docker/src/test/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadataTest.java
+++ b/docker/src/test/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadataTest.java
@@ -131,7 +131,7 @@ public class ContainerToNodeMetadataTest {
               .node(null)
               .build();
       ProviderMetadata providerMetadata = EasyMock.createMock(ProviderMetadata.class);
-      expect(providerMetadata.getEndpoint()).andReturn("http://127.0.0.1:4243");
+      expect(providerMetadata.getEndpoint()).andReturn("http://127.0.0.1:4243").atLeastOnce();
       replay(providerMetadata);
 
       GroupNamingConvention.Factory namingConvention = Guice.createInjector().getInstance(GroupNamingConvention.Factory.class);
@@ -177,7 +177,7 @@ public class ContainerToNodeMetadataTest {
 
    private Function<State, NodeMetadata.Status> toPortableStatus() {
       StateToStatus function = EasyMock.createMock(StateToStatus.class);
-         expect(function.apply(anyObject(State.class))).andReturn(NodeMetadata.Status.RUNNING);
+         expect(function.apply(anyObject(State.class))).andReturn(NodeMetadata.Status.RUNNING).atLeastOnce();
          replay(function);
          return function;
    }
@@ -193,11 +193,58 @@ public class ContainerToNodeMetadataTest {
       assertEquals(node.getGroup(), "hopeful_mclean");
       assertEquals(node.getImageId(), "af0f59f1c19eef9471c3b8c8d587c39b8f130560b54f3766931b37d76d5de4b6");
       assertEquals(node.getLoginPort(), 49199);
-      assertEquals(node.getPrivateAddresses().size(), 1);
-      assertEquals(node.getPublicAddresses().size(), 1);
+      assertEquals(node.getPrivateAddresses(), ImmutableSet.of("172.17.0.2"));
+      assertEquals(node.getPublicAddresses(), ImmutableSet.of("127.0.0.1"));
+   }
+
+   public void testVirtualMachineWithNetworksToNodeMetadata() {
+      // Example networks taken from container.json
+      Container containerWithNetwork = container.toBuilder()
+            .networkSettings(container.networkSettings().toBuilder()
+                    .networks(ImmutableMap.<String, NetworkSettings.Details>builder()
+                          .put("JCLOUDS_NETWORK", NetworkSettings.Details.builder()
+                                   .endpoint("1a10519f808faf1181cfdf3d1d6dd93e19ede2d1c8fed82562a4c17c297c4db3")
+                                   .gateway("172.19.0.1")
+                                   .ipAddress("172.19.0.2")
+                                   .ipPrefixLen(16)
+                                   .ipv6Gateway("")
+                                   .globalIPv6Address("")
+                                   .globalIPv6PrefixLen(0)
+                                   .macAddress("02:42:ac:13:00:02")
+                                   .build())
+                          .put("bridge", NetworkSettings.Details.builder()
+                                .endpoint("9e8dcc0c8288938a923018fee0728cee8e6de7c01a5150738ee6e51c1caf8cf6")
+                                .gateway("172.17.0.1")
+                                .ipAddress("172.17.0.2")
+                                .ipPrefixLen(16)
+                                .ipv6Gateway("")
+                                .globalIPv6Address("")
+                                .globalIPv6PrefixLen(0)
+                                .macAddress("02:42:ac:11:00:02")
+                                .build())
+                          .build())
+                    .build())
+            .build();
+
+      Container mockContainer = mockContainer(containerWithNetwork);
+
+      NodeMetadata node = function.apply(mockContainer);
+
+      verify(mockContainer);
+
+      assertEquals(node.getId(), "6d35806c1bd2b25cd92bba2d2c2c5169dc2156f53ab45c2b62d76e2d2fee14a9");
+      assertEquals(node.getGroup(), "hopeful_mclean");
+      assertEquals(node.getImageId(), "af0f59f1c19eef9471c3b8c8d587c39b8f130560b54f3766931b37d76d5de4b6");
+      assertEquals(node.getLoginPort(), 49199);
+      assertEquals(node.getPrivateAddresses(), ImmutableSet.of("172.17.0.2", "172.19.0.2"));
+      assertEquals(node.getPublicAddresses(), ImmutableSet.of("127.0.0.1"));
    }
 
    private Container mockContainer() {
+      return mockContainer(container);
+   }
+   
+   private Container mockContainer(Container container) {
       Container mockContainer = EasyMock.createMock(Container.class);
 
       expect(mockContainer.id()).andReturn(container.id());

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/58104f7c/docker/src/test/java/org/jclouds/docker/parse/ContainerParseTest.java
----------------------------------------------------------------------
diff --git a/docker/src/test/java/org/jclouds/docker/parse/ContainerParseTest.java b/docker/src/test/java/org/jclouds/docker/parse/ContainerParseTest.java
index 884733e..291fa13 100644
--- a/docker/src/test/java/org/jclouds/docker/parse/ContainerParseTest.java
+++ b/docker/src/test/java/org/jclouds/docker/parse/ContainerParseTest.java
@@ -55,12 +55,11 @@ public class ContainerParseTest extends BaseDockerParseTest<Container> {
               .config(Config.builder()
                       .hostname("6c9932f478bd")
                       .env(ImmutableList.of("PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"))
-                      .image("57e570db16baba1e8c0d6f3c15868ddb400f64ff76ec948e65c3ca3f15fb3587")
+                      .image("zettio/weave")
                       .domainname("")
                       .user("")
                       .cmd(ImmutableList.of("-name", "7a:63:a2:39:7b:0f"))
                       .entrypoint(ImmutableList.of("/home/weave/weaver", "-iface", "ethwe", "-wait", "5"))
-                      .image("zettio/weave")
                       .workingDir("/home/weave")
                       .exposedPorts(ImmutableMap.of("6783/tcp", ImmutableMap.of(), "6783/udp", ImmutableMap.of()))
                       .build())


[2/2] jclouds-labs git commit: Docker.ContainerToNodeMetadata: remove needless mocking

Posted by an...@apache.org.
Docker.ContainerToNodeMetadata: remove needless mocking

Previously it mocked the container and the StateToStatus. It just
asserted that getter methods were called, rather than confirming the
resulting NodeMetadata had the right values.

By removing some of the mocks, it not only simplifies the code but
improves code-coverage. (e.g. if StateToStatus was being passed the
wrong value, the previous test would not have noticed).


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

Branch: refs/heads/master
Commit: 6dcadf1fba9700fcaaf30d809938954bcb700cbe
Parents: 58104f7
Author: Aled Sage <al...@gmail.com>
Authored: Mon Jun 13 14:13:34 2016 +0100
Committer: Andrea Turli <an...@gmail.com>
Committed: Mon Jun 13 17:18:01 2016 +0200

----------------------------------------------------------------------
 .../functions/ContainerToNodeMetadataTest.java  | 49 +++-----------------
 1 file changed, 6 insertions(+), 43 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/6dcadf1f/docker/src/test/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadataTest.java
----------------------------------------------------------------------
diff --git a/docker/src/test/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadataTest.java b/docker/src/test/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadataTest.java
index c439e47..5360097 100644
--- a/docker/src/test/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadataTest.java
+++ b/docker/src/test/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadataTest.java
@@ -16,10 +16,8 @@
  */
 package org.jclouds.docker.compute.functions;
 
-import static org.easymock.EasyMock.anyObject;
 import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.replay;
-import static org.easymock.EasyMock.verify;
 import static org.testng.Assert.assertEquals;
 
 import java.util.Arrays;
@@ -48,7 +46,6 @@ import org.jclouds.providers.ProviderMetadata;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-import com.google.common.base.Function;
 import com.google.common.base.Supplier;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
@@ -171,28 +168,19 @@ public class ContainerToNodeMetadataTest {
          }
       };
 
-      function = new ContainerToNodeMetadata(providerMetadata, toPortableStatus(), namingConvention, images, locations,
+      function = new ContainerToNodeMetadata(providerMetadata, new StateToStatus(), namingConvention, images, locations,
             new LoginPortForContainer.LoginPortLookupChain(null));
    }
 
-   private Function<State, NodeMetadata.Status> toPortableStatus() {
-      StateToStatus function = EasyMock.createMock(StateToStatus.class);
-         expect(function.apply(anyObject(State.class))).andReturn(NodeMetadata.Status.RUNNING).atLeastOnce();
-         replay(function);
-         return function;
-   }
-
    public void testVirtualMachineToNodeMetadata() {
-      Container mockContainer = mockContainer();
-
-      NodeMetadata node = function.apply(mockContainer);
-
-      verify(mockContainer);
+      NodeMetadata node = function.apply(container);
 
       assertEquals(node.getId(), "6d35806c1bd2b25cd92bba2d2c2c5169dc2156f53ab45c2b62d76e2d2fee14a9");
       assertEquals(node.getGroup(), "hopeful_mclean");
       assertEquals(node.getImageId(), "af0f59f1c19eef9471c3b8c8d587c39b8f130560b54f3766931b37d76d5de4b6");
       assertEquals(node.getLoginPort(), 49199);
+      assertEquals(node.getStatus(), NodeMetadata.Status.RUNNING);
+      assertEquals(node.getImageId(), "af0f59f1c19eef9471c3b8c8d587c39b8f130560b54f3766931b37d76d5de4b6");
       assertEquals(node.getPrivateAddresses(), ImmutableSet.of("172.17.0.2"));
       assertEquals(node.getPublicAddresses(), ImmutableSet.of("127.0.0.1"));
    }
@@ -226,36 +214,11 @@ public class ContainerToNodeMetadataTest {
                     .build())
             .build();
 
-      Container mockContainer = mockContainer(containerWithNetwork);
-
-      NodeMetadata node = function.apply(mockContainer);
+      NodeMetadata node = function.apply(containerWithNetwork);
 
-      verify(mockContainer);
-
-      assertEquals(node.getId(), "6d35806c1bd2b25cd92bba2d2c2c5169dc2156f53ab45c2b62d76e2d2fee14a9");
-      assertEquals(node.getGroup(), "hopeful_mclean");
-      assertEquals(node.getImageId(), "af0f59f1c19eef9471c3b8c8d587c39b8f130560b54f3766931b37d76d5de4b6");
+      // Only asserting network-related aspects; the rest is covered by testVirtualMachineToNodeMetadata
       assertEquals(node.getLoginPort(), 49199);
       assertEquals(node.getPrivateAddresses(), ImmutableSet.of("172.17.0.2", "172.19.0.2"));
       assertEquals(node.getPublicAddresses(), ImmutableSet.of("127.0.0.1"));
    }
-
-   private Container mockContainer() {
-      return mockContainer(container);
-   }
-   
-   private Container mockContainer(Container container) {
-      Container mockContainer = EasyMock.createMock(Container.class);
-
-      expect(mockContainer.id()).andReturn(container.id());
-      expect(mockContainer.name()).andReturn(container.name());
-      expect(mockContainer.config()).andReturn(container.config()).anyTimes();
-      expect(mockContainer.networkSettings()).andReturn(container.networkSettings()).anyTimes();
-      expect(mockContainer.node()).andReturn(container.node()).anyTimes();
-      expect(mockContainer.state()).andReturn(container.state());
-      expect(mockContainer.image()).andReturn(container.image()).anyTimes();
-      replay(mockContainer);
-
-      return mockContainer;
-   }
 }