blob: 6bf9ed23e95fb5e303bbdcd119e6ff5836540e79 [file] [log] [blame]
Brian Stanke0e5c94e2016-03-08 11:20:04 -05001/*
Brian O'Connor5ab426f2016-04-09 01:19:45 -07002 * Copyright 2016-present Open Networking Laboratory
Brian Stanke0e5c94e2016-03-08 11:20:04 -05003 *
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.Lists;
20import org.junit.After;
21import org.junit.Before;
22import org.junit.Test;
23import org.onlab.junit.TestTools;
24import org.onlab.junit.TestUtils;
yoonseonc6a69272017-01-12 18:22:20 -080025import org.onlab.osgi.TestServiceDirectory;
Brian Stanke0e5c94e2016-03-08 11:20:04 -050026import org.onosproject.common.event.impl.TestEventDispatcher;
27import org.onosproject.core.CoreService;
28import org.onosproject.core.CoreServiceAdapter;
29import org.onosproject.core.IdGenerator;
30import org.onosproject.event.Event;
Brian Stanke11f6d532016-07-05 16:17:59 -040031import org.onosproject.incubator.net.tunnel.TunnelId;
Brian Stanke0e5c94e2016-03-08 11:20:04 -050032import org.onosproject.incubator.net.virtual.DefaultVirtualNetwork;
33import org.onosproject.incubator.net.virtual.NetworkId;
34import org.onosproject.incubator.net.virtual.TenantId;
35import org.onosproject.incubator.net.virtual.VirtualDevice;
Brian Stanke7a81b532016-06-14 15:43:51 -040036import org.onosproject.incubator.net.virtual.VirtualHost;
Brian Stanke0e5c94e2016-03-08 11:20:04 -050037import org.onosproject.incubator.net.virtual.VirtualLink;
38import org.onosproject.incubator.net.virtual.VirtualNetwork;
39import org.onosproject.incubator.net.virtual.VirtualNetworkEvent;
Brian Stanke11f6d532016-07-05 16:17:59 -040040import org.onosproject.incubator.net.virtual.VirtualNetworkIntent;
Brian Stanke0e5c94e2016-03-08 11:20:04 -050041import org.onosproject.incubator.net.virtual.VirtualNetworkListener;
yoonseon6b972c32016-12-06 16:45:03 -080042import org.onosproject.incubator.net.virtual.provider.VirtualNetworkProviderService;
Brian Stanke0e5c94e2016-03-08 11:20:04 -050043import org.onosproject.incubator.net.virtual.VirtualPort;
yoonseon214963b2016-11-21 15:41:07 -080044import org.onosproject.incubator.net.virtual.impl.provider.DefaultVirtualNetworkProvider;
Brian Stanke0e5c94e2016-03-08 11:20:04 -050045import org.onosproject.incubator.store.virtual.impl.DistributedVirtualNetworkStore;
46import org.onosproject.net.ConnectPoint;
Brian Stanke0e5c94e2016-03-08 11:20:04 -050047import org.onosproject.net.DeviceId;
Brian Stankefb61df42016-07-25 11:47:51 -040048import org.onosproject.net.Link;
Brian Stanke0e5c94e2016-03-08 11:20:04 -050049import org.onosproject.net.NetTestTools;
Brian Stanke0e5c94e2016-03-08 11:20:04 -050050import org.onosproject.net.PortNumber;
Brian Stanke7a81b532016-06-14 15:43:51 -040051import org.onosproject.net.TestDeviceParams;
Brian Stanke11f6d532016-07-05 16:17:59 -040052import org.onosproject.net.intent.FakeIntentManager;
53import org.onosproject.net.intent.Intent;
54import org.onosproject.net.intent.IntentState;
55import org.onosproject.net.intent.Key;
56import org.onosproject.net.intent.MockIdGenerator;
57import org.onosproject.net.intent.TestableIntentService;
Brian Stankefb61df42016-07-25 11:47:51 -040058import org.onosproject.net.topology.Topology;
59import org.onosproject.net.topology.TopologyService;
Brian Stanke0e5c94e2016-03-08 11:20:04 -050060import org.onosproject.store.service.TestStorageService;
61
Brian Stankefb61df42016-07-25 11:47:51 -040062import java.util.ArrayList;
Brian Stanke0e5c94e2016-03-08 11:20:04 -050063import java.util.Collection;
64import java.util.List;
65import java.util.Set;
66import java.util.concurrent.atomic.AtomicLong;
67
68import static org.junit.Assert.*;
Brian Stanke11f6d532016-07-05 16:17:59 -040069import static org.onosproject.net.NetTestTools.APP_ID;
Brian Stanke0e5c94e2016-03-08 11:20:04 -050070
71/**
72 * Junit tests for VirtualNetworkManager.
73 */
Brian Stanke7a81b532016-06-14 15:43:51 -040074public class VirtualNetworkManagerTest extends TestDeviceParams {
Brian Stanke86914282016-05-25 15:36:50 -040075 private final String tenantIdValue1 = "TENANT_ID1";
76 private final String tenantIdValue2 = "TENANT_ID2";
Brian Stanke0e5c94e2016-03-08 11:20:04 -050077
78 private VirtualNetworkManager manager;
yoonseon214963b2016-11-21 15:41:07 -080079 private DefaultVirtualNetworkProvider topologyProvider;
Brian Stanke0e5c94e2016-03-08 11:20:04 -050080 private DistributedVirtualNetworkStore virtualNetworkManagerStore;
81 private CoreService coreService;
Brian Stanke7a81b532016-06-14 15:43:51 -040082 private TestListener listener = new TestListener();
Brian Stanke11f6d532016-07-05 16:17:59 -040083 private TestableIntentService intentService = new FakeIntentManager();
Brian Stankefb61df42016-07-25 11:47:51 -040084 private TopologyService topologyService;
Brian Stanke11f6d532016-07-05 16:17:59 -040085 private IdGenerator idGenerator = new MockIdGenerator();
Brian Stanke0e5c94e2016-03-08 11:20:04 -050086
Brian Stankefb61df42016-07-25 11:47:51 -040087 private ConnectPoint cp6;
88 private ConnectPoint cp7;
89
yoonseonc6a69272017-01-12 18:22:20 -080090 private TestServiceDirectory testDirectory;
91
Brian Stanke0e5c94e2016-03-08 11:20:04 -050092 @Before
93 public void setUp() throws Exception {
94 virtualNetworkManagerStore = new DistributedVirtualNetworkStore();
Brian Stanke11f6d532016-07-05 16:17:59 -040095 Intent.bindIdGenerator(idGenerator);
Brian Stanke0e5c94e2016-03-08 11:20:04 -050096
97 coreService = new TestCoreService();
yoonseonc6a69272017-01-12 18:22:20 -080098 TestUtils.setField(virtualNetworkManagerStore, "coreService", coreService);
yoonseon214963b2016-11-21 15:41:07 -080099 TestUtils.setField(virtualNetworkManagerStore, "storageService",
100 new TestStorageService());
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500101 virtualNetworkManagerStore.activate();
102
103 manager = new VirtualNetworkManager();
104 manager.store = virtualNetworkManagerStore;
105 manager.addListener(listener);
Brian Stanke11f6d532016-07-05 16:17:59 -0400106 manager.intentService = intentService;
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500107 NetTestTools.injectEventDispatcher(manager, new TestEventDispatcher());
yoonseonc6a69272017-01-12 18:22:20 -0800108
109 testDirectory = new TestServiceDirectory();
110 TestUtils.setField(manager, "serviceDirectory", testDirectory);
111
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500112 manager.activate();
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500113 }
114
115 @After
116 public void tearDown() {
117 virtualNetworkManagerStore.deactivate();
118 manager.removeListener(listener);
119 manager.deactivate();
120 NetTestTools.injectEventDispatcher(manager, null);
Brian Stanke11f6d532016-07-05 16:17:59 -0400121 Intent.unbindIdGenerator(idGenerator);
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500122 }
123
124 /**
125 * Tests registering a null tenant id.
126 */
127 @Test(expected = NullPointerException.class)
128 public void testRegisterNullTenantId() {
129 manager.registerTenantId(null);
130 }
131
132 /**
133 * Tests registering/unregistering a tenant id.
134 */
135 @Test
136 public void testRegisterUnregisterTenantId() {
137 manager.unregisterTenantId(TenantId.tenantId(tenantIdValue1));
138 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
139 manager.registerTenantId(TenantId.tenantId(tenantIdValue2));
140 Collection<TenantId> tenantIdCollection = manager.getTenantIds();
141 assertEquals("The tenantId set size did not match.", 2, tenantIdCollection.size());
142
143 manager.unregisterTenantId(TenantId.tenantId(tenantIdValue1));
144 manager.unregisterTenantId(TenantId.tenantId(tenantIdValue2));
145 tenantIdCollection = manager.getTenantIds();
146 assertTrue("The tenantId set should be empty.", tenantIdCollection.isEmpty());
147
148 // Validate that the events were all received in the correct order.
yoonseon214963b2016-11-21 15:41:07 -0800149 validateEvents(VirtualNetworkEvent.Type.TENANT_UNREGISTERED,
150 VirtualNetworkEvent.Type.TENANT_REGISTERED,
151 VirtualNetworkEvent.Type.TENANT_REGISTERED,
152 VirtualNetworkEvent.Type.TENANT_UNREGISTERED,
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500153 VirtualNetworkEvent.Type.TENANT_UNREGISTERED);
154 }
155
156 /**
157 * Tests adding a null virtual network.
158 */
159 @Test(expected = NullPointerException.class)
160 public void testCreateNullVirtualNetwork() {
161 manager.createVirtualNetwork(null);
162 }
163
164 /**
165 * Tests add and remove of virtual networks.
166 */
167 @Test
168 public void testAddRemoveVirtualNetwork() {
169 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
170 manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
171 manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
172 Set<VirtualNetwork> virtualNetworks = manager.getVirtualNetworks(TenantId.tenantId(tenantIdValue1));
173 assertNotNull("The virtual network set should not be null", virtualNetworks);
174 assertEquals("The virtual network set size did not match.", 2, virtualNetworks.size());
175
Brian Stanke5df14472016-03-11 19:34:38 -0500176 int remaining = virtualNetworks.size();
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500177 for (VirtualNetwork virtualNetwork : virtualNetworks) {
178 manager.removeVirtualNetwork(virtualNetwork.id());
Brian Stanke5df14472016-03-11 19:34:38 -0500179 assertEquals("The expected virtual network size does not match",
180 --remaining, manager.getVirtualNetworks(TenantId.tenantId(tenantIdValue1)).size());
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500181 // attempt to remove the same virtual network again.
182 manager.removeVirtualNetwork(virtualNetwork.id());
Brian Stanke5df14472016-03-11 19:34:38 -0500183 assertEquals("The expected virtual network size does not match",
184 remaining, manager.getVirtualNetworks(TenantId.tenantId(tenantIdValue1)).size());
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500185 }
186 virtualNetworks = manager.getVirtualNetworks(TenantId.tenantId(tenantIdValue1));
187 assertTrue("The virtual network set should be empty.", virtualNetworks.isEmpty());
188
Brian Stanke5df14472016-03-11 19:34:38 -0500189 // Create/remove a virtual network.
190 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
191 manager.removeVirtualNetwork(virtualNetwork.id());
192
193 virtualNetworks = manager.getVirtualNetworks(TenantId.tenantId(tenantIdValue1));
194 assertTrue("The virtual network set should be empty.", virtualNetworks.isEmpty());
195
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500196 // Validate that the events were all received in the correct order.
yoonseon214963b2016-11-21 15:41:07 -0800197 validateEvents(VirtualNetworkEvent.Type.TENANT_REGISTERED,
198 VirtualNetworkEvent.Type.NETWORK_ADDED,
199 VirtualNetworkEvent.Type.NETWORK_ADDED,
200 VirtualNetworkEvent.Type.NETWORK_REMOVED,
201 VirtualNetworkEvent.Type.NETWORK_REMOVED,
202 VirtualNetworkEvent.Type.NETWORK_ADDED,
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500203 VirtualNetworkEvent.Type.NETWORK_REMOVED);
204 }
205
206 /**
207 * Tests adding a null virtual device.
208 */
209 @Test(expected = NullPointerException.class)
210 public void testCreateNullVirtualDevice() {
211 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
212 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
213
214 manager.createVirtualDevice(virtualNetwork.id(), null);
215 }
216
217 /**
218 * Tests adding a virtual device where no virtual network exists.
219 */
220 @Test(expected = IllegalStateException.class)
221 public void testCreateVirtualDeviceWithNoNetwork() {
222 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
yoonseon214963b2016-11-21 15:41:07 -0800223 VirtualNetwork virtualNetwork =
224 new DefaultVirtualNetwork(NetworkId.NONE,
225 TenantId.tenantId(tenantIdValue1));
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500226
Brian Stanke7a81b532016-06-14 15:43:51 -0400227 manager.createVirtualDevice(virtualNetwork.id(), DID1);
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500228 }
229
230 /**
231 * Tests add and remove of virtual devices.
232 */
233 @Test
234 public void testAddRemoveVirtualDevice() {
Claudine Chiu945828d2016-11-21 12:47:07 -0500235 List<VirtualNetworkEvent.Type> expectedEventTypes = new ArrayList<>();
236
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500237 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
Claudine Chiu945828d2016-11-21 12:47:07 -0500238 expectedEventTypes.add(VirtualNetworkEvent.Type.TENANT_REGISTERED);
yoonseon214963b2016-11-21 15:41:07 -0800239 VirtualNetwork virtualNetwork1 =
240 manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Claudine Chiu945828d2016-11-21 12:47:07 -0500241 expectedEventTypes.add(VirtualNetworkEvent.Type.NETWORK_ADDED);
yoonseon214963b2016-11-21 15:41:07 -0800242 VirtualNetwork virtualNetwork2 =
243 manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Claudine Chiu945828d2016-11-21 12:47:07 -0500244 expectedEventTypes.add(VirtualNetworkEvent.Type.NETWORK_ADDED);
Brian Stanke7a81b532016-06-14 15:43:51 -0400245 manager.createVirtualDevice(virtualNetwork1.id(), DID1);
Claudine Chiu945828d2016-11-21 12:47:07 -0500246 expectedEventTypes.add(VirtualNetworkEvent.Type.VIRTUAL_DEVICE_ADDED);
Brian Stanke7a81b532016-06-14 15:43:51 -0400247 manager.createVirtualDevice(virtualNetwork2.id(), DID2);
Claudine Chiu945828d2016-11-21 12:47:07 -0500248 expectedEventTypes.add(VirtualNetworkEvent.Type.VIRTUAL_DEVICE_ADDED);
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500249
250 Set<VirtualDevice> virtualDevices1 = manager.getVirtualDevices(virtualNetwork1.id());
251 assertNotNull("The virtual device set should not be null", virtualDevices1);
252 assertEquals("The virtual device set size did not match.", 1, virtualDevices1.size());
253
254 Set<VirtualDevice> virtualDevices2 = manager.getVirtualDevices(virtualNetwork2.id());
255 assertNotNull("The virtual device set should not be null", virtualDevices2);
256 assertEquals("The virtual device set size did not match.", 1, virtualDevices2.size());
257
258 for (VirtualDevice virtualDevice : virtualDevices1) {
259 manager.removeVirtualDevice(virtualNetwork1.id(), virtualDevice.id());
Claudine Chiu945828d2016-11-21 12:47:07 -0500260 expectedEventTypes.add(VirtualNetworkEvent.Type.VIRTUAL_DEVICE_REMOVED);
261 // attempt to remove the same virtual device again - no event expected.
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500262 manager.removeVirtualDevice(virtualNetwork1.id(), virtualDevice.id());
263 }
264 virtualDevices1 = manager.getVirtualDevices(virtualNetwork1.id());
265 assertTrue("The virtual device set should be empty.", virtualDevices1.isEmpty());
266
Brian Stanke5df14472016-03-11 19:34:38 -0500267 // Add/remove the virtual device again.
Brian Stanke7a81b532016-06-14 15:43:51 -0400268 VirtualDevice virtualDevice = manager.createVirtualDevice(virtualNetwork1.id(), DID1);
Claudine Chiu945828d2016-11-21 12:47:07 -0500269 expectedEventTypes.add(VirtualNetworkEvent.Type.VIRTUAL_DEVICE_ADDED);
Brian Stanke5df14472016-03-11 19:34:38 -0500270 manager.removeVirtualDevice(virtualDevice.networkId(), virtualDevice.id());
Claudine Chiu945828d2016-11-21 12:47:07 -0500271 expectedEventTypes.add(VirtualNetworkEvent.Type.VIRTUAL_DEVICE_REMOVED);
Brian Stanke5df14472016-03-11 19:34:38 -0500272 virtualDevices1 = manager.getVirtualDevices(virtualNetwork1.id());
273 assertTrue("The virtual device set should be empty.", virtualDevices1.isEmpty());
274
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500275 // Validate that the events were all received in the correct order.
Claudine Chiu945828d2016-11-21 12:47:07 -0500276 validateEvents((Enum[]) expectedEventTypes.toArray(
277 new VirtualNetworkEvent.Type[expectedEventTypes.size()]));
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500278 }
279
280 /**
Brian Stanke7a81b532016-06-14 15:43:51 -0400281 * Tests adding a null virtual host.
282 */
283 @Test(expected = NullPointerException.class)
284 public void testCreateNullVirtualHost() {
285 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
yoonseon214963b2016-11-21 15:41:07 -0800286 VirtualNetwork virtualNetwork =
287 manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stanke7a81b532016-06-14 15:43:51 -0400288
289 manager.createVirtualHost(virtualNetwork.id(), null, null, null, null, null);
290 }
291
292 /**
293 * Tests adding a virtual host where no virtual network exists.
294 */
295 @Test(expected = IllegalStateException.class)
296 public void testCreateVirtualHostWithNoNetwork() {
297 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
yoonseon214963b2016-11-21 15:41:07 -0800298 VirtualNetwork virtualNetwork =
299 new DefaultVirtualNetwork(NetworkId.NONE, TenantId.tenantId(tenantIdValue1));
Brian Stanke7a81b532016-06-14 15:43:51 -0400300
301 manager.createVirtualHost(virtualNetwork.id(), HID1, null, null, null, null);
302 }
303
304 /**
305 * Tests add and remove of virtual hosts.
306 */
307 @Test
308 public void testAddRemoveVirtualHost() {
309 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
yoonseon214963b2016-11-21 15:41:07 -0800310 VirtualNetwork virtualNetwork1 =
311 manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
312 VirtualNetwork virtualNetwork2 =
313 manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stanke7a81b532016-06-14 15:43:51 -0400314 manager.createVirtualHost(virtualNetwork1.id(), HID1, MAC1, VLAN1, LOC1, IPSET1);
315 manager.createVirtualHost(virtualNetwork2.id(), HID2, MAC2, VLAN2, LOC2, IPSET2);
316
317 Set<VirtualHost> virtualHosts1 = manager.getVirtualHosts(virtualNetwork1.id());
318 assertNotNull("The virtual host set should not be null", virtualHosts1);
319 assertEquals("The virtual host set size did not match.", 1, virtualHosts1.size());
320
321 Set<VirtualHost> virtualHosts2 = manager.getVirtualHosts(virtualNetwork2.id());
322 assertNotNull("The virtual host set should not be null", virtualHosts2);
323 assertEquals("The virtual host set size did not match.", 1, virtualHosts2.size());
324
325 for (VirtualHost virtualHost : virtualHosts1) {
326 manager.removeVirtualHost(virtualNetwork1.id(), virtualHost.id());
327 // attempt to remove the same virtual host again.
328 manager.removeVirtualHost(virtualNetwork1.id(), virtualHost.id());
329 }
330 virtualHosts1 = manager.getVirtualHosts(virtualNetwork1.id());
331 assertTrue("The virtual host set should be empty.", virtualHosts1.isEmpty());
332
333 // Add/remove the virtual host again.
yoonseon214963b2016-11-21 15:41:07 -0800334 VirtualHost virtualHost =
335 manager.createVirtualHost(virtualNetwork1.id(),
336 HID1, MAC1, VLAN1, LOC1, IPSET1);
Brian Stanke7a81b532016-06-14 15:43:51 -0400337 manager.removeVirtualHost(virtualHost.networkId(), virtualHost.id());
338 virtualHosts1 = manager.getVirtualHosts(virtualNetwork1.id());
339 assertTrue("The virtual host set should be empty.", virtualHosts1.isEmpty());
340 }
341
342 /**
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500343 * Tests add and remove of virtual links.
344 */
345 @Test
346 public void testAddRemoveVirtualLink() {
347 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
yoonseon214963b2016-11-21 15:41:07 -0800348 VirtualNetwork virtualNetwork1 =
349 manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500350 VirtualDevice srcVirtualDevice =
Brian Stanke7a81b532016-06-14 15:43:51 -0400351 manager.createVirtualDevice(virtualNetwork1.id(), DID1);
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500352 VirtualDevice dstVirtualDevice =
Brian Stanke7a81b532016-06-14 15:43:51 -0400353 manager.createVirtualDevice(virtualNetwork1.id(), DID2);
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500354 ConnectPoint src = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1));
Brian Stankefb61df42016-07-25 11:47:51 -0400355 manager.createVirtualPort(virtualNetwork1.id(), src.deviceId(), src.port(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700356 new ConnectPoint(srcVirtualDevice.id(), src.port()));
Brian Stankefb61df42016-07-25 11:47:51 -0400357
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500358 ConnectPoint dst = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(2));
Brian Stankefb61df42016-07-25 11:47:51 -0400359 manager.createVirtualPort(virtualNetwork1.id(), dst.deviceId(), dst.port(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700360 new ConnectPoint(dstVirtualDevice.id(), dst.port()));
Brian Stankefb61df42016-07-25 11:47:51 -0400361
Brian Stanke9a108972016-04-11 15:25:17 -0400362 manager.createVirtualLink(virtualNetwork1.id(), src, dst);
363 manager.createVirtualLink(virtualNetwork1.id(), dst, src);
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500364
365 Set<VirtualLink> virtualLinks = manager.getVirtualLinks(virtualNetwork1.id());
366 assertNotNull("The virtual link set should not be null", virtualLinks);
367 assertEquals("The virtual link set size did not match.", 2, virtualLinks.size());
368
369 for (VirtualLink virtualLink : virtualLinks) {
370 manager.removeVirtualLink(virtualLink.networkId(), virtualLink.src(), virtualLink.dst());
371 // attempt to remove the same virtual link again.
372 manager.removeVirtualLink(virtualLink.networkId(), virtualLink.src(), virtualLink.dst());
373 }
374 virtualLinks = manager.getVirtualLinks(virtualNetwork1.id());
375 assertTrue("The virtual link set should be empty.", virtualLinks.isEmpty());
Brian Stanke5df14472016-03-11 19:34:38 -0500376
377 // Add/remove the virtual link again.
Brian Stanke9a108972016-04-11 15:25:17 -0400378 VirtualLink virtualLink = manager.createVirtualLink(virtualNetwork1.id(), src, dst);
Brian Stanke5df14472016-03-11 19:34:38 -0500379 manager.removeVirtualLink(virtualLink.networkId(), virtualLink.src(), virtualLink.dst());
380 virtualLinks = manager.getVirtualLinks(virtualNetwork1.id());
381 assertTrue("The virtual link set should be empty.", virtualLinks.isEmpty());
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500382 }
383
384 /**
Brian Stanke9a108972016-04-11 15:25:17 -0400385 * Tests adding the same virtual link twice.
386 */
387 @Test(expected = IllegalStateException.class)
388 public void testAddSameVirtualLink() {
389 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
yoonseon214963b2016-11-21 15:41:07 -0800390 VirtualNetwork virtualNetwork1 =
391 manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stanke9a108972016-04-11 15:25:17 -0400392 VirtualDevice srcVirtualDevice =
Brian Stanke7a81b532016-06-14 15:43:51 -0400393 manager.createVirtualDevice(virtualNetwork1.id(), DID1);
Brian Stanke9a108972016-04-11 15:25:17 -0400394 VirtualDevice dstVirtualDevice =
Brian Stanke7a81b532016-06-14 15:43:51 -0400395 manager.createVirtualDevice(virtualNetwork1.id(), DID2);
Brian Stanke9a108972016-04-11 15:25:17 -0400396 ConnectPoint src = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1));
Brian Stankefb61df42016-07-25 11:47:51 -0400397 manager.createVirtualPort(virtualNetwork1.id(), src.deviceId(), src.port(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700398 new ConnectPoint(srcVirtualDevice.id(), src.port()));
Brian Stankefb61df42016-07-25 11:47:51 -0400399
Brian Stanke9a108972016-04-11 15:25:17 -0400400 ConnectPoint dst = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(2));
Brian Stankefb61df42016-07-25 11:47:51 -0400401 manager.createVirtualPort(virtualNetwork1.id(), dst.deviceId(), dst.port(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700402 new ConnectPoint(dstVirtualDevice.id(), dst.port()));
Brian Stankefb61df42016-07-25 11:47:51 -0400403
Brian Stanke9a108972016-04-11 15:25:17 -0400404 manager.createVirtualLink(virtualNetwork1.id(), src, dst);
405 manager.createVirtualLink(virtualNetwork1.id(), src, dst);
406 }
407
408 /**
Claudine Chiu7f872a72016-12-16 13:51:39 -0500409 * Tests add, bind and remove of virtual ports.
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500410 */
411 @Test
412 public void testAddRemoveVirtualPort() {
Claudine Chiu7f872a72016-12-16 13:51:39 -0500413 List<VirtualNetworkEvent.Type> expectedEventTypes = new ArrayList<>();
414
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500415 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
Claudine Chiu7f872a72016-12-16 13:51:39 -0500416 expectedEventTypes.add(VirtualNetworkEvent.Type.TENANT_REGISTERED);
yoonseon214963b2016-11-21 15:41:07 -0800417 VirtualNetwork virtualNetwork1 =
418 manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Claudine Chiu7f872a72016-12-16 13:51:39 -0500419 expectedEventTypes.add(VirtualNetworkEvent.Type.NETWORK_ADDED);
Brian Stanke5df14472016-03-11 19:34:38 -0500420 VirtualDevice virtualDevice =
Brian Stanke7a81b532016-06-14 15:43:51 -0400421 manager.createVirtualDevice(virtualNetwork1.id(), DID1);
Claudine Chiu7f872a72016-12-16 13:51:39 -0500422 expectedEventTypes.add(VirtualNetworkEvent.Type.VIRTUAL_DEVICE_ADDED);
Yoonseon Han6c603892016-09-01 11:52:21 -0700423 ConnectPoint cp = new ConnectPoint(virtualDevice.id(), PortNumber.portNumber(1));
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500424
yoonseon214963b2016-11-21 15:41:07 -0800425 manager.createVirtualPort(virtualNetwork1.id(),
426 virtualDevice.id(), PortNumber.portNumber(1), cp);
Claudine Chiu7f872a72016-12-16 13:51:39 -0500427 expectedEventTypes.add(VirtualNetworkEvent.Type.VIRTUAL_PORT_ADDED);
yoonseon214963b2016-11-21 15:41:07 -0800428 manager.createVirtualPort(virtualNetwork1.id(),
429 virtualDevice.id(), PortNumber.portNumber(2), cp);
Claudine Chiu7f872a72016-12-16 13:51:39 -0500430 expectedEventTypes.add(VirtualNetworkEvent.Type.VIRTUAL_PORT_ADDED);
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500431
Brian Stanke5df14472016-03-11 19:34:38 -0500432 Set<VirtualPort> virtualPorts = manager.getVirtualPorts(virtualNetwork1.id(), virtualDevice.id());
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500433 assertNotNull("The virtual port set should not be null", virtualPorts);
434 assertEquals("The virtual port set size did not match.", 2, virtualPorts.size());
435
436 for (VirtualPort virtualPort : virtualPorts) {
437 manager.removeVirtualPort(virtualNetwork1.id(),
438 (DeviceId) virtualPort.element().id(), virtualPort.number());
Claudine Chiu7f872a72016-12-16 13:51:39 -0500439 expectedEventTypes.add(VirtualNetworkEvent.Type.VIRTUAL_PORT_REMOVED);
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500440 // attempt to remove the same virtual port again.
441 manager.removeVirtualPort(virtualNetwork1.id(),
442 (DeviceId) virtualPort.element().id(), virtualPort.number());
443 }
Brian Stanke5df14472016-03-11 19:34:38 -0500444 virtualPorts = manager.getVirtualPorts(virtualNetwork1.id(), virtualDevice.id());
445 assertTrue("The virtual port set should be empty.", virtualPorts.isEmpty());
446
447 // Add/remove the virtual port again.
yoonseon214963b2016-11-21 15:41:07 -0800448 VirtualPort virtualPort =
449 manager.createVirtualPort(virtualNetwork1.id(), virtualDevice.id(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700450 PortNumber.portNumber(1), cp);
Claudine Chiu7f872a72016-12-16 13:51:39 -0500451 expectedEventTypes.add(VirtualNetworkEvent.Type.VIRTUAL_PORT_ADDED);
452
453 ConnectPoint newCp = new ConnectPoint(DID2, PortNumber.portNumber(2));
454 manager.bindVirtualPort(virtualNetwork1.id(), virtualDevice.id(),
455 PortNumber.portNumber(1), newCp);
456 expectedEventTypes.add(VirtualNetworkEvent.Type.VIRTUAL_PORT_UPDATED);
457
yoonseon214963b2016-11-21 15:41:07 -0800458 manager.removeVirtualPort(virtualNetwork1.id(),
459 (DeviceId) virtualPort.element().id(), virtualPort.number());
Claudine Chiu7f872a72016-12-16 13:51:39 -0500460 expectedEventTypes.add(VirtualNetworkEvent.Type.VIRTUAL_PORT_REMOVED);
Brian Stanke5df14472016-03-11 19:34:38 -0500461 virtualPorts = manager.getVirtualPorts(virtualNetwork1.id(), virtualDevice.id());
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500462 assertTrue("The virtual port set should be empty.", virtualPorts.isEmpty());
Claudine Chiu7f872a72016-12-16 13:51:39 -0500463
464 // Validate that the events were all received in the correct order.
465 validateEvents((Enum[]) expectedEventTypes.toArray(
466 new VirtualNetworkEvent.Type[expectedEventTypes.size()]));
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500467 }
468
469 /**
Brian Stanke11f6d532016-07-05 16:17:59 -0400470 * Tests the addOrUpdateIntent() method in the store with a null intent.
471 */
472 @Test(expected = NullPointerException.class)
473 public void testAddOrUpdateNullIntent() {
474 manager.store.addOrUpdateIntent(null, null);
475 }
476
477 /**
478 * Tests the removeIntent() method in the store with a null intent key.
479 */
480 @Test(expected = NullPointerException.class)
481 public void testRemoveNullIntentKey() {
482 manager.store.removeIntent(null);
483 }
484
485 /**
486 * Tests the addOrUpdateIntent(), getIntents(), getIntent(), removeIntent() methods with the store.
487 */
488 @Test
489 public void testAddOrUpdateIntent() {
490 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
yoonseon214963b2016-11-21 15:41:07 -0800491 VirtualNetwork virtualNetwork =
492 manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stanke11f6d532016-07-05 16:17:59 -0400493 ConnectPoint cp1 = new ConnectPoint(DID1, P1);
494 ConnectPoint cp2 = new ConnectPoint(DID2, P1);
495
496 VirtualNetworkIntent virtualIntent = VirtualNetworkIntent.builder()
497 .networkId(virtualNetwork.id())
498 .key(Key.of("Test", APP_ID))
499 .appId(APP_ID)
500 .ingressPoint(cp1)
501 .egressPoint(cp2)
502 .build();
503
504 // Add the intent to the store.
505 manager.store.addOrUpdateIntent(virtualIntent, IntentState.INSTALL_REQ);
yoonseon214963b2016-11-21 15:41:07 -0800506 assertEquals("The intent size should match.", 1,
507 manager.store.getIntents().size());
508 assertNotNull("The intent should not be null.",
509 manager.store.getIntent(virtualIntent.key()));
Brian Stanke11f6d532016-07-05 16:17:59 -0400510
511 // remove the intent from the store.
512 manager.store.removeIntent(virtualIntent.key());
yoonseon214963b2016-11-21 15:41:07 -0800513 assertTrue("The intents should be empty.",
514 manager.store.getIntents().isEmpty());
515 assertNull("The intent should be null.",
516 manager.store.getIntent(virtualIntent.key()));
Brian Stanke11f6d532016-07-05 16:17:59 -0400517 }
518
519 /**
520 * Tests the addTunnelId() method in the store with a null intent.
521 */
522 @Test(expected = NullPointerException.class)
523 public void testAddTunnelIdNullIntent() {
524 manager.store.addTunnelId(null, null);
525 }
526
527 /**
528 * Tests the removeTunnelId() method in the store with a null intent.
529 */
530 @Test(expected = NullPointerException.class)
531 public void testRemoveTunnelIdNullIntent() {
532 manager.store.removeTunnelId(null, null);
533 }
534
535 /**
536 * Tests the addTunnelId, getTunnelIds(), removeTunnelId() methods with the store.
537 */
538 @Test
539 public void testAddTunnelId() {
540 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
541 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
542 ConnectPoint cp1 = new ConnectPoint(DID1, P1);
543 ConnectPoint cp2 = new ConnectPoint(DID2, P1);
544
545 VirtualNetworkIntent virtualIntent = VirtualNetworkIntent.builder()
546 .networkId(virtualNetwork.id())
547 .key(Key.of("Test", APP_ID))
548 .appId(APP_ID)
549 .ingressPoint(cp1)
550 .egressPoint(cp2)
551 .build();
552
553 TunnelId tunnelId = TunnelId.valueOf("virtual tunnel");
554 // Add the intent to tunnelID mapping to the store.
555 manager.store.addTunnelId(virtualIntent, tunnelId);
yoonseon214963b2016-11-21 15:41:07 -0800556 assertEquals("The tunnels size should match.", 1,
557 manager.store.getTunnelIds(virtualIntent).size());
Brian Stanke11f6d532016-07-05 16:17:59 -0400558
559 // Remove the intent to tunnelID mapping from the store.
560 manager.store.removeTunnelId(virtualIntent, tunnelId);
yoonseon214963b2016-11-21 15:41:07 -0800561 assertTrue("The tunnels should be empty.",
562 manager.store.getTunnelIds(virtualIntent).isEmpty());
Brian Stanke11f6d532016-07-05 16:17:59 -0400563 }
564
Brian Stankefb61df42016-07-25 11:47:51 -0400565
566 /**
567 * Method to create the virtual network for further testing.
568 **/
569 private VirtualNetwork setupVirtualNetworkTopology() {
570 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
yoonseon214963b2016-11-21 15:41:07 -0800571 VirtualNetwork virtualNetwork =
572 manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stankefb61df42016-07-25 11:47:51 -0400573
574 VirtualDevice virtualDevice1 =
575 manager.createVirtualDevice(virtualNetwork.id(), DID1);
576 VirtualDevice virtualDevice2 =
577 manager.createVirtualDevice(virtualNetwork.id(), DID2);
578 VirtualDevice virtualDevice3 =
579 manager.createVirtualDevice(virtualNetwork.id(), DID3);
580 VirtualDevice virtualDevice4 =
581 manager.createVirtualDevice(virtualNetwork.id(), DID4);
582 VirtualDevice virtualDevice5 =
583 manager.createVirtualDevice(virtualNetwork.id(), DID5);
584
585 ConnectPoint cp1 = new ConnectPoint(virtualDevice1.id(), PortNumber.portNumber(1));
586 manager.createVirtualPort(virtualNetwork.id(), virtualDevice1.id(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700587 PortNumber.portNumber(1), cp1);
Brian Stankefb61df42016-07-25 11:47:51 -0400588
589 ConnectPoint cp2 = new ConnectPoint(virtualDevice1.id(), PortNumber.portNumber(2));
590 manager.createVirtualPort(virtualNetwork.id(), virtualDevice1.id(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700591 PortNumber.portNumber(2), cp2);
Brian Stankefb61df42016-07-25 11:47:51 -0400592
593 ConnectPoint cp3 = new ConnectPoint(virtualDevice2.id(), PortNumber.portNumber(3));
594 manager.createVirtualPort(virtualNetwork.id(), virtualDevice2.id(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700595 PortNumber.portNumber(3), cp3);
Brian Stankefb61df42016-07-25 11:47:51 -0400596
597 ConnectPoint cp4 = new ConnectPoint(virtualDevice2.id(), PortNumber.portNumber(4));
598 manager.createVirtualPort(virtualNetwork.id(), virtualDevice2.id(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700599 PortNumber.portNumber(4), cp4);
Brian Stankefb61df42016-07-25 11:47:51 -0400600
601 ConnectPoint cp5 = new ConnectPoint(virtualDevice3.id(), PortNumber.portNumber(5));
602 manager.createVirtualPort(virtualNetwork.id(), virtualDevice3.id(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700603 PortNumber.portNumber(5), cp5);
Brian Stankefb61df42016-07-25 11:47:51 -0400604
605 cp6 = new ConnectPoint(virtualDevice3.id(), PortNumber.portNumber(6));
606 manager.createVirtualPort(virtualNetwork.id(), virtualDevice3.id(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700607 PortNumber.portNumber(6), cp6);
Brian Stankefb61df42016-07-25 11:47:51 -0400608
609 cp7 = new ConnectPoint(virtualDevice4.id(), PortNumber.portNumber(7));
610 manager.createVirtualPort(virtualNetwork.id(), virtualDevice4.id(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700611 PortNumber.portNumber(7), cp7);
Brian Stankefb61df42016-07-25 11:47:51 -0400612
613 ConnectPoint cp8 = new ConnectPoint(virtualDevice4.id(), PortNumber.portNumber(8));
614 manager.createVirtualPort(virtualNetwork.id(), virtualDevice4.id(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700615 PortNumber.portNumber(8), cp8);
Brian Stankefb61df42016-07-25 11:47:51 -0400616
617 ConnectPoint cp9 = new ConnectPoint(virtualDevice5.id(), PortNumber.portNumber(9));
618 manager.createVirtualPort(virtualNetwork.id(), virtualDevice5.id(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700619 PortNumber.portNumber(9), cp9);
Brian Stankefb61df42016-07-25 11:47:51 -0400620
621 VirtualLink link1 = manager.createVirtualLink(virtualNetwork.id(), cp1, cp3);
622 virtualNetworkManagerStore.updateLink(link1, link1.tunnelId(), Link.State.ACTIVE);
623 VirtualLink link2 = manager.createVirtualLink(virtualNetwork.id(), cp3, cp1);
624 virtualNetworkManagerStore.updateLink(link2, link2.tunnelId(), Link.State.ACTIVE);
625 VirtualLink link3 = manager.createVirtualLink(virtualNetwork.id(), cp4, cp5);
626 virtualNetworkManagerStore.updateLink(link3, link3.tunnelId(), Link.State.ACTIVE);
627 VirtualLink link4 = manager.createVirtualLink(virtualNetwork.id(), cp5, cp4);
628 virtualNetworkManagerStore.updateLink(link4, link4.tunnelId(), Link.State.ACTIVE);
629 VirtualLink link5 = manager.createVirtualLink(virtualNetwork.id(), cp8, cp9);
630 virtualNetworkManagerStore.updateLink(link5, link5.tunnelId(), Link.State.ACTIVE);
631 VirtualLink link6 = manager.createVirtualLink(virtualNetwork.id(), cp9, cp8);
632 virtualNetworkManagerStore.updateLink(link6, link6.tunnelId(), Link.State.ACTIVE);
633
634 topologyService = manager.get(virtualNetwork.id(), TopologyService.class);
yoonseon214963b2016-11-21 15:41:07 -0800635 topologyProvider = new DefaultVirtualNetworkProvider();
636 try {
637 TestUtils.setField(topologyProvider, "topologyService", topologyService);
638 } catch (TestUtils.TestUtilsException e) {
639 e.printStackTrace();
640 }
641// topologyProvider.topologyService = topologyService;
Brian Stankefb61df42016-07-25 11:47:51 -0400642
643 return virtualNetwork;
644 }
645
646 /**
647 * Test the topologyChanged() method.
648 */
649 @Test
650 public void testTopologyChanged() {
651 VirtualNetwork virtualNetwork = setupVirtualNetworkTopology();
yoonseon214963b2016-11-21 15:41:07 -0800652 VirtualNetworkProviderService providerService =
653 manager.createProviderService(topologyProvider);
Brian Stankefb61df42016-07-25 11:47:51 -0400654
655 // Initial setup is two clusters of devices/links.
yoonseon214963b2016-11-21 15:41:07 -0800656 assertEquals("The cluster count did not match.", 2,
657 topologyService.currentTopology().clusterCount());
Brian Stankefb61df42016-07-25 11:47:51 -0400658
659 // Adding this link will join the two clusters together.
660 List<Event> reasons = new ArrayList<>();
661 VirtualLink link = manager.createVirtualLink(virtualNetwork.id(), cp6, cp7);
662 virtualNetworkManagerStore.updateLink(link, link.tunnelId(), Link.State.ACTIVE);
663 VirtualLink link2 = manager.createVirtualLink(virtualNetwork.id(), cp7, cp6);
664 virtualNetworkManagerStore.updateLink(link2, link2.tunnelId(), Link.State.ACTIVE);
665
666 Topology topology = topologyService.currentTopology();
667 providerService.topologyChanged(topologyProvider.getConnectPoints(topology));
668
669 // Validate that all links are still active.
670 manager.getVirtualLinks(virtualNetwork.id()).forEach(virtualLink -> {
yoonseon214963b2016-11-21 15:41:07 -0800671 assertTrue("The virtual link should be active.",
672 virtualLink.state().equals(Link.State.ACTIVE));
Brian Stankefb61df42016-07-25 11:47:51 -0400673 });
674
675 virtualNetworkManagerStore.updateLink(link, link.tunnelId(), Link.State.INACTIVE);
676 virtualNetworkManagerStore.updateLink(link2, link2.tunnelId(), Link.State.INACTIVE);
677 providerService.topologyChanged(topologyProvider.getConnectPoints(topology));
678
679 // Validate that all links are active again.
680 manager.getVirtualLinks(virtualNetwork.id()).forEach(virtualLink -> {
yoonseon214963b2016-11-21 15:41:07 -0800681 assertTrue("The virtual link should be active.",
682 virtualLink.state().equals(Link.State.ACTIVE));
Brian Stankefb61df42016-07-25 11:47:51 -0400683 });
684 }
685
Brian Stanke11f6d532016-07-05 16:17:59 -0400686 /**
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500687 * Method to validate that the actual versus expected virtual network events were
688 * received correctly.
689 *
690 * @param types expected virtual network events.
691 */
692 private void validateEvents(Enum... types) {
693 TestTools.assertAfter(100, () -> {
694 int i = 0;
695 assertEquals("wrong events received", types.length, listener.events.size());
696 for (Event event : listener.events) {
697 assertEquals("incorrect event type", types[i], event.type());
698 i++;
699 }
700 listener.events.clear();
701 });
702 }
703
704 /**
705 * Test listener class to receive virtual network events.
706 */
707 private static class TestListener implements VirtualNetworkListener {
708
Brian Stanke7a81b532016-06-14 15:43:51 -0400709 private List<VirtualNetworkEvent> events = Lists.newArrayList();
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500710
711 @Override
712 public void event(VirtualNetworkEvent event) {
713 events.add(event);
714 }
715
716 }
717
Brian Stanke5df14472016-03-11 19:34:38 -0500718 /**
719 * Core service test class.
720 */
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500721 private class TestCoreService extends CoreServiceAdapter {
722
723 @Override
724 public IdGenerator getIdGenerator(String topic) {
725 return new IdGenerator() {
726 private AtomicLong counter = new AtomicLong(0);
727
728 @Override
729 public long getNewId() {
730 return counter.getAndIncrement();
731 }
732 };
733 }
734 }
735}