Notify kubevirt router internal and external network related events
1. Add networkName attribute into FloatingIp class.
Change-Id: I4aeb8031ef4c86d7ae9a6423276b024c05fe0649
diff --git a/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtFloatingIpCodecTest.java b/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtFloatingIpCodecTest.java
index 79182da..f8b5d14 100644
--- a/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtFloatingIpCodecTest.java
+++ b/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtFloatingIpCodecTest.java
@@ -71,6 +71,7 @@
KubevirtFloatingIp floatingIp = DefaultKubevirtFloatingIp.builder()
.id("fip-id")
.routerName("router-1")
+ .networkName("flat-1")
.floatingIp(IpAddress.valueOf("10.10.10.10"))
.podName("pod-1")
.fixedIp(IpAddress.valueOf("20.20.20.20"))
@@ -86,6 +87,7 @@
assertEquals("fip-1", floatingIp.id());
assertEquals("router-1", floatingIp.routerName());
+ assertEquals("flat-1", floatingIp.networkName());
assertEquals("10.10.10.10", floatingIp.floatingIp().toString());
assertEquals("pod-1", floatingIp.podName());
assertEquals("20.20.20.20", floatingIp.fixedIp().toString());
diff --git a/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtFloatingIpJsonMatcher.java b/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtFloatingIpJsonMatcher.java
index 0bcfa0a..ccfb76c 100644
--- a/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtFloatingIpJsonMatcher.java
+++ b/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtFloatingIpJsonMatcher.java
@@ -28,6 +28,7 @@
private final KubevirtFloatingIp floatingIp;
private static final String ID = "id";
private static final String ROUTER_NAME = "routerName";
+ private static final String NETWORK_NAME = "networkName";
private static final String POD_NAME = "podName";
private static final String FLOATING_IP = "floatingIp";
private static final String FIXED_IP = "fixedIp";
@@ -55,6 +56,14 @@
return false;
}
+ // check network name
+ String jsonNetworkName = jsonNode.get(NETWORK_NAME).asText();
+ String networkName = floatingIp.networkName();
+ if (!jsonNetworkName.equals(networkName)) {
+ description.appendText("Network name was " + jsonNetworkName);
+ return false;
+ }
+
// check floating IP
String jsonFip = jsonNode.get(FLOATING_IP).asText();
String fip = floatingIp.floatingIp().toString();
diff --git a/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/impl/KubevirtRouterManagerTest.java b/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/impl/KubevirtRouterManagerTest.java
index 2bc222e..2b90712 100644
--- a/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/impl/KubevirtRouterManagerTest.java
+++ b/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/impl/KubevirtRouterManagerTest.java
@@ -49,6 +49,10 @@
import static org.onosproject.kubevirtnetworking.api.KubevirtRouterEvent.Type.KUBEVIRT_FLOATING_IP_REMOVED;
import static org.onosproject.kubevirtnetworking.api.KubevirtRouterEvent.Type.KUBEVIRT_FLOATING_IP_UPDATED;
import static org.onosproject.kubevirtnetworking.api.KubevirtRouterEvent.Type.KUBEVIRT_ROUTER_CREATED;
+import static org.onosproject.kubevirtnetworking.api.KubevirtRouterEvent.Type.KUBEVIRT_ROUTER_EXTERNAL_NETWORK_ATTACHED;
+import static org.onosproject.kubevirtnetworking.api.KubevirtRouterEvent.Type.KUBEVIRT_ROUTER_EXTERNAL_NETWORK_DETACHED;
+import static org.onosproject.kubevirtnetworking.api.KubevirtRouterEvent.Type.KUBEVIRT_ROUTER_INTERNAL_NETWORKS_ATTACHED;
+import static org.onosproject.kubevirtnetworking.api.KubevirtRouterEvent.Type.KUBEVIRT_ROUTER_INTERNAL_NETWORKS_DETACHED;
import static org.onosproject.kubevirtnetworking.api.KubevirtRouterEvent.Type.KUBEVIRT_ROUTER_REMOVED;
import static org.onosproject.kubevirtnetworking.api.KubevirtRouterEvent.Type.KUBEVIRT_ROUTER_UPDATED;
@@ -61,6 +65,7 @@
private static final String ROUTER_NAME = "router-1";
private static final String POD_NAME = "pod-1";
+ private static final String NETWORK_NAME = "flat-1";
private static final String UPDATED_DESCRIPTION = "router-updated";
private static final MacAddress UPDATED_MAC = MacAddress.valueOf("FF:FF:FF:FF:FF:FF");
@@ -70,17 +75,31 @@
private static final KubevirtRouter ROUTER = DefaultKubevirtRouter.builder()
.name(ROUTER_NAME)
.description(ROUTER_NAME)
- .internal(ImmutableSet.of("vxlan-1", "vxlan-2"))
- .external(ImmutableMap.of("10.10.10.10", "flat"))
+ .internal(ImmutableSet.of())
+ .external(ImmutableMap.of())
.enableSnat(true)
- .peerRouter(new KubevirtPeerRouter(IpAddress.valueOf("20.20.20.20"),
- MacAddress.valueOf("11:22:33:44:55:66")))
.build();
private static final KubevirtRouter ROUTER_UPDATED = DefaultKubevirtRouter.builder()
.name(ROUTER_NAME)
.description(UPDATED_DESCRIPTION)
+ .internal(ImmutableSet.of())
+ .external(ImmutableMap.of())
+ .enableSnat(true)
+ .build();
+
+ private static final KubevirtRouter ROUTER_WITH_INTERNAL = DefaultKubevirtRouter.builder()
+ .name(ROUTER_NAME)
+ .description(ROUTER_NAME)
.internal(ImmutableSet.of("vxlan-1", "vxlan-2"))
+ .external(ImmutableMap.of())
+ .enableSnat(true)
+ .build();
+
+ private static final KubevirtRouter ROUTER_WITH_EXTERNAL = DefaultKubevirtRouter.builder()
+ .name(ROUTER_NAME)
+ .description(ROUTER_NAME)
+ .internal(ImmutableSet.of())
.external(ImmutableMap.of("10.10.10.10", "flat"))
.enableSnat(true)
.peerRouter(new KubevirtPeerRouter(IpAddress.valueOf("20.20.20.20"),
@@ -90,12 +109,14 @@
private static final KubevirtFloatingIp FLOATING_IP_DISASSOCIATED = DefaultKubevirtFloatingIp.builder()
.id(FLOATING_IP_ID)
.routerName(ROUTER_NAME)
+ .networkName(NETWORK_NAME)
.floatingIp(IpAddress.valueOf("10.10.10.10"))
.build();
private static final KubevirtFloatingIp FLOATING_IP_ASSOCIATED = DefaultKubevirtFloatingIp.builder()
.id(FLOATING_IP_ID)
.routerName(ROUTER_NAME)
+ .networkName(NETWORK_NAME)
.floatingIp(IpAddress.valueOf("10.10.10.10"))
.fixedIp(IpAddress.valueOf("20.20.20.20"))
.podName(POD_NAME)
@@ -184,7 +205,7 @@
*/
@Test
public void testPeerRouterMacUpdate() {
- target.createRouter(ROUTER);
+ target.createRouter(ROUTER_WITH_EXTERNAL);
target.updatePeerRouterMac(ROUTER_NAME, UPDATED_MAC);
assertEquals("MAC address was not updated", UPDATED_MAC,
@@ -194,6 +215,53 @@
}
/**
+ * Tests router's internal networks attached and detached.
+ */
+ @Test
+ public void testRouterInternalAttachedAndDetached() {
+ target.createRouter(ROUTER);
+ assertEquals("Number of router did not match", 1, target.routers().size());
+ assertEquals("Router internal did not match", 0, target.router(ROUTER_NAME).internal().size());
+
+ target.updateRouter(ROUTER_WITH_INTERNAL);
+ assertEquals("Number of router did not match", 1, target.routers().size());
+ assertEquals("Router internal did not match", 2, target.router(ROUTER_NAME).internal().size());
+
+ target.updateRouter(ROUTER);
+ assertEquals("Number of router did not match", 1, target.routers().size());
+ assertEquals("Router internal did not match", 0, target.router(ROUTER_NAME).internal().size());
+
+ validateEvents(KUBEVIRT_ROUTER_CREATED, KUBEVIRT_ROUTER_UPDATED,
+ KUBEVIRT_ROUTER_INTERNAL_NETWORKS_ATTACHED, KUBEVIRT_ROUTER_UPDATED,
+ KUBEVIRT_ROUTER_INTERNAL_NETWORKS_DETACHED);
+ }
+
+ /**
+ * Tests router's external networks attached and detached.
+ */
+ @Test
+ public void testRouterExternalAttachedAndDetached() {
+ target.createRouter(ROUTER);
+ assertEquals("Number of router did not match", 1, target.routers().size());
+ assertNull(target.router(ROUTER_NAME).peerRouter());
+ assertEquals(0, target.router(ROUTER_NAME).external().size());
+
+ target.updateRouter(ROUTER_WITH_EXTERNAL);
+ assertEquals("Number of router did not match", 1, target.routers().size());
+ assertNotNull(target.router(ROUTER_NAME).peerRouter());
+ assertEquals(1, target.router(ROUTER_NAME).external().size());
+
+ target.updateRouter(ROUTER);
+ assertEquals("Number of router did not match", 1, target.routers().size());
+ assertNull(target.router(ROUTER_NAME).peerRouter());
+ assertEquals(0, target.router(ROUTER_NAME).external().size());
+
+ validateEvents(KUBEVIRT_ROUTER_CREATED, KUBEVIRT_ROUTER_UPDATED,
+ KUBEVIRT_ROUTER_EXTERNAL_NETWORK_ATTACHED, KUBEVIRT_ROUTER_UPDATED,
+ KUBEVIRT_ROUTER_EXTERNAL_NETWORK_DETACHED);
+ }
+
+ /**
* Tests if creating a null router fails with an exception.
*/
@Test(expected = NullPointerException.class)
diff --git a/apps/kubevirt-networking/app/src/test/resources/org/onosproject/kubevirtnetworking/codec/KubevirtFloatingIp.json b/apps/kubevirt-networking/app/src/test/resources/org/onosproject/kubevirtnetworking/codec/KubevirtFloatingIp.json
index fa85c53..1424d48 100644
--- a/apps/kubevirt-networking/app/src/test/resources/org/onosproject/kubevirtnetworking/codec/KubevirtFloatingIp.json
+++ b/apps/kubevirt-networking/app/src/test/resources/org/onosproject/kubevirtnetworking/codec/KubevirtFloatingIp.json
@@ -1,6 +1,7 @@
{
"id": "fip-1",
"routerName": "router-1",
+ "networkName": "flat-1",
"floatingIp": "10.10.10.10",
"podName": "pod-1",
"fixedIp": "20.20.20.20"