blob: a6e8e625b2d38a5b8bd152c17115aec64870e5e0 [file] [log] [blame]
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07001/*
Ray Milkey34c95902015-04-15 09:47:53 -07002 * Copyright 2014-2015 Open Networking Laboratory
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07003 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
Brian O'Connorabafb502014-12-02 22:26:20 -080016package org.onosproject.net.host.impl;
Ayaka Koshibeac8e7292014-09-16 16:08:31 -070017
18import static org.junit.Assert.assertEquals;
19import static org.junit.Assert.assertFalse;
Ayaka Koshibeac8e7292014-09-16 16:08:31 -070020import static org.junit.Assert.assertNotNull;
Jonathan Hartc884f1b2014-09-24 11:53:33 -070021import static org.junit.Assert.assertNull;
Ayaka Koshibeac8e7292014-09-16 16:08:31 -070022import static org.junit.Assert.assertTrue;
Brian O'Connorabafb502014-12-02 22:26:20 -080023import static org.onosproject.net.host.HostEvent.Type.HOST_ADDED;
24import static org.onosproject.net.host.HostEvent.Type.HOST_MOVED;
25import static org.onosproject.net.host.HostEvent.Type.HOST_REMOVED;
26import static org.onosproject.net.host.HostEvent.Type.HOST_UPDATED;
Ayaka Koshibeac8e7292014-09-16 16:08:31 -070027
28import java.util.List;
29import java.util.Set;
30
31import org.junit.After;
32import org.junit.Before;
33import org.junit.Test;
Jonathan Hart6cd2f352015-01-13 17:44:45 -080034import org.onlab.packet.IpAddress;
35import org.onlab.packet.IpPrefix;
36import org.onlab.packet.MacAddress;
37import org.onlab.packet.VlanId;
Brian O'Connorabafb502014-12-02 22:26:20 -080038import org.onosproject.event.Event;
Thomas Vachuska36002e62015-05-19 16:12:29 -070039import org.onosproject.common.event.impl.TestEventDispatcher;
Brian O'Connorabafb502014-12-02 22:26:20 -080040import org.onosproject.net.ConnectPoint;
41import org.onosproject.net.DeviceId;
42import org.onosproject.net.Host;
43import org.onosproject.net.HostId;
44import org.onosproject.net.HostLocation;
45import org.onosproject.net.PortNumber;
46import org.onosproject.net.host.DefaultHostDescription;
47import org.onosproject.net.host.HostDescription;
48import org.onosproject.net.host.HostEvent;
49import org.onosproject.net.host.HostListener;
50import org.onosproject.net.host.HostProvider;
51import org.onosproject.net.host.HostProviderRegistry;
52import org.onosproject.net.host.HostProviderService;
53import org.onosproject.net.host.InterfaceIpAddress;
54import org.onosproject.net.host.PortAddresses;
55import org.onosproject.net.provider.AbstractProvider;
56import org.onosproject.net.provider.ProviderId;
57import org.onosproject.store.trivial.impl.SimpleHostStore;
Ayaka Koshibeac8e7292014-09-16 16:08:31 -070058
59import com.google.common.collect.Lists;
60import com.google.common.collect.Sets;
61
Ayaka Koshibeac8e7292014-09-16 16:08:31 -070062/**
63 * Test codifying the host service & host provider service contracts.
64 */
tom202175a2014-09-19 19:00:11 -070065public class HostManagerTest {
Ayaka Koshibeac8e7292014-09-16 16:08:31 -070066
tom7e02cda2014-09-18 12:05:46 -070067 private static final ProviderId PID = new ProviderId("of", "foo");
Ayaka Koshibeac8e7292014-09-16 16:08:31 -070068
Ayaka Koshibea9c199f2014-09-16 16:21:40 -070069 private static final VlanId VLAN1 = VlanId.vlanId((short) 1);
70 private static final VlanId VLAN2 = VlanId.vlanId((short) 2);
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");
Kunihiro Ishiguro1eab7d52015-02-10 10:38:18 +090073 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");
Ayaka Koshibeac8e7292014-09-16 16:08:31 -070075 private static final HostId HID1 = HostId.hostId(MAC1, VLAN1);
76 private static final HostId HID2 = HostId.hostId(MAC2, VLAN1);
Kunihiro Ishiguro1eab7d52015-02-10 10:38:18 +090077 private static final HostId HID3 = HostId.hostId(MAC3, VLAN1);
78 private static final HostId HID4 = HostId.hostId(MAC4, VLAN1);
Ayaka Koshibeac8e7292014-09-16 16:08:31 -070079
Pavlin Radoslavov33f228a2014-10-27 19:33:16 -070080 private static final IpAddress IP1 = IpAddress.valueOf("10.0.0.1");
81 private static final IpAddress IP2 = IpAddress.valueOf("10.0.0.2");
Kunihiro Ishiguro1eab7d52015-02-10 10:38:18 +090082 private static final IpAddress IP3 = IpAddress.valueOf("2001::1");
83 private static final IpAddress IP4 = IpAddress.valueOf("2001::2");
Ayaka Koshibeac8e7292014-09-16 16:08:31 -070084
85 private static final DeviceId DID1 = DeviceId.deviceId("of:001");
86 private static final DeviceId DID2 = DeviceId.deviceId("of:002");
87 private static final PortNumber P1 = PortNumber.portNumber(100);
88 private static final PortNumber P2 = PortNumber.portNumber(200);
89 private static final HostLocation LOC1 = new HostLocation(DID1, P1, 123L);
90 private static final HostLocation LOC2 = new HostLocation(DID1, P2, 123L);
Jonathan Hartc884f1b2014-09-24 11:53:33 -070091 private static final ConnectPoint CP1 = new ConnectPoint(DID1, P1);
92 private static final ConnectPoint CP2 = new ConnectPoint(DID2, P2);
93
Pavlin Radoslavov76b0ae22014-10-27 15:33:19 -070094 private static final InterfaceIpAddress IA1 =
95 new InterfaceIpAddress(IpAddress.valueOf("10.1.1.1"),
96 IpPrefix.valueOf("10.1.1.0/24"));
97 private static final InterfaceIpAddress IA2 =
98 new InterfaceIpAddress(IpAddress.valueOf("10.2.2.2"),
99 IpPrefix.valueOf("10.2.0.0/16"));
100 private static final InterfaceIpAddress IA3 =
101 new InterfaceIpAddress(IpAddress.valueOf("10.3.3.3"),
102 IpPrefix.valueOf("10.3.3.0/24"));
Kunihiro Ishiguro1eab7d52015-02-10 10:38:18 +0900103 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"));
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700112
tom202175a2014-09-19 19:00:11 -0700113 private HostManager mgr;
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700114
115 protected TestListener listener = new TestListener();
116 protected HostProviderRegistry registry;
117 protected TestHostProvider provider;
118 protected HostProviderService providerService;
119
120 @Before
121 public void setUp() {
tom202175a2014-09-19 19:00:11 -0700122 mgr = new HostManager();
tom5bcc9462014-09-19 10:11:31 -0700123 mgr.store = new SimpleHostStore();
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700124 mgr.eventDispatcher = new TestEventDispatcher();
125 registry = mgr;
126 mgr.activate();
127
128 mgr.addListener(listener);
129
130 provider = new TestHostProvider();
131 providerService = registry.register(provider);
132 assertTrue("provider should be registered",
tom093340b2014-10-10 00:15:36 -0700133 registry.getProviders().contains(provider.id()));
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700134 }
135
136 @After
137 public void tearDown() {
138 registry.unregister(provider);
139 assertFalse("provider should not be registered",
tom093340b2014-10-10 00:15:36 -0700140 registry.getProviders().contains(provider.id()));
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700141
142 mgr.removeListener(listener);
143 mgr.deactivate();
144 mgr.eventDispatcher = null;
145 }
146
Ayaka Koshibea9c199f2014-09-16 16:21:40 -0700147 private void detect(HostId hid, MacAddress mac, VlanId vlan,
Pavlin Radoslavov33f228a2014-10-27 19:33:16 -0700148 HostLocation loc, IpAddress ip) {
tom093340b2014-10-10 00:15:36 -0700149 HostDescription descr = new DefaultHostDescription(mac, vlan, loc, ip);
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700150 providerService.hostDetected(hid, descr);
151 assertNotNull("host should be found", mgr.getHost(hid));
152 }
153
154 private void validateEvents(Enum... types) {
155 int i = 0;
156 assertEquals("wrong events received", types.length, listener.events.size());
157 for (Event event : listener.events) {
158 assertEquals("incorrect event type", types[i], event.type());
159 i++;
160 }
161 listener.events.clear();
162 }
163
164 @Test
165 public void hostDetected() {
166 assertNull("host shouldn't be found", mgr.getHost(HID1));
167
168 // host addition
tom093340b2014-10-10 00:15:36 -0700169 detect(HID1, MAC1, VLAN1, LOC1, IP1);
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700170 assertEquals("exactly one should be found", 1, mgr.getHostCount());
tom093340b2014-10-10 00:15:36 -0700171 detect(HID2, MAC2, VLAN2, LOC2, IP1);
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700172 assertEquals("two hosts should be found", 2, mgr.getHostCount());
173 validateEvents(HOST_ADDED, HOST_ADDED);
174
175 // host motion
tom093340b2014-10-10 00:15:36 -0700176 detect(HID1, MAC1, VLAN1, LOC2, IP1);
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700177 validateEvents(HOST_MOVED);
178 assertEquals("only two hosts should be found", 2, mgr.getHostCount());
179
180 // host update
tom093340b2014-10-10 00:15:36 -0700181 detect(HID1, MAC1, VLAN1, LOC2, IP2);
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700182 validateEvents(HOST_UPDATED);
183 assertEquals("only two hosts should be found", 2, mgr.getHostCount());
184 }
185
186 @Test
Kunihiro Ishiguro1eab7d52015-02-10 10:38:18 +0900187 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
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700209 public void hostVanished() {
tom093340b2014-10-10 00:15:36 -0700210 detect(HID1, MAC1, VLAN1, LOC1, IP1);
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700211 providerService.hostVanished(HID1);
212 validateEvents(HOST_ADDED, HOST_REMOVED);
213
214 assertNull("host should have been removed", mgr.getHost(HID1));
215 }
216
Kunihiro Ishiguro1eab7d52015-02-10 10:38:18 +0900217 @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
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700226 private void validateHosts(
tom093340b2014-10-10 00:15:36 -0700227 String msg, Iterable<Host> hosts, HostId... ids) {
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700228 Set<HostId> hids = Sets.newHashSet(ids);
229 for (Host h : hosts) {
230 assertTrue(msg, hids.remove(h.id()));
231 }
232 assertTrue("expected hosts not fetched from store", hids.isEmpty());
233 }
234
235 @Test
236 public void getHosts() {
tom093340b2014-10-10 00:15:36 -0700237 detect(HID1, MAC1, VLAN1, LOC1, IP1);
238 detect(HID2, MAC2, VLAN1, LOC2, IP2);
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700239
240 validateHosts("host not properly stored", mgr.getHosts(), HID1, HID2);
241 validateHosts("can't get hosts by VLAN", mgr.getHostsByVlan(VLAN1), HID1, HID2);
242 validateHosts("can't get hosts by MAC", mgr.getHostsByMac(MAC1), HID1);
243 validateHosts("can't get hosts by IP", mgr.getHostsByIp(IP1), HID1);
244 validateHosts("can't get hosts by location", mgr.getConnectedHosts(LOC1), HID1);
245 assertTrue("incorrect host location", mgr.getConnectedHosts(DID2).isEmpty());
246 }
247
Kunihiro Ishiguro1eab7d52015-02-10 10:38:18 +0900248 @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
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700261 private static class TestHostProvider extends AbstractProvider
262 implements HostProvider {
263
264 protected TestHostProvider() {
265 super(PID);
266 }
267
268 @Override
269 public ProviderId id() {
270 return PID;
271 }
272
273 @Override
274 public void triggerProbe(Host host) {
275 }
276
277 }
278
279 private static class TestListener implements HostListener {
280
281 protected List<HostEvent> events = Lists.newArrayList();
282
283 @Override
284 public void event(HostEvent event) {
285 events.add(event);
286 }
287
288 }
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700289
290 @Test
291 public void bindAddressesToPort() {
Pavlin Radoslavov76b0ae22014-10-27 15:33:19 -0700292 PortAddresses add1 =
Jonathan Hart6cd2f352015-01-13 17:44:45 -0800293 new PortAddresses(CP1, Sets.newHashSet(IA1, IA2), MAC1, VlanId.NONE);
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700294
295 mgr.bindAddressesToPort(add1);
Jonathan Harta887ba82014-11-03 15:20:52 -0800296 Set<PortAddresses> storedAddresses = mgr.getAddressBindingsForPort(CP1);
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700297
Jonathan Harta887ba82014-11-03 15:20:52 -0800298 assertEquals(1, storedAddresses.size());
299 assertTrue(storedAddresses.contains(add1));
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700300
301 // Add some more addresses and check that they're added correctly
Pavlin Radoslavov76b0ae22014-10-27 15:33:19 -0700302 PortAddresses add2 =
Jonathan Hart6cd2f352015-01-13 17:44:45 -0800303 new PortAddresses(CP1, Sets.newHashSet(IA3), null,
304 VlanId.vlanId((short) 2));
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700305
306 mgr.bindAddressesToPort(add2);
307 storedAddresses = mgr.getAddressBindingsForPort(CP1);
308
Jonathan Harta887ba82014-11-03 15:20:52 -0800309 assertEquals(2, storedAddresses.size());
310 assertTrue(storedAddresses.contains(add1));
311 assertTrue(storedAddresses.contains(add2));
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700312
Jonathan Hart6cd2f352015-01-13 17:44:45 -0800313 PortAddresses add3 = new PortAddresses(CP1, null, MAC2, VlanId.NONE);
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700314
315 mgr.bindAddressesToPort(add3);
316 storedAddresses = mgr.getAddressBindingsForPort(CP1);
317
Jonathan Harta887ba82014-11-03 15:20:52 -0800318 assertEquals(3, storedAddresses.size());
319 assertTrue(storedAddresses.contains(add1));
320 assertTrue(storedAddresses.contains(add2));
321 assertTrue(storedAddresses.contains(add3));
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700322 }
323
324 @Test
Kunihiro Ishiguro1eab7d52015-02-10 10:38:18 +0900325 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
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700359 public void unbindAddressesFromPort() {
Pavlin Radoslavov76b0ae22014-10-27 15:33:19 -0700360 PortAddresses add1 =
Jonathan Hart6cd2f352015-01-13 17:44:45 -0800361 new PortAddresses(CP1, Sets.newHashSet(IA1, IA2), MAC1, VlanId.NONE);
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700362
363 mgr.bindAddressesToPort(add1);
Jonathan Harta887ba82014-11-03 15:20:52 -0800364 Set<PortAddresses> storedAddresses = mgr.getAddressBindingsForPort(CP1);
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700365
Jonathan Harta887ba82014-11-03 15:20:52 -0800366 assertEquals(1, storedAddresses.size());
367 assertTrue(storedAddresses.contains(add1));
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700368
Pavlin Radoslavov76b0ae22014-10-27 15:33:19 -0700369 PortAddresses rem1 =
Jonathan Hart6cd2f352015-01-13 17:44:45 -0800370 new PortAddresses(CP1, Sets.newHashSet(IA1), null, VlanId.NONE);
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700371
372 mgr.unbindAddressesFromPort(rem1);
373 storedAddresses = mgr.getAddressBindingsForPort(CP1);
374
Jonathan Harta887ba82014-11-03 15:20:52 -0800375 // It shouldn't have been removed because it didn't match the originally
376 // submitted address object
377 assertEquals(1, storedAddresses.size());
378 assertTrue(storedAddresses.contains(add1));
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700379
Jonathan Harta887ba82014-11-03 15:20:52 -0800380 mgr.unbindAddressesFromPort(add1);
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700381 storedAddresses = mgr.getAddressBindingsForPort(CP1);
382
Jonathan Harta887ba82014-11-03 15:20:52 -0800383 assertTrue(storedAddresses.isEmpty());
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700384 }
385
386 @Test
Kunihiro Ishiguro1eab7d52015-02-10 10:38:18 +0900387 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
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700415 public void clearAddresses() {
Pavlin Radoslavov76b0ae22014-10-27 15:33:19 -0700416 PortAddresses add1 =
Jonathan Hart6cd2f352015-01-13 17:44:45 -0800417 new PortAddresses(CP1, Sets.newHashSet(IA1, IA2), MAC1, VlanId.NONE);
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700418
419 mgr.bindAddressesToPort(add1);
Jonathan Harta887ba82014-11-03 15:20:52 -0800420 Set<PortAddresses> storedAddresses = mgr.getAddressBindingsForPort(CP1);
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700421
Jonathan Harta887ba82014-11-03 15:20:52 -0800422 assertEquals(1, storedAddresses.size());
423 assertTrue(storedAddresses.contains(add1));
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700424
425 mgr.clearAddresses(CP1);
426 storedAddresses = mgr.getAddressBindingsForPort(CP1);
427
Jonathan Harta887ba82014-11-03 15:20:52 -0800428 assertTrue(storedAddresses.isEmpty());
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700429 }
430
431 @Test
Kunihiro Ishiguro1eab7d52015-02-10 10:38:18 +0900432 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
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700449 public void getAddressBindingsForPort() {
Pavlin Radoslavov76b0ae22014-10-27 15:33:19 -0700450 PortAddresses add1 =
Jonathan Hart6cd2f352015-01-13 17:44:45 -0800451 new PortAddresses(CP1, Sets.newHashSet(IA1, IA2), MAC1, VlanId.NONE);
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700452
453 mgr.bindAddressesToPort(add1);
Jonathan Harta887ba82014-11-03 15:20:52 -0800454 Set<PortAddresses> storedAddresses = mgr.getAddressBindingsForPort(CP1);
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700455
Jonathan Harta887ba82014-11-03 15:20:52 -0800456 assertEquals(1, storedAddresses.size());
457 assertTrue(storedAddresses.contains(add1));
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700458 }
459
460 @Test
Kunihiro Ishiguro1eab7d52015-02-10 10:38:18 +0900461 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
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700473 public void getAddressBindings() {
474 Set<PortAddresses> storedAddresses = mgr.getAddressBindings();
475
476 assertTrue(storedAddresses.isEmpty());
477
Pavlin Radoslavov76b0ae22014-10-27 15:33:19 -0700478 PortAddresses add1 =
Jonathan Hart6cd2f352015-01-13 17:44:45 -0800479 new PortAddresses(CP1, Sets.newHashSet(IA1, IA2), MAC1, VlanId.NONE);
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700480
481 mgr.bindAddressesToPort(add1);
482
483 storedAddresses = mgr.getAddressBindings();
484
485 assertTrue(storedAddresses.size() == 1);
486
Pavlin Radoslavov76b0ae22014-10-27 15:33:19 -0700487 PortAddresses add2 =
Jonathan Hart6cd2f352015-01-13 17:44:45 -0800488 new PortAddresses(CP2, Sets.newHashSet(IA3), MAC2, VlanId.NONE);
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700489
490 mgr.bindAddressesToPort(add2);
491
492 storedAddresses = mgr.getAddressBindings();
493
494 assertTrue(storedAddresses.size() == 2);
495 assertTrue(storedAddresses.equals(Sets.newHashSet(add1, add2)));
496 }
Kunihiro Ishiguro1eab7d52015-02-10 10:38:18 +0900497
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 }
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700523}