Add unit tests for OpenstackNetworkingUtil.

Change-Id: I86f573564bcc16df69e0b69ff623c68101b399d1
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 41252b1..270fbd6 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
@@ -26,13 +26,21 @@
 import org.junit.Test;
 import org.onlab.packet.Ip4Address;
 import org.onlab.packet.IpAddress;
+import org.onlab.packet.MacAddress;
 import org.onosproject.net.Device;
 import org.onosproject.net.DeviceId;
+import org.onosproject.net.PortNumber;
+import org.onosproject.openstacknetworking.api.InstancePort;
+import org.onosproject.openstacknetworking.impl.DefaultInstancePort;
+import org.onosproject.openstacknetworking.web.OpenstackFloatingIpWebResourceTest;
+import org.onosproject.openstacknetworking.web.OpenstackNetworkWebResourceTest;
 import org.onosproject.openstacknode.api.NodeState;
 import org.onosproject.openstacknode.api.OpenstackNode;
 import org.onosproject.openstacknode.api.OpenstackNodeTest;
 import org.openstack4j.model.network.NetFloatingIP;
+import org.openstack4j.model.network.Port;
 import org.openstack4j.openstack.networking.domain.NeutronFloatingIP;
+import org.openstack4j.openstack.networking.domain.NeutronPort;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -41,18 +49,71 @@
 import java.util.Set;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
 import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.getGwByComputeDevId;
 
 public final class OpenstackNetworkingUtilTest {
 
-    private NetFloatingIP floatingIp;
+    private NetFloatingIP floatingIp1;
+    private NetFloatingIP floatingIp2;
+    private NetFloatingIP floatingIp3;
+    private Port openstackPort;
+    private Port openstackSriovPort1;
+    private Port openstackSriovPort2;
+    private Port openstackSriovPort3;
+    private InstancePort instancePort1;
+    private InstancePort instancePort2;
+    private InstancePort instancePort3;
 
     @Before
     public void setUp() {
-        floatingIp = NeutronFloatingIP.builder()
-                .floatingNetworkId("floatingNetworkingId")
-                .portId("portId")
+
+        instancePort1 = DefaultInstancePort.builder()
+                .networkId("net-id-1")
+                .portId("ce705c24-c1ef-408a-bda3-7bbd946164ab")
+                .deviceId(DeviceId.deviceId("of:000000000000000a"))
+                .portNumber(PortNumber.portNumber(1, "tap-1"))
+                .ipAddress(IpAddress.valueOf("10.0.0.3"))
+                .macAddress(MacAddress.valueOf("11:22:33:44:55:66"))
+                .state(InstancePort.State.valueOf("ACTIVE"))
                 .build();
+
+        instancePort2 = DefaultInstancePort.builder()
+                .networkId("net-id-2")
+                .portId("port-id-2")
+                .deviceId(DeviceId.deviceId("of:000000000000000b"))
+                .portNumber(PortNumber.portNumber(2, "tap-2"))
+                .ipAddress(IpAddress.valueOf("10.10.10.2"))
+                .macAddress(MacAddress.valueOf("22:33:44:55:66:11"))
+                .state(InstancePort.State.valueOf("ACTIVE"))
+                .build();
+
+        instancePort3 = DefaultInstancePort.builder()
+                .networkId("net-id-3")
+                .portId("port-id-3")
+                .deviceId(DeviceId.deviceId("of:000000000000000c"))
+                .oldDeviceId(DeviceId.deviceId("of:000000000000000d"))
+                .oldPortNumber(PortNumber.portNumber(4, "tap-4"))
+                .portNumber(PortNumber.portNumber(3, "tap-3"))
+                .ipAddress(IpAddress.valueOf("10.10.10.3"))
+                .macAddress(MacAddress.valueOf("33:44:55:66:11:22"))
+                .state(InstancePort.State.valueOf("ACTIVE"))
+                .build();
+
+        InputStream floatingIpjsonStream1 = OpenstackFloatingIpWebResourceTest.class
+                .getResourceAsStream("openstack-floatingip1.json");
+        InputStream floatingIpjsonStream2 = OpenstackFloatingIpWebResourceTest.class
+                .getResourceAsStream("openstack-floatingip2.json");
+        InputStream floatingIpjsonStream3 = OpenstackFloatingIpWebResourceTest.class
+                .getResourceAsStream("openstack-floatingip3.json");
+
+        floatingIp1 = (NetFloatingIP)
+                OpenstackNetworkingUtil.jsonToModelEntity(floatingIpjsonStream1, NeutronFloatingIP.class);
+        floatingIp2 = (NetFloatingIP)
+                OpenstackNetworkingUtil.jsonToModelEntity(floatingIpjsonStream2, NeutronFloatingIP.class);
+        floatingIp3 = (NetFloatingIP)
+                OpenstackNetworkingUtil.jsonToModelEntity(floatingIpjsonStream3, NeutronFloatingIP.class);
+
     }
 
     @After
@@ -65,11 +126,47 @@
     @Test
     public void testFloatingIp() throws IOException {
         ObjectNode floatingIpNode =
-                OpenstackNetworkingUtil.modelEntityToJson(floatingIp, NeutronFloatingIP.class);
+                OpenstackNetworkingUtil.modelEntityToJson(floatingIp1, NeutronFloatingIP.class);
         InputStream is = IOUtils.toInputStream(floatingIpNode.toString(), StandardCharsets.UTF_8.name());
         NetFloatingIP floatingIp2 = (NetFloatingIP)
                 OpenstackNetworkingUtil.jsonToModelEntity(is, NeutronFloatingIP.class);
-        new EqualsTester().addEqualityGroup(floatingIp, floatingIp2).testEquals();
+        new EqualsTester().addEqualityGroup(floatingIp1, floatingIp2).testEquals();
+    }
+
+    /**
+     * Tests the associatedFloatingIp method.
+     * @throws NullPointerException
+     */
+    @Test
+    public void testAsscoatedFloatingIp() throws NullPointerException {
+        Set<NetFloatingIP> testSet = Sets.newHashSet();
+        testSet.add(floatingIp1);
+        testSet.add(floatingIp2);
+        testSet.add(floatingIp3);
+
+        NetFloatingIP floatingIp1 = OpenstackNetworkingUtil.associatedFloatingIp(instancePort1, testSet);
+        NetFloatingIP floatingIp2 = OpenstackNetworkingUtil.associatedFloatingIp(instancePort2, testSet);
+
+        assertEquals(floatingIp1, this.floatingIp1);
+        assertEquals(floatingIp2, null);
+    }
+
+    /**
+     * Tests the getGwByInstancePort method.
+     */
+    @Test
+    public void testGetGwByInstancePort() {
+
+        Set<OpenstackNode> gws = Sets.newConcurrentHashSet();
+        gws.add(genGateway(1));
+        gws.add(genGateway(2));
+        gws.add(genGateway(3));
+
+        int expectedGwIndex = 2;
+
+        OpenstackNode gw = OpenstackNetworkingUtil.getGwByInstancePort(gws, instancePort1);
+
+        assertEquals(genGateway(expectedGwIndex), gw);
     }
 
     /**
@@ -78,6 +175,10 @@
     @Test
     public void testGetGwByComputeDevId() {
         Set<OpenstackNode> gws = Sets.newConcurrentHashSet();
+
+        OpenstackNode nullGw = getGwByComputeDevId(gws, genDeviceId(1));
+        assertNull(nullGw);
+
         gws.add(genGateway(1));
         gws.add(genGateway(2));
         gws.add(genGateway(3));
@@ -106,6 +207,53 @@
         assertEquals(numOfDev, sum);
     }
 
+    /**
+     * Tests getIntfNameFromPciAddress method.
+     */
+    @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));
+    }
+
+    /**
+     * tests swapStaleLocation method.
+     */
+    @Test
+    public void testSwapStaleLocation() {
+        InstancePort swappedInstancePort =  OpenstackNetworkingUtil.swapStaleLocation(instancePort3);
+
+        assertEquals(instancePort3.oldDeviceId(), swappedInstancePort.deviceId());
+        assertEquals(instancePort3.oldPortNumber(), swappedInstancePort.portNumber());
+
+    }
+
     private OpenstackNode genGateway(int index) {
 
         Device intgBrg = InternalOpenstackNodeTest.createDevice(index);