blob: 9e113f34ec88977ba22255dd321abac47b9e1389 [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;
Sahil Lele3a0cdd52015-07-21 14:16:31 -070040import org.onosproject.incubator.net.config.NetworkConfigServiceAdapter;
Brian O'Connorabafb502014-12-02 22:26:20 -080041import org.onosproject.net.ConnectPoint;
42import org.onosproject.net.DeviceId;
43import org.onosproject.net.Host;
44import org.onosproject.net.HostId;
45import org.onosproject.net.HostLocation;
46import org.onosproject.net.PortNumber;
47import org.onosproject.net.host.DefaultHostDescription;
48import org.onosproject.net.host.HostDescription;
49import org.onosproject.net.host.HostEvent;
50import org.onosproject.net.host.HostListener;
51import org.onosproject.net.host.HostProvider;
52import org.onosproject.net.host.HostProviderRegistry;
53import org.onosproject.net.host.HostProviderService;
54import org.onosproject.net.host.InterfaceIpAddress;
55import org.onosproject.net.host.PortAddresses;
56import org.onosproject.net.provider.AbstractProvider;
57import org.onosproject.net.provider.ProviderId;
Thomas Vachuskac97aa612015-06-23 16:00:18 -070058import org.onosproject.store.trivial.SimpleHostStore;
Ayaka Koshibeac8e7292014-09-16 16:08:31 -070059
60import com.google.common.collect.Lists;
61import com.google.common.collect.Sets;
62
Ayaka Koshibeac8e7292014-09-16 16:08:31 -070063/**
64 * Test codifying the host service & host provider service contracts.
65 */
tom202175a2014-09-19 19:00:11 -070066public class HostManagerTest {
Ayaka Koshibeac8e7292014-09-16 16:08:31 -070067
tom7e02cda2014-09-18 12:05:46 -070068 private static final ProviderId PID = new ProviderId("of", "foo");
Ayaka Koshibeac8e7292014-09-16 16:08:31 -070069
Ayaka Koshibea9c199f2014-09-16 16:21:40 -070070 private static final VlanId VLAN1 = VlanId.vlanId((short) 1);
71 private static final VlanId VLAN2 = VlanId.vlanId((short) 2);
72 private static final MacAddress MAC1 = MacAddress.valueOf("00:00:11:00:00:01");
73 private static final MacAddress MAC2 = MacAddress.valueOf("00:00:22:00:00:02");
Kunihiro Ishiguro1eab7d52015-02-10 10:38:18 +090074 private static final MacAddress MAC3 = MacAddress.valueOf("00:00:33:00:00:03");
75 private static final MacAddress MAC4 = MacAddress.valueOf("00:00:44:00:00:04");
Ayaka Koshibeac8e7292014-09-16 16:08:31 -070076 private static final HostId HID1 = HostId.hostId(MAC1, VLAN1);
77 private static final HostId HID2 = HostId.hostId(MAC2, VLAN1);
Kunihiro Ishiguro1eab7d52015-02-10 10:38:18 +090078 private static final HostId HID3 = HostId.hostId(MAC3, VLAN1);
79 private static final HostId HID4 = HostId.hostId(MAC4, VLAN1);
Ayaka Koshibeac8e7292014-09-16 16:08:31 -070080
Pavlin Radoslavov33f228a2014-10-27 19:33:16 -070081 private static final IpAddress IP1 = IpAddress.valueOf("10.0.0.1");
82 private static final IpAddress IP2 = IpAddress.valueOf("10.0.0.2");
Kunihiro Ishiguro1eab7d52015-02-10 10:38:18 +090083 private static final IpAddress IP3 = IpAddress.valueOf("2001::1");
84 private static final IpAddress IP4 = IpAddress.valueOf("2001::2");
Ayaka Koshibeac8e7292014-09-16 16:08:31 -070085
86 private static final DeviceId DID1 = DeviceId.deviceId("of:001");
87 private static final DeviceId DID2 = DeviceId.deviceId("of:002");
88 private static final PortNumber P1 = PortNumber.portNumber(100);
89 private static final PortNumber P2 = PortNumber.portNumber(200);
90 private static final HostLocation LOC1 = new HostLocation(DID1, P1, 123L);
91 private static final HostLocation LOC2 = new HostLocation(DID1, P2, 123L);
Jonathan Hartc884f1b2014-09-24 11:53:33 -070092 private static final ConnectPoint CP1 = new ConnectPoint(DID1, P1);
93 private static final ConnectPoint CP2 = new ConnectPoint(DID2, P2);
94
Pavlin Radoslavov76b0ae22014-10-27 15:33:19 -070095 private static final InterfaceIpAddress IA1 =
96 new InterfaceIpAddress(IpAddress.valueOf("10.1.1.1"),
97 IpPrefix.valueOf("10.1.1.0/24"));
98 private static final InterfaceIpAddress IA2 =
99 new InterfaceIpAddress(IpAddress.valueOf("10.2.2.2"),
100 IpPrefix.valueOf("10.2.0.0/16"));
101 private static final InterfaceIpAddress IA3 =
102 new InterfaceIpAddress(IpAddress.valueOf("10.3.3.3"),
103 IpPrefix.valueOf("10.3.3.0/24"));
Kunihiro Ishiguro1eab7d52015-02-10 10:38:18 +0900104 private static final InterfaceIpAddress IA4 =
105 new InterfaceIpAddress(IpAddress.valueOf("2001:100::1"),
106 IpPrefix.valueOf("2001:100::/56"));
107 private static final InterfaceIpAddress IA5 =
108 new InterfaceIpAddress(IpAddress.valueOf("2001:200::1"),
109 IpPrefix.valueOf("2001:200::/48"));
110 private static final InterfaceIpAddress IA6 =
111 new InterfaceIpAddress(IpAddress.valueOf("2001:300::1"),
112 IpPrefix.valueOf("2001:300::/56"));
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700113
tom202175a2014-09-19 19:00:11 -0700114 private HostManager mgr;
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700115
116 protected TestListener listener = new TestListener();
117 protected HostProviderRegistry registry;
118 protected TestHostProvider provider;
119 protected HostProviderService providerService;
120
121 @Before
122 public void setUp() {
tom202175a2014-09-19 19:00:11 -0700123 mgr = new HostManager();
tom5bcc9462014-09-19 10:11:31 -0700124 mgr.store = new SimpleHostStore();
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700125 mgr.eventDispatcher = new TestEventDispatcher();
126 registry = mgr;
Sahil Lele3a0cdd52015-07-21 14:16:31 -0700127 mgr.networkConfigService = new TestNetworkConfigService();
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700128 mgr.activate();
129
130 mgr.addListener(listener);
131
132 provider = new TestHostProvider();
133 providerService = registry.register(provider);
134 assertTrue("provider should be registered",
tom093340b2014-10-10 00:15:36 -0700135 registry.getProviders().contains(provider.id()));
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700136 }
137
138 @After
139 public void tearDown() {
140 registry.unregister(provider);
141 assertFalse("provider should not be registered",
tom093340b2014-10-10 00:15:36 -0700142 registry.getProviders().contains(provider.id()));
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700143
144 mgr.removeListener(listener);
145 mgr.deactivate();
146 mgr.eventDispatcher = null;
147 }
148
Ayaka Koshibea9c199f2014-09-16 16:21:40 -0700149 private void detect(HostId hid, MacAddress mac, VlanId vlan,
Pavlin Radoslavov33f228a2014-10-27 19:33:16 -0700150 HostLocation loc, IpAddress ip) {
tom093340b2014-10-10 00:15:36 -0700151 HostDescription descr = new DefaultHostDescription(mac, vlan, loc, ip);
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700152 providerService.hostDetected(hid, descr);
153 assertNotNull("host should be found", mgr.getHost(hid));
154 }
155
156 private void validateEvents(Enum... types) {
157 int i = 0;
158 assertEquals("wrong events received", types.length, listener.events.size());
159 for (Event event : listener.events) {
160 assertEquals("incorrect event type", types[i], event.type());
161 i++;
162 }
163 listener.events.clear();
164 }
165
166 @Test
167 public void hostDetected() {
168 assertNull("host shouldn't be found", mgr.getHost(HID1));
169
170 // host addition
tom093340b2014-10-10 00:15:36 -0700171 detect(HID1, MAC1, VLAN1, LOC1, IP1);
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700172 assertEquals("exactly one should be found", 1, mgr.getHostCount());
tom093340b2014-10-10 00:15:36 -0700173 detect(HID2, MAC2, VLAN2, LOC2, IP1);
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700174 assertEquals("two hosts should be found", 2, mgr.getHostCount());
175 validateEvents(HOST_ADDED, HOST_ADDED);
176
177 // host motion
tom093340b2014-10-10 00:15:36 -0700178 detect(HID1, MAC1, VLAN1, LOC2, IP1);
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700179 validateEvents(HOST_MOVED);
180 assertEquals("only two hosts should be found", 2, mgr.getHostCount());
181
182 // host update
tom093340b2014-10-10 00:15:36 -0700183 detect(HID1, MAC1, VLAN1, LOC2, IP2);
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700184 validateEvents(HOST_UPDATED);
185 assertEquals("only two hosts should be found", 2, mgr.getHostCount());
186 }
187
188 @Test
Kunihiro Ishiguro1eab7d52015-02-10 10:38:18 +0900189 public void hostDetectedIPv6() {
190 assertNull("host shouldn't be found", mgr.getHost(HID3));
191
192 // host addition
193 detect(HID3, MAC3, VLAN1, LOC1, IP3);
194 assertEquals("exactly one should be found", 1, mgr.getHostCount());
195 detect(HID4, MAC4, VLAN2, LOC2, IP3);
196 assertEquals("two hosts should be found", 2, mgr.getHostCount());
197 validateEvents(HOST_ADDED, HOST_ADDED);
198
199 // host motion
200 detect(HID3, MAC3, VLAN1, LOC2, IP3);
201 validateEvents(HOST_MOVED);
202 assertEquals("only two hosts should be found", 2, mgr.getHostCount());
203
204 // host update
205 detect(HID3, MAC3, VLAN1, LOC2, IP4);
206 validateEvents(HOST_UPDATED);
207 assertEquals("only two hosts should be found", 2, mgr.getHostCount());
208 }
209
210 @Test
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700211 public void hostVanished() {
tom093340b2014-10-10 00:15:36 -0700212 detect(HID1, MAC1, VLAN1, LOC1, IP1);
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700213 providerService.hostVanished(HID1);
214 validateEvents(HOST_ADDED, HOST_REMOVED);
215
216 assertNull("host should have been removed", mgr.getHost(HID1));
217 }
218
Kunihiro Ishiguro1eab7d52015-02-10 10:38:18 +0900219 @Test
220 public void hostVanishedIPv6() {
221 detect(HID3, MAC3, VLAN1, LOC1, IP3);
222 providerService.hostVanished(HID3);
223 validateEvents(HOST_ADDED, HOST_REMOVED);
224
225 assertNull("host should have been removed", mgr.getHost(HID3));
226 }
227
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700228 private void validateHosts(
tom093340b2014-10-10 00:15:36 -0700229 String msg, Iterable<Host> hosts, HostId... ids) {
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700230 Set<HostId> hids = Sets.newHashSet(ids);
231 for (Host h : hosts) {
232 assertTrue(msg, hids.remove(h.id()));
233 }
234 assertTrue("expected hosts not fetched from store", hids.isEmpty());
235 }
236
237 @Test
238 public void getHosts() {
tom093340b2014-10-10 00:15:36 -0700239 detect(HID1, MAC1, VLAN1, LOC1, IP1);
240 detect(HID2, MAC2, VLAN1, LOC2, IP2);
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700241
242 validateHosts("host not properly stored", mgr.getHosts(), HID1, HID2);
243 validateHosts("can't get hosts by VLAN", mgr.getHostsByVlan(VLAN1), HID1, HID2);
244 validateHosts("can't get hosts by MAC", mgr.getHostsByMac(MAC1), HID1);
245 validateHosts("can't get hosts by IP", mgr.getHostsByIp(IP1), HID1);
246 validateHosts("can't get hosts by location", mgr.getConnectedHosts(LOC1), HID1);
247 assertTrue("incorrect host location", mgr.getConnectedHosts(DID2).isEmpty());
248 }
249
Kunihiro Ishiguro1eab7d52015-02-10 10:38:18 +0900250 @Test
251 public void getHostsIPv6() {
252 detect(HID3, MAC3, VLAN1, LOC1, IP3);
253 detect(HID4, MAC4, VLAN1, LOC2, IP4);
254
255 validateHosts("host not properly stored", mgr.getHosts(), HID3, HID4);
256 validateHosts("can't get hosts by VLAN", mgr.getHostsByVlan(VLAN1), HID3, HID4);
257 validateHosts("can't get hosts by MAC", mgr.getHostsByMac(MAC3), HID3);
258 validateHosts("can't get hosts by IP", mgr.getHostsByIp(IP3), HID3);
259 validateHosts("can't get hosts by location", mgr.getConnectedHosts(LOC1), HID3);
260 assertTrue("incorrect host location", mgr.getConnectedHosts(DID2).isEmpty());
261 }
262
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700263 private static class TestHostProvider extends AbstractProvider
264 implements HostProvider {
265
266 protected TestHostProvider() {
267 super(PID);
268 }
269
270 @Override
271 public ProviderId id() {
272 return PID;
273 }
274
275 @Override
276 public void triggerProbe(Host host) {
277 }
278
279 }
280
281 private static class TestListener implements HostListener {
282
283 protected List<HostEvent> events = Lists.newArrayList();
284
285 @Override
286 public void event(HostEvent event) {
287 events.add(event);
288 }
289
290 }
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700291
292 @Test
293 public void bindAddressesToPort() {
Pavlin Radoslavov76b0ae22014-10-27 15:33:19 -0700294 PortAddresses add1 =
Jonathan Hart6cd2f352015-01-13 17:44:45 -0800295 new PortAddresses(CP1, Sets.newHashSet(IA1, IA2), MAC1, VlanId.NONE);
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700296
297 mgr.bindAddressesToPort(add1);
Jonathan Harta887ba82014-11-03 15:20:52 -0800298 Set<PortAddresses> storedAddresses = mgr.getAddressBindingsForPort(CP1);
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700299
Jonathan Harta887ba82014-11-03 15:20:52 -0800300 assertEquals(1, storedAddresses.size());
301 assertTrue(storedAddresses.contains(add1));
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700302
303 // Add some more addresses and check that they're added correctly
Pavlin Radoslavov76b0ae22014-10-27 15:33:19 -0700304 PortAddresses add2 =
Jonathan Hart6cd2f352015-01-13 17:44:45 -0800305 new PortAddresses(CP1, Sets.newHashSet(IA3), null,
306 VlanId.vlanId((short) 2));
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700307
308 mgr.bindAddressesToPort(add2);
309 storedAddresses = mgr.getAddressBindingsForPort(CP1);
310
Jonathan Harta887ba82014-11-03 15:20:52 -0800311 assertEquals(2, storedAddresses.size());
312 assertTrue(storedAddresses.contains(add1));
313 assertTrue(storedAddresses.contains(add2));
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700314
Jonathan Hart6cd2f352015-01-13 17:44:45 -0800315 PortAddresses add3 = new PortAddresses(CP1, null, MAC2, VlanId.NONE);
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700316
317 mgr.bindAddressesToPort(add3);
318 storedAddresses = mgr.getAddressBindingsForPort(CP1);
319
Jonathan Harta887ba82014-11-03 15:20:52 -0800320 assertEquals(3, storedAddresses.size());
321 assertTrue(storedAddresses.contains(add1));
322 assertTrue(storedAddresses.contains(add2));
323 assertTrue(storedAddresses.contains(add3));
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700324 }
325
326 @Test
Kunihiro Ishiguro1eab7d52015-02-10 10:38:18 +0900327 public void bindAddressesToPortIPv6() {
328 PortAddresses add1 =
329 new PortAddresses(CP1, Sets.newHashSet(IA4, IA5), MAC3, VlanId.NONE);
330
331 mgr.bindAddressesToPort(add1);
332 Set<PortAddresses> storedAddresses = mgr.getAddressBindingsForPort(CP1);
333
334 assertEquals(1, storedAddresses.size());
335 assertTrue(storedAddresses.contains(add1));
336
337 // Add some more addresses and check that they're added correctly
338 PortAddresses add2 =
339 new PortAddresses(CP1, Sets.newHashSet(IA6), null,
340 VlanId.vlanId((short) 2));
341
342 mgr.bindAddressesToPort(add2);
343 storedAddresses = mgr.getAddressBindingsForPort(CP1);
344
345 assertEquals(2, storedAddresses.size());
346 assertTrue(storedAddresses.contains(add1));
347 assertTrue(storedAddresses.contains(add2));
348
349 PortAddresses add3 = new PortAddresses(CP1, null, MAC4, VlanId.NONE);
350
351 mgr.bindAddressesToPort(add3);
352 storedAddresses = mgr.getAddressBindingsForPort(CP1);
353
354 assertEquals(3, storedAddresses.size());
355 assertTrue(storedAddresses.contains(add1));
356 assertTrue(storedAddresses.contains(add2));
357 assertTrue(storedAddresses.contains(add3));
358 }
359
360 @Test
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700361 public void unbindAddressesFromPort() {
Pavlin Radoslavov76b0ae22014-10-27 15:33:19 -0700362 PortAddresses add1 =
Jonathan Hart6cd2f352015-01-13 17:44:45 -0800363 new PortAddresses(CP1, Sets.newHashSet(IA1, IA2), MAC1, VlanId.NONE);
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700364
365 mgr.bindAddressesToPort(add1);
Jonathan Harta887ba82014-11-03 15:20:52 -0800366 Set<PortAddresses> storedAddresses = mgr.getAddressBindingsForPort(CP1);
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700367
Jonathan Harta887ba82014-11-03 15:20:52 -0800368 assertEquals(1, storedAddresses.size());
369 assertTrue(storedAddresses.contains(add1));
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700370
Pavlin Radoslavov76b0ae22014-10-27 15:33:19 -0700371 PortAddresses rem1 =
Jonathan Hart6cd2f352015-01-13 17:44:45 -0800372 new PortAddresses(CP1, Sets.newHashSet(IA1), null, VlanId.NONE);
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700373
374 mgr.unbindAddressesFromPort(rem1);
375 storedAddresses = mgr.getAddressBindingsForPort(CP1);
376
Jonathan Harta887ba82014-11-03 15:20:52 -0800377 // It shouldn't have been removed because it didn't match the originally
378 // submitted address object
379 assertEquals(1, storedAddresses.size());
380 assertTrue(storedAddresses.contains(add1));
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700381
Jonathan Harta887ba82014-11-03 15:20:52 -0800382 mgr.unbindAddressesFromPort(add1);
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700383 storedAddresses = mgr.getAddressBindingsForPort(CP1);
384
Jonathan Harta887ba82014-11-03 15:20:52 -0800385 assertTrue(storedAddresses.isEmpty());
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700386 }
387
388 @Test
Kunihiro Ishiguro1eab7d52015-02-10 10:38:18 +0900389 public void unbindAddressesFromPortIPv6() {
390 PortAddresses add1 =
391 new PortAddresses(CP1, Sets.newHashSet(IA4, IA5), MAC3, VlanId.NONE);
392
393 mgr.bindAddressesToPort(add1);
394 Set<PortAddresses> storedAddresses = mgr.getAddressBindingsForPort(CP1);
395
396 assertEquals(1, storedAddresses.size());
397 assertTrue(storedAddresses.contains(add1));
398
399 PortAddresses rem1 =
400 new PortAddresses(CP1, Sets.newHashSet(IA4), null, VlanId.NONE);
401
402 mgr.unbindAddressesFromPort(rem1);
403 storedAddresses = mgr.getAddressBindingsForPort(CP1);
404
405 // It shouldn't have been removed because it didn't match the originally
406 // submitted address object
407 assertEquals(1, storedAddresses.size());
408 assertTrue(storedAddresses.contains(add1));
409
410 mgr.unbindAddressesFromPort(add1);
411 storedAddresses = mgr.getAddressBindingsForPort(CP1);
412
413 assertTrue(storedAddresses.isEmpty());
414 }
415
416 @Test
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700417 public void clearAddresses() {
Pavlin Radoslavov76b0ae22014-10-27 15:33:19 -0700418 PortAddresses add1 =
Jonathan Hart6cd2f352015-01-13 17:44:45 -0800419 new PortAddresses(CP1, Sets.newHashSet(IA1, IA2), MAC1, VlanId.NONE);
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700420
421 mgr.bindAddressesToPort(add1);
Jonathan Harta887ba82014-11-03 15:20:52 -0800422 Set<PortAddresses> storedAddresses = mgr.getAddressBindingsForPort(CP1);
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700423
Jonathan Harta887ba82014-11-03 15:20:52 -0800424 assertEquals(1, storedAddresses.size());
425 assertTrue(storedAddresses.contains(add1));
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700426
427 mgr.clearAddresses(CP1);
428 storedAddresses = mgr.getAddressBindingsForPort(CP1);
429
Jonathan Harta887ba82014-11-03 15:20:52 -0800430 assertTrue(storedAddresses.isEmpty());
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700431 }
432
433 @Test
Kunihiro Ishiguro1eab7d52015-02-10 10:38:18 +0900434 public void clearAddressesIPv6() {
435 PortAddresses add1 =
436 new PortAddresses(CP1, Sets.newHashSet(IA4, IA5), MAC3, VlanId.NONE);
437
438 mgr.bindAddressesToPort(add1);
439 Set<PortAddresses> storedAddresses = mgr.getAddressBindingsForPort(CP1);
440
441 assertEquals(1, storedAddresses.size());
442 assertTrue(storedAddresses.contains(add1));
443
444 mgr.clearAddresses(CP1);
445 storedAddresses = mgr.getAddressBindingsForPort(CP1);
446
447 assertTrue(storedAddresses.isEmpty());
448 }
449
450 @Test
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700451 public void getAddressBindingsForPort() {
Pavlin Radoslavov76b0ae22014-10-27 15:33:19 -0700452 PortAddresses add1 =
Jonathan Hart6cd2f352015-01-13 17:44:45 -0800453 new PortAddresses(CP1, Sets.newHashSet(IA1, IA2), MAC1, VlanId.NONE);
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700454
455 mgr.bindAddressesToPort(add1);
Jonathan Harta887ba82014-11-03 15:20:52 -0800456 Set<PortAddresses> storedAddresses = mgr.getAddressBindingsForPort(CP1);
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700457
Jonathan Harta887ba82014-11-03 15:20:52 -0800458 assertEquals(1, storedAddresses.size());
459 assertTrue(storedAddresses.contains(add1));
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700460 }
461
462 @Test
Kunihiro Ishiguro1eab7d52015-02-10 10:38:18 +0900463 public void getAddressBindingsForPortIPv6() {
464 PortAddresses add1 =
465 new PortAddresses(CP1, Sets.newHashSet(IA4, IA5), MAC3, VlanId.NONE);
466
467 mgr.bindAddressesToPort(add1);
468 Set<PortAddresses> storedAddresses = mgr.getAddressBindingsForPort(CP1);
469
470 assertEquals(1, storedAddresses.size());
471 assertTrue(storedAddresses.contains(add1));
472 }
473
474 @Test
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700475 public void getAddressBindings() {
476 Set<PortAddresses> storedAddresses = mgr.getAddressBindings();
477
478 assertTrue(storedAddresses.isEmpty());
479
Pavlin Radoslavov76b0ae22014-10-27 15:33:19 -0700480 PortAddresses add1 =
Jonathan Hart6cd2f352015-01-13 17:44:45 -0800481 new PortAddresses(CP1, Sets.newHashSet(IA1, IA2), MAC1, VlanId.NONE);
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700482
483 mgr.bindAddressesToPort(add1);
484
485 storedAddresses = mgr.getAddressBindings();
486
487 assertTrue(storedAddresses.size() == 1);
488
Pavlin Radoslavov76b0ae22014-10-27 15:33:19 -0700489 PortAddresses add2 =
Jonathan Hart6cd2f352015-01-13 17:44:45 -0800490 new PortAddresses(CP2, Sets.newHashSet(IA3), MAC2, VlanId.NONE);
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700491
492 mgr.bindAddressesToPort(add2);
493
494 storedAddresses = mgr.getAddressBindings();
495
496 assertTrue(storedAddresses.size() == 2);
497 assertTrue(storedAddresses.equals(Sets.newHashSet(add1, add2)));
498 }
Kunihiro Ishiguro1eab7d52015-02-10 10:38:18 +0900499
500 @Test
501 public void getAddressBindingsIPv6() {
502 Set<PortAddresses> storedAddresses = mgr.getAddressBindings();
503
504 assertTrue(storedAddresses.isEmpty());
505
506 PortAddresses add1 =
507 new PortAddresses(CP1, Sets.newHashSet(IA4, IA5), MAC3, VlanId.NONE);
508
509 mgr.bindAddressesToPort(add1);
510
511 storedAddresses = mgr.getAddressBindings();
512
513 assertTrue(storedAddresses.size() == 1);
514
515 PortAddresses add2 =
516 new PortAddresses(CP2, Sets.newHashSet(IA5), MAC4, VlanId.NONE);
517
518 mgr.bindAddressesToPort(add2);
519
520 storedAddresses = mgr.getAddressBindings();
521
522 assertTrue(storedAddresses.size() == 2);
523 assertTrue(storedAddresses.equals(Sets.newHashSet(add1, add2)));
524 }
Sahil Lele3a0cdd52015-07-21 14:16:31 -0700525
526 private class TestNetworkConfigService extends NetworkConfigServiceAdapter {
527 }
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700528}