blob: 630522c4f76cc632c06250b2b1591f014afdd609 [file] [log] [blame]
/*
* 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());
}
}