Kunihiro Ishiguro
Committed by Jonathan Hart

Add IPv6 HostManager test.

Change-Id: I84a54b3635fd5b7a2a591f9bcf54cb3f7bceaddb
...@@ -70,11 +70,17 @@ public class HostManagerTest { ...@@ -70,11 +70,17 @@ public class HostManagerTest {
70 private static final VlanId VLAN2 = VlanId.vlanId((short) 2); 70 private static final VlanId VLAN2 = VlanId.vlanId((short) 2);
71 private static final MacAddress MAC1 = MacAddress.valueOf("00:00:11:00:00:01"); 71 private static final MacAddress MAC1 = MacAddress.valueOf("00:00:11:00:00:01");
72 private static final MacAddress MAC2 = MacAddress.valueOf("00:00:22:00:00:02"); 72 private static final MacAddress MAC2 = MacAddress.valueOf("00:00:22:00:00:02");
73 + private static final MacAddress MAC3 = MacAddress.valueOf("00:00:33:00:00:03");
74 + private static final MacAddress MAC4 = MacAddress.valueOf("00:00:44:00:00:04");
73 private static final HostId HID1 = HostId.hostId(MAC1, VLAN1); 75 private static final HostId HID1 = HostId.hostId(MAC1, VLAN1);
74 private static final HostId HID2 = HostId.hostId(MAC2, VLAN1); 76 private static final HostId HID2 = HostId.hostId(MAC2, VLAN1);
77 + private static final HostId HID3 = HostId.hostId(MAC3, VLAN1);
78 + private static final HostId HID4 = HostId.hostId(MAC4, VLAN1);
75 79
76 private static final IpAddress IP1 = IpAddress.valueOf("10.0.0.1"); 80 private static final IpAddress IP1 = IpAddress.valueOf("10.0.0.1");
77 private static final IpAddress IP2 = IpAddress.valueOf("10.0.0.2"); 81 private static final IpAddress IP2 = IpAddress.valueOf("10.0.0.2");
82 + private static final IpAddress IP3 = IpAddress.valueOf("2001::1");
83 + private static final IpAddress IP4 = IpAddress.valueOf("2001::2");
78 84
79 private static final DeviceId DID1 = DeviceId.deviceId("of:001"); 85 private static final DeviceId DID1 = DeviceId.deviceId("of:001");
80 private static final DeviceId DID2 = DeviceId.deviceId("of:002"); 86 private static final DeviceId DID2 = DeviceId.deviceId("of:002");
...@@ -94,6 +100,15 @@ public class HostManagerTest { ...@@ -94,6 +100,15 @@ public class HostManagerTest {
94 private static final InterfaceIpAddress IA3 = 100 private static final InterfaceIpAddress IA3 =
95 new InterfaceIpAddress(IpAddress.valueOf("10.3.3.3"), 101 new InterfaceIpAddress(IpAddress.valueOf("10.3.3.3"),
96 IpPrefix.valueOf("10.3.3.0/24")); 102 IpPrefix.valueOf("10.3.3.0/24"));
103 + private static final InterfaceIpAddress IA4 =
104 + new InterfaceIpAddress(IpAddress.valueOf("2001:100::1"),
105 + IpPrefix.valueOf("2001:100::/56"));
106 + private static final InterfaceIpAddress IA5 =
107 + new InterfaceIpAddress(IpAddress.valueOf("2001:200::1"),
108 + IpPrefix.valueOf("2001:200::/48"));
109 + private static final InterfaceIpAddress IA6 =
110 + new InterfaceIpAddress(IpAddress.valueOf("2001:300::1"),
111 + IpPrefix.valueOf("2001:300::/56"));
97 112
98 private HostManager mgr; 113 private HostManager mgr;
99 114
...@@ -169,6 +184,28 @@ public class HostManagerTest { ...@@ -169,6 +184,28 @@ public class HostManagerTest {
169 } 184 }
170 185
171 @Test 186 @Test
187 + public void hostDetectedIPv6() {
188 + assertNull("host shouldn't be found", mgr.getHost(HID3));
189 +
190 + // host addition
191 + detect(HID3, MAC3, VLAN1, LOC1, IP3);
192 + assertEquals("exactly one should be found", 1, mgr.getHostCount());
193 + detect(HID4, MAC4, VLAN2, LOC2, IP3);
194 + assertEquals("two hosts should be found", 2, mgr.getHostCount());
195 + validateEvents(HOST_ADDED, HOST_ADDED);
196 +
197 + // host motion
198 + detect(HID3, MAC3, VLAN1, LOC2, IP3);
199 + validateEvents(HOST_MOVED);
200 + assertEquals("only two hosts should be found", 2, mgr.getHostCount());
201 +
202 + // host update
203 + detect(HID3, MAC3, VLAN1, LOC2, IP4);
204 + validateEvents(HOST_UPDATED);
205 + assertEquals("only two hosts should be found", 2, mgr.getHostCount());
206 + }
207 +
208 + @Test
172 public void hostVanished() { 209 public void hostVanished() {
173 detect(HID1, MAC1, VLAN1, LOC1, IP1); 210 detect(HID1, MAC1, VLAN1, LOC1, IP1);
174 providerService.hostVanished(HID1); 211 providerService.hostVanished(HID1);
...@@ -177,6 +214,15 @@ public class HostManagerTest { ...@@ -177,6 +214,15 @@ public class HostManagerTest {
177 assertNull("host should have been removed", mgr.getHost(HID1)); 214 assertNull("host should have been removed", mgr.getHost(HID1));
178 } 215 }
179 216
217 + @Test
218 + public void hostVanishedIPv6() {
219 + detect(HID3, MAC3, VLAN1, LOC1, IP3);
220 + providerService.hostVanished(HID3);
221 + validateEvents(HOST_ADDED, HOST_REMOVED);
222 +
223 + assertNull("host should have been removed", mgr.getHost(HID3));
224 + }
225 +
180 private void validateHosts( 226 private void validateHosts(
181 String msg, Iterable<Host> hosts, HostId... ids) { 227 String msg, Iterable<Host> hosts, HostId... ids) {
182 Set<HostId> hids = Sets.newHashSet(ids); 228 Set<HostId> hids = Sets.newHashSet(ids);
...@@ -199,6 +245,19 @@ public class HostManagerTest { ...@@ -199,6 +245,19 @@ public class HostManagerTest {
199 assertTrue("incorrect host location", mgr.getConnectedHosts(DID2).isEmpty()); 245 assertTrue("incorrect host location", mgr.getConnectedHosts(DID2).isEmpty());
200 } 246 }
201 247
248 + @Test
249 + public void getHostsIPv6() {
250 + detect(HID3, MAC3, VLAN1, LOC1, IP3);
251 + detect(HID4, MAC4, VLAN1, LOC2, IP4);
252 +
253 + validateHosts("host not properly stored", mgr.getHosts(), HID3, HID4);
254 + validateHosts("can't get hosts by VLAN", mgr.getHostsByVlan(VLAN1), HID3, HID4);
255 + validateHosts("can't get hosts by MAC", mgr.getHostsByMac(MAC3), HID3);
256 + validateHosts("can't get hosts by IP", mgr.getHostsByIp(IP3), HID3);
257 + validateHosts("can't get hosts by location", mgr.getConnectedHosts(LOC1), HID3);
258 + assertTrue("incorrect host location", mgr.getConnectedHosts(DID2).isEmpty());
259 + }
260 +
202 private static class TestHostProvider extends AbstractProvider 261 private static class TestHostProvider extends AbstractProvider
203 implements HostProvider { 262 implements HostProvider {
204 263
...@@ -263,6 +322,40 @@ public class HostManagerTest { ...@@ -263,6 +322,40 @@ public class HostManagerTest {
263 } 322 }
264 323
265 @Test 324 @Test
325 + public void bindAddressesToPortIPv6() {
326 + PortAddresses add1 =
327 + new PortAddresses(CP1, Sets.newHashSet(IA4, IA5), MAC3, VlanId.NONE);
328 +
329 + mgr.bindAddressesToPort(add1);
330 + Set<PortAddresses> storedAddresses = mgr.getAddressBindingsForPort(CP1);
331 +
332 + assertEquals(1, storedAddresses.size());
333 + assertTrue(storedAddresses.contains(add1));
334 +
335 + // Add some more addresses and check that they're added correctly
336 + PortAddresses add2 =
337 + new PortAddresses(CP1, Sets.newHashSet(IA6), null,
338 + VlanId.vlanId((short) 2));
339 +
340 + mgr.bindAddressesToPort(add2);
341 + storedAddresses = mgr.getAddressBindingsForPort(CP1);
342 +
343 + assertEquals(2, storedAddresses.size());
344 + assertTrue(storedAddresses.contains(add1));
345 + assertTrue(storedAddresses.contains(add2));
346 +
347 + PortAddresses add3 = new PortAddresses(CP1, null, MAC4, VlanId.NONE);
348 +
349 + mgr.bindAddressesToPort(add3);
350 + storedAddresses = mgr.getAddressBindingsForPort(CP1);
351 +
352 + assertEquals(3, storedAddresses.size());
353 + assertTrue(storedAddresses.contains(add1));
354 + assertTrue(storedAddresses.contains(add2));
355 + assertTrue(storedAddresses.contains(add3));
356 + }
357 +
358 + @Test
266 public void unbindAddressesFromPort() { 359 public void unbindAddressesFromPort() {
267 PortAddresses add1 = 360 PortAddresses add1 =
268 new PortAddresses(CP1, Sets.newHashSet(IA1, IA2), MAC1, VlanId.NONE); 361 new PortAddresses(CP1, Sets.newHashSet(IA1, IA2), MAC1, VlanId.NONE);
...@@ -291,6 +384,34 @@ public class HostManagerTest { ...@@ -291,6 +384,34 @@ public class HostManagerTest {
291 } 384 }
292 385
293 @Test 386 @Test
387 + public void unbindAddressesFromPortIPv6() {
388 + PortAddresses add1 =
389 + new PortAddresses(CP1, Sets.newHashSet(IA4, IA5), MAC3, VlanId.NONE);
390 +
391 + mgr.bindAddressesToPort(add1);
392 + Set<PortAddresses> storedAddresses = mgr.getAddressBindingsForPort(CP1);
393 +
394 + assertEquals(1, storedAddresses.size());
395 + assertTrue(storedAddresses.contains(add1));
396 +
397 + PortAddresses rem1 =
398 + new PortAddresses(CP1, Sets.newHashSet(IA4), null, VlanId.NONE);
399 +
400 + mgr.unbindAddressesFromPort(rem1);
401 + storedAddresses = mgr.getAddressBindingsForPort(CP1);
402 +
403 + // It shouldn't have been removed because it didn't match the originally
404 + // submitted address object
405 + assertEquals(1, storedAddresses.size());
406 + assertTrue(storedAddresses.contains(add1));
407 +
408 + mgr.unbindAddressesFromPort(add1);
409 + storedAddresses = mgr.getAddressBindingsForPort(CP1);
410 +
411 + assertTrue(storedAddresses.isEmpty());
412 + }
413 +
414 + @Test
294 public void clearAddresses() { 415 public void clearAddresses() {
295 PortAddresses add1 = 416 PortAddresses add1 =
296 new PortAddresses(CP1, Sets.newHashSet(IA1, IA2), MAC1, VlanId.NONE); 417 new PortAddresses(CP1, Sets.newHashSet(IA1, IA2), MAC1, VlanId.NONE);
...@@ -308,6 +429,23 @@ public class HostManagerTest { ...@@ -308,6 +429,23 @@ public class HostManagerTest {
308 } 429 }
309 430
310 @Test 431 @Test
432 + public void clearAddressesIPv6() {
433 + PortAddresses add1 =
434 + new PortAddresses(CP1, Sets.newHashSet(IA4, IA5), MAC3, VlanId.NONE);
435 +
436 + mgr.bindAddressesToPort(add1);
437 + Set<PortAddresses> storedAddresses = mgr.getAddressBindingsForPort(CP1);
438 +
439 + assertEquals(1, storedAddresses.size());
440 + assertTrue(storedAddresses.contains(add1));
441 +
442 + mgr.clearAddresses(CP1);
443 + storedAddresses = mgr.getAddressBindingsForPort(CP1);
444 +
445 + assertTrue(storedAddresses.isEmpty());
446 + }
447 +
448 + @Test
311 public void getAddressBindingsForPort() { 449 public void getAddressBindingsForPort() {
312 PortAddresses add1 = 450 PortAddresses add1 =
313 new PortAddresses(CP1, Sets.newHashSet(IA1, IA2), MAC1, VlanId.NONE); 451 new PortAddresses(CP1, Sets.newHashSet(IA1, IA2), MAC1, VlanId.NONE);
...@@ -320,6 +458,18 @@ public class HostManagerTest { ...@@ -320,6 +458,18 @@ public class HostManagerTest {
320 } 458 }
321 459
322 @Test 460 @Test
461 + public void getAddressBindingsForPortIPv6() {
462 + PortAddresses add1 =
463 + new PortAddresses(CP1, Sets.newHashSet(IA4, IA5), MAC3, VlanId.NONE);
464 +
465 + mgr.bindAddressesToPort(add1);
466 + Set<PortAddresses> storedAddresses = mgr.getAddressBindingsForPort(CP1);
467 +
468 + assertEquals(1, storedAddresses.size());
469 + assertTrue(storedAddresses.contains(add1));
470 + }
471 +
472 + @Test
323 public void getAddressBindings() { 473 public void getAddressBindings() {
324 Set<PortAddresses> storedAddresses = mgr.getAddressBindings(); 474 Set<PortAddresses> storedAddresses = mgr.getAddressBindings();
325 475
...@@ -344,4 +494,30 @@ public class HostManagerTest { ...@@ -344,4 +494,30 @@ public class HostManagerTest {
344 assertTrue(storedAddresses.size() == 2); 494 assertTrue(storedAddresses.size() == 2);
345 assertTrue(storedAddresses.equals(Sets.newHashSet(add1, add2))); 495 assertTrue(storedAddresses.equals(Sets.newHashSet(add1, add2)));
346 } 496 }
497 +
498 + @Test
499 + public void getAddressBindingsIPv6() {
500 + Set<PortAddresses> storedAddresses = mgr.getAddressBindings();
501 +
502 + assertTrue(storedAddresses.isEmpty());
503 +
504 + PortAddresses add1 =
505 + new PortAddresses(CP1, Sets.newHashSet(IA4, IA5), MAC3, VlanId.NONE);
506 +
507 + mgr.bindAddressesToPort(add1);
508 +
509 + storedAddresses = mgr.getAddressBindings();
510 +
511 + assertTrue(storedAddresses.size() == 1);
512 +
513 + PortAddresses add2 =
514 + new PortAddresses(CP2, Sets.newHashSet(IA5), MAC4, VlanId.NONE);
515 +
516 + mgr.bindAddressesToPort(add2);
517 +
518 + storedAddresses = mgr.getAddressBindings();
519 +
520 + assertTrue(storedAddresses.size() == 2);
521 + assertTrue(storedAddresses.equals(Sets.newHashSet(add1, add2)));
522 + }
347 } 523 }
......