Initial implementation of managing IPs for kubevirt spawned VMIs

Change-Id: I68127e1fe42a142765e7696d8ce80de16d3d94a9
diff --git a/apps/kubevirt-networking/api/src/test/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtInstanceTest.java b/apps/kubevirt-networking/api/src/test/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtInstanceTest.java
index c1e59b6..c391eb4 100644
--- a/apps/kubevirt-networking/api/src/test/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtInstanceTest.java
+++ b/apps/kubevirt-networking/api/src/test/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtInstanceTest.java
@@ -36,6 +36,8 @@
     private static final String UID_2 = "2";
     private static final String NAME_1 = "instance-1";
     private static final String NAME_2 = "instance-2";
+    private static final String NETWORK_ID_1 = "net-1";
+    private static final String NETWORK_ID_2 = "net-2";
     private static final MacAddress MAC_1 = MacAddress.valueOf("11:22:33:44:55:66");
     private static final MacAddress MAC_2 = MacAddress.valueOf("66:55:44:33:22:11");
     private static final IpAddress IP_1 = IpAddress.valueOf("10.10.10.10");
@@ -44,8 +46,8 @@
     private static final DeviceId DID_2 = DeviceId.deviceId("did2");
     private static final PortNumber PN_1 = PortNumber.portNumber(1);
     private static final PortNumber PN_2 = PortNumber.portNumber(2);
-    private static final KubevirtPort PORT_1 = createPort(MAC_1, IP_1, DID_1, PN_1);
-    private static final KubevirtPort PORT_2 = createPort(MAC_2, IP_2, DID_2, PN_2);
+    private static final KubevirtPort PORT_1 = createPort(NETWORK_ID_1, MAC_1, IP_1, DID_1, PN_1);
+    private static final KubevirtPort PORT_2 = createPort(NETWORK_ID_2, MAC_2, IP_2, DID_2, PN_2);
 
     private KubevirtInstance instance1;
     private KubevirtInstance sameAsInstance1;
@@ -105,8 +107,10 @@
         assertEquals(ImmutableSet.of(PORT_1), instance1.ports());
     }
 
-    static KubevirtPort createPort(MacAddress mac, IpAddress ip, DeviceId did, PortNumber pn) {
+    static KubevirtPort createPort(String networkId, MacAddress mac, IpAddress ip,
+                                   DeviceId did, PortNumber pn) {
         return DefaultKubevirtPort.builder()
+                .networkId(networkId)
                 .macAddress(mac)
                 .ipAddress(ip)
                 .deviceId(did)
diff --git a/apps/kubevirt-networking/api/src/test/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtNetworkTest.java b/apps/kubevirt-networking/api/src/test/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtNetworkTest.java
index 32ca958..1b39db8 100644
--- a/apps/kubevirt-networking/api/src/test/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtNetworkTest.java
+++ b/apps/kubevirt-networking/api/src/test/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtNetworkTest.java
@@ -22,6 +22,7 @@
 import org.onlab.packet.IpAddress;
 
 import static junit.framework.TestCase.assertEquals;
+import static junit.framework.TestCase.assertTrue;
 import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
 import static org.onosproject.kubevirtnetworking.api.KubevirtNetwork.Type.FLAT;
 import static org.onosproject.kubevirtnetworking.api.KubevirtNetwork.Type.VXLAN;
@@ -128,4 +129,31 @@
         assertEquals(CIDR_1, network.cidr());
         assertEquals(new KubevirtIpPool(IP_POOL_START_1, IP_POOL_END_1), network.ipPool());
     }
+
+    /**
+     * Test IP address initialization.
+     */
+    @Test
+    public void testIpInitialization() {
+        KubevirtIpPool ipPool1 = network1.ipPool();
+        assertEquals(101, ipPool1.availableIps().size());
+        assertEquals(0, ipPool1.allocatedIps().size());
+    }
+
+    /**
+     * Test IP address allocation.
+     */
+    @Test
+    public void testIpAllocationAndRelease() throws Exception {
+        KubevirtIpPool ipPool1 = network1.ipPool();
+        IpAddress ip = ipPool1.allocateIp();
+        assertEquals(100, ipPool1.availableIps().size());
+        assertEquals(1, ipPool1.allocatedIps().size());
+        assertEquals(IpAddress.valueOf("10.10.10.100"), ip);
+
+        ipPool1.releaseIp(ip);
+        assertEquals(101, ipPool1.availableIps().size());
+        assertEquals(0, ipPool1.allocatedIps().size());
+        assertTrue(ipPool1.availableIps().contains(ip));
+    }
 }
diff --git a/apps/kubevirt-networking/api/src/test/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtPortTest.java b/apps/kubevirt-networking/api/src/test/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtPortTest.java
index 00f3cd4..f91ad2e 100644
--- a/apps/kubevirt-networking/api/src/test/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtPortTest.java
+++ b/apps/kubevirt-networking/api/src/test/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtPortTest.java
@@ -30,6 +30,8 @@
  * Unit tests for the default kubevirt port class.
  */
 public class DefaultKubevirtPortTest {
+    private static final String NETWORK_ID_1 = "net-1";
+    private static final String NETWORK_ID_2 = "net-2";
     private static final MacAddress MAC_ADDRESS_1 = MacAddress.valueOf("00:11:22:33:44:55");
     private static final MacAddress MAC_ADDRESS_2 = MacAddress.valueOf("11:22:33:44:55:66");
     private static final IpAddress IP_ADDRESS_1 = IpAddress.valueOf("10.10.10.10");
@@ -57,6 +59,7 @@
     @Before
     public void setUp() {
         port1 = DefaultKubevirtPort.builder()
+                .networkId(NETWORK_ID_1)
                 .macAddress(MAC_ADDRESS_1)
                 .ipAddress(IP_ADDRESS_1)
                 .deviceId(DEVICE_ID_1)
@@ -64,6 +67,7 @@
                 .build();
 
         sameAsPort1 = DefaultKubevirtPort.builder()
+                .networkId(NETWORK_ID_1)
                 .macAddress(MAC_ADDRESS_1)
                 .ipAddress(IP_ADDRESS_1)
                 .deviceId(DEVICE_ID_1)
@@ -71,6 +75,7 @@
                 .build();
 
         port2 = DefaultKubevirtPort.builder()
+                .networkId(NETWORK_ID_2)
                 .macAddress(MAC_ADDRESS_2)
                 .ipAddress(IP_ADDRESS_2)
                 .deviceId(DEVICE_ID_2)
@@ -95,6 +100,7 @@
     public void testConstruction() {
         KubevirtPort port = port1;
 
+        assertEquals(NETWORK_ID_1, port.networkId());
         assertEquals(MAC_ADDRESS_1, port.macAddress());
         assertEquals(IP_ADDRESS_1, port.ipAddress());
         assertEquals(DEVICE_ID_1, port.deviceId());