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 2018/11/19 21:54:05 UTC

jclouds-labs git commit: JCLOUDS-1454 - ServerToServerWithExternalIp Function implementation for dimensiondata

Repository: jclouds-labs
Updated Branches:
  refs/heads/master 9a7a503de -> 424f358e8


JCLOUDS-1454 - ServerToServerWithExternalIp Function implementation for dimensiondata


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

Branch: refs/heads/master
Commit: 424f358e8dae87435aae11db58c5dc4f3092b435
Parents: 9a7a503
Author: Boris Trishkin <bo...@itaas.dimensiondata.com>
Authored: Tue Oct 2 13:20:18 2018 +0100
Committer: Ignasi Barrera <na...@apache.org>
Committed: Mon Nov 19 22:52:55 2018 +0100

----------------------------------------------------------------------
 .../function/ServerToServerWithExternalIp.java  |  60 ++++++++
 .../ServerToServerWithExternalIpTest.java       | 144 +++++++++++++++++++
 2 files changed, 204 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/424f358e/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/compute/function/ServerToServerWithExternalIp.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/compute/function/ServerToServerWithExternalIp.java b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/compute/function/ServerToServerWithExternalIp.java
new file mode 100644
index 0000000..0592a40
--- /dev/null
+++ b/dimensiondata/src/main/java/org/jclouds/dimensiondata/cloudcontrol/compute/function/ServerToServerWithExternalIp.java
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.dimensiondata.cloudcontrol.compute.function;
+
+import com.google.common.base.Function;
+import com.google.common.base.Optional;
+import com.google.common.base.Predicate;
+import org.jclouds.dimensiondata.cloudcontrol.DimensionDataCloudControlApi;
+import org.jclouds.dimensiondata.cloudcontrol.domain.NatRule;
+import org.jclouds.dimensiondata.cloudcontrol.domain.Server;
+import org.jclouds.dimensiondata.cloudcontrol.domain.internal.ServerWithExternalIp;
+
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+@Singleton
+public class ServerToServerWithExternalIp implements Function<Server, ServerWithExternalIp> {
+
+   private final DimensionDataCloudControlApi api;
+
+   @Inject
+   ServerToServerWithExternalIp(DimensionDataCloudControlApi api) {
+      this.api = api;
+   }
+
+   @Override
+   public ServerWithExternalIp apply(final Server server) {
+      if (server == null) {
+         return null;
+      }
+      ServerWithExternalIp.Builder builder = ServerWithExternalIp.builder().server(server);
+
+        if (server.networkInfo() != null) {
+            Optional<NatRule> natRuleOptional = api.getNetworkApi().listNatRules(server.networkInfo().networkDomainId())
+                  .concat().firstMatch(new Predicate<NatRule>() {
+                      @Override public boolean apply(NatRule input) {
+                          return input.internalIp().equalsIgnoreCase(server.networkInfo().primaryNic().privateIpv4());
+                      }
+                  });
+            if (natRuleOptional.isPresent()) {
+                builder.externalIp(natRuleOptional.get().externalIp());
+            }
+        }
+        return builder.build();
+    }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/424f358e/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/compute/function/ServerToServerWithExternalIpTest.java
----------------------------------------------------------------------
diff --git a/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/compute/function/ServerToServerWithExternalIpTest.java b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/compute/function/ServerToServerWithExternalIpTest.java
new file mode 100644
index 0000000..97244db
--- /dev/null
+++ b/dimensiondata/src/test/java/org/jclouds/dimensiondata/cloudcontrol/compute/function/ServerToServerWithExternalIpTest.java
@@ -0,0 +1,144 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.dimensiondata.cloudcontrol.compute.function;
+
+import com.google.common.collect.Lists;
+import org.easymock.EasyMock;
+import org.easymock.EasyMockSupport;
+import org.jclouds.collect.IterableWithMarkers;
+import org.jclouds.collect.PagedIterable;
+import org.jclouds.collect.PagedIterables;
+import org.jclouds.compute.domain.OsFamily;
+import org.jclouds.dimensiondata.cloudcontrol.DimensionDataCloudControlApi;
+import org.jclouds.dimensiondata.cloudcontrol.domain.CPU;
+import org.jclouds.dimensiondata.cloudcontrol.domain.Guest;
+import org.jclouds.dimensiondata.cloudcontrol.domain.NIC;
+import org.jclouds.dimensiondata.cloudcontrol.domain.NatRule;
+import org.jclouds.dimensiondata.cloudcontrol.domain.NetworkInfo;
+import org.jclouds.dimensiondata.cloudcontrol.domain.OperatingSystem;
+import org.jclouds.dimensiondata.cloudcontrol.domain.Server;
+import org.jclouds.dimensiondata.cloudcontrol.domain.State;
+import org.jclouds.dimensiondata.cloudcontrol.domain.internal.ServerWithExternalIp;
+import org.jclouds.dimensiondata.cloudcontrol.features.NetworkApi;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import java.util.ArrayList;
+import java.util.Date;
+
+import static org.easymock.EasyMock.expect;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertNull;
+
+@Test(groups = "unit", testName = "ServerToServerWithExternalIpTest")
+public class ServerToServerWithExternalIpTest {
+
+   private DimensionDataCloudControlApi dimensionDataCloudControlApi;
+   private NetworkApi networkApi;
+   private Server server;
+   private NIC nic;
+   private CPU cpu;
+   private OperatingSystem os;
+   private NatRule natRule;
+
+   @BeforeMethod
+   public void setUp() {
+      dimensionDataCloudControlApi = EasyMock.createNiceMock(DimensionDataCloudControlApi.class);
+      networkApi = EasyMock.createNiceMock(NetworkApi.class);
+      natRule = EasyMock.createNiceMock(NatRule.class);
+
+      nic = EasyMock.createNiceMock(NIC.class);
+      cpu = EasyMock.createNiceMock(CPU.class);
+      os = OperatingSystem.builder().family(OsFamily.WINDOWS.name()).id("Win10").displayName("Windows 10").build();
+
+      EasyMockSupport.injectMocks(dimensionDataCloudControlApi);
+      EasyMockSupport.injectMocks(networkApi);
+   }
+
+   @Test
+   public void testServerToServerWithExternalIpApplyNotNull() {
+      String internalIp = "192.168.1.1";
+      String externalIp = "10.12.122.1";
+      String networkDomainId = "NetworkDomain1";
+
+      server = Server.builder().id("serverId").name("serverName").datacenterId("NA1")
+            .networkInfo(NetworkInfo.create(networkDomainId, nic, new ArrayList<NIC>())).cpu(cpu).deployed(true)
+            .state(State.NORMAL).sourceImageId("imageId").started(false).createTime(new Date()).memoryGb(1024)
+            .guest(Guest.builder().osCustomization(false).operatingSystem(os).build()).build();
+
+      PagedIterable<NatRule> natRules = PagedIterables.onlyPage(IterableWithMarkers.from(Lists.newArrayList(natRule)));
+
+      expect(dimensionDataCloudControlApi.getNetworkApi()).andReturn(networkApi);
+      expect(networkApi.listNatRules(networkDomainId)).andReturn(natRules);
+      expect(nic.privateIpv4()).andReturn(internalIp);
+      expect(natRule.externalIp()).andReturn(externalIp);
+      expect(natRule.internalIp()).andReturn(internalIp);
+
+      EasyMock.replay(dimensionDataCloudControlApi, networkApi, natRule, nic);
+
+      ServerWithExternalIp result = new ServerToServerWithExternalIp(dimensionDataCloudControlApi).apply(server);
+      assertNotNull(result);
+      assertEquals(result.server(), server);
+      assertEquals(result.externalIp(), externalIp);
+   }
+
+   @Test(dependsOnMethods = "testServerToServerWithExternalIpApplyNotNull")
+   public void testServerToServerWithExternalIpApplyNull() {
+      server = null;
+      ServerWithExternalIp result = new ServerToServerWithExternalIp(dimensionDataCloudControlApi).apply(server);
+      assertNull(result);
+   }
+
+   @Test(dependsOnMethods = "testServerToServerWithExternalIpApplyNotNull")
+   public void testServerToServerWithExternalIpApplyNetworkInfoNull() {
+      server = Server.builder().id("serverId").name("serverName").datacenterId("NA1").networkInfo(null).cpu(cpu)
+            .deployed(true).state(State.NORMAL).sourceImageId("imageId").started(false).createTime(new Date())
+            .memoryGb(1024).guest(Guest.builder().osCustomization(false).operatingSystem(os).build()).build();
+
+      ServerWithExternalIp result = new ServerToServerWithExternalIp(dimensionDataCloudControlApi).apply(server);
+      assertNotNull(result);
+      assertEquals(result.server(), server);
+      assertNull(result.externalIp());
+   }
+
+   @Test(dependsOnMethods = "testServerToServerWithExternalIpApplyNetworkInfoNull")
+   public void testServerToServerWithExternalIpApplyNoMathingNatRuleFound() {
+      String internalIp = "192.168.1.1";
+      String natIp = "192.168.1.2";
+      String networkDomainId = "NetworkDomain1";
+
+      server = Server.builder().id("serverId").name("serverName").datacenterId("NA1")
+            .networkInfo(NetworkInfo.create(networkDomainId, nic, new ArrayList<NIC>())).cpu(cpu).deployed(true)
+            .state(State.NORMAL).sourceImageId("imageId").started(false).createTime(new Date()).memoryGb(1024)
+            .guest(Guest.builder().osCustomization(false).operatingSystem(os).build()).build();
+
+      PagedIterable<NatRule> natRules = PagedIterables.onlyPage(IterableWithMarkers.from(Lists.newArrayList(natRule)));
+
+      expect(dimensionDataCloudControlApi.getNetworkApi()).andReturn(networkApi);
+      expect(networkApi.listNatRules(networkDomainId)).andReturn(natRules);
+      expect(nic.privateIpv4()).andReturn(internalIp);
+      expect(natRule.internalIp()).andReturn(natIp);
+
+      EasyMock.replay(dimensionDataCloudControlApi, networkApi, natRule, nic);
+
+      ServerWithExternalIp result = new ServerToServerWithExternalIp(dimensionDataCloudControlApi).apply(server);
+      assertNotNull(result);
+      assertEquals(result.server(), server);
+      assertNull(result.externalIp());
+   }
+}