blob: aa548d3be20c80b9fcee20b3bc93b119a8d04e5a [file] [log] [blame]
Brian Stanke86914282016-05-25 15:36:50 -04001/*
2 * Copyright 2016-present Open Networking Laboratory
3 *
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 */
16
17package org.onosproject.incubator.net.virtual.impl;
18
19import com.google.common.collect.Iterators;
Claudine Chiu465a2602017-03-17 18:33:36 -040020import com.google.common.collect.Lists;
Brian Stanke86914282016-05-25 15:36:50 -040021import org.junit.After;
22import org.junit.Before;
23import org.junit.Test;
Claudine Chiu465a2602017-03-17 18:33:36 -040024import org.onlab.junit.TestTools;
Brian Stanke86914282016-05-25 15:36:50 -040025import org.onlab.junit.TestUtils;
yoonseonc6a69272017-01-12 18:22:20 -080026import org.onlab.osgi.TestServiceDirectory;
Brian Stanke86914282016-05-25 15:36:50 -040027import org.onosproject.common.event.impl.TestEventDispatcher;
28import org.onosproject.core.CoreService;
29import org.onosproject.core.CoreServiceAdapter;
30import org.onosproject.core.IdGenerator;
Claudine Chiu465a2602017-03-17 18:33:36 -040031import org.onosproject.event.Event;
32import org.onosproject.event.EventDeliveryService;
Brian Stanke86914282016-05-25 15:36:50 -040033import org.onosproject.incubator.net.virtual.TenantId;
34import org.onosproject.incubator.net.virtual.VirtualDevice;
35import org.onosproject.incubator.net.virtual.VirtualNetwork;
36import org.onosproject.incubator.net.virtual.VirtualPort;
37import org.onosproject.incubator.store.virtual.impl.DistributedVirtualNetworkStore;
Yoonseon Han6c603892016-09-01 11:52:21 -070038import org.onosproject.net.ConnectPoint;
Brian Stanke86914282016-05-25 15:36:50 -040039import org.onosproject.net.Device;
Claudine Chiu465a2602017-03-17 18:33:36 -040040import org.onosproject.net.DeviceId;
Brian Stanke86914282016-05-25 15:36:50 -040041import org.onosproject.net.MastershipRole;
42import org.onosproject.net.NetTestTools;
Brian Stanke86914282016-05-25 15:36:50 -040043import org.onosproject.net.PortNumber;
Claudine Chiu465a2602017-03-17 18:33:36 -040044import org.onosproject.net.device.DeviceEvent;
45import org.onosproject.net.device.DeviceListener;
Brian Stanke86914282016-05-25 15:36:50 -040046import org.onosproject.net.device.DeviceService;
Brian Stanke11f6d532016-07-05 16:17:59 -040047import org.onosproject.net.intent.FakeIntentManager;
48import org.onosproject.net.intent.TestableIntentService;
Brian Stanke86914282016-05-25 15:36:50 -040049import org.onosproject.store.service.TestStorageService;
50
Claudine Chiu465a2602017-03-17 18:33:36 -040051import java.util.ArrayList;
Brian Stanke86914282016-05-25 15:36:50 -040052import java.util.Iterator;
Claudine Chiu465a2602017-03-17 18:33:36 -040053import java.util.List;
54import java.util.Set;
Brian Stanke86914282016-05-25 15:36:50 -040055import java.util.concurrent.atomic.AtomicLong;
56
57import static org.junit.Assert.*;
58
59/**
60 * Junit tests for VirtualNetworkDeviceService.
61 */
Claudine Chiu465a2602017-03-17 18:33:36 -040062public class VirtualNetworkDeviceManagerTest extends VirtualNetworkTestUtil {
Brian Stanke86914282016-05-25 15:36:50 -040063 private final String tenantIdValue1 = "TENANT_ID1";
Brian Stanke86914282016-05-25 15:36:50 -040064
65 private VirtualNetworkManager manager;
66 private DistributedVirtualNetworkStore virtualNetworkManagerStore;
67 private CoreService coreService;
Brian Stanke11f6d532016-07-05 16:17:59 -040068 private TestableIntentService intentService = new FakeIntentManager();
yoonseonc6a69272017-01-12 18:22:20 -080069 private TestServiceDirectory testDirectory;
Claudine Chiu465a2602017-03-17 18:33:36 -040070 private TestListener testListener = new TestListener();
71 private TestEventDispatcher dispatcher = new TestEventDispatcher();
Brian Stanke86914282016-05-25 15:36:50 -040072
73 @Before
74 public void setUp() throws Exception {
75 virtualNetworkManagerStore = new DistributedVirtualNetworkStore();
76
yoonseon214963b2016-11-21 15:41:07 -080077 coreService = new VirtualNetworkDeviceManagerTest.TestCoreService();
yoonseonc6a69272017-01-12 18:22:20 -080078 TestUtils.setField(virtualNetworkManagerStore, "coreService", coreService);
Brian Stanke86914282016-05-25 15:36:50 -040079 TestUtils.setField(virtualNetworkManagerStore, "storageService", new TestStorageService());
80 virtualNetworkManagerStore.activate();
81
82 manager = new VirtualNetworkManager();
83 manager.store = virtualNetworkManagerStore;
Brian Stanke11f6d532016-07-05 16:17:59 -040084 manager.intentService = intentService;
yoonseon322c9c32016-12-07 16:47:02 -080085 manager.coreService = coreService;
Claudine Chiu465a2602017-03-17 18:33:36 -040086 NetTestTools.injectEventDispatcher(manager, dispatcher);
yoonseonc6a69272017-01-12 18:22:20 -080087
88 testDirectory = new TestServiceDirectory();
89 TestUtils.setField(manager, "serviceDirectory", testDirectory);
90
Brian Stanke86914282016-05-25 15:36:50 -040091 manager.activate();
92 }
93
94 @After
95 public void tearDown() {
96 virtualNetworkManagerStore.deactivate();
97 manager.deactivate();
98 NetTestTools.injectEventDispatcher(manager, null);
99 }
100
101 /**
102 * Tests the getDevices(), getAvailableDevices(), getDeviceCount(), getDevice(), and isAvailable() methods.
103 */
104 @Test
105 public void testGetDevices() {
106 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
107 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400108 VirtualDevice device1 = manager.createVirtualDevice(virtualNetwork.id(), DID1);
109 VirtualDevice device2 = manager.createVirtualDevice(virtualNetwork.id(), DID2);
Brian Stanke86914282016-05-25 15:36:50 -0400110
111 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
112
113 // test the getDevices() method
114 Iterator<Device> it = deviceService.getDevices().iterator();
115 assertEquals("The device set size did not match.", 2, Iterators.size(it));
116
117 // test the getAvailableDevices() method
118 Iterator<Device> it2 = deviceService.getAvailableDevices().iterator();
119 assertEquals("The device set size did not match.", 2, Iterators.size(it2));
120
121 // test the getDeviceCount() method
122 assertEquals("The device set size did not match.", 2, deviceService.getDeviceCount());
123
124 // test the getDevice() method
125 assertEquals("The expect device did not match.", device1,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400126 deviceService.getDevice(DID1));
Brian Stanke86914282016-05-25 15:36:50 -0400127 assertNotEquals("The expect device should not have matched.", device1,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400128 deviceService.getDevice(DID2));
Brian Stanke86914282016-05-25 15:36:50 -0400129
130 // test the isAvailable() method
131 assertTrue("The expect device availability did not match.",
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400132 deviceService.isAvailable(DID1));
Brian Stanke86914282016-05-25 15:36:50 -0400133 assertFalse("The expect device availability did not match.",
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400134 deviceService.isAvailable(DID3));
Brian Stanke86914282016-05-25 15:36:50 -0400135 }
136
137 /**
138 * Tests querying for a device using a null device identifier.
139 */
140 @Test(expected = NullPointerException.class)
141 public void testGetDeviceByNullId() {
142 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
143 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
144 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
145
146 // test the getDevice() method with null device id value.
147 deviceService.getDevice(null);
148 }
149
150 /**
151 * Tests querying for a device using a null device type.
152 */
153 @Test(expected = NullPointerException.class)
154 public void testGetDeviceByNullType() {
155 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
156 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
157 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
158
159 // test the getDevices() method with null type value.
160 deviceService.getDevices(null);
161 }
162
163 /**
164 * Tests the isAvailable method using a null device identifier.
165 */
166 @Test(expected = NullPointerException.class)
167 public void testIsAvailableByNullId() {
168 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
169 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
170 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
171
172 // test the isAvailable() method with null device id value.
173 deviceService.isAvailable(null);
174 }
175
176 /**
177 * Tests querying for a device and available devices by device type.
178 */
179 @Test
180 public void testGetDeviceType() {
181 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
182 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400183 manager.createVirtualDevice(virtualNetwork.id(), DID1);
184 manager.createVirtualDevice(virtualNetwork.id(), DID2);
Brian Stanke86914282016-05-25 15:36:50 -0400185
186 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
187
188 // test the getDevices(Type) method.
189 Iterator<Device> it = deviceService.getDevices(Device.Type.VIRTUAL).iterator();
190 assertEquals("The device set size did not match.", 2, Iterators.size(it));
191 Iterator<Device> it2 = deviceService.getDevices(Device.Type.SWITCH).iterator();
192 assertEquals("The device set size did not match.", 0, Iterators.size(it2));
193
194 // test the getAvailableDevices(Type) method.
195 Iterator<Device> it3 = deviceService.getAvailableDevices(Device.Type.VIRTUAL).iterator();
196 assertEquals("The device set size did not match.", 2, Iterators.size(it3));
197 }
198
199 /**
200 * Tests querying the role of a device by null device identifier.
201 */
202 @Test(expected = NullPointerException.class)
203 public void testGetRoleByNullId() {
204 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
205 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
206 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
207
208 // test the getRole() method using a null device identifier
209 deviceService.getRole(null);
210 }
211
212 /**
213 * Tests querying the role of a device by device identifier.
214 */
215 @Test
216 public void testGetRole() {
217 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
218 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
219 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
220
221 // test the getRole() method
222 assertEquals("The expect device role did not match.", MastershipRole.MASTER,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400223 deviceService.getRole(DID1));
Brian Stanke86914282016-05-25 15:36:50 -0400224 }
225
226 /**
227 * Tests querying the ports of a device by null device identifier.
228 */
229 @Test(expected = NullPointerException.class)
230 public void testGetPortsByNullId() {
231 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
232 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
233 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
234
235 // test the getPorts() method using a null device identifier
236 deviceService.getPorts(null);
237 }
238
239 /**
240 * Tests querying the ports of a device by device identifier.
241 */
242 @Test
243 public void testGetPorts() {
244 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
245 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400246 VirtualDevice virtualDevice = manager.createVirtualDevice(virtualNetwork.id(), DID1);
247 manager.createVirtualDevice(virtualNetwork.id(), DID2);
Brian Stanke86914282016-05-25 15:36:50 -0400248
249 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
250
Yoonseon Han6c603892016-09-01 11:52:21 -0700251 ConnectPoint cp = new ConnectPoint(virtualDevice.id(), PortNumber.portNumber(1));
Brian Stanke86914282016-05-25 15:36:50 -0400252
Yoonseon Han6c603892016-09-01 11:52:21 -0700253 manager.createVirtualPort(virtualNetwork.id(), virtualDevice.id(), PortNumber.portNumber(1), cp);
254 manager.createVirtualPort(virtualNetwork.id(), virtualDevice.id(), PortNumber.portNumber(2), cp);
Brian Stanke86914282016-05-25 15:36:50 -0400255
256 // test the getPorts() method
257 assertEquals("The port set size did not match.", 2,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400258 deviceService.getPorts(DID1).size());
Brian Stanke86914282016-05-25 15:36:50 -0400259 assertEquals("The port set size did not match.", 0,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400260 deviceService.getPorts(DID2).size());
Brian Stanke86914282016-05-25 15:36:50 -0400261 }
262
263 /**
264 * Tests querying the port of a device by device identifier and port number.
265 */
266 @Test
267 public void testGetPort() {
268 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
269 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400270 VirtualDevice virtualDevice = manager.createVirtualDevice(virtualNetwork.id(), DID1);
271 manager.createVirtualDevice(virtualNetwork.id(), DID2);
Brian Stanke86914282016-05-25 15:36:50 -0400272
273 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
274
Yoonseon Han6c603892016-09-01 11:52:21 -0700275 ConnectPoint cp = new ConnectPoint(virtualDevice.id(), PortNumber.portNumber(1));
Brian Stanke86914282016-05-25 15:36:50 -0400276
277 VirtualPort virtualPort1 = manager.createVirtualPort(virtualNetwork.id(), virtualDevice.id(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700278 PortNumber.portNumber(1), cp);
279 manager.createVirtualPort(virtualNetwork.id(), virtualDevice.id(), PortNumber.portNumber(2), cp);
Brian Stanke86914282016-05-25 15:36:50 -0400280
281 // test the getPort() method
282 assertEquals("The port did not match as expected.", virtualPort1,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400283 deviceService.getPort(DID1, PortNumber.portNumber(1)));
Brian Stanke86914282016-05-25 15:36:50 -0400284 assertNotEquals("The port did not match as expected.", virtualPort1,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400285 deviceService.getPort(DID1, PortNumber.portNumber(3)));
Brian Stanke86914282016-05-25 15:36:50 -0400286 }
287
288 /**
289 * Tests querying the port statistics of a device by null device identifier.
290 */
291 @Test(expected = NullPointerException.class)
292 public void testGetPortsStatisticsByNullId() {
293 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
294 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
295 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
296
297 // test the getPortStatistics() method using a null device identifier
298 deviceService.getPortStatistics(null);
299 }
300
301 /**
302 * Tests querying the port statistics of a device by device identifier.
303 */
304 @Test
305 public void testGetPortStatistics() {
306 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
307 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400308 VirtualDevice virtualDevice = manager.createVirtualDevice(virtualNetwork.id(), DID1);
309 manager.createVirtualDevice(virtualNetwork.id(), DID2);
Brian Stanke86914282016-05-25 15:36:50 -0400310
311 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
312
313 // test the getPortStatistics() method
314 assertEquals("The port statistics set size did not match.", 0,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400315 deviceService.getPortStatistics(DID1).size());
Brian Stanke86914282016-05-25 15:36:50 -0400316 }
317
318 /**
319 * Tests querying the port delta statistics of a device by null device identifier.
320 */
321 @Test(expected = NullPointerException.class)
322 public void testGetPortsDeltaStatisticsByNullId() {
323 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
324 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
325 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
326
327 // test the getPortDeltaStatistics() method using a null device identifier
328 deviceService.getPortDeltaStatistics(null);
329 }
330
331 /**
332 * Tests querying the port delta statistics of a device by device identifier.
333 */
334 @Test
335 public void testGetPortDeltaStatistics() {
336 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
337 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400338 VirtualDevice virtualDevice = manager.createVirtualDevice(virtualNetwork.id(), DID1);
339 manager.createVirtualDevice(virtualNetwork.id(), DID2);
Brian Stanke86914282016-05-25 15:36:50 -0400340
341 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
342
343 // test the getPortDeltaStatistics() method
344 assertEquals("The port delta statistics set size did not match.", 0,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400345 deviceService.getPortDeltaStatistics(DID1).size());
Brian Stanke86914282016-05-25 15:36:50 -0400346 }
347
348 /**
Claudine Chiu465a2602017-03-17 18:33:36 -0400349 * Tests DeviceEvents received during virtual device/port addition and removal.
350 */
351 @Test
352 public void testDeviceEventsForAddRemovalDeviceAndPorts() throws TestUtils.TestUtilsException {
353 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
354 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
355
356 // add virtual device before virtual device manager is created
357 VirtualDevice device1 = manager.createVirtualDevice(virtualNetwork.id(), VDID1);
358 validateEvents(); // no DeviceEvent expected
359
360 testDirectory.add(EventDeliveryService.class, dispatcher);
361 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
362
363 // virtual device manager is created; register DeviceEvent listener
364 deviceService.addListener(testListener);
365
366 // list to keep track of expected event types
367 List<DeviceEvent.Type> expectedEventTypes = new ArrayList<>();
368
369 // add virtual device
370 VirtualDevice device2 = manager.createVirtualDevice(virtualNetwork.id(), VDID2);
371 expectedEventTypes.add(DeviceEvent.Type.DEVICE_ADDED);
372
373 ConnectPoint cp = new ConnectPoint(PHYDID1, PortNumber.portNumber(1));
374
375 // add 2 virtual ports
376 manager.createVirtualPort(virtualNetwork.id(),
377 device2.id(), PortNumber.portNumber(1), cp);
378 expectedEventTypes.add(DeviceEvent.Type.PORT_ADDED);
379 manager.createVirtualPort(virtualNetwork.id(),
380 device2.id(), PortNumber.portNumber(2), cp);
381 expectedEventTypes.add(DeviceEvent.Type.PORT_ADDED);
382
383 // verify virtual ports were added
384 Set<VirtualPort> virtualPorts = manager.getVirtualPorts(virtualNetwork.id(), device2.id());
385 assertNotNull("The virtual port set should not be null", virtualPorts);
386 assertEquals("The virtual port set size did not match.", 2, virtualPorts.size());
387
388 // remove 2 virtual ports
389 for (VirtualPort virtualPort : virtualPorts) {
390 manager.removeVirtualPort(virtualNetwork.id(),
391 (DeviceId) virtualPort.element().id(), virtualPort.number());
392 expectedEventTypes.add(DeviceEvent.Type.PORT_REMOVED);
393 // attempt to remove the same virtual port again - no DeviceEvent.Type.PORT_REMOVED expected.
394 manager.removeVirtualPort(virtualNetwork.id(),
395 (DeviceId) virtualPort.element().id(), virtualPort.number());
396 }
397
398 // verify virtual ports were removed
399 virtualPorts = manager.getVirtualPorts(virtualNetwork.id(), device2.id());
400 assertTrue("The virtual port set should be empty.", virtualPorts.isEmpty());
401
402 // Add/remove one virtual port again.
403 VirtualPort virtualPort =
404 manager.createVirtualPort(virtualNetwork.id(), device2.id(),
405 PortNumber.portNumber(1), cp);
406 expectedEventTypes.add(DeviceEvent.Type.PORT_ADDED);
407
408 ConnectPoint newCp = new ConnectPoint(PHYDID3, PortNumber.portNumber(2));
409 manager.bindVirtualPort(virtualNetwork.id(), device2.id(),
410 PortNumber.portNumber(1), newCp);
411 expectedEventTypes.add(DeviceEvent.Type.PORT_UPDATED);
412
413 manager.removeVirtualPort(virtualNetwork.id(),
414 (DeviceId) virtualPort.element().id(), virtualPort.number());
415 expectedEventTypes.add(DeviceEvent.Type.PORT_REMOVED);
416
417 // verify no virtual ports remain
418 virtualPorts = manager.getVirtualPorts(virtualNetwork.id(), device2.id());
419 assertTrue("The virtual port set should be empty.", virtualPorts.isEmpty());
420
421 // remove virtual device
422 manager.removeVirtualDevice(virtualNetwork.id(), device2.id());
423 expectedEventTypes.add(DeviceEvent.Type.DEVICE_REMOVED);
424
425 // Validate that the events were all received in the correct order.
426 validateEvents((Enum[]) expectedEventTypes.toArray(
427 new DeviceEvent.Type[expectedEventTypes.size()]));
428
429 // cleanup
430 deviceService.removeListener(testListener);
431 }
432
433 /**
Brian Stanke86914282016-05-25 15:36:50 -0400434 * Core service test class.
435 */
436 private class TestCoreService extends CoreServiceAdapter {
437
438 @Override
439 public IdGenerator getIdGenerator(String topic) {
440 return new IdGenerator() {
441 private AtomicLong counter = new AtomicLong(0);
442
443 @Override
444 public long getNewId() {
445 return counter.getAndIncrement();
446 }
447 };
448 }
449 }
Claudine Chiu465a2602017-03-17 18:33:36 -0400450
451 /**
452 * Method to validate that the actual versus expected virtual network events were
453 * received correctly.
454 *
455 * @param types expected virtual network events.
456 */
457 private void validateEvents(Enum... types) {
458 TestTools.assertAfter(100, () -> {
459 int i = 0;
460 assertEquals("wrong events received", types.length, testListener.events.size());
461 for (Event event : testListener.events) {
462 assertEquals("incorrect event type", types[i], event.type());
463 i++;
464 }
465 testListener.events.clear();
466 });
467 }
468
469 /**
470 * Test listener class to receive device events.
471 */
472 private static class TestListener implements DeviceListener {
473
474 private List<DeviceEvent> events = Lists.newArrayList();
475
476 @Override
477 public void event(DeviceEvent event) {
478 events.add(event);
479 }
480 }
Brian Stanke86914282016-05-25 15:36:50 -0400481}