Add IPv6 HostManager test.
Change-Id: I84a54b3635fd5b7a2a591f9bcf54cb3f7bceaddb
diff --git a/core/net/src/test/java/org/onosproject/net/host/impl/HostManagerTest.java b/core/net/src/test/java/org/onosproject/net/host/impl/HostManagerTest.java
index 2a461bf..1780cd4 100644
--- a/core/net/src/test/java/org/onosproject/net/host/impl/HostManagerTest.java
+++ b/core/net/src/test/java/org/onosproject/net/host/impl/HostManagerTest.java
@@ -70,11 +70,17 @@
private static final VlanId VLAN2 = VlanId.vlanId((short) 2);
private static final MacAddress MAC1 = MacAddress.valueOf("00:00:11:00:00:01");
private static final MacAddress MAC2 = MacAddress.valueOf("00:00:22:00:00:02");
+ private static final MacAddress MAC3 = MacAddress.valueOf("00:00:33:00:00:03");
+ private static final MacAddress MAC4 = MacAddress.valueOf("00:00:44:00:00:04");
private static final HostId HID1 = HostId.hostId(MAC1, VLAN1);
private static final HostId HID2 = HostId.hostId(MAC2, VLAN1);
+ private static final HostId HID3 = HostId.hostId(MAC3, VLAN1);
+ private static final HostId HID4 = HostId.hostId(MAC4, VLAN1);
private static final IpAddress IP1 = IpAddress.valueOf("10.0.0.1");
private static final IpAddress IP2 = IpAddress.valueOf("10.0.0.2");
+ private static final IpAddress IP3 = IpAddress.valueOf("2001::1");
+ private static final IpAddress IP4 = IpAddress.valueOf("2001::2");
private static final DeviceId DID1 = DeviceId.deviceId("of:001");
private static final DeviceId DID2 = DeviceId.deviceId("of:002");
@@ -94,6 +100,15 @@
private static final InterfaceIpAddress IA3 =
new InterfaceIpAddress(IpAddress.valueOf("10.3.3.3"),
IpPrefix.valueOf("10.3.3.0/24"));
+ private static final InterfaceIpAddress IA4 =
+ new InterfaceIpAddress(IpAddress.valueOf("2001:100::1"),
+ IpPrefix.valueOf("2001:100::/56"));
+ private static final InterfaceIpAddress IA5 =
+ new InterfaceIpAddress(IpAddress.valueOf("2001:200::1"),
+ IpPrefix.valueOf("2001:200::/48"));
+ private static final InterfaceIpAddress IA6 =
+ new InterfaceIpAddress(IpAddress.valueOf("2001:300::1"),
+ IpPrefix.valueOf("2001:300::/56"));
private HostManager mgr;
@@ -169,6 +184,28 @@
}
@Test
+ public void hostDetectedIPv6() {
+ assertNull("host shouldn't be found", mgr.getHost(HID3));
+
+ // host addition
+ detect(HID3, MAC3, VLAN1, LOC1, IP3);
+ assertEquals("exactly one should be found", 1, mgr.getHostCount());
+ detect(HID4, MAC4, VLAN2, LOC2, IP3);
+ assertEquals("two hosts should be found", 2, mgr.getHostCount());
+ validateEvents(HOST_ADDED, HOST_ADDED);
+
+ // host motion
+ detect(HID3, MAC3, VLAN1, LOC2, IP3);
+ validateEvents(HOST_MOVED);
+ assertEquals("only two hosts should be found", 2, mgr.getHostCount());
+
+ // host update
+ detect(HID3, MAC3, VLAN1, LOC2, IP4);
+ validateEvents(HOST_UPDATED);
+ assertEquals("only two hosts should be found", 2, mgr.getHostCount());
+ }
+
+ @Test
public void hostVanished() {
detect(HID1, MAC1, VLAN1, LOC1, IP1);
providerService.hostVanished(HID1);
@@ -177,6 +214,15 @@
assertNull("host should have been removed", mgr.getHost(HID1));
}
+ @Test
+ public void hostVanishedIPv6() {
+ detect(HID3, MAC3, VLAN1, LOC1, IP3);
+ providerService.hostVanished(HID3);
+ validateEvents(HOST_ADDED, HOST_REMOVED);
+
+ assertNull("host should have been removed", mgr.getHost(HID3));
+ }
+
private void validateHosts(
String msg, Iterable<Host> hosts, HostId... ids) {
Set<HostId> hids = Sets.newHashSet(ids);
@@ -199,6 +245,19 @@
assertTrue("incorrect host location", mgr.getConnectedHosts(DID2).isEmpty());
}
+ @Test
+ public void getHostsIPv6() {
+ detect(HID3, MAC3, VLAN1, LOC1, IP3);
+ detect(HID4, MAC4, VLAN1, LOC2, IP4);
+
+ validateHosts("host not properly stored", mgr.getHosts(), HID3, HID4);
+ validateHosts("can't get hosts by VLAN", mgr.getHostsByVlan(VLAN1), HID3, HID4);
+ validateHosts("can't get hosts by MAC", mgr.getHostsByMac(MAC3), HID3);
+ validateHosts("can't get hosts by IP", mgr.getHostsByIp(IP3), HID3);
+ validateHosts("can't get hosts by location", mgr.getConnectedHosts(LOC1), HID3);
+ assertTrue("incorrect host location", mgr.getConnectedHosts(DID2).isEmpty());
+ }
+
private static class TestHostProvider extends AbstractProvider
implements HostProvider {
@@ -263,6 +322,40 @@
}
@Test
+ public void bindAddressesToPortIPv6() {
+ PortAddresses add1 =
+ new PortAddresses(CP1, Sets.newHashSet(IA4, IA5), MAC3, VlanId.NONE);
+
+ mgr.bindAddressesToPort(add1);
+ Set<PortAddresses> storedAddresses = mgr.getAddressBindingsForPort(CP1);
+
+ assertEquals(1, storedAddresses.size());
+ assertTrue(storedAddresses.contains(add1));
+
+ // Add some more addresses and check that they're added correctly
+ PortAddresses add2 =
+ new PortAddresses(CP1, Sets.newHashSet(IA6), null,
+ VlanId.vlanId((short) 2));
+
+ mgr.bindAddressesToPort(add2);
+ storedAddresses = mgr.getAddressBindingsForPort(CP1);
+
+ assertEquals(2, storedAddresses.size());
+ assertTrue(storedAddresses.contains(add1));
+ assertTrue(storedAddresses.contains(add2));
+
+ PortAddresses add3 = new PortAddresses(CP1, null, MAC4, VlanId.NONE);
+
+ mgr.bindAddressesToPort(add3);
+ storedAddresses = mgr.getAddressBindingsForPort(CP1);
+
+ assertEquals(3, storedAddresses.size());
+ assertTrue(storedAddresses.contains(add1));
+ assertTrue(storedAddresses.contains(add2));
+ assertTrue(storedAddresses.contains(add3));
+ }
+
+ @Test
public void unbindAddressesFromPort() {
PortAddresses add1 =
new PortAddresses(CP1, Sets.newHashSet(IA1, IA2), MAC1, VlanId.NONE);
@@ -291,6 +384,34 @@
}
@Test
+ public void unbindAddressesFromPortIPv6() {
+ PortAddresses add1 =
+ new PortAddresses(CP1, Sets.newHashSet(IA4, IA5), MAC3, VlanId.NONE);
+
+ mgr.bindAddressesToPort(add1);
+ Set<PortAddresses> storedAddresses = mgr.getAddressBindingsForPort(CP1);
+
+ assertEquals(1, storedAddresses.size());
+ assertTrue(storedAddresses.contains(add1));
+
+ PortAddresses rem1 =
+ new PortAddresses(CP1, Sets.newHashSet(IA4), null, VlanId.NONE);
+
+ mgr.unbindAddressesFromPort(rem1);
+ storedAddresses = mgr.getAddressBindingsForPort(CP1);
+
+ // It shouldn't have been removed because it didn't match the originally
+ // submitted address object
+ assertEquals(1, storedAddresses.size());
+ assertTrue(storedAddresses.contains(add1));
+
+ mgr.unbindAddressesFromPort(add1);
+ storedAddresses = mgr.getAddressBindingsForPort(CP1);
+
+ assertTrue(storedAddresses.isEmpty());
+ }
+
+ @Test
public void clearAddresses() {
PortAddresses add1 =
new PortAddresses(CP1, Sets.newHashSet(IA1, IA2), MAC1, VlanId.NONE);
@@ -308,6 +429,23 @@
}
@Test
+ public void clearAddressesIPv6() {
+ PortAddresses add1 =
+ new PortAddresses(CP1, Sets.newHashSet(IA4, IA5), MAC3, VlanId.NONE);
+
+ mgr.bindAddressesToPort(add1);
+ Set<PortAddresses> storedAddresses = mgr.getAddressBindingsForPort(CP1);
+
+ assertEquals(1, storedAddresses.size());
+ assertTrue(storedAddresses.contains(add1));
+
+ mgr.clearAddresses(CP1);
+ storedAddresses = mgr.getAddressBindingsForPort(CP1);
+
+ assertTrue(storedAddresses.isEmpty());
+ }
+
+ @Test
public void getAddressBindingsForPort() {
PortAddresses add1 =
new PortAddresses(CP1, Sets.newHashSet(IA1, IA2), MAC1, VlanId.NONE);
@@ -320,6 +458,18 @@
}
@Test
+ public void getAddressBindingsForPortIPv6() {
+ PortAddresses add1 =
+ new PortAddresses(CP1, Sets.newHashSet(IA4, IA5), MAC3, VlanId.NONE);
+
+ mgr.bindAddressesToPort(add1);
+ Set<PortAddresses> storedAddresses = mgr.getAddressBindingsForPort(CP1);
+
+ assertEquals(1, storedAddresses.size());
+ assertTrue(storedAddresses.contains(add1));
+ }
+
+ @Test
public void getAddressBindings() {
Set<PortAddresses> storedAddresses = mgr.getAddressBindings();
@@ -344,4 +494,30 @@
assertTrue(storedAddresses.size() == 2);
assertTrue(storedAddresses.equals(Sets.newHashSet(add1, add2)));
}
+
+ @Test
+ public void getAddressBindingsIPv6() {
+ Set<PortAddresses> storedAddresses = mgr.getAddressBindings();
+
+ assertTrue(storedAddresses.isEmpty());
+
+ PortAddresses add1 =
+ new PortAddresses(CP1, Sets.newHashSet(IA4, IA5), MAC3, VlanId.NONE);
+
+ mgr.bindAddressesToPort(add1);
+
+ storedAddresses = mgr.getAddressBindings();
+
+ assertTrue(storedAddresses.size() == 1);
+
+ PortAddresses add2 =
+ new PortAddresses(CP2, Sets.newHashSet(IA5), MAC4, VlanId.NONE);
+
+ mgr.bindAddressesToPort(add2);
+
+ storedAddresses = mgr.getAddressBindings();
+
+ assertTrue(storedAddresses.size() == 2);
+ assertTrue(storedAddresses.equals(Sets.newHashSet(add1, add2)));
+ }
}