blob: 9f10304747ec9012b061f9f8f79e7de0f762d52f [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;
Thomas Vachuska42e8cce2015-07-29 19:25:18 -070023import static org.onosproject.net.NetTestTools.injectEventDispatcher;
Brian O'Connorabafb502014-12-02 22:26:20 -080024import static org.onosproject.net.host.HostEvent.Type.HOST_ADDED;
25import static org.onosproject.net.host.HostEvent.Type.HOST_MOVED;
26import static org.onosproject.net.host.HostEvent.Type.HOST_REMOVED;
27import static org.onosproject.net.host.HostEvent.Type.HOST_UPDATED;
Ayaka Koshibeac8e7292014-09-16 16:08:31 -070028
29import java.util.List;
30import java.util.Set;
31
32import org.junit.After;
33import org.junit.Before;
34import org.junit.Test;
Jonathan Hart6cd2f352015-01-13 17:44:45 -080035import org.onlab.packet.IpAddress;
36import org.onlab.packet.IpPrefix;
37import org.onlab.packet.MacAddress;
38import org.onlab.packet.VlanId;
Brian O'Connorabafb502014-12-02 22:26:20 -080039import org.onosproject.event.Event;
Thomas Vachuska36002e62015-05-19 16:12:29 -070040import org.onosproject.common.event.impl.TestEventDispatcher;
Sahil Lele3a0cdd52015-07-21 14:16:31 -070041import org.onosproject.incubator.net.config.NetworkConfigServiceAdapter;
Brian O'Connorabafb502014-12-02 22:26:20 -080042import org.onosproject.net.ConnectPoint;
43import org.onosproject.net.DeviceId;
44import org.onosproject.net.Host;
45import org.onosproject.net.HostId;
46import org.onosproject.net.HostLocation;
47import org.onosproject.net.PortNumber;
48import org.onosproject.net.host.DefaultHostDescription;
49import org.onosproject.net.host.HostDescription;
50import org.onosproject.net.host.HostEvent;
51import org.onosproject.net.host.HostListener;
52import org.onosproject.net.host.HostProvider;
53import org.onosproject.net.host.HostProviderRegistry;
54import org.onosproject.net.host.HostProviderService;
55import org.onosproject.net.host.InterfaceIpAddress;
56import org.onosproject.net.host.PortAddresses;
57import org.onosproject.net.provider.AbstractProvider;
58import org.onosproject.net.provider.ProviderId;
Thomas Vachuskac97aa612015-06-23 16:00:18 -070059import org.onosproject.store.trivial.SimpleHostStore;
Ayaka Koshibeac8e7292014-09-16 16:08:31 -070060
61import com.google.common.collect.Lists;
62import com.google.common.collect.Sets;
63
Ayaka Koshibeac8e7292014-09-16 16:08:31 -070064/**
65 * Test codifying the host service & host provider service contracts.
66 */
tom202175a2014-09-19 19:00:11 -070067public class HostManagerTest {
Ayaka Koshibeac8e7292014-09-16 16:08:31 -070068
tom7e02cda2014-09-18 12:05:46 -070069 private static final ProviderId PID = new ProviderId("of", "foo");
Ayaka Koshibeac8e7292014-09-16 16:08:31 -070070
Ayaka Koshibea9c199f2014-09-16 16:21:40 -070071 private static final VlanId VLAN1 = VlanId.vlanId((short) 1);
72 private static final VlanId VLAN2 = VlanId.vlanId((short) 2);
73 private static final MacAddress MAC1 = MacAddress.valueOf("00:00:11:00:00:01");
74 private static final MacAddress MAC2 = MacAddress.valueOf("00:00:22:00:00:02");
Kunihiro Ishiguro1eab7d52015-02-10 10:38:18 +090075 private static final MacAddress MAC3 = MacAddress.valueOf("00:00:33:00:00:03");
76 private static final MacAddress MAC4 = MacAddress.valueOf("00:00:44:00:00:04");
Ayaka Koshibeac8e7292014-09-16 16:08:31 -070077 private static final HostId HID1 = HostId.hostId(MAC1, VLAN1);
78 private static final HostId HID2 = HostId.hostId(MAC2, VLAN1);
Kunihiro Ishiguro1eab7d52015-02-10 10:38:18 +090079 private static final HostId HID3 = HostId.hostId(MAC3, VLAN1);
80 private static final HostId HID4 = HostId.hostId(MAC4, VLAN1);
Ayaka Koshibeac8e7292014-09-16 16:08:31 -070081
Pavlin Radoslavov33f228a2014-10-27 19:33:16 -070082 private static final IpAddress IP1 = IpAddress.valueOf("10.0.0.1");
83 private static final IpAddress IP2 = IpAddress.valueOf("10.0.0.2");
Kunihiro Ishiguro1eab7d52015-02-10 10:38:18 +090084 private static final IpAddress IP3 = IpAddress.valueOf("2001::1");
85 private static final IpAddress IP4 = IpAddress.valueOf("2001::2");
Ayaka Koshibeac8e7292014-09-16 16:08:31 -070086
87 private static final DeviceId DID1 = DeviceId.deviceId("of:001");
88 private static final DeviceId DID2 = DeviceId.deviceId("of:002");
89 private static final PortNumber P1 = PortNumber.portNumber(100);
90 private static final PortNumber P2 = PortNumber.portNumber(200);
91 private static final HostLocation LOC1 = new HostLocation(DID1, P1, 123L);
92 private static final HostLocation LOC2 = new HostLocation(DID1, P2, 123L);
Jonathan Hartc884f1b2014-09-24 11:53:33 -070093 private static final ConnectPoint CP1 = new ConnectPoint(DID1, P1);
94 private static final ConnectPoint CP2 = new ConnectPoint(DID2, P2);
95
Pavlin Radoslavov76b0ae22014-10-27 15:33:19 -070096 private static final InterfaceIpAddress IA1 =
97 new InterfaceIpAddress(IpAddress.valueOf("10.1.1.1"),
98 IpPrefix.valueOf("10.1.1.0/24"));
99 private static final InterfaceIpAddress IA2 =
100 new InterfaceIpAddress(IpAddress.valueOf("10.2.2.2"),
101 IpPrefix.valueOf("10.2.0.0/16"));
102 private static final InterfaceIpAddress IA3 =
103 new InterfaceIpAddress(IpAddress.valueOf("10.3.3.3"),
104 IpPrefix.valueOf("10.3.3.0/24"));
Kunihiro Ishiguro1eab7d52015-02-10 10:38:18 +0900105 private static final InterfaceIpAddress IA4 =
106 new InterfaceIpAddress(IpAddress.valueOf("2001:100::1"),
107 IpPrefix.valueOf("2001:100::/56"));
108 private static final InterfaceIpAddress IA5 =
109 new InterfaceIpAddress(IpAddress.valueOf("2001:200::1"),
110 IpPrefix.valueOf("2001:200::/48"));
111 private static final InterfaceIpAddress IA6 =
112 new InterfaceIpAddress(IpAddress.valueOf("2001:300::1"),
113 IpPrefix.valueOf("2001:300::/56"));
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700114
tom202175a2014-09-19 19:00:11 -0700115 private HostManager mgr;
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700116
117 protected TestListener listener = new TestListener();
118 protected HostProviderRegistry registry;
119 protected TestHostProvider provider;
120 protected HostProviderService providerService;
121
122 @Before
123 public void setUp() {
tom202175a2014-09-19 19:00:11 -0700124 mgr = new HostManager();
tom5bcc9462014-09-19 10:11:31 -0700125 mgr.store = new SimpleHostStore();
Thomas Vachuska42e8cce2015-07-29 19:25:18 -0700126 injectEventDispatcher(mgr, new TestEventDispatcher());
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700127 registry = mgr;
Sahil Lele3a0cdd52015-07-21 14:16:31 -0700128 mgr.networkConfigService = new TestNetworkConfigService();
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700129 mgr.activate();
130
131 mgr.addListener(listener);
132
133 provider = new TestHostProvider();
134 providerService = registry.register(provider);
135 assertTrue("provider should be registered",
tom093340b2014-10-10 00:15:36 -0700136 registry.getProviders().contains(provider.id()));
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700137 }
138
139 @After
140 public void tearDown() {
141 registry.unregister(provider);
142 assertFalse("provider should not be registered",
tom093340b2014-10-10 00:15:36 -0700143 registry.getProviders().contains(provider.id()));
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700144
145 mgr.removeListener(listener);
146 mgr.deactivate();
Thomas Vachuska42e8cce2015-07-29 19:25:18 -0700147 injectEventDispatcher(mgr, null);
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700148 }
149
Ayaka Koshibea9c199f2014-09-16 16:21:40 -0700150 private void detect(HostId hid, MacAddress mac, VlanId vlan,
Pavlin Radoslavov33f228a2014-10-27 19:33:16 -0700151 HostLocation loc, IpAddress ip) {
tom093340b2014-10-10 00:15:36 -0700152 HostDescription descr = new DefaultHostDescription(mac, vlan, loc, ip);
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700153 providerService.hostDetected(hid, descr);
154 assertNotNull("host should be found", mgr.getHost(hid));
155 }
156
157 private void validateEvents(Enum... types) {
158 int i = 0;
159 assertEquals("wrong events received", types.length, listener.events.size());
160 for (Event event : listener.events) {
161 assertEquals("incorrect event type", types[i], event.type());
162 i++;
163 }
164 listener.events.clear();
165 }
166
167 @Test
168 public void hostDetected() {
169 assertNull("host shouldn't be found", mgr.getHost(HID1));
170
171 // host addition
tom093340b2014-10-10 00:15:36 -0700172 detect(HID1, MAC1, VLAN1, LOC1, IP1);
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700173 assertEquals("exactly one should be found", 1, mgr.getHostCount());
tom093340b2014-10-10 00:15:36 -0700174 detect(HID2, MAC2, VLAN2, LOC2, IP1);
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700175 assertEquals("two hosts should be found", 2, mgr.getHostCount());
176 validateEvents(HOST_ADDED, HOST_ADDED);
177
178 // host motion
tom093340b2014-10-10 00:15:36 -0700179 detect(HID1, MAC1, VLAN1, LOC2, IP1);
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700180 validateEvents(HOST_MOVED);
181 assertEquals("only two hosts should be found", 2, mgr.getHostCount());
182
183 // host update
tom093340b2014-10-10 00:15:36 -0700184 detect(HID1, MAC1, VLAN1, LOC2, IP2);
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700185 validateEvents(HOST_UPDATED);
186 assertEquals("only two hosts should be found", 2, mgr.getHostCount());
187 }
188
189 @Test
Kunihiro Ishiguro1eab7d52015-02-10 10:38:18 +0900190 public void hostDetectedIPv6() {
191 assertNull("host shouldn't be found", mgr.getHost(HID3));
192
193 // host addition
194 detect(HID3, MAC3, VLAN1, LOC1, IP3);
195 assertEquals("exactly one should be found", 1, mgr.getHostCount());
196 detect(HID4, MAC4, VLAN2, LOC2, IP3);
197 assertEquals("two hosts should be found", 2, mgr.getHostCount());
198 validateEvents(HOST_ADDED, HOST_ADDED);
199
200 // host motion
201 detect(HID3, MAC3, VLAN1, LOC2, IP3);
202 validateEvents(HOST_MOVED);
203 assertEquals("only two hosts should be found", 2, mgr.getHostCount());
204
205 // host update
206 detect(HID3, MAC3, VLAN1, LOC2, IP4);
207 validateEvents(HOST_UPDATED);
208 assertEquals("only two hosts should be found", 2, mgr.getHostCount());
209 }
210
211 @Test
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700212 public void hostVanished() {
tom093340b2014-10-10 00:15:36 -0700213 detect(HID1, MAC1, VLAN1, LOC1, IP1);
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700214 providerService.hostVanished(HID1);
215 validateEvents(HOST_ADDED, HOST_REMOVED);
216
217 assertNull("host should have been removed", mgr.getHost(HID1));
218 }
219
Kunihiro Ishiguro1eab7d52015-02-10 10:38:18 +0900220 @Test
221 public void hostVanishedIPv6() {
222 detect(HID3, MAC3, VLAN1, LOC1, IP3);
223 providerService.hostVanished(HID3);
224 validateEvents(HOST_ADDED, HOST_REMOVED);
225
226 assertNull("host should have been removed", mgr.getHost(HID3));
227 }
228
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700229 private void validateHosts(
tom093340b2014-10-10 00:15:36 -0700230 String msg, Iterable<Host> hosts, HostId... ids) {
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700231 Set<HostId> hids = Sets.newHashSet(ids);
232 for (Host h : hosts) {
233 assertTrue(msg, hids.remove(h.id()));
234 }
235 assertTrue("expected hosts not fetched from store", hids.isEmpty());
236 }
237
238 @Test
239 public void getHosts() {
tom093340b2014-10-10 00:15:36 -0700240 detect(HID1, MAC1, VLAN1, LOC1, IP1);
241 detect(HID2, MAC2, VLAN1, LOC2, IP2);
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700242
243 validateHosts("host not properly stored", mgr.getHosts(), HID1, HID2);
244 validateHosts("can't get hosts by VLAN", mgr.getHostsByVlan(VLAN1), HID1, HID2);
245 validateHosts("can't get hosts by MAC", mgr.getHostsByMac(MAC1), HID1);
246 validateHosts("can't get hosts by IP", mgr.getHostsByIp(IP1), HID1);
247 validateHosts("can't get hosts by location", mgr.getConnectedHosts(LOC1), HID1);
248 assertTrue("incorrect host location", mgr.getConnectedHosts(DID2).isEmpty());
249 }
250
Kunihiro Ishiguro1eab7d52015-02-10 10:38:18 +0900251 @Test
252 public void getHostsIPv6() {
253 detect(HID3, MAC3, VLAN1, LOC1, IP3);
254 detect(HID4, MAC4, VLAN1, LOC2, IP4);
255
256 validateHosts("host not properly stored", mgr.getHosts(), HID3, HID4);
257 validateHosts("can't get hosts by VLAN", mgr.getHostsByVlan(VLAN1), HID3, HID4);
258 validateHosts("can't get hosts by MAC", mgr.getHostsByMac(MAC3), HID3);
259 validateHosts("can't get hosts by IP", mgr.getHostsByIp(IP3), HID3);
260 validateHosts("can't get hosts by location", mgr.getConnectedHosts(LOC1), HID3);
261 assertTrue("incorrect host location", mgr.getConnectedHosts(DID2).isEmpty());
262 }
263
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700264 private static class TestHostProvider extends AbstractProvider
265 implements HostProvider {
266
267 protected TestHostProvider() {
268 super(PID);
269 }
270
271 @Override
272 public ProviderId id() {
273 return PID;
274 }
275
276 @Override
277 public void triggerProbe(Host host) {
278 }
279
280 }
281
282 private static class TestListener implements HostListener {
283
284 protected List<HostEvent> events = Lists.newArrayList();
285
286 @Override
287 public void event(HostEvent event) {
288 events.add(event);
289 }
290
291 }
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700292
293 @Test
294 public void bindAddressesToPort() {
Pavlin Radoslavov76b0ae22014-10-27 15:33:19 -0700295 PortAddresses add1 =
Jonathan Hart6cd2f352015-01-13 17:44:45 -0800296 new PortAddresses(CP1, Sets.newHashSet(IA1, IA2), MAC1, VlanId.NONE);
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700297
298 mgr.bindAddressesToPort(add1);
Jonathan Harta887ba82014-11-03 15:20:52 -0800299 Set<PortAddresses> storedAddresses = mgr.getAddressBindingsForPort(CP1);
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700300
Jonathan Harta887ba82014-11-03 15:20:52 -0800301 assertEquals(1, storedAddresses.size());
302 assertTrue(storedAddresses.contains(add1));
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700303
304 // Add some more addresses and check that they're added correctly
Pavlin Radoslavov76b0ae22014-10-27 15:33:19 -0700305 PortAddresses add2 =
Jonathan Hart6cd2f352015-01-13 17:44:45 -0800306 new PortAddresses(CP1, Sets.newHashSet(IA3), null,
307 VlanId.vlanId((short) 2));
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700308
309 mgr.bindAddressesToPort(add2);
310 storedAddresses = mgr.getAddressBindingsForPort(CP1);
311
Jonathan Harta887ba82014-11-03 15:20:52 -0800312 assertEquals(2, storedAddresses.size());
313 assertTrue(storedAddresses.contains(add1));
314 assertTrue(storedAddresses.contains(add2));
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700315
Jonathan Hart6cd2f352015-01-13 17:44:45 -0800316 PortAddresses add3 = new PortAddresses(CP1, null, MAC2, VlanId.NONE);
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700317
318 mgr.bindAddressesToPort(add3);
319 storedAddresses = mgr.getAddressBindingsForPort(CP1);
320
Jonathan Harta887ba82014-11-03 15:20:52 -0800321 assertEquals(3, storedAddresses.size());
322 assertTrue(storedAddresses.contains(add1));
323 assertTrue(storedAddresses.contains(add2));
324 assertTrue(storedAddresses.contains(add3));
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700325 }
326
327 @Test
Kunihiro Ishiguro1eab7d52015-02-10 10:38:18 +0900328 public void bindAddressesToPortIPv6() {
329 PortAddresses add1 =
330 new PortAddresses(CP1, Sets.newHashSet(IA4, IA5), MAC3, VlanId.NONE);
331
332 mgr.bindAddressesToPort(add1);
333 Set<PortAddresses> storedAddresses = mgr.getAddressBindingsForPort(CP1);
334
335 assertEquals(1, storedAddresses.size());
336 assertTrue(storedAddresses.contains(add1));
337
338 // Add some more addresses and check that they're added correctly
339 PortAddresses add2 =
340 new PortAddresses(CP1, Sets.newHashSet(IA6), null,
341 VlanId.vlanId((short) 2));
342
343 mgr.bindAddressesToPort(add2);
344 storedAddresses = mgr.getAddressBindingsForPort(CP1);
345
346 assertEquals(2, storedAddresses.size());
347 assertTrue(storedAddresses.contains(add1));
348 assertTrue(storedAddresses.contains(add2));
349
350 PortAddresses add3 = new PortAddresses(CP1, null, MAC4, VlanId.NONE);
351
352 mgr.bindAddressesToPort(add3);
353 storedAddresses = mgr.getAddressBindingsForPort(CP1);
354
355 assertEquals(3, storedAddresses.size());
356 assertTrue(storedAddresses.contains(add1));
357 assertTrue(storedAddresses.contains(add2));
358 assertTrue(storedAddresses.contains(add3));
359 }
360
361 @Test
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700362 public void unbindAddressesFromPort() {
Pavlin Radoslavov76b0ae22014-10-27 15:33:19 -0700363 PortAddresses add1 =
Jonathan Hart6cd2f352015-01-13 17:44:45 -0800364 new PortAddresses(CP1, Sets.newHashSet(IA1, IA2), MAC1, VlanId.NONE);
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700365
366 mgr.bindAddressesToPort(add1);
Jonathan Harta887ba82014-11-03 15:20:52 -0800367 Set<PortAddresses> storedAddresses = mgr.getAddressBindingsForPort(CP1);
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700368
Jonathan Harta887ba82014-11-03 15:20:52 -0800369 assertEquals(1, storedAddresses.size());
370 assertTrue(storedAddresses.contains(add1));
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700371
Pavlin Radoslavov76b0ae22014-10-27 15:33:19 -0700372 PortAddresses rem1 =
Jonathan Hart6cd2f352015-01-13 17:44:45 -0800373 new PortAddresses(CP1, Sets.newHashSet(IA1), null, VlanId.NONE);
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700374
375 mgr.unbindAddressesFromPort(rem1);
376 storedAddresses = mgr.getAddressBindingsForPort(CP1);
377
Jonathan Harta887ba82014-11-03 15:20:52 -0800378 // It shouldn't have been removed because it didn't match the originally
379 // submitted address object
380 assertEquals(1, storedAddresses.size());
381 assertTrue(storedAddresses.contains(add1));
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700382
Jonathan Harta887ba82014-11-03 15:20:52 -0800383 mgr.unbindAddressesFromPort(add1);
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700384 storedAddresses = mgr.getAddressBindingsForPort(CP1);
385
Jonathan Harta887ba82014-11-03 15:20:52 -0800386 assertTrue(storedAddresses.isEmpty());
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700387 }
388
389 @Test
Kunihiro Ishiguro1eab7d52015-02-10 10:38:18 +0900390 public void unbindAddressesFromPortIPv6() {
391 PortAddresses add1 =
392 new PortAddresses(CP1, Sets.newHashSet(IA4, IA5), MAC3, VlanId.NONE);
393
394 mgr.bindAddressesToPort(add1);
395 Set<PortAddresses> storedAddresses = mgr.getAddressBindingsForPort(CP1);
396
397 assertEquals(1, storedAddresses.size());
398 assertTrue(storedAddresses.contains(add1));
399
400 PortAddresses rem1 =
401 new PortAddresses(CP1, Sets.newHashSet(IA4), null, VlanId.NONE);
402
403 mgr.unbindAddressesFromPort(rem1);
404 storedAddresses = mgr.getAddressBindingsForPort(CP1);
405
406 // It shouldn't have been removed because it didn't match the originally
407 // submitted address object
408 assertEquals(1, storedAddresses.size());
409 assertTrue(storedAddresses.contains(add1));
410
411 mgr.unbindAddressesFromPort(add1);
412 storedAddresses = mgr.getAddressBindingsForPort(CP1);
413
414 assertTrue(storedAddresses.isEmpty());
415 }
416
417 @Test
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700418 public void clearAddresses() {
Pavlin Radoslavov76b0ae22014-10-27 15:33:19 -0700419 PortAddresses add1 =
Jonathan Hart6cd2f352015-01-13 17:44:45 -0800420 new PortAddresses(CP1, Sets.newHashSet(IA1, IA2), MAC1, VlanId.NONE);
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700421
422 mgr.bindAddressesToPort(add1);
Jonathan Harta887ba82014-11-03 15:20:52 -0800423 Set<PortAddresses> storedAddresses = mgr.getAddressBindingsForPort(CP1);
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700424
Jonathan Harta887ba82014-11-03 15:20:52 -0800425 assertEquals(1, storedAddresses.size());
426 assertTrue(storedAddresses.contains(add1));
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700427
428 mgr.clearAddresses(CP1);
429 storedAddresses = mgr.getAddressBindingsForPort(CP1);
430
Jonathan Harta887ba82014-11-03 15:20:52 -0800431 assertTrue(storedAddresses.isEmpty());
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700432 }
433
434 @Test
Kunihiro Ishiguro1eab7d52015-02-10 10:38:18 +0900435 public void clearAddressesIPv6() {
436 PortAddresses add1 =
437 new PortAddresses(CP1, Sets.newHashSet(IA4, IA5), MAC3, VlanId.NONE);
438
439 mgr.bindAddressesToPort(add1);
440 Set<PortAddresses> storedAddresses = mgr.getAddressBindingsForPort(CP1);
441
442 assertEquals(1, storedAddresses.size());
443 assertTrue(storedAddresses.contains(add1));
444
445 mgr.clearAddresses(CP1);
446 storedAddresses = mgr.getAddressBindingsForPort(CP1);
447
448 assertTrue(storedAddresses.isEmpty());
449 }
450
451 @Test
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700452 public void getAddressBindingsForPort() {
Pavlin Radoslavov76b0ae22014-10-27 15:33:19 -0700453 PortAddresses add1 =
Jonathan Hart6cd2f352015-01-13 17:44:45 -0800454 new PortAddresses(CP1, Sets.newHashSet(IA1, IA2), MAC1, VlanId.NONE);
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700455
456 mgr.bindAddressesToPort(add1);
Jonathan Harta887ba82014-11-03 15:20:52 -0800457 Set<PortAddresses> storedAddresses = mgr.getAddressBindingsForPort(CP1);
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700458
Jonathan Harta887ba82014-11-03 15:20:52 -0800459 assertEquals(1, storedAddresses.size());
460 assertTrue(storedAddresses.contains(add1));
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700461 }
462
463 @Test
Kunihiro Ishiguro1eab7d52015-02-10 10:38:18 +0900464 public void getAddressBindingsForPortIPv6() {
465 PortAddresses add1 =
466 new PortAddresses(CP1, Sets.newHashSet(IA4, IA5), MAC3, VlanId.NONE);
467
468 mgr.bindAddressesToPort(add1);
469 Set<PortAddresses> storedAddresses = mgr.getAddressBindingsForPort(CP1);
470
471 assertEquals(1, storedAddresses.size());
472 assertTrue(storedAddresses.contains(add1));
473 }
474
475 @Test
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700476 public void getAddressBindings() {
477 Set<PortAddresses> storedAddresses = mgr.getAddressBindings();
478
479 assertTrue(storedAddresses.isEmpty());
480
Pavlin Radoslavov76b0ae22014-10-27 15:33:19 -0700481 PortAddresses add1 =
Jonathan Hart6cd2f352015-01-13 17:44:45 -0800482 new PortAddresses(CP1, Sets.newHashSet(IA1, IA2), MAC1, VlanId.NONE);
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700483
484 mgr.bindAddressesToPort(add1);
485
486 storedAddresses = mgr.getAddressBindings();
487
488 assertTrue(storedAddresses.size() == 1);
489
Pavlin Radoslavov76b0ae22014-10-27 15:33:19 -0700490 PortAddresses add2 =
Jonathan Hart6cd2f352015-01-13 17:44:45 -0800491 new PortAddresses(CP2, Sets.newHashSet(IA3), MAC2, VlanId.NONE);
Jonathan Hartc884f1b2014-09-24 11:53:33 -0700492
493 mgr.bindAddressesToPort(add2);
494
495 storedAddresses = mgr.getAddressBindings();
496
497 assertTrue(storedAddresses.size() == 2);
498 assertTrue(storedAddresses.equals(Sets.newHashSet(add1, add2)));
499 }
Kunihiro Ishiguro1eab7d52015-02-10 10:38:18 +0900500
501 @Test
502 public void getAddressBindingsIPv6() {
503 Set<PortAddresses> storedAddresses = mgr.getAddressBindings();
504
505 assertTrue(storedAddresses.isEmpty());
506
507 PortAddresses add1 =
508 new PortAddresses(CP1, Sets.newHashSet(IA4, IA5), MAC3, VlanId.NONE);
509
510 mgr.bindAddressesToPort(add1);
511
512 storedAddresses = mgr.getAddressBindings();
513
514 assertTrue(storedAddresses.size() == 1);
515
516 PortAddresses add2 =
517 new PortAddresses(CP2, Sets.newHashSet(IA5), MAC4, VlanId.NONE);
518
519 mgr.bindAddressesToPort(add2);
520
521 storedAddresses = mgr.getAddressBindings();
522
523 assertTrue(storedAddresses.size() == 2);
524 assertTrue(storedAddresses.equals(Sets.newHashSet(add1, add2)));
525 }
Sahil Lele3a0cdd52015-07-21 14:16:31 -0700526
527 private class TestNetworkConfigService extends NetworkConfigServiceAdapter {
528 }
Ayaka Koshibeac8e7292014-09-16 16:08:31 -0700529}