blob: 158fcef3e5341be7d1c15233b6e0dc5e78f54791 [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;
yoonseon322c9c32016-12-07 16:47:02 -0800107 manager.coreService = coreService;
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500108 NetTestTools.injectEventDispatcher(manager, new TestEventDispatcher());
yoonseonc6a69272017-01-12 18:22:20 -0800109
110 testDirectory = new TestServiceDirectory();
111 TestUtils.setField(manager, "serviceDirectory", testDirectory);
112
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500113 manager.activate();
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500114 }
115
116 @After
117 public void tearDown() {
118 virtualNetworkManagerStore.deactivate();
119 manager.removeListener(listener);
120 manager.deactivate();
121 NetTestTools.injectEventDispatcher(manager, null);
Brian Stanke11f6d532016-07-05 16:17:59 -0400122 Intent.unbindIdGenerator(idGenerator);
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500123 }
124
125 /**
126 * Tests registering a null tenant id.
127 */
128 @Test(expected = NullPointerException.class)
129 public void testRegisterNullTenantId() {
130 manager.registerTenantId(null);
131 }
132
133 /**
134 * Tests registering/unregistering a tenant id.
135 */
136 @Test
137 public void testRegisterUnregisterTenantId() {
138 manager.unregisterTenantId(TenantId.tenantId(tenantIdValue1));
139 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
140 manager.registerTenantId(TenantId.tenantId(tenantIdValue2));
141 Collection<TenantId> tenantIdCollection = manager.getTenantIds();
142 assertEquals("The tenantId set size did not match.", 2, tenantIdCollection.size());
143
144 manager.unregisterTenantId(TenantId.tenantId(tenantIdValue1));
145 manager.unregisterTenantId(TenantId.tenantId(tenantIdValue2));
146 tenantIdCollection = manager.getTenantIds();
147 assertTrue("The tenantId set should be empty.", tenantIdCollection.isEmpty());
148
149 // Validate that the events were all received in the correct order.
yoonseon214963b2016-11-21 15:41:07 -0800150 validateEvents(VirtualNetworkEvent.Type.TENANT_UNREGISTERED,
151 VirtualNetworkEvent.Type.TENANT_REGISTERED,
152 VirtualNetworkEvent.Type.TENANT_REGISTERED,
153 VirtualNetworkEvent.Type.TENANT_UNREGISTERED,
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500154 VirtualNetworkEvent.Type.TENANT_UNREGISTERED);
155 }
156
157 /**
158 * Tests adding a null virtual network.
159 */
160 @Test(expected = NullPointerException.class)
161 public void testCreateNullVirtualNetwork() {
162 manager.createVirtualNetwork(null);
163 }
164
165 /**
166 * Tests add and remove of virtual networks.
167 */
168 @Test
169 public void testAddRemoveVirtualNetwork() {
170 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
171 manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
172 manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
173 Set<VirtualNetwork> virtualNetworks = manager.getVirtualNetworks(TenantId.tenantId(tenantIdValue1));
174 assertNotNull("The virtual network set should not be null", virtualNetworks);
175 assertEquals("The virtual network set size did not match.", 2, virtualNetworks.size());
176
Brian Stanke5df14472016-03-11 19:34:38 -0500177 int remaining = virtualNetworks.size();
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500178 for (VirtualNetwork virtualNetwork : virtualNetworks) {
179 manager.removeVirtualNetwork(virtualNetwork.id());
Brian Stanke5df14472016-03-11 19:34:38 -0500180 assertEquals("The expected virtual network size does not match",
181 --remaining, manager.getVirtualNetworks(TenantId.tenantId(tenantIdValue1)).size());
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500182 // attempt to remove the same virtual network again.
183 manager.removeVirtualNetwork(virtualNetwork.id());
Brian Stanke5df14472016-03-11 19:34:38 -0500184 assertEquals("The expected virtual network size does not match",
185 remaining, manager.getVirtualNetworks(TenantId.tenantId(tenantIdValue1)).size());
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500186 }
187 virtualNetworks = manager.getVirtualNetworks(TenantId.tenantId(tenantIdValue1));
188 assertTrue("The virtual network set should be empty.", virtualNetworks.isEmpty());
189
Brian Stanke5df14472016-03-11 19:34:38 -0500190 // Create/remove a virtual network.
191 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
192 manager.removeVirtualNetwork(virtualNetwork.id());
193
194 virtualNetworks = manager.getVirtualNetworks(TenantId.tenantId(tenantIdValue1));
195 assertTrue("The virtual network set should be empty.", virtualNetworks.isEmpty());
196
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500197 // Validate that the events were all received in the correct order.
yoonseon214963b2016-11-21 15:41:07 -0800198 validateEvents(VirtualNetworkEvent.Type.TENANT_REGISTERED,
199 VirtualNetworkEvent.Type.NETWORK_ADDED,
200 VirtualNetworkEvent.Type.NETWORK_ADDED,
201 VirtualNetworkEvent.Type.NETWORK_REMOVED,
202 VirtualNetworkEvent.Type.NETWORK_REMOVED,
203 VirtualNetworkEvent.Type.NETWORK_ADDED,
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500204 VirtualNetworkEvent.Type.NETWORK_REMOVED);
205 }
206
207 /**
208 * Tests adding a null virtual device.
209 */
210 @Test(expected = NullPointerException.class)
211 public void testCreateNullVirtualDevice() {
212 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
213 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
214
215 manager.createVirtualDevice(virtualNetwork.id(), null);
216 }
217
218 /**
219 * Tests adding a virtual device where no virtual network exists.
220 */
221 @Test(expected = IllegalStateException.class)
222 public void testCreateVirtualDeviceWithNoNetwork() {
223 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
yoonseon214963b2016-11-21 15:41:07 -0800224 VirtualNetwork virtualNetwork =
225 new DefaultVirtualNetwork(NetworkId.NONE,
226 TenantId.tenantId(tenantIdValue1));
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500227
Brian Stanke7a81b532016-06-14 15:43:51 -0400228 manager.createVirtualDevice(virtualNetwork.id(), DID1);
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500229 }
230
231 /**
232 * Tests add and remove of virtual devices.
233 */
234 @Test
235 public void testAddRemoveVirtualDevice() {
Claudine Chiu945828d2016-11-21 12:47:07 -0500236 List<VirtualNetworkEvent.Type> expectedEventTypes = new ArrayList<>();
237
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500238 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
Claudine Chiu945828d2016-11-21 12:47:07 -0500239 expectedEventTypes.add(VirtualNetworkEvent.Type.TENANT_REGISTERED);
yoonseon214963b2016-11-21 15:41:07 -0800240 VirtualNetwork virtualNetwork1 =
241 manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Claudine Chiu945828d2016-11-21 12:47:07 -0500242 expectedEventTypes.add(VirtualNetworkEvent.Type.NETWORK_ADDED);
yoonseon214963b2016-11-21 15:41:07 -0800243 VirtualNetwork virtualNetwork2 =
244 manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Claudine Chiu945828d2016-11-21 12:47:07 -0500245 expectedEventTypes.add(VirtualNetworkEvent.Type.NETWORK_ADDED);
Brian Stanke7a81b532016-06-14 15:43:51 -0400246 manager.createVirtualDevice(virtualNetwork1.id(), DID1);
Claudine Chiu945828d2016-11-21 12:47:07 -0500247 expectedEventTypes.add(VirtualNetworkEvent.Type.VIRTUAL_DEVICE_ADDED);
Brian Stanke7a81b532016-06-14 15:43:51 -0400248 manager.createVirtualDevice(virtualNetwork2.id(), DID2);
Claudine Chiu945828d2016-11-21 12:47:07 -0500249 expectedEventTypes.add(VirtualNetworkEvent.Type.VIRTUAL_DEVICE_ADDED);
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500250
251 Set<VirtualDevice> virtualDevices1 = manager.getVirtualDevices(virtualNetwork1.id());
252 assertNotNull("The virtual device set should not be null", virtualDevices1);
253 assertEquals("The virtual device set size did not match.", 1, virtualDevices1.size());
254
255 Set<VirtualDevice> virtualDevices2 = manager.getVirtualDevices(virtualNetwork2.id());
256 assertNotNull("The virtual device set should not be null", virtualDevices2);
257 assertEquals("The virtual device set size did not match.", 1, virtualDevices2.size());
258
259 for (VirtualDevice virtualDevice : virtualDevices1) {
260 manager.removeVirtualDevice(virtualNetwork1.id(), virtualDevice.id());
Claudine Chiu945828d2016-11-21 12:47:07 -0500261 expectedEventTypes.add(VirtualNetworkEvent.Type.VIRTUAL_DEVICE_REMOVED);
262 // attempt to remove the same virtual device again - no event expected.
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500263 manager.removeVirtualDevice(virtualNetwork1.id(), virtualDevice.id());
264 }
265 virtualDevices1 = manager.getVirtualDevices(virtualNetwork1.id());
266 assertTrue("The virtual device set should be empty.", virtualDevices1.isEmpty());
267
Brian Stanke5df14472016-03-11 19:34:38 -0500268 // Add/remove the virtual device again.
Brian Stanke7a81b532016-06-14 15:43:51 -0400269 VirtualDevice virtualDevice = manager.createVirtualDevice(virtualNetwork1.id(), DID1);
Claudine Chiu945828d2016-11-21 12:47:07 -0500270 expectedEventTypes.add(VirtualNetworkEvent.Type.VIRTUAL_DEVICE_ADDED);
Brian Stanke5df14472016-03-11 19:34:38 -0500271 manager.removeVirtualDevice(virtualDevice.networkId(), virtualDevice.id());
Claudine Chiu945828d2016-11-21 12:47:07 -0500272 expectedEventTypes.add(VirtualNetworkEvent.Type.VIRTUAL_DEVICE_REMOVED);
Brian Stanke5df14472016-03-11 19:34:38 -0500273 virtualDevices1 = manager.getVirtualDevices(virtualNetwork1.id());
274 assertTrue("The virtual device set should be empty.", virtualDevices1.isEmpty());
275
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500276 // Validate that the events were all received in the correct order.
Claudine Chiu945828d2016-11-21 12:47:07 -0500277 validateEvents((Enum[]) expectedEventTypes.toArray(
278 new VirtualNetworkEvent.Type[expectedEventTypes.size()]));
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500279 }
280
281 /**
Brian Stanke7a81b532016-06-14 15:43:51 -0400282 * Tests adding a null virtual host.
283 */
284 @Test(expected = NullPointerException.class)
285 public void testCreateNullVirtualHost() {
286 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
yoonseon214963b2016-11-21 15:41:07 -0800287 VirtualNetwork virtualNetwork =
288 manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stanke7a81b532016-06-14 15:43:51 -0400289
290 manager.createVirtualHost(virtualNetwork.id(), null, null, null, null, null);
291 }
292
293 /**
294 * Tests adding a virtual host where no virtual network exists.
295 */
296 @Test(expected = IllegalStateException.class)
297 public void testCreateVirtualHostWithNoNetwork() {
298 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
yoonseon214963b2016-11-21 15:41:07 -0800299 VirtualNetwork virtualNetwork =
300 new DefaultVirtualNetwork(NetworkId.NONE, TenantId.tenantId(tenantIdValue1));
Brian Stanke7a81b532016-06-14 15:43:51 -0400301
302 manager.createVirtualHost(virtualNetwork.id(), HID1, null, null, null, null);
303 }
304
305 /**
306 * Tests add and remove of virtual hosts.
307 */
308 @Test
309 public void testAddRemoveVirtualHost() {
310 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
yoonseon214963b2016-11-21 15:41:07 -0800311 VirtualNetwork virtualNetwork1 =
312 manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
313 VirtualNetwork virtualNetwork2 =
314 manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stanke7a81b532016-06-14 15:43:51 -0400315 manager.createVirtualHost(virtualNetwork1.id(), HID1, MAC1, VLAN1, LOC1, IPSET1);
316 manager.createVirtualHost(virtualNetwork2.id(), HID2, MAC2, VLAN2, LOC2, IPSET2);
317
318 Set<VirtualHost> virtualHosts1 = manager.getVirtualHosts(virtualNetwork1.id());
319 assertNotNull("The virtual host set should not be null", virtualHosts1);
320 assertEquals("The virtual host set size did not match.", 1, virtualHosts1.size());
321
322 Set<VirtualHost> virtualHosts2 = manager.getVirtualHosts(virtualNetwork2.id());
323 assertNotNull("The virtual host set should not be null", virtualHosts2);
324 assertEquals("The virtual host set size did not match.", 1, virtualHosts2.size());
325
326 for (VirtualHost virtualHost : virtualHosts1) {
327 manager.removeVirtualHost(virtualNetwork1.id(), virtualHost.id());
328 // attempt to remove the same virtual host again.
329 manager.removeVirtualHost(virtualNetwork1.id(), virtualHost.id());
330 }
331 virtualHosts1 = manager.getVirtualHosts(virtualNetwork1.id());
332 assertTrue("The virtual host set should be empty.", virtualHosts1.isEmpty());
333
334 // Add/remove the virtual host again.
yoonseon214963b2016-11-21 15:41:07 -0800335 VirtualHost virtualHost =
336 manager.createVirtualHost(virtualNetwork1.id(),
337 HID1, MAC1, VLAN1, LOC1, IPSET1);
Brian Stanke7a81b532016-06-14 15:43:51 -0400338 manager.removeVirtualHost(virtualHost.networkId(), virtualHost.id());
339 virtualHosts1 = manager.getVirtualHosts(virtualNetwork1.id());
340 assertTrue("The virtual host set should be empty.", virtualHosts1.isEmpty());
341 }
342
343 /**
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500344 * Tests add and remove of virtual links.
345 */
346 @Test
347 public void testAddRemoveVirtualLink() {
348 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
yoonseon214963b2016-11-21 15:41:07 -0800349 VirtualNetwork virtualNetwork1 =
350 manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500351 VirtualDevice srcVirtualDevice =
Brian Stanke7a81b532016-06-14 15:43:51 -0400352 manager.createVirtualDevice(virtualNetwork1.id(), DID1);
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500353 VirtualDevice dstVirtualDevice =
Brian Stanke7a81b532016-06-14 15:43:51 -0400354 manager.createVirtualDevice(virtualNetwork1.id(), DID2);
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500355 ConnectPoint src = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1));
Brian Stankefb61df42016-07-25 11:47:51 -0400356 manager.createVirtualPort(virtualNetwork1.id(), src.deviceId(), src.port(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700357 new ConnectPoint(srcVirtualDevice.id(), src.port()));
Brian Stankefb61df42016-07-25 11:47:51 -0400358
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500359 ConnectPoint dst = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(2));
Brian Stankefb61df42016-07-25 11:47:51 -0400360 manager.createVirtualPort(virtualNetwork1.id(), dst.deviceId(), dst.port(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700361 new ConnectPoint(dstVirtualDevice.id(), dst.port()));
Brian Stankefb61df42016-07-25 11:47:51 -0400362
Brian Stanke9a108972016-04-11 15:25:17 -0400363 manager.createVirtualLink(virtualNetwork1.id(), src, dst);
364 manager.createVirtualLink(virtualNetwork1.id(), dst, src);
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500365
366 Set<VirtualLink> virtualLinks = manager.getVirtualLinks(virtualNetwork1.id());
367 assertNotNull("The virtual link set should not be null", virtualLinks);
368 assertEquals("The virtual link set size did not match.", 2, virtualLinks.size());
369
370 for (VirtualLink virtualLink : virtualLinks) {
371 manager.removeVirtualLink(virtualLink.networkId(), virtualLink.src(), virtualLink.dst());
372 // attempt to remove the same virtual link again.
373 manager.removeVirtualLink(virtualLink.networkId(), virtualLink.src(), virtualLink.dst());
374 }
375 virtualLinks = manager.getVirtualLinks(virtualNetwork1.id());
376 assertTrue("The virtual link set should be empty.", virtualLinks.isEmpty());
Brian Stanke5df14472016-03-11 19:34:38 -0500377
378 // Add/remove the virtual link again.
Brian Stanke9a108972016-04-11 15:25:17 -0400379 VirtualLink virtualLink = manager.createVirtualLink(virtualNetwork1.id(), src, dst);
Brian Stanke5df14472016-03-11 19:34:38 -0500380 manager.removeVirtualLink(virtualLink.networkId(), virtualLink.src(), virtualLink.dst());
381 virtualLinks = manager.getVirtualLinks(virtualNetwork1.id());
382 assertTrue("The virtual link set should be empty.", virtualLinks.isEmpty());
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500383 }
384
385 /**
Brian Stanke9a108972016-04-11 15:25:17 -0400386 * Tests adding the same virtual link twice.
387 */
388 @Test(expected = IllegalStateException.class)
389 public void testAddSameVirtualLink() {
390 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
yoonseon214963b2016-11-21 15:41:07 -0800391 VirtualNetwork virtualNetwork1 =
392 manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stanke9a108972016-04-11 15:25:17 -0400393 VirtualDevice srcVirtualDevice =
Brian Stanke7a81b532016-06-14 15:43:51 -0400394 manager.createVirtualDevice(virtualNetwork1.id(), DID1);
Brian Stanke9a108972016-04-11 15:25:17 -0400395 VirtualDevice dstVirtualDevice =
Brian Stanke7a81b532016-06-14 15:43:51 -0400396 manager.createVirtualDevice(virtualNetwork1.id(), DID2);
Brian Stanke9a108972016-04-11 15:25:17 -0400397 ConnectPoint src = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1));
Brian Stankefb61df42016-07-25 11:47:51 -0400398 manager.createVirtualPort(virtualNetwork1.id(), src.deviceId(), src.port(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700399 new ConnectPoint(srcVirtualDevice.id(), src.port()));
Brian Stankefb61df42016-07-25 11:47:51 -0400400
Brian Stanke9a108972016-04-11 15:25:17 -0400401 ConnectPoint dst = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(2));
Brian Stankefb61df42016-07-25 11:47:51 -0400402 manager.createVirtualPort(virtualNetwork1.id(), dst.deviceId(), dst.port(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700403 new ConnectPoint(dstVirtualDevice.id(), dst.port()));
Brian Stankefb61df42016-07-25 11:47:51 -0400404
Brian Stanke9a108972016-04-11 15:25:17 -0400405 manager.createVirtualLink(virtualNetwork1.id(), src, dst);
406 manager.createVirtualLink(virtualNetwork1.id(), src, dst);
407 }
408
409 /**
Claudine Chiu7f872a72016-12-16 13:51:39 -0500410 * Tests add, bind and remove of virtual ports.
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500411 */
412 @Test
413 public void testAddRemoveVirtualPort() {
Claudine Chiu7f872a72016-12-16 13:51:39 -0500414 List<VirtualNetworkEvent.Type> expectedEventTypes = new ArrayList<>();
415
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500416 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
Claudine Chiu7f872a72016-12-16 13:51:39 -0500417 expectedEventTypes.add(VirtualNetworkEvent.Type.TENANT_REGISTERED);
yoonseon214963b2016-11-21 15:41:07 -0800418 VirtualNetwork virtualNetwork1 =
419 manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Claudine Chiu7f872a72016-12-16 13:51:39 -0500420 expectedEventTypes.add(VirtualNetworkEvent.Type.NETWORK_ADDED);
Brian Stanke5df14472016-03-11 19:34:38 -0500421 VirtualDevice virtualDevice =
Brian Stanke7a81b532016-06-14 15:43:51 -0400422 manager.createVirtualDevice(virtualNetwork1.id(), DID1);
Claudine Chiu7f872a72016-12-16 13:51:39 -0500423 expectedEventTypes.add(VirtualNetworkEvent.Type.VIRTUAL_DEVICE_ADDED);
Yoonseon Han6c603892016-09-01 11:52:21 -0700424 ConnectPoint cp = new ConnectPoint(virtualDevice.id(), PortNumber.portNumber(1));
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500425
yoonseon214963b2016-11-21 15:41:07 -0800426 manager.createVirtualPort(virtualNetwork1.id(),
427 virtualDevice.id(), PortNumber.portNumber(1), cp);
Claudine Chiu7f872a72016-12-16 13:51:39 -0500428 expectedEventTypes.add(VirtualNetworkEvent.Type.VIRTUAL_PORT_ADDED);
yoonseon214963b2016-11-21 15:41:07 -0800429 manager.createVirtualPort(virtualNetwork1.id(),
430 virtualDevice.id(), PortNumber.portNumber(2), cp);
Claudine Chiu7f872a72016-12-16 13:51:39 -0500431 expectedEventTypes.add(VirtualNetworkEvent.Type.VIRTUAL_PORT_ADDED);
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500432
Brian Stanke5df14472016-03-11 19:34:38 -0500433 Set<VirtualPort> virtualPorts = manager.getVirtualPorts(virtualNetwork1.id(), virtualDevice.id());
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500434 assertNotNull("The virtual port set should not be null", virtualPorts);
435 assertEquals("The virtual port set size did not match.", 2, virtualPorts.size());
436
437 for (VirtualPort virtualPort : virtualPorts) {
438 manager.removeVirtualPort(virtualNetwork1.id(),
439 (DeviceId) virtualPort.element().id(), virtualPort.number());
Claudine Chiu7f872a72016-12-16 13:51:39 -0500440 expectedEventTypes.add(VirtualNetworkEvent.Type.VIRTUAL_PORT_REMOVED);
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500441 // attempt to remove the same virtual port again.
442 manager.removeVirtualPort(virtualNetwork1.id(),
443 (DeviceId) virtualPort.element().id(), virtualPort.number());
444 }
Brian Stanke5df14472016-03-11 19:34:38 -0500445 virtualPorts = manager.getVirtualPorts(virtualNetwork1.id(), virtualDevice.id());
446 assertTrue("The virtual port set should be empty.", virtualPorts.isEmpty());
447
448 // Add/remove the virtual port again.
yoonseon214963b2016-11-21 15:41:07 -0800449 VirtualPort virtualPort =
450 manager.createVirtualPort(virtualNetwork1.id(), virtualDevice.id(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700451 PortNumber.portNumber(1), cp);
Claudine Chiu7f872a72016-12-16 13:51:39 -0500452 expectedEventTypes.add(VirtualNetworkEvent.Type.VIRTUAL_PORT_ADDED);
453
454 ConnectPoint newCp = new ConnectPoint(DID2, PortNumber.portNumber(2));
455 manager.bindVirtualPort(virtualNetwork1.id(), virtualDevice.id(),
456 PortNumber.portNumber(1), newCp);
457 expectedEventTypes.add(VirtualNetworkEvent.Type.VIRTUAL_PORT_UPDATED);
458
yoonseon214963b2016-11-21 15:41:07 -0800459 manager.removeVirtualPort(virtualNetwork1.id(),
460 (DeviceId) virtualPort.element().id(), virtualPort.number());
Claudine Chiu7f872a72016-12-16 13:51:39 -0500461 expectedEventTypes.add(VirtualNetworkEvent.Type.VIRTUAL_PORT_REMOVED);
Brian Stanke5df14472016-03-11 19:34:38 -0500462 virtualPorts = manager.getVirtualPorts(virtualNetwork1.id(), virtualDevice.id());
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500463 assertTrue("The virtual port set should be empty.", virtualPorts.isEmpty());
Claudine Chiu7f872a72016-12-16 13:51:39 -0500464
465 // Validate that the events were all received in the correct order.
466 validateEvents((Enum[]) expectedEventTypes.toArray(
467 new VirtualNetworkEvent.Type[expectedEventTypes.size()]));
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500468 }
469
470 /**
Brian Stanke11f6d532016-07-05 16:17:59 -0400471 * Tests the addOrUpdateIntent() method in the store with a null intent.
472 */
473 @Test(expected = NullPointerException.class)
474 public void testAddOrUpdateNullIntent() {
475 manager.store.addOrUpdateIntent(null, null);
476 }
477
478 /**
479 * Tests the removeIntent() method in the store with a null intent key.
480 */
481 @Test(expected = NullPointerException.class)
482 public void testRemoveNullIntentKey() {
483 manager.store.removeIntent(null);
484 }
485
486 /**
487 * Tests the addOrUpdateIntent(), getIntents(), getIntent(), removeIntent() methods with the store.
488 */
489 @Test
490 public void testAddOrUpdateIntent() {
491 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
yoonseon214963b2016-11-21 15:41:07 -0800492 VirtualNetwork virtualNetwork =
493 manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stanke11f6d532016-07-05 16:17:59 -0400494 ConnectPoint cp1 = new ConnectPoint(DID1, P1);
495 ConnectPoint cp2 = new ConnectPoint(DID2, P1);
496
497 VirtualNetworkIntent virtualIntent = VirtualNetworkIntent.builder()
498 .networkId(virtualNetwork.id())
499 .key(Key.of("Test", APP_ID))
500 .appId(APP_ID)
501 .ingressPoint(cp1)
502 .egressPoint(cp2)
503 .build();
504
505 // Add the intent to the store.
506 manager.store.addOrUpdateIntent(virtualIntent, IntentState.INSTALL_REQ);
yoonseon214963b2016-11-21 15:41:07 -0800507 assertEquals("The intent size should match.", 1,
508 manager.store.getIntents().size());
509 assertNotNull("The intent should not be null.",
510 manager.store.getIntent(virtualIntent.key()));
Brian Stanke11f6d532016-07-05 16:17:59 -0400511
512 // remove the intent from the store.
513 manager.store.removeIntent(virtualIntent.key());
yoonseon214963b2016-11-21 15:41:07 -0800514 assertTrue("The intents should be empty.",
515 manager.store.getIntents().isEmpty());
516 assertNull("The intent should be null.",
517 manager.store.getIntent(virtualIntent.key()));
Brian Stanke11f6d532016-07-05 16:17:59 -0400518 }
519
520 /**
521 * Tests the addTunnelId() method in the store with a null intent.
522 */
523 @Test(expected = NullPointerException.class)
524 public void testAddTunnelIdNullIntent() {
525 manager.store.addTunnelId(null, null);
526 }
527
528 /**
529 * Tests the removeTunnelId() method in the store with a null intent.
530 */
531 @Test(expected = NullPointerException.class)
532 public void testRemoveTunnelIdNullIntent() {
533 manager.store.removeTunnelId(null, null);
534 }
535
536 /**
537 * Tests the addTunnelId, getTunnelIds(), removeTunnelId() methods with the store.
538 */
539 @Test
540 public void testAddTunnelId() {
541 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
542 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
543 ConnectPoint cp1 = new ConnectPoint(DID1, P1);
544 ConnectPoint cp2 = new ConnectPoint(DID2, P1);
545
546 VirtualNetworkIntent virtualIntent = VirtualNetworkIntent.builder()
547 .networkId(virtualNetwork.id())
548 .key(Key.of("Test", APP_ID))
549 .appId(APP_ID)
550 .ingressPoint(cp1)
551 .egressPoint(cp2)
552 .build();
553
554 TunnelId tunnelId = TunnelId.valueOf("virtual tunnel");
555 // Add the intent to tunnelID mapping to the store.
556 manager.store.addTunnelId(virtualIntent, tunnelId);
yoonseon214963b2016-11-21 15:41:07 -0800557 assertEquals("The tunnels size should match.", 1,
558 manager.store.getTunnelIds(virtualIntent).size());
Brian Stanke11f6d532016-07-05 16:17:59 -0400559
560 // Remove the intent to tunnelID mapping from the store.
561 manager.store.removeTunnelId(virtualIntent, tunnelId);
yoonseon214963b2016-11-21 15:41:07 -0800562 assertTrue("The tunnels should be empty.",
563 manager.store.getTunnelIds(virtualIntent).isEmpty());
Brian Stanke11f6d532016-07-05 16:17:59 -0400564 }
565
Brian Stankefb61df42016-07-25 11:47:51 -0400566
567 /**
568 * Method to create the virtual network for further testing.
569 **/
570 private VirtualNetwork setupVirtualNetworkTopology() {
571 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
yoonseon214963b2016-11-21 15:41:07 -0800572 VirtualNetwork virtualNetwork =
573 manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stankefb61df42016-07-25 11:47:51 -0400574
575 VirtualDevice virtualDevice1 =
576 manager.createVirtualDevice(virtualNetwork.id(), DID1);
577 VirtualDevice virtualDevice2 =
578 manager.createVirtualDevice(virtualNetwork.id(), DID2);
579 VirtualDevice virtualDevice3 =
580 manager.createVirtualDevice(virtualNetwork.id(), DID3);
581 VirtualDevice virtualDevice4 =
582 manager.createVirtualDevice(virtualNetwork.id(), DID4);
583 VirtualDevice virtualDevice5 =
584 manager.createVirtualDevice(virtualNetwork.id(), DID5);
585
586 ConnectPoint cp1 = new ConnectPoint(virtualDevice1.id(), PortNumber.portNumber(1));
587 manager.createVirtualPort(virtualNetwork.id(), virtualDevice1.id(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700588 PortNumber.portNumber(1), cp1);
Brian Stankefb61df42016-07-25 11:47:51 -0400589
590 ConnectPoint cp2 = new ConnectPoint(virtualDevice1.id(), PortNumber.portNumber(2));
591 manager.createVirtualPort(virtualNetwork.id(), virtualDevice1.id(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700592 PortNumber.portNumber(2), cp2);
Brian Stankefb61df42016-07-25 11:47:51 -0400593
594 ConnectPoint cp3 = new ConnectPoint(virtualDevice2.id(), PortNumber.portNumber(3));
595 manager.createVirtualPort(virtualNetwork.id(), virtualDevice2.id(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700596 PortNumber.portNumber(3), cp3);
Brian Stankefb61df42016-07-25 11:47:51 -0400597
598 ConnectPoint cp4 = new ConnectPoint(virtualDevice2.id(), PortNumber.portNumber(4));
599 manager.createVirtualPort(virtualNetwork.id(), virtualDevice2.id(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700600 PortNumber.portNumber(4), cp4);
Brian Stankefb61df42016-07-25 11:47:51 -0400601
602 ConnectPoint cp5 = new ConnectPoint(virtualDevice3.id(), PortNumber.portNumber(5));
603 manager.createVirtualPort(virtualNetwork.id(), virtualDevice3.id(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700604 PortNumber.portNumber(5), cp5);
Brian Stankefb61df42016-07-25 11:47:51 -0400605
606 cp6 = new ConnectPoint(virtualDevice3.id(), PortNumber.portNumber(6));
607 manager.createVirtualPort(virtualNetwork.id(), virtualDevice3.id(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700608 PortNumber.portNumber(6), cp6);
Brian Stankefb61df42016-07-25 11:47:51 -0400609
610 cp7 = new ConnectPoint(virtualDevice4.id(), PortNumber.portNumber(7));
611 manager.createVirtualPort(virtualNetwork.id(), virtualDevice4.id(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700612 PortNumber.portNumber(7), cp7);
Brian Stankefb61df42016-07-25 11:47:51 -0400613
614 ConnectPoint cp8 = new ConnectPoint(virtualDevice4.id(), PortNumber.portNumber(8));
615 manager.createVirtualPort(virtualNetwork.id(), virtualDevice4.id(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700616 PortNumber.portNumber(8), cp8);
Brian Stankefb61df42016-07-25 11:47:51 -0400617
618 ConnectPoint cp9 = new ConnectPoint(virtualDevice5.id(), PortNumber.portNumber(9));
619 manager.createVirtualPort(virtualNetwork.id(), virtualDevice5.id(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700620 PortNumber.portNumber(9), cp9);
Brian Stankefb61df42016-07-25 11:47:51 -0400621
622 VirtualLink link1 = manager.createVirtualLink(virtualNetwork.id(), cp1, cp3);
623 virtualNetworkManagerStore.updateLink(link1, link1.tunnelId(), Link.State.ACTIVE);
624 VirtualLink link2 = manager.createVirtualLink(virtualNetwork.id(), cp3, cp1);
625 virtualNetworkManagerStore.updateLink(link2, link2.tunnelId(), Link.State.ACTIVE);
626 VirtualLink link3 = manager.createVirtualLink(virtualNetwork.id(), cp4, cp5);
627 virtualNetworkManagerStore.updateLink(link3, link3.tunnelId(), Link.State.ACTIVE);
628 VirtualLink link4 = manager.createVirtualLink(virtualNetwork.id(), cp5, cp4);
629 virtualNetworkManagerStore.updateLink(link4, link4.tunnelId(), Link.State.ACTIVE);
630 VirtualLink link5 = manager.createVirtualLink(virtualNetwork.id(), cp8, cp9);
631 virtualNetworkManagerStore.updateLink(link5, link5.tunnelId(), Link.State.ACTIVE);
632 VirtualLink link6 = manager.createVirtualLink(virtualNetwork.id(), cp9, cp8);
633 virtualNetworkManagerStore.updateLink(link6, link6.tunnelId(), Link.State.ACTIVE);
634
635 topologyService = manager.get(virtualNetwork.id(), TopologyService.class);
yoonseon214963b2016-11-21 15:41:07 -0800636 topologyProvider = new DefaultVirtualNetworkProvider();
637 try {
638 TestUtils.setField(topologyProvider, "topologyService", topologyService);
639 } catch (TestUtils.TestUtilsException e) {
640 e.printStackTrace();
641 }
642// topologyProvider.topologyService = topologyService;
Brian Stankefb61df42016-07-25 11:47:51 -0400643
644 return virtualNetwork;
645 }
646
647 /**
648 * Test the topologyChanged() method.
649 */
650 @Test
651 public void testTopologyChanged() {
652 VirtualNetwork virtualNetwork = setupVirtualNetworkTopology();
yoonseon214963b2016-11-21 15:41:07 -0800653 VirtualNetworkProviderService providerService =
654 manager.createProviderService(topologyProvider);
Brian Stankefb61df42016-07-25 11:47:51 -0400655
656 // Initial setup is two clusters of devices/links.
yoonseon214963b2016-11-21 15:41:07 -0800657 assertEquals("The cluster count did not match.", 2,
658 topologyService.currentTopology().clusterCount());
Brian Stankefb61df42016-07-25 11:47:51 -0400659
660 // Adding this link will join the two clusters together.
661 List<Event> reasons = new ArrayList<>();
662 VirtualLink link = manager.createVirtualLink(virtualNetwork.id(), cp6, cp7);
663 virtualNetworkManagerStore.updateLink(link, link.tunnelId(), Link.State.ACTIVE);
664 VirtualLink link2 = manager.createVirtualLink(virtualNetwork.id(), cp7, cp6);
665 virtualNetworkManagerStore.updateLink(link2, link2.tunnelId(), Link.State.ACTIVE);
666
667 Topology topology = topologyService.currentTopology();
668 providerService.topologyChanged(topologyProvider.getConnectPoints(topology));
669
670 // Validate that all links are still active.
671 manager.getVirtualLinks(virtualNetwork.id()).forEach(virtualLink -> {
yoonseon214963b2016-11-21 15:41:07 -0800672 assertTrue("The virtual link should be active.",
673 virtualLink.state().equals(Link.State.ACTIVE));
Brian Stankefb61df42016-07-25 11:47:51 -0400674 });
675
676 virtualNetworkManagerStore.updateLink(link, link.tunnelId(), Link.State.INACTIVE);
677 virtualNetworkManagerStore.updateLink(link2, link2.tunnelId(), Link.State.INACTIVE);
678 providerService.topologyChanged(topologyProvider.getConnectPoints(topology));
679
680 // Validate that all links are active again.
681 manager.getVirtualLinks(virtualNetwork.id()).forEach(virtualLink -> {
yoonseon214963b2016-11-21 15:41:07 -0800682 assertTrue("The virtual link should be active.",
683 virtualLink.state().equals(Link.State.ACTIVE));
Brian Stankefb61df42016-07-25 11:47:51 -0400684 });
685 }
686
Brian Stanke11f6d532016-07-05 16:17:59 -0400687 /**
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500688 * Method to validate that the actual versus expected virtual network events were
689 * received correctly.
690 *
691 * @param types expected virtual network events.
692 */
693 private void validateEvents(Enum... types) {
694 TestTools.assertAfter(100, () -> {
695 int i = 0;
696 assertEquals("wrong events received", types.length, listener.events.size());
697 for (Event event : listener.events) {
698 assertEquals("incorrect event type", types[i], event.type());
699 i++;
700 }
701 listener.events.clear();
702 });
703 }
704
705 /**
706 * Test listener class to receive virtual network events.
707 */
708 private static class TestListener implements VirtualNetworkListener {
709
Brian Stanke7a81b532016-06-14 15:43:51 -0400710 private List<VirtualNetworkEvent> events = Lists.newArrayList();
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500711
712 @Override
713 public void event(VirtualNetworkEvent event) {
714 events.add(event);
715 }
716
717 }
718
Brian Stanke5df14472016-03-11 19:34:38 -0500719 /**
720 * Core service test class.
721 */
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500722 private class TestCoreService extends CoreServiceAdapter {
723
724 @Override
725 public IdGenerator getIdGenerator(String topic) {
726 return new IdGenerator() {
727 private AtomicLong counter = new AtomicLong(0);
728
729 @Override
730 public long getNewId() {
731 return counter.getAndIncrement();
732 }
733 };
734 }
735 }
736}