blob: 629dd568a5b2c20f5f0f6f79376bec6f3eddfbfe [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();
Thomas Vachuska23235962017-02-03 11:44:15 -080095 Intent.unbindIdGenerator(idGenerator);
Brian Stanke11f6d532016-07-05 16:17:59 -040096 Intent.bindIdGenerator(idGenerator);
Brian Stanke0e5c94e2016-03-08 11:20:04 -050097
98 coreService = new TestCoreService();
yoonseonc6a69272017-01-12 18:22:20 -080099 TestUtils.setField(virtualNetworkManagerStore, "coreService", coreService);
yoonseon214963b2016-11-21 15:41:07 -0800100 TestUtils.setField(virtualNetworkManagerStore, "storageService",
101 new TestStorageService());
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500102 virtualNetworkManagerStore.activate();
103
104 manager = new VirtualNetworkManager();
105 manager.store = virtualNetworkManagerStore;
106 manager.addListener(listener);
Brian Stanke11f6d532016-07-05 16:17:59 -0400107 manager.intentService = intentService;
yoonseon322c9c32016-12-07 16:47:02 -0800108 manager.coreService = coreService;
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500109 NetTestTools.injectEventDispatcher(manager, new TestEventDispatcher());
yoonseonc6a69272017-01-12 18:22:20 -0800110
111 testDirectory = new TestServiceDirectory();
112 TestUtils.setField(manager, "serviceDirectory", testDirectory);
113
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500114 manager.activate();
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500115 }
116
117 @After
118 public void tearDown() {
119 virtualNetworkManagerStore.deactivate();
120 manager.removeListener(listener);
121 manager.deactivate();
122 NetTestTools.injectEventDispatcher(manager, null);
Brian Stanke11f6d532016-07-05 16:17:59 -0400123 Intent.unbindIdGenerator(idGenerator);
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500124 }
125
126 /**
127 * Tests registering a null tenant id.
128 */
129 @Test(expected = NullPointerException.class)
130 public void testRegisterNullTenantId() {
131 manager.registerTenantId(null);
132 }
133
134 /**
135 * Tests registering/unregistering a tenant id.
136 */
137 @Test
138 public void testRegisterUnregisterTenantId() {
139 manager.unregisterTenantId(TenantId.tenantId(tenantIdValue1));
140 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
141 manager.registerTenantId(TenantId.tenantId(tenantIdValue2));
142 Collection<TenantId> tenantIdCollection = manager.getTenantIds();
143 assertEquals("The tenantId set size did not match.", 2, tenantIdCollection.size());
144
145 manager.unregisterTenantId(TenantId.tenantId(tenantIdValue1));
146 manager.unregisterTenantId(TenantId.tenantId(tenantIdValue2));
147 tenantIdCollection = manager.getTenantIds();
148 assertTrue("The tenantId set should be empty.", tenantIdCollection.isEmpty());
149
150 // Validate that the events were all received in the correct order.
yoonseon214963b2016-11-21 15:41:07 -0800151 validateEvents(VirtualNetworkEvent.Type.TENANT_UNREGISTERED,
152 VirtualNetworkEvent.Type.TENANT_REGISTERED,
153 VirtualNetworkEvent.Type.TENANT_REGISTERED,
154 VirtualNetworkEvent.Type.TENANT_UNREGISTERED,
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500155 VirtualNetworkEvent.Type.TENANT_UNREGISTERED);
156 }
157
158 /**
159 * Tests adding a null virtual network.
160 */
161 @Test(expected = NullPointerException.class)
162 public void testCreateNullVirtualNetwork() {
163 manager.createVirtualNetwork(null);
164 }
165
166 /**
167 * Tests add and remove of virtual networks.
168 */
169 @Test
170 public void testAddRemoveVirtualNetwork() {
171 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
172 manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
173 manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
174 Set<VirtualNetwork> virtualNetworks = manager.getVirtualNetworks(TenantId.tenantId(tenantIdValue1));
175 assertNotNull("The virtual network set should not be null", virtualNetworks);
176 assertEquals("The virtual network set size did not match.", 2, virtualNetworks.size());
177
Brian Stanke5df14472016-03-11 19:34:38 -0500178 int remaining = virtualNetworks.size();
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500179 for (VirtualNetwork virtualNetwork : virtualNetworks) {
180 manager.removeVirtualNetwork(virtualNetwork.id());
Brian Stanke5df14472016-03-11 19:34:38 -0500181 assertEquals("The expected virtual network size does not match",
182 --remaining, manager.getVirtualNetworks(TenantId.tenantId(tenantIdValue1)).size());
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500183 // attempt to remove the same virtual network again.
184 manager.removeVirtualNetwork(virtualNetwork.id());
Brian Stanke5df14472016-03-11 19:34:38 -0500185 assertEquals("The expected virtual network size does not match",
186 remaining, manager.getVirtualNetworks(TenantId.tenantId(tenantIdValue1)).size());
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500187 }
188 virtualNetworks = manager.getVirtualNetworks(TenantId.tenantId(tenantIdValue1));
189 assertTrue("The virtual network set should be empty.", virtualNetworks.isEmpty());
190
Brian Stanke5df14472016-03-11 19:34:38 -0500191 // Create/remove a virtual network.
192 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
193 manager.removeVirtualNetwork(virtualNetwork.id());
194
195 virtualNetworks = manager.getVirtualNetworks(TenantId.tenantId(tenantIdValue1));
196 assertTrue("The virtual network set should be empty.", virtualNetworks.isEmpty());
197
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500198 // Validate that the events were all received in the correct order.
yoonseon214963b2016-11-21 15:41:07 -0800199 validateEvents(VirtualNetworkEvent.Type.TENANT_REGISTERED,
200 VirtualNetworkEvent.Type.NETWORK_ADDED,
201 VirtualNetworkEvent.Type.NETWORK_ADDED,
202 VirtualNetworkEvent.Type.NETWORK_REMOVED,
203 VirtualNetworkEvent.Type.NETWORK_REMOVED,
204 VirtualNetworkEvent.Type.NETWORK_ADDED,
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500205 VirtualNetworkEvent.Type.NETWORK_REMOVED);
206 }
207
208 /**
209 * Tests adding a null virtual device.
210 */
211 @Test(expected = NullPointerException.class)
212 public void testCreateNullVirtualDevice() {
213 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
214 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
215
216 manager.createVirtualDevice(virtualNetwork.id(), null);
217 }
218
219 /**
220 * Tests adding a virtual device where no virtual network exists.
221 */
222 @Test(expected = IllegalStateException.class)
223 public void testCreateVirtualDeviceWithNoNetwork() {
224 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
yoonseon214963b2016-11-21 15:41:07 -0800225 VirtualNetwork virtualNetwork =
226 new DefaultVirtualNetwork(NetworkId.NONE,
227 TenantId.tenantId(tenantIdValue1));
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500228
Brian Stanke7a81b532016-06-14 15:43:51 -0400229 manager.createVirtualDevice(virtualNetwork.id(), DID1);
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500230 }
231
232 /**
233 * Tests add and remove of virtual devices.
234 */
235 @Test
236 public void testAddRemoveVirtualDevice() {
Claudine Chiu945828d2016-11-21 12:47:07 -0500237 List<VirtualNetworkEvent.Type> expectedEventTypes = new ArrayList<>();
238
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500239 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
Claudine Chiu945828d2016-11-21 12:47:07 -0500240 expectedEventTypes.add(VirtualNetworkEvent.Type.TENANT_REGISTERED);
yoonseon214963b2016-11-21 15:41:07 -0800241 VirtualNetwork virtualNetwork1 =
242 manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Claudine Chiu945828d2016-11-21 12:47:07 -0500243 expectedEventTypes.add(VirtualNetworkEvent.Type.NETWORK_ADDED);
yoonseon214963b2016-11-21 15:41:07 -0800244 VirtualNetwork virtualNetwork2 =
245 manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Claudine Chiu945828d2016-11-21 12:47:07 -0500246 expectedEventTypes.add(VirtualNetworkEvent.Type.NETWORK_ADDED);
Brian Stanke7a81b532016-06-14 15:43:51 -0400247 manager.createVirtualDevice(virtualNetwork1.id(), DID1);
Claudine Chiu945828d2016-11-21 12:47:07 -0500248 expectedEventTypes.add(VirtualNetworkEvent.Type.VIRTUAL_DEVICE_ADDED);
Brian Stanke7a81b532016-06-14 15:43:51 -0400249 manager.createVirtualDevice(virtualNetwork2.id(), DID2);
Claudine Chiu945828d2016-11-21 12:47:07 -0500250 expectedEventTypes.add(VirtualNetworkEvent.Type.VIRTUAL_DEVICE_ADDED);
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500251
252 Set<VirtualDevice> virtualDevices1 = manager.getVirtualDevices(virtualNetwork1.id());
253 assertNotNull("The virtual device set should not be null", virtualDevices1);
254 assertEquals("The virtual device set size did not match.", 1, virtualDevices1.size());
255
256 Set<VirtualDevice> virtualDevices2 = manager.getVirtualDevices(virtualNetwork2.id());
257 assertNotNull("The virtual device set should not be null", virtualDevices2);
258 assertEquals("The virtual device set size did not match.", 1, virtualDevices2.size());
259
260 for (VirtualDevice virtualDevice : virtualDevices1) {
261 manager.removeVirtualDevice(virtualNetwork1.id(), virtualDevice.id());
Claudine Chiu945828d2016-11-21 12:47:07 -0500262 expectedEventTypes.add(VirtualNetworkEvent.Type.VIRTUAL_DEVICE_REMOVED);
263 // attempt to remove the same virtual device again - no event expected.
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500264 manager.removeVirtualDevice(virtualNetwork1.id(), virtualDevice.id());
265 }
266 virtualDevices1 = manager.getVirtualDevices(virtualNetwork1.id());
267 assertTrue("The virtual device set should be empty.", virtualDevices1.isEmpty());
268
Brian Stanke5df14472016-03-11 19:34:38 -0500269 // Add/remove the virtual device again.
Brian Stanke7a81b532016-06-14 15:43:51 -0400270 VirtualDevice virtualDevice = manager.createVirtualDevice(virtualNetwork1.id(), DID1);
Claudine Chiu945828d2016-11-21 12:47:07 -0500271 expectedEventTypes.add(VirtualNetworkEvent.Type.VIRTUAL_DEVICE_ADDED);
Brian Stanke5df14472016-03-11 19:34:38 -0500272 manager.removeVirtualDevice(virtualDevice.networkId(), virtualDevice.id());
Claudine Chiu945828d2016-11-21 12:47:07 -0500273 expectedEventTypes.add(VirtualNetworkEvent.Type.VIRTUAL_DEVICE_REMOVED);
Brian Stanke5df14472016-03-11 19:34:38 -0500274 virtualDevices1 = manager.getVirtualDevices(virtualNetwork1.id());
275 assertTrue("The virtual device set should be empty.", virtualDevices1.isEmpty());
276
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500277 // Validate that the events were all received in the correct order.
Claudine Chiu945828d2016-11-21 12:47:07 -0500278 validateEvents((Enum[]) expectedEventTypes.toArray(
279 new VirtualNetworkEvent.Type[expectedEventTypes.size()]));
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500280 }
281
282 /**
Brian Stanke7a81b532016-06-14 15:43:51 -0400283 * Tests adding a null virtual host.
284 */
285 @Test(expected = NullPointerException.class)
286 public void testCreateNullVirtualHost() {
287 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
yoonseon214963b2016-11-21 15:41:07 -0800288 VirtualNetwork virtualNetwork =
289 manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stanke7a81b532016-06-14 15:43:51 -0400290
291 manager.createVirtualHost(virtualNetwork.id(), null, null, null, null, null);
292 }
293
294 /**
295 * Tests adding a virtual host where no virtual network exists.
296 */
297 @Test(expected = IllegalStateException.class)
298 public void testCreateVirtualHostWithNoNetwork() {
299 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
yoonseon214963b2016-11-21 15:41:07 -0800300 VirtualNetwork virtualNetwork =
301 new DefaultVirtualNetwork(NetworkId.NONE, TenantId.tenantId(tenantIdValue1));
Brian Stanke7a81b532016-06-14 15:43:51 -0400302
303 manager.createVirtualHost(virtualNetwork.id(), HID1, null, null, null, null);
304 }
305
306 /**
307 * Tests add and remove of virtual hosts.
308 */
309 @Test
310 public void testAddRemoveVirtualHost() {
311 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
yoonseon214963b2016-11-21 15:41:07 -0800312 VirtualNetwork virtualNetwork1 =
313 manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
314 VirtualNetwork virtualNetwork2 =
315 manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stanke7a81b532016-06-14 15:43:51 -0400316 manager.createVirtualHost(virtualNetwork1.id(), HID1, MAC1, VLAN1, LOC1, IPSET1);
317 manager.createVirtualHost(virtualNetwork2.id(), HID2, MAC2, VLAN2, LOC2, IPSET2);
318
319 Set<VirtualHost> virtualHosts1 = manager.getVirtualHosts(virtualNetwork1.id());
320 assertNotNull("The virtual host set should not be null", virtualHosts1);
321 assertEquals("The virtual host set size did not match.", 1, virtualHosts1.size());
322
323 Set<VirtualHost> virtualHosts2 = manager.getVirtualHosts(virtualNetwork2.id());
324 assertNotNull("The virtual host set should not be null", virtualHosts2);
325 assertEquals("The virtual host set size did not match.", 1, virtualHosts2.size());
326
327 for (VirtualHost virtualHost : virtualHosts1) {
328 manager.removeVirtualHost(virtualNetwork1.id(), virtualHost.id());
329 // attempt to remove the same virtual host again.
330 manager.removeVirtualHost(virtualNetwork1.id(), virtualHost.id());
331 }
332 virtualHosts1 = manager.getVirtualHosts(virtualNetwork1.id());
333 assertTrue("The virtual host set should be empty.", virtualHosts1.isEmpty());
334
335 // Add/remove the virtual host again.
yoonseon214963b2016-11-21 15:41:07 -0800336 VirtualHost virtualHost =
337 manager.createVirtualHost(virtualNetwork1.id(),
338 HID1, MAC1, VLAN1, LOC1, IPSET1);
Brian Stanke7a81b532016-06-14 15:43:51 -0400339 manager.removeVirtualHost(virtualHost.networkId(), virtualHost.id());
340 virtualHosts1 = manager.getVirtualHosts(virtualNetwork1.id());
341 assertTrue("The virtual host set should be empty.", virtualHosts1.isEmpty());
342 }
343
344 /**
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500345 * Tests add and remove of virtual links.
346 */
347 @Test
348 public void testAddRemoveVirtualLink() {
349 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
yoonseon214963b2016-11-21 15:41:07 -0800350 VirtualNetwork virtualNetwork1 =
351 manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500352 VirtualDevice srcVirtualDevice =
Brian Stanke7a81b532016-06-14 15:43:51 -0400353 manager.createVirtualDevice(virtualNetwork1.id(), DID1);
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500354 VirtualDevice dstVirtualDevice =
Brian Stanke7a81b532016-06-14 15:43:51 -0400355 manager.createVirtualDevice(virtualNetwork1.id(), DID2);
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500356 ConnectPoint src = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1));
Brian Stankefb61df42016-07-25 11:47:51 -0400357 manager.createVirtualPort(virtualNetwork1.id(), src.deviceId(), src.port(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700358 new ConnectPoint(srcVirtualDevice.id(), src.port()));
Brian Stankefb61df42016-07-25 11:47:51 -0400359
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500360 ConnectPoint dst = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(2));
Brian Stankefb61df42016-07-25 11:47:51 -0400361 manager.createVirtualPort(virtualNetwork1.id(), dst.deviceId(), dst.port(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700362 new ConnectPoint(dstVirtualDevice.id(), dst.port()));
Brian Stankefb61df42016-07-25 11:47:51 -0400363
Brian Stanke9a108972016-04-11 15:25:17 -0400364 manager.createVirtualLink(virtualNetwork1.id(), src, dst);
365 manager.createVirtualLink(virtualNetwork1.id(), dst, src);
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500366
367 Set<VirtualLink> virtualLinks = manager.getVirtualLinks(virtualNetwork1.id());
368 assertNotNull("The virtual link set should not be null", virtualLinks);
369 assertEquals("The virtual link set size did not match.", 2, virtualLinks.size());
370
371 for (VirtualLink virtualLink : virtualLinks) {
372 manager.removeVirtualLink(virtualLink.networkId(), virtualLink.src(), virtualLink.dst());
373 // attempt to remove the same virtual link again.
374 manager.removeVirtualLink(virtualLink.networkId(), virtualLink.src(), virtualLink.dst());
375 }
376 virtualLinks = manager.getVirtualLinks(virtualNetwork1.id());
377 assertTrue("The virtual link set should be empty.", virtualLinks.isEmpty());
Brian Stanke5df14472016-03-11 19:34:38 -0500378
379 // Add/remove the virtual link again.
Brian Stanke9a108972016-04-11 15:25:17 -0400380 VirtualLink virtualLink = manager.createVirtualLink(virtualNetwork1.id(), src, dst);
Brian Stanke5df14472016-03-11 19:34:38 -0500381 manager.removeVirtualLink(virtualLink.networkId(), virtualLink.src(), virtualLink.dst());
382 virtualLinks = manager.getVirtualLinks(virtualNetwork1.id());
383 assertTrue("The virtual link set should be empty.", virtualLinks.isEmpty());
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500384 }
385
386 /**
Brian Stanke9a108972016-04-11 15:25:17 -0400387 * Tests adding the same virtual link twice.
388 */
389 @Test(expected = IllegalStateException.class)
390 public void testAddSameVirtualLink() {
391 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
yoonseon214963b2016-11-21 15:41:07 -0800392 VirtualNetwork virtualNetwork1 =
393 manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stanke9a108972016-04-11 15:25:17 -0400394 VirtualDevice srcVirtualDevice =
Brian Stanke7a81b532016-06-14 15:43:51 -0400395 manager.createVirtualDevice(virtualNetwork1.id(), DID1);
Brian Stanke9a108972016-04-11 15:25:17 -0400396 VirtualDevice dstVirtualDevice =
Brian Stanke7a81b532016-06-14 15:43:51 -0400397 manager.createVirtualDevice(virtualNetwork1.id(), DID2);
Brian Stanke9a108972016-04-11 15:25:17 -0400398 ConnectPoint src = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1));
Brian Stankefb61df42016-07-25 11:47:51 -0400399 manager.createVirtualPort(virtualNetwork1.id(), src.deviceId(), src.port(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700400 new ConnectPoint(srcVirtualDevice.id(), src.port()));
Brian Stankefb61df42016-07-25 11:47:51 -0400401
Brian Stanke9a108972016-04-11 15:25:17 -0400402 ConnectPoint dst = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(2));
Brian Stankefb61df42016-07-25 11:47:51 -0400403 manager.createVirtualPort(virtualNetwork1.id(), dst.deviceId(), dst.port(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700404 new ConnectPoint(dstVirtualDevice.id(), dst.port()));
Brian Stankefb61df42016-07-25 11:47:51 -0400405
Brian Stanke9a108972016-04-11 15:25:17 -0400406 manager.createVirtualLink(virtualNetwork1.id(), src, dst);
407 manager.createVirtualLink(virtualNetwork1.id(), src, dst);
408 }
409
410 /**
Claudine Chiu7f872a72016-12-16 13:51:39 -0500411 * Tests add, bind and remove of virtual ports.
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500412 */
413 @Test
414 public void testAddRemoveVirtualPort() {
Claudine Chiu7f872a72016-12-16 13:51:39 -0500415 List<VirtualNetworkEvent.Type> expectedEventTypes = new ArrayList<>();
416
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500417 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
Claudine Chiu7f872a72016-12-16 13:51:39 -0500418 expectedEventTypes.add(VirtualNetworkEvent.Type.TENANT_REGISTERED);
yoonseon214963b2016-11-21 15:41:07 -0800419 VirtualNetwork virtualNetwork1 =
420 manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Claudine Chiu7f872a72016-12-16 13:51:39 -0500421 expectedEventTypes.add(VirtualNetworkEvent.Type.NETWORK_ADDED);
Brian Stanke5df14472016-03-11 19:34:38 -0500422 VirtualDevice virtualDevice =
Brian Stanke7a81b532016-06-14 15:43:51 -0400423 manager.createVirtualDevice(virtualNetwork1.id(), DID1);
Claudine Chiu7f872a72016-12-16 13:51:39 -0500424 expectedEventTypes.add(VirtualNetworkEvent.Type.VIRTUAL_DEVICE_ADDED);
Yoonseon Han6c603892016-09-01 11:52:21 -0700425 ConnectPoint cp = new ConnectPoint(virtualDevice.id(), PortNumber.portNumber(1));
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500426
yoonseon214963b2016-11-21 15:41:07 -0800427 manager.createVirtualPort(virtualNetwork1.id(),
428 virtualDevice.id(), PortNumber.portNumber(1), cp);
Claudine Chiu7f872a72016-12-16 13:51:39 -0500429 expectedEventTypes.add(VirtualNetworkEvent.Type.VIRTUAL_PORT_ADDED);
yoonseon214963b2016-11-21 15:41:07 -0800430 manager.createVirtualPort(virtualNetwork1.id(),
431 virtualDevice.id(), PortNumber.portNumber(2), cp);
Claudine Chiu7f872a72016-12-16 13:51:39 -0500432 expectedEventTypes.add(VirtualNetworkEvent.Type.VIRTUAL_PORT_ADDED);
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500433
Brian Stanke5df14472016-03-11 19:34:38 -0500434 Set<VirtualPort> virtualPorts = manager.getVirtualPorts(virtualNetwork1.id(), virtualDevice.id());
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500435 assertNotNull("The virtual port set should not be null", virtualPorts);
436 assertEquals("The virtual port set size did not match.", 2, virtualPorts.size());
437
438 for (VirtualPort virtualPort : virtualPorts) {
439 manager.removeVirtualPort(virtualNetwork1.id(),
440 (DeviceId) virtualPort.element().id(), virtualPort.number());
Claudine Chiu7f872a72016-12-16 13:51:39 -0500441 expectedEventTypes.add(VirtualNetworkEvent.Type.VIRTUAL_PORT_REMOVED);
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500442 // attempt to remove the same virtual port again.
443 manager.removeVirtualPort(virtualNetwork1.id(),
444 (DeviceId) virtualPort.element().id(), virtualPort.number());
445 }
Brian Stanke5df14472016-03-11 19:34:38 -0500446 virtualPorts = manager.getVirtualPorts(virtualNetwork1.id(), virtualDevice.id());
447 assertTrue("The virtual port set should be empty.", virtualPorts.isEmpty());
448
449 // Add/remove the virtual port again.
yoonseon214963b2016-11-21 15:41:07 -0800450 VirtualPort virtualPort =
451 manager.createVirtualPort(virtualNetwork1.id(), virtualDevice.id(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700452 PortNumber.portNumber(1), cp);
Claudine Chiu7f872a72016-12-16 13:51:39 -0500453 expectedEventTypes.add(VirtualNetworkEvent.Type.VIRTUAL_PORT_ADDED);
454
455 ConnectPoint newCp = new ConnectPoint(DID2, PortNumber.portNumber(2));
456 manager.bindVirtualPort(virtualNetwork1.id(), virtualDevice.id(),
457 PortNumber.portNumber(1), newCp);
458 expectedEventTypes.add(VirtualNetworkEvent.Type.VIRTUAL_PORT_UPDATED);
459
yoonseon214963b2016-11-21 15:41:07 -0800460 manager.removeVirtualPort(virtualNetwork1.id(),
461 (DeviceId) virtualPort.element().id(), virtualPort.number());
Claudine Chiu7f872a72016-12-16 13:51:39 -0500462 expectedEventTypes.add(VirtualNetworkEvent.Type.VIRTUAL_PORT_REMOVED);
Brian Stanke5df14472016-03-11 19:34:38 -0500463 virtualPorts = manager.getVirtualPorts(virtualNetwork1.id(), virtualDevice.id());
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500464 assertTrue("The virtual port set should be empty.", virtualPorts.isEmpty());
Claudine Chiu7f872a72016-12-16 13:51:39 -0500465
466 // Validate that the events were all received in the correct order.
467 validateEvents((Enum[]) expectedEventTypes.toArray(
468 new VirtualNetworkEvent.Type[expectedEventTypes.size()]));
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500469 }
470
471 /**
Brian Stanke11f6d532016-07-05 16:17:59 -0400472 * Tests the addOrUpdateIntent() method in the store with a null intent.
473 */
474 @Test(expected = NullPointerException.class)
475 public void testAddOrUpdateNullIntent() {
476 manager.store.addOrUpdateIntent(null, null);
477 }
478
479 /**
480 * Tests the removeIntent() method in the store with a null intent key.
481 */
482 @Test(expected = NullPointerException.class)
483 public void testRemoveNullIntentKey() {
484 manager.store.removeIntent(null);
485 }
486
487 /**
488 * Tests the addOrUpdateIntent(), getIntents(), getIntent(), removeIntent() methods with the store.
489 */
490 @Test
491 public void testAddOrUpdateIntent() {
492 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
yoonseon214963b2016-11-21 15:41:07 -0800493 VirtualNetwork virtualNetwork =
494 manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stanke11f6d532016-07-05 16:17:59 -0400495 ConnectPoint cp1 = new ConnectPoint(DID1, P1);
496 ConnectPoint cp2 = new ConnectPoint(DID2, P1);
497
498 VirtualNetworkIntent virtualIntent = VirtualNetworkIntent.builder()
499 .networkId(virtualNetwork.id())
500 .key(Key.of("Test", APP_ID))
501 .appId(APP_ID)
502 .ingressPoint(cp1)
503 .egressPoint(cp2)
504 .build();
505
506 // Add the intent to the store.
507 manager.store.addOrUpdateIntent(virtualIntent, IntentState.INSTALL_REQ);
yoonseon214963b2016-11-21 15:41:07 -0800508 assertEquals("The intent size should match.", 1,
509 manager.store.getIntents().size());
510 assertNotNull("The intent should not be null.",
511 manager.store.getIntent(virtualIntent.key()));
Brian Stanke11f6d532016-07-05 16:17:59 -0400512
513 // remove the intent from the store.
514 manager.store.removeIntent(virtualIntent.key());
yoonseon214963b2016-11-21 15:41:07 -0800515 assertTrue("The intents should be empty.",
516 manager.store.getIntents().isEmpty());
517 assertNull("The intent should be null.",
518 manager.store.getIntent(virtualIntent.key()));
Brian Stanke11f6d532016-07-05 16:17:59 -0400519 }
520
521 /**
522 * Tests the addTunnelId() method in the store with a null intent.
523 */
524 @Test(expected = NullPointerException.class)
525 public void testAddTunnelIdNullIntent() {
526 manager.store.addTunnelId(null, null);
527 }
528
529 /**
530 * Tests the removeTunnelId() method in the store with a null intent.
531 */
532 @Test(expected = NullPointerException.class)
533 public void testRemoveTunnelIdNullIntent() {
534 manager.store.removeTunnelId(null, null);
535 }
536
537 /**
538 * Tests the addTunnelId, getTunnelIds(), removeTunnelId() methods with the store.
539 */
540 @Test
541 public void testAddTunnelId() {
542 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
543 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
544 ConnectPoint cp1 = new ConnectPoint(DID1, P1);
545 ConnectPoint cp2 = new ConnectPoint(DID2, P1);
546
547 VirtualNetworkIntent virtualIntent = VirtualNetworkIntent.builder()
548 .networkId(virtualNetwork.id())
549 .key(Key.of("Test", APP_ID))
550 .appId(APP_ID)
551 .ingressPoint(cp1)
552 .egressPoint(cp2)
553 .build();
554
555 TunnelId tunnelId = TunnelId.valueOf("virtual tunnel");
556 // Add the intent to tunnelID mapping to the store.
557 manager.store.addTunnelId(virtualIntent, tunnelId);
yoonseon214963b2016-11-21 15:41:07 -0800558 assertEquals("The tunnels size should match.", 1,
559 manager.store.getTunnelIds(virtualIntent).size());
Brian Stanke11f6d532016-07-05 16:17:59 -0400560
561 // Remove the intent to tunnelID mapping from the store.
562 manager.store.removeTunnelId(virtualIntent, tunnelId);
yoonseon214963b2016-11-21 15:41:07 -0800563 assertTrue("The tunnels should be empty.",
564 manager.store.getTunnelIds(virtualIntent).isEmpty());
Brian Stanke11f6d532016-07-05 16:17:59 -0400565 }
566
Brian Stankefb61df42016-07-25 11:47:51 -0400567
568 /**
569 * Method to create the virtual network for further testing.
570 **/
571 private VirtualNetwork setupVirtualNetworkTopology() {
572 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
yoonseon214963b2016-11-21 15:41:07 -0800573 VirtualNetwork virtualNetwork =
574 manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stankefb61df42016-07-25 11:47:51 -0400575
576 VirtualDevice virtualDevice1 =
577 manager.createVirtualDevice(virtualNetwork.id(), DID1);
578 VirtualDevice virtualDevice2 =
579 manager.createVirtualDevice(virtualNetwork.id(), DID2);
580 VirtualDevice virtualDevice3 =
581 manager.createVirtualDevice(virtualNetwork.id(), DID3);
582 VirtualDevice virtualDevice4 =
583 manager.createVirtualDevice(virtualNetwork.id(), DID4);
584 VirtualDevice virtualDevice5 =
585 manager.createVirtualDevice(virtualNetwork.id(), DID5);
586
587 ConnectPoint cp1 = new ConnectPoint(virtualDevice1.id(), PortNumber.portNumber(1));
588 manager.createVirtualPort(virtualNetwork.id(), virtualDevice1.id(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700589 PortNumber.portNumber(1), cp1);
Brian Stankefb61df42016-07-25 11:47:51 -0400590
591 ConnectPoint cp2 = new ConnectPoint(virtualDevice1.id(), PortNumber.portNumber(2));
592 manager.createVirtualPort(virtualNetwork.id(), virtualDevice1.id(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700593 PortNumber.portNumber(2), cp2);
Brian Stankefb61df42016-07-25 11:47:51 -0400594
595 ConnectPoint cp3 = new ConnectPoint(virtualDevice2.id(), PortNumber.portNumber(3));
596 manager.createVirtualPort(virtualNetwork.id(), virtualDevice2.id(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700597 PortNumber.portNumber(3), cp3);
Brian Stankefb61df42016-07-25 11:47:51 -0400598
599 ConnectPoint cp4 = new ConnectPoint(virtualDevice2.id(), PortNumber.portNumber(4));
600 manager.createVirtualPort(virtualNetwork.id(), virtualDevice2.id(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700601 PortNumber.portNumber(4), cp4);
Brian Stankefb61df42016-07-25 11:47:51 -0400602
603 ConnectPoint cp5 = new ConnectPoint(virtualDevice3.id(), PortNumber.portNumber(5));
604 manager.createVirtualPort(virtualNetwork.id(), virtualDevice3.id(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700605 PortNumber.portNumber(5), cp5);
Brian Stankefb61df42016-07-25 11:47:51 -0400606
607 cp6 = new ConnectPoint(virtualDevice3.id(), PortNumber.portNumber(6));
608 manager.createVirtualPort(virtualNetwork.id(), virtualDevice3.id(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700609 PortNumber.portNumber(6), cp6);
Brian Stankefb61df42016-07-25 11:47:51 -0400610
611 cp7 = new ConnectPoint(virtualDevice4.id(), PortNumber.portNumber(7));
612 manager.createVirtualPort(virtualNetwork.id(), virtualDevice4.id(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700613 PortNumber.portNumber(7), cp7);
Brian Stankefb61df42016-07-25 11:47:51 -0400614
615 ConnectPoint cp8 = new ConnectPoint(virtualDevice4.id(), PortNumber.portNumber(8));
616 manager.createVirtualPort(virtualNetwork.id(), virtualDevice4.id(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700617 PortNumber.portNumber(8), cp8);
Brian Stankefb61df42016-07-25 11:47:51 -0400618
619 ConnectPoint cp9 = new ConnectPoint(virtualDevice5.id(), PortNumber.portNumber(9));
620 manager.createVirtualPort(virtualNetwork.id(), virtualDevice5.id(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700621 PortNumber.portNumber(9), cp9);
Brian Stankefb61df42016-07-25 11:47:51 -0400622
623 VirtualLink link1 = manager.createVirtualLink(virtualNetwork.id(), cp1, cp3);
624 virtualNetworkManagerStore.updateLink(link1, link1.tunnelId(), Link.State.ACTIVE);
625 VirtualLink link2 = manager.createVirtualLink(virtualNetwork.id(), cp3, cp1);
626 virtualNetworkManagerStore.updateLink(link2, link2.tunnelId(), Link.State.ACTIVE);
627 VirtualLink link3 = manager.createVirtualLink(virtualNetwork.id(), cp4, cp5);
628 virtualNetworkManagerStore.updateLink(link3, link3.tunnelId(), Link.State.ACTIVE);
629 VirtualLink link4 = manager.createVirtualLink(virtualNetwork.id(), cp5, cp4);
630 virtualNetworkManagerStore.updateLink(link4, link4.tunnelId(), Link.State.ACTIVE);
631 VirtualLink link5 = manager.createVirtualLink(virtualNetwork.id(), cp8, cp9);
632 virtualNetworkManagerStore.updateLink(link5, link5.tunnelId(), Link.State.ACTIVE);
633 VirtualLink link6 = manager.createVirtualLink(virtualNetwork.id(), cp9, cp8);
634 virtualNetworkManagerStore.updateLink(link6, link6.tunnelId(), Link.State.ACTIVE);
635
636 topologyService = manager.get(virtualNetwork.id(), TopologyService.class);
yoonseon214963b2016-11-21 15:41:07 -0800637 topologyProvider = new DefaultVirtualNetworkProvider();
638 try {
639 TestUtils.setField(topologyProvider, "topologyService", topologyService);
640 } catch (TestUtils.TestUtilsException e) {
641 e.printStackTrace();
642 }
643// topologyProvider.topologyService = topologyService;
Brian Stankefb61df42016-07-25 11:47:51 -0400644
645 return virtualNetwork;
646 }
647
648 /**
649 * Test the topologyChanged() method.
650 */
651 @Test
652 public void testTopologyChanged() {
653 VirtualNetwork virtualNetwork = setupVirtualNetworkTopology();
yoonseon214963b2016-11-21 15:41:07 -0800654 VirtualNetworkProviderService providerService =
655 manager.createProviderService(topologyProvider);
Brian Stankefb61df42016-07-25 11:47:51 -0400656
657 // Initial setup is two clusters of devices/links.
yoonseon214963b2016-11-21 15:41:07 -0800658 assertEquals("The cluster count did not match.", 2,
659 topologyService.currentTopology().clusterCount());
Brian Stankefb61df42016-07-25 11:47:51 -0400660
661 // Adding this link will join the two clusters together.
662 List<Event> reasons = new ArrayList<>();
663 VirtualLink link = manager.createVirtualLink(virtualNetwork.id(), cp6, cp7);
664 virtualNetworkManagerStore.updateLink(link, link.tunnelId(), Link.State.ACTIVE);
665 VirtualLink link2 = manager.createVirtualLink(virtualNetwork.id(), cp7, cp6);
666 virtualNetworkManagerStore.updateLink(link2, link2.tunnelId(), Link.State.ACTIVE);
667
668 Topology topology = topologyService.currentTopology();
669 providerService.topologyChanged(topologyProvider.getConnectPoints(topology));
670
671 // Validate that all links are still active.
672 manager.getVirtualLinks(virtualNetwork.id()).forEach(virtualLink -> {
yoonseon214963b2016-11-21 15:41:07 -0800673 assertTrue("The virtual link should be active.",
674 virtualLink.state().equals(Link.State.ACTIVE));
Brian Stankefb61df42016-07-25 11:47:51 -0400675 });
676
677 virtualNetworkManagerStore.updateLink(link, link.tunnelId(), Link.State.INACTIVE);
678 virtualNetworkManagerStore.updateLink(link2, link2.tunnelId(), Link.State.INACTIVE);
679 providerService.topologyChanged(topologyProvider.getConnectPoints(topology));
680
681 // Validate that all links are active again.
682 manager.getVirtualLinks(virtualNetwork.id()).forEach(virtualLink -> {
yoonseon214963b2016-11-21 15:41:07 -0800683 assertTrue("The virtual link should be active.",
684 virtualLink.state().equals(Link.State.ACTIVE));
Brian Stankefb61df42016-07-25 11:47:51 -0400685 });
686 }
687
Brian Stanke11f6d532016-07-05 16:17:59 -0400688 /**
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500689 * Method to validate that the actual versus expected virtual network events were
690 * received correctly.
691 *
692 * @param types expected virtual network events.
693 */
694 private void validateEvents(Enum... types) {
695 TestTools.assertAfter(100, () -> {
696 int i = 0;
697 assertEquals("wrong events received", types.length, listener.events.size());
698 for (Event event : listener.events) {
699 assertEquals("incorrect event type", types[i], event.type());
700 i++;
701 }
702 listener.events.clear();
703 });
704 }
705
706 /**
707 * Test listener class to receive virtual network events.
708 */
709 private static class TestListener implements VirtualNetworkListener {
710
Brian Stanke7a81b532016-06-14 15:43:51 -0400711 private List<VirtualNetworkEvent> events = Lists.newArrayList();
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500712
713 @Override
714 public void event(VirtualNetworkEvent event) {
715 events.add(event);
716 }
717
718 }
719
Brian Stanke5df14472016-03-11 19:34:38 -0500720 /**
721 * Core service test class.
722 */
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500723 private class TestCoreService extends CoreServiceAdapter {
724
725 @Override
726 public IdGenerator getIdGenerator(String topic) {
727 return new IdGenerator() {
728 private AtomicLong counter = new AtomicLong(0);
729
730 @Override
731 public long getNewId() {
732 return counter.getAndIncrement();
733 }
734 };
735 }
736 }
737}