Add unit tests in OpenstackNetworkingUtil class
Change-Id: Iadae6a52b22b7e36e4149fa0838bd245f2e5a96d
diff --git a/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtilTest.java b/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtilTest.java
index be4f6d1..eb323ef 100644
--- a/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtilTest.java
+++ b/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/util/OpenstackNetworkingUtilTest.java
@@ -15,6 +15,7 @@
*/
package org.onosproject.openstacknetworking.util;
+import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Lists;
@@ -36,15 +37,26 @@
import org.onosproject.net.device.DeviceService;
import org.onosproject.net.device.DeviceServiceAdapter;
import org.onosproject.openstacknetworking.api.InstancePort;
+import org.onosproject.openstacknetworking.api.OpenstackNetworkService;
+import org.onosproject.openstacknetworking.api.OpenstackRouterAdminService;
import org.onosproject.openstacknetworking.impl.DefaultInstancePort;
+import org.onosproject.openstacknetworking.impl.OpenstackNetworkServiceAdapter;
+import org.onosproject.openstacknetworking.impl.OpenstackRouterServiceAdapter;
+import org.onosproject.openstacknetworking.impl.TestRouterInterface;
import org.onosproject.openstacknetworking.web.OpenstackFloatingIpWebResourceTest;
import org.onosproject.openstacknetworking.web.OpenstackNetworkWebResourceTest;
+import org.onosproject.openstacknode.api.DefaultOpenstackAuth;
+import org.onosproject.openstacknode.api.DefaultOpenstackNode;
import org.onosproject.openstacknode.api.NodeState;
+import org.onosproject.openstacknode.api.OpenstackAuth;
import org.onosproject.openstacknode.api.OpenstackNode;
import org.onosproject.openstacknode.api.OpenstackNodeTest;
import org.openstack4j.model.network.NetFloatingIP;
+import org.openstack4j.model.network.Network;
import org.openstack4j.model.network.Port;
+import org.openstack4j.model.network.RouterInterface;
import org.openstack4j.openstack.networking.domain.NeutronFloatingIP;
+import org.openstack4j.openstack.networking.domain.NeutronNetwork;
import org.openstack4j.openstack.networking.domain.NeutronPort;
import java.io.IOException;
@@ -59,7 +71,19 @@
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.onosproject.net.AnnotationKeys.PORT_NAME;
+import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.addRouterIface;
+import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.associatedFloatingIp;
+import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.checkArpMode;
+import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.getConnectedClient;
import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.getGwByComputeDevId;
+import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.getGwByInstancePort;
+import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.getIntfNameFromPciAddress;
+import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.isAssociatedWithVM;
+import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.jsonToModelEntity;
+import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.modelEntityToJson;
+import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.prettyJson;
+import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.routerInterfacesEquals;
+import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.swapStaleLocation;
public final class OpenstackNetworkingUtilTest {
@@ -73,6 +97,9 @@
private InstancePort instancePort1;
private InstancePort instancePort2;
private InstancePort instancePort3;
+ private Map<String, RouterInterface> routerInterfaceMap = Maps.newHashMap();
+ private OpenstackNode openstackControlNodeV2;
+ private OpenstackNode openstackControlNodeV3;
@Before
public void setUp() {
@@ -117,12 +144,31 @@
.getResourceAsStream("openstack-floatingip3.json");
floatingIp1 = (NetFloatingIP)
- OpenstackNetworkingUtil.jsonToModelEntity(floatingIpjsonStream1, NeutronFloatingIP.class);
+ jsonToModelEntity(floatingIpjsonStream1, NeutronFloatingIP.class);
floatingIp2 = (NetFloatingIP)
- OpenstackNetworkingUtil.jsonToModelEntity(floatingIpjsonStream2, NeutronFloatingIP.class);
+ jsonToModelEntity(floatingIpjsonStream2, NeutronFloatingIP.class);
floatingIp3 = (NetFloatingIP)
- OpenstackNetworkingUtil.jsonToModelEntity(floatingIpjsonStream3, NeutronFloatingIP.class);
+ jsonToModelEntity(floatingIpjsonStream3, NeutronFloatingIP.class);
+ InputStream portJsonStream = OpenstackNetworkWebResourceTest.class
+ .getResourceAsStream("openstack-port.json");
+
+ InputStream sriovPortJsonStream1 = OpenstackNetworkWebResourceTest.class
+ .getResourceAsStream("openstack-port-sriov1.json");
+ InputStream sriovPortJsonStream2 = OpenstackNetworkWebResourceTest.class
+ .getResourceAsStream("openstack-port-sriov2.json");
+ InputStream sriovPortJsonStream3 = OpenstackNetworkWebResourceTest.class
+ .getResourceAsStream("openstack-port-sriov3.json");
+
+ openstackPort = (Port)
+ jsonToModelEntity(portJsonStream, NeutronPort.class);
+
+ openstackSriovPort1 = (Port)
+ jsonToModelEntity(sriovPortJsonStream1, NeutronPort.class);
+ openstackSriovPort2 = (Port)
+ jsonToModelEntity(sriovPortJsonStream2, NeutronPort.class);
+ openstackSriovPort3 = (Port)
+ jsonToModelEntity(sriovPortJsonStream3, NeutronPort.class);
}
@After
@@ -135,16 +181,15 @@
@Test
public void testFloatingIp() throws IOException {
ObjectNode floatingIpNode =
- OpenstackNetworkingUtil.modelEntityToJson(floatingIp1, NeutronFloatingIP.class);
+ modelEntityToJson(floatingIp1, NeutronFloatingIP.class);
InputStream is = IOUtils.toInputStream(floatingIpNode.toString(), StandardCharsets.UTF_8.name());
NetFloatingIP floatingIp2 = (NetFloatingIP)
- OpenstackNetworkingUtil.jsonToModelEntity(is, NeutronFloatingIP.class);
+ jsonToModelEntity(is, NeutronFloatingIP.class);
new EqualsTester().addEqualityGroup(floatingIp1, floatingIp2).testEquals();
}
/**
* Tests the associatedFloatingIp method.
- * @throws NullPointerException
*/
@Test
public void testAsscoatedFloatingIp() throws NullPointerException {
@@ -153,14 +198,37 @@
testSet.add(floatingIp2);
testSet.add(floatingIp3);
- NetFloatingIP floatingIp1 = OpenstackNetworkingUtil.associatedFloatingIp(instancePort1, testSet);
- NetFloatingIP floatingIp2 = OpenstackNetworkingUtil.associatedFloatingIp(instancePort2, testSet);
+ NetFloatingIP floatingIp1 = associatedFloatingIp(instancePort1, testSet);
+ NetFloatingIP floatingIp2 = associatedFloatingIp(instancePort2, testSet);
assertEquals(floatingIp1, this.floatingIp1);
assertEquals(floatingIp2, null);
}
/**
+ * Tests the isAssociatedWithVM method.
+ */
+ @Test
+ public void testIsAssociatedWithVM() {
+ OpenstackNetworkService service = new TestOpenstackNetworkService();
+ NetFloatingIP floatingIp4 = new NeutronFloatingIP().toBuilder().portId("portId4").build();
+
+ assertFalse(isAssociatedWithVM(service, floatingIp4));
+ assertFalse(isAssociatedWithVM(service, floatingIp3));
+ assertTrue(isAssociatedWithVM(service, floatingIp1));
+ }
+
+ /**
+ * Tests the isAssociatedWithVM method in case IllegalStateException is occurred.
+ */
+ @Test(expected = IllegalStateException.class)
+ public void testIsAssociatedWithVMexceptionCase() {
+ OpenstackNetworkService service = new TestOpenstackNetworkService();
+ isAssociatedWithVM(service, floatingIp2);
+ }
+
+
+ /**
* Tests the getGwByInstancePort method.
*/
@Test
@@ -173,9 +241,11 @@
int expectedGwIndex = 2;
- OpenstackNode gw = OpenstackNetworkingUtil.getGwByInstancePort(gws, instancePort1);
+ OpenstackNode gw = getGwByInstancePort(gws, instancePort1);
assertEquals(genGateway(expectedGwIndex), gw);
+
+ assertNull(getGwByInstancePort(gws, null));
}
/**
@@ -222,33 +292,13 @@
@Test
public void testGetIntfNameFromPciAddress() {
- InputStream portJsonStream = OpenstackNetworkWebResourceTest.class
- .getResourceAsStream("openstack-port.json");
-
- InputStream sriovPortJsonStream1 = OpenstackNetworkWebResourceTest.class
- .getResourceAsStream("openstack-port-sriov1.json");
- InputStream sriovPortJsonStream2 = OpenstackNetworkWebResourceTest.class
- .getResourceAsStream("openstack-port-sriov2.json");
- InputStream sriovPortJsonStream3 = OpenstackNetworkWebResourceTest.class
- .getResourceAsStream("openstack-port-sriov3.json");
-
- openstackPort = (Port)
- OpenstackNetworkingUtil.jsonToModelEntity(portJsonStream, NeutronPort.class);
-
- openstackSriovPort1 = (Port)
- OpenstackNetworkingUtil.jsonToModelEntity(sriovPortJsonStream1, NeutronPort.class);
- openstackSriovPort2 = (Port)
- OpenstackNetworkingUtil.jsonToModelEntity(sriovPortJsonStream2, NeutronPort.class);
- openstackSriovPort3 = (Port)
- OpenstackNetworkingUtil.jsonToModelEntity(sriovPortJsonStream3, NeutronPort.class);
-
String expectedIntfName1 = "enp5s8";
String expectedIntfName2 = "enp5s8f3";
- assertNull(OpenstackNetworkingUtil.getIntfNameFromPciAddress(openstackPort));
- assertEquals(expectedIntfName1, OpenstackNetworkingUtil.getIntfNameFromPciAddress(openstackSriovPort1));
- assertEquals(expectedIntfName2, OpenstackNetworkingUtil.getIntfNameFromPciAddress(openstackSriovPort2));
- assertNull(OpenstackNetworkingUtil.getIntfNameFromPciAddress(openstackSriovPort3));
+ assertNull(getIntfNameFromPciAddress(openstackPort));
+ assertEquals(expectedIntfName1, getIntfNameFromPciAddress(openstackSriovPort1));
+ assertEquals(expectedIntfName2, getIntfNameFromPciAddress(openstackSriovPort2));
+ assertNull(getIntfNameFromPciAddress(openstackSriovPort3));
}
/**
@@ -256,7 +306,7 @@
*/
@Test
public void testSwapStaleLocation() {
- InstancePort swappedInstancePort = OpenstackNetworkingUtil.swapStaleLocation(instancePort3);
+ InstancePort swappedInstancePort = swapStaleLocation(instancePort3);
assertEquals(instancePort3.oldDeviceId(), swappedInstancePort.deviceId());
assertEquals(instancePort3.oldPortNumber(), swappedInstancePort.portNumber());
@@ -279,8 +329,38 @@
"port4", deviceService));
}
- private OpenstackNode genGateway(int index) {
+ /**
+ * Tests addRouterIface method.
+ */
+ @Test
+ public void testAddRouterIface() {
+ OpenstackRouterAdminService service = new TestOpenstackRouterAdminService();
+ addRouterIface(openstackPort, service);
+ RouterInterface initialRouterInterface = new TestRouterInterface(openstackPort.getDeviceId(),
+ openstackPort.getFixedIps().stream().findAny().get().getSubnetId(),
+ openstackPort.getId(),
+ openstackPort.getTenantId());
+
+ assertTrue(routerInterfacesEquals(initialRouterInterface, service.routerInterface(openstackPort.getId())));
+
+ addRouterIface(openstackSriovPort1, service);
+ RouterInterface updatedInitialRouterInterface = new TestRouterInterface(openstackSriovPort1.getDeviceId(),
+ openstackSriovPort1.getFixedIps().stream().findAny().get().getSubnetId(),
+ openstackSriovPort1.getId(),
+ openstackSriovPort1.getTenantId());
+
+ assertTrue(routerInterfacesEquals(
+ updatedInitialRouterInterface, service.routerInterface(openstackSriovPort1.getId())));
+ }
+
+ /**
+ * Util for generating dummy gateway node.
+ *
+ * @param index dummy gateway number
+ * @return dummy gateway node
+ */
+ public OpenstackNode genGateway(int index) {
Device intgBrg = InternalOpenstackNodeTest.createDevice(index);
String hostname = "gateway-" + index;
@@ -289,6 +369,75 @@
String uplinkPort = "eth0";
return InternalOpenstackNodeTest.createNode(hostname,
OpenstackNode.NodeType.GATEWAY, intgBrg, ip, uplinkPort, state);
+ }
+
+ /**
+ * Tests the testPrettyJson method.
+ */
+ @Test
+ public void testPrettyJson() {
+ String string = prettyJson(new ObjectMapper(), "{\"json\":\"json\"}");
+ String prettyJsonString = "{\n \"json\" : \"json\"\n}";
+ assertEquals(string, prettyJsonString);
+
+ assertNull(prettyJson(new ObjectMapper(), "{\"json\":\"json\""));
+ assertNull(prettyJson(new ObjectMapper(), "{\"json\"\"json\"}"));
+ }
+
+ /**
+ * Tests the checkArpMode method.
+ */
+ @Test
+ public void testCheckArpMode() {
+ assertFalse(checkArpMode(null));
+ assertTrue(checkArpMode("proxy"));
+ assertTrue(checkArpMode("broadcast"));
+ }
+
+ /**
+ * Tests the getConnectedClient method.
+ */
+ @Test(expected = Exception.class)
+ public void testGetConnectedClient() {
+ OpenstackNode.Builder osNodeBuilderV2 = DefaultOpenstackNode.builder();
+ OpenstackAuth.Builder osNodeAuthBuilderV2 = DefaultOpenstackAuth.builder()
+ .version("v2.0")
+ .port(35357)
+ .protocol(OpenstackAuth.Protocol.HTTP)
+ .project("admin")
+ .username("admin")
+ .password("password")
+ .perspective(OpenstackAuth.Perspective.PUBLIC);
+
+ openstackControlNodeV2 = osNodeBuilderV2.hostname("controllerv2")
+ .type(OpenstackNode.NodeType.CONTROLLER)
+ .managementIp(IpAddress.valueOf("1.1.1.1"))
+ .endPoint("1.1.1.1")
+ .authentication(osNodeAuthBuilderV2.build())
+ .state(NodeState.COMPLETE)
+ .build();
+
+
+ OpenstackNode.Builder osNodeBuilderV3 = DefaultOpenstackNode.builder();
+ OpenstackAuth.Builder osNodeAuthBuilderV3 = DefaultOpenstackAuth.builder()
+ .version("v2")
+ .port(80)
+ .protocol(OpenstackAuth.Protocol.HTTP)
+ .project("admin")
+ .username("admin")
+ .password("password")
+ .perspective(OpenstackAuth.Perspective.PUBLIC);
+
+ openstackControlNodeV3 = osNodeBuilderV3.hostname("controllerv3")
+ .type(OpenstackNode.NodeType.CONTROLLER)
+ .managementIp(IpAddress.valueOf("2.2.2.2"))
+ .endPoint("2.2.2.2")
+ .authentication(osNodeAuthBuilderV3.build())
+ .state(NodeState.COMPLETE)
+ .build();
+
+ getConnectedClient(openstackControlNodeV2);
+ getConnectedClient(openstackControlNodeV3);
}
@@ -327,4 +476,45 @@
return ports;
}
}
+
+ private class TestOpenstackNetworkService extends OpenstackNetworkServiceAdapter {
+ @Override
+ public Network network(String networkId) {
+ if (networkId.equals(openstackSriovPort1.getNetworkId())) {
+ return new NeutronNetwork().toBuilder().name("network").build();
+ } else {
+ return null;
+ }
+ }
+
+ @Override
+ public Port port(String portId) {
+ if (portId.equals(floatingIp1.getPortId())) {
+ return openstackSriovPort1;
+ } else if (portId.equals(floatingIp2.getPortId())) {
+ return openstackSriovPort2;
+ } else if (portId.equals("portId4")) {
+ return new NeutronPort().toBuilder().name("osPort4").build();
+ } else {
+ return null;
+ }
+ }
+ }
+
+ private class TestOpenstackRouterAdminService extends OpenstackRouterServiceAdapter {
+ @Override
+ public void addRouterInterface(RouterInterface osRouterIface) {
+ routerInterfaceMap.put(osRouterIface.getPortId(), osRouterIface);
+ }
+
+ @Override
+ public void updateRouterInterface(RouterInterface osRouterIface) {
+ routerInterfaceMap.put(osRouterIface.getPortId(), osRouterIface);
+ }
+
+ @Override
+ public RouterInterface routerInterface(String osRouterIfaceId) {
+ return routerInterfaceMap.get(osRouterIfaceId);
+ }
+ }
}