blob: 283488190986ad6321bb4be97eb14febe77d31b9 [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;
25import org.onosproject.common.event.impl.TestEventDispatcher;
26import org.onosproject.core.CoreService;
27import org.onosproject.core.CoreServiceAdapter;
28import org.onosproject.core.IdGenerator;
29import org.onosproject.event.Event;
Brian Stanke11f6d532016-07-05 16:17:59 -040030import org.onosproject.incubator.net.tunnel.TunnelId;
Brian Stanke0e5c94e2016-03-08 11:20:04 -050031import org.onosproject.incubator.net.virtual.DefaultVirtualNetwork;
32import org.onosproject.incubator.net.virtual.NetworkId;
33import org.onosproject.incubator.net.virtual.TenantId;
34import org.onosproject.incubator.net.virtual.VirtualDevice;
Brian Stanke7a81b532016-06-14 15:43:51 -040035import org.onosproject.incubator.net.virtual.VirtualHost;
Brian Stanke0e5c94e2016-03-08 11:20:04 -050036import org.onosproject.incubator.net.virtual.VirtualLink;
37import org.onosproject.incubator.net.virtual.VirtualNetwork;
38import org.onosproject.incubator.net.virtual.VirtualNetworkEvent;
Brian Stanke11f6d532016-07-05 16:17:59 -040039import org.onosproject.incubator.net.virtual.VirtualNetworkIntent;
Brian Stanke0e5c94e2016-03-08 11:20:04 -050040import org.onosproject.incubator.net.virtual.VirtualNetworkListener;
41import org.onosproject.incubator.net.virtual.VirtualNetworkService;
42import org.onosproject.incubator.net.virtual.VirtualPort;
43import org.onosproject.incubator.store.virtual.impl.DistributedVirtualNetworkStore;
44import org.onosproject.net.ConnectPoint;
45import org.onosproject.net.DefaultPort;
46import org.onosproject.net.DeviceId;
47import org.onosproject.net.NetTestTools;
48import org.onosproject.net.Port;
49import org.onosproject.net.PortNumber;
Brian Stanke7a81b532016-06-14 15:43:51 -040050import org.onosproject.net.TestDeviceParams;
Brian Stanke11f6d532016-07-05 16:17:59 -040051import org.onosproject.net.intent.FakeIntentManager;
52import org.onosproject.net.intent.Intent;
53import org.onosproject.net.intent.IntentState;
54import org.onosproject.net.intent.Key;
55import org.onosproject.net.intent.MockIdGenerator;
56import org.onosproject.net.intent.TestableIntentService;
Brian Stanke0e5c94e2016-03-08 11:20:04 -050057import org.onosproject.store.service.TestStorageService;
58
59import java.util.Collection;
60import java.util.List;
61import java.util.Set;
62import java.util.concurrent.atomic.AtomicLong;
63
64import static org.junit.Assert.*;
Brian Stanke11f6d532016-07-05 16:17:59 -040065import static org.onosproject.net.NetTestTools.APP_ID;
Brian Stanke0e5c94e2016-03-08 11:20:04 -050066
67/**
68 * Junit tests for VirtualNetworkManager.
69 */
Brian Stanke7a81b532016-06-14 15:43:51 -040070public class VirtualNetworkManagerTest extends TestDeviceParams {
Brian Stanke86914282016-05-25 15:36:50 -040071 private final String tenantIdValue1 = "TENANT_ID1";
72 private final String tenantIdValue2 = "TENANT_ID2";
Brian Stanke0e5c94e2016-03-08 11:20:04 -050073
74 private VirtualNetworkManager manager;
75 private VirtualNetworkService virtualNetworkManagerService;
76 private DistributedVirtualNetworkStore virtualNetworkManagerStore;
77 private CoreService coreService;
Brian Stanke7a81b532016-06-14 15:43:51 -040078 private TestListener listener = new TestListener();
Brian Stanke11f6d532016-07-05 16:17:59 -040079 private TestableIntentService intentService = new FakeIntentManager();
80 private IdGenerator idGenerator = new MockIdGenerator();
Brian Stanke0e5c94e2016-03-08 11:20:04 -050081
82 @Before
83 public void setUp() throws Exception {
84 virtualNetworkManagerStore = new DistributedVirtualNetworkStore();
Brian Stanke11f6d532016-07-05 16:17:59 -040085 Intent.bindIdGenerator(idGenerator);
Brian Stanke0e5c94e2016-03-08 11:20:04 -050086
87 coreService = new TestCoreService();
88 virtualNetworkManagerStore.setCoreService(coreService);
89 TestUtils.setField(coreService, "coreService", new TestCoreService());
90 TestUtils.setField(virtualNetworkManagerStore, "storageService", new TestStorageService());
91 virtualNetworkManagerStore.activate();
92
93 manager = new VirtualNetworkManager();
94 manager.store = virtualNetworkManagerStore;
95 manager.addListener(listener);
Brian Stanke11f6d532016-07-05 16:17:59 -040096 manager.intentService = intentService;
Brian Stanke0e5c94e2016-03-08 11:20:04 -050097 NetTestTools.injectEventDispatcher(manager, new TestEventDispatcher());
98 manager.activate();
99 virtualNetworkManagerService = manager;
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500100 }
101
102 @After
103 public void tearDown() {
104 virtualNetworkManagerStore.deactivate();
105 manager.removeListener(listener);
106 manager.deactivate();
107 NetTestTools.injectEventDispatcher(manager, null);
Brian Stanke11f6d532016-07-05 16:17:59 -0400108 Intent.unbindIdGenerator(idGenerator);
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500109 }
110
111 /**
112 * Tests registering a null tenant id.
113 */
114 @Test(expected = NullPointerException.class)
115 public void testRegisterNullTenantId() {
116 manager.registerTenantId(null);
117 }
118
119 /**
120 * Tests registering/unregistering a tenant id.
121 */
122 @Test
123 public void testRegisterUnregisterTenantId() {
124 manager.unregisterTenantId(TenantId.tenantId(tenantIdValue1));
125 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
126 manager.registerTenantId(TenantId.tenantId(tenantIdValue2));
127 Collection<TenantId> tenantIdCollection = manager.getTenantIds();
128 assertEquals("The tenantId set size did not match.", 2, tenantIdCollection.size());
129
130 manager.unregisterTenantId(TenantId.tenantId(tenantIdValue1));
131 manager.unregisterTenantId(TenantId.tenantId(tenantIdValue2));
132 tenantIdCollection = manager.getTenantIds();
133 assertTrue("The tenantId set should be empty.", tenantIdCollection.isEmpty());
134
135 // Validate that the events were all received in the correct order.
136 validateEvents(VirtualNetworkEvent.Type.TENANT_UNREGISTERED, VirtualNetworkEvent.Type.TENANT_REGISTERED,
137 VirtualNetworkEvent.Type.TENANT_REGISTERED, VirtualNetworkEvent.Type.TENANT_UNREGISTERED,
138 VirtualNetworkEvent.Type.TENANT_UNREGISTERED);
139 }
140
141 /**
142 * Tests adding a null virtual network.
143 */
144 @Test(expected = NullPointerException.class)
145 public void testCreateNullVirtualNetwork() {
146 manager.createVirtualNetwork(null);
147 }
148
149 /**
150 * Tests add and remove of virtual networks.
151 */
152 @Test
153 public void testAddRemoveVirtualNetwork() {
154 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
155 manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
156 manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
157 Set<VirtualNetwork> virtualNetworks = manager.getVirtualNetworks(TenantId.tenantId(tenantIdValue1));
158 assertNotNull("The virtual network set should not be null", virtualNetworks);
159 assertEquals("The virtual network set size did not match.", 2, virtualNetworks.size());
160
Brian Stanke5df14472016-03-11 19:34:38 -0500161 int remaining = virtualNetworks.size();
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500162 for (VirtualNetwork virtualNetwork : virtualNetworks) {
163 manager.removeVirtualNetwork(virtualNetwork.id());
Brian Stanke5df14472016-03-11 19:34:38 -0500164 assertEquals("The expected virtual network size does not match",
165 --remaining, manager.getVirtualNetworks(TenantId.tenantId(tenantIdValue1)).size());
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500166 // attempt to remove the same virtual network again.
167 manager.removeVirtualNetwork(virtualNetwork.id());
Brian Stanke5df14472016-03-11 19:34:38 -0500168 assertEquals("The expected virtual network size does not match",
169 remaining, manager.getVirtualNetworks(TenantId.tenantId(tenantIdValue1)).size());
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500170 }
171 virtualNetworks = manager.getVirtualNetworks(TenantId.tenantId(tenantIdValue1));
172 assertTrue("The virtual network set should be empty.", virtualNetworks.isEmpty());
173
Brian Stanke5df14472016-03-11 19:34:38 -0500174 // Create/remove a virtual network.
175 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
176 manager.removeVirtualNetwork(virtualNetwork.id());
177
178 virtualNetworks = manager.getVirtualNetworks(TenantId.tenantId(tenantIdValue1));
179 assertTrue("The virtual network set should be empty.", virtualNetworks.isEmpty());
180
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500181 // Validate that the events were all received in the correct order.
182 validateEvents(VirtualNetworkEvent.Type.TENANT_REGISTERED, VirtualNetworkEvent.Type.NETWORK_ADDED,
183 VirtualNetworkEvent.Type.NETWORK_ADDED, VirtualNetworkEvent.Type.NETWORK_REMOVED,
Brian Stanke5df14472016-03-11 19:34:38 -0500184 VirtualNetworkEvent.Type.NETWORK_REMOVED, VirtualNetworkEvent.Type.NETWORK_ADDED,
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500185 VirtualNetworkEvent.Type.NETWORK_REMOVED);
186 }
187
188 /**
189 * Tests adding a null virtual device.
190 */
191 @Test(expected = NullPointerException.class)
192 public void testCreateNullVirtualDevice() {
193 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
194 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
195
196 manager.createVirtualDevice(virtualNetwork.id(), null);
197 }
198
199 /**
200 * Tests adding a virtual device where no virtual network exists.
201 */
202 @Test(expected = IllegalStateException.class)
203 public void testCreateVirtualDeviceWithNoNetwork() {
204 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
205 VirtualNetwork virtualNetwork = new DefaultVirtualNetwork(NetworkId.NONE, TenantId.tenantId(tenantIdValue1));
206
Brian Stanke7a81b532016-06-14 15:43:51 -0400207 manager.createVirtualDevice(virtualNetwork.id(), DID1);
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500208 }
209
210 /**
211 * Tests add and remove of virtual devices.
212 */
213 @Test
214 public void testAddRemoveVirtualDevice() {
215 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
216 VirtualNetwork virtualNetwork1 = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
217 VirtualNetwork virtualNetwork2 = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stanke7a81b532016-06-14 15:43:51 -0400218 manager.createVirtualDevice(virtualNetwork1.id(), DID1);
219 manager.createVirtualDevice(virtualNetwork2.id(), DID2);
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500220
221 Set<VirtualDevice> virtualDevices1 = manager.getVirtualDevices(virtualNetwork1.id());
222 assertNotNull("The virtual device set should not be null", virtualDevices1);
223 assertEquals("The virtual device set size did not match.", 1, virtualDevices1.size());
224
225 Set<VirtualDevice> virtualDevices2 = manager.getVirtualDevices(virtualNetwork2.id());
226 assertNotNull("The virtual device set should not be null", virtualDevices2);
227 assertEquals("The virtual device set size did not match.", 1, virtualDevices2.size());
228
229 for (VirtualDevice virtualDevice : virtualDevices1) {
230 manager.removeVirtualDevice(virtualNetwork1.id(), virtualDevice.id());
231 // attempt to remove the same virtual device again.
232 manager.removeVirtualDevice(virtualNetwork1.id(), virtualDevice.id());
233 }
234 virtualDevices1 = manager.getVirtualDevices(virtualNetwork1.id());
235 assertTrue("The virtual device set should be empty.", virtualDevices1.isEmpty());
236
Brian Stanke5df14472016-03-11 19:34:38 -0500237 // Add/remove the virtual device again.
Brian Stanke7a81b532016-06-14 15:43:51 -0400238 VirtualDevice virtualDevice = manager.createVirtualDevice(virtualNetwork1.id(), DID1);
Brian Stanke5df14472016-03-11 19:34:38 -0500239 manager.removeVirtualDevice(virtualDevice.networkId(), virtualDevice.id());
240 virtualDevices1 = manager.getVirtualDevices(virtualNetwork1.id());
241 assertTrue("The virtual device set should be empty.", virtualDevices1.isEmpty());
242
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500243 // Validate that the events were all received in the correct order.
244 validateEvents(VirtualNetworkEvent.Type.TENANT_REGISTERED, VirtualNetworkEvent.Type.NETWORK_ADDED,
245 VirtualNetworkEvent.Type.NETWORK_ADDED);
246 }
247
248 /**
Brian Stanke7a81b532016-06-14 15:43:51 -0400249 * Tests adding a null virtual host.
250 */
251 @Test(expected = NullPointerException.class)
252 public void testCreateNullVirtualHost() {
253 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
254 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
255
256 manager.createVirtualHost(virtualNetwork.id(), null, null, null, null, null);
257 }
258
259 /**
260 * Tests adding a virtual host where no virtual network exists.
261 */
262 @Test(expected = IllegalStateException.class)
263 public void testCreateVirtualHostWithNoNetwork() {
264 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
265 VirtualNetwork virtualNetwork = new DefaultVirtualNetwork(NetworkId.NONE, TenantId.tenantId(tenantIdValue1));
266
267 manager.createVirtualHost(virtualNetwork.id(), HID1, null, null, null, null);
268 }
269
270 /**
271 * Tests add and remove of virtual hosts.
272 */
273 @Test
274 public void testAddRemoveVirtualHost() {
275 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
276 VirtualNetwork virtualNetwork1 = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
277 VirtualNetwork virtualNetwork2 = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
278 manager.createVirtualHost(virtualNetwork1.id(), HID1, MAC1, VLAN1, LOC1, IPSET1);
279 manager.createVirtualHost(virtualNetwork2.id(), HID2, MAC2, VLAN2, LOC2, IPSET2);
280
281 Set<VirtualHost> virtualHosts1 = manager.getVirtualHosts(virtualNetwork1.id());
282 assertNotNull("The virtual host set should not be null", virtualHosts1);
283 assertEquals("The virtual host set size did not match.", 1, virtualHosts1.size());
284
285 Set<VirtualHost> virtualHosts2 = manager.getVirtualHosts(virtualNetwork2.id());
286 assertNotNull("The virtual host set should not be null", virtualHosts2);
287 assertEquals("The virtual host set size did not match.", 1, virtualHosts2.size());
288
289 for (VirtualHost virtualHost : virtualHosts1) {
290 manager.removeVirtualHost(virtualNetwork1.id(), virtualHost.id());
291 // attempt to remove the same virtual host again.
292 manager.removeVirtualHost(virtualNetwork1.id(), virtualHost.id());
293 }
294 virtualHosts1 = manager.getVirtualHosts(virtualNetwork1.id());
295 assertTrue("The virtual host set should be empty.", virtualHosts1.isEmpty());
296
297 // Add/remove the virtual host again.
298 VirtualHost virtualHost = manager.createVirtualHost(virtualNetwork1.id(), HID1, MAC1, VLAN1, LOC1, IPSET1);
299 manager.removeVirtualHost(virtualHost.networkId(), virtualHost.id());
300 virtualHosts1 = manager.getVirtualHosts(virtualNetwork1.id());
301 assertTrue("The virtual host set should be empty.", virtualHosts1.isEmpty());
302 }
303
304 /**
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500305 * Tests add and remove of virtual links.
306 */
307 @Test
308 public void testAddRemoveVirtualLink() {
309 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
310 VirtualNetwork virtualNetwork1 = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
311 VirtualDevice srcVirtualDevice =
Brian Stanke7a81b532016-06-14 15:43:51 -0400312 manager.createVirtualDevice(virtualNetwork1.id(), DID1);
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500313 VirtualDevice dstVirtualDevice =
Brian Stanke7a81b532016-06-14 15:43:51 -0400314 manager.createVirtualDevice(virtualNetwork1.id(), DID2);
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500315 ConnectPoint src = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1));
316 ConnectPoint dst = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(2));
Brian Stanke9a108972016-04-11 15:25:17 -0400317 manager.createVirtualLink(virtualNetwork1.id(), src, dst);
318 manager.createVirtualLink(virtualNetwork1.id(), dst, src);
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500319
320 Set<VirtualLink> virtualLinks = manager.getVirtualLinks(virtualNetwork1.id());
321 assertNotNull("The virtual link set should not be null", virtualLinks);
322 assertEquals("The virtual link set size did not match.", 2, virtualLinks.size());
323
324 for (VirtualLink virtualLink : virtualLinks) {
325 manager.removeVirtualLink(virtualLink.networkId(), virtualLink.src(), virtualLink.dst());
326 // attempt to remove the same virtual link again.
327 manager.removeVirtualLink(virtualLink.networkId(), virtualLink.src(), virtualLink.dst());
328 }
329 virtualLinks = manager.getVirtualLinks(virtualNetwork1.id());
330 assertTrue("The virtual link set should be empty.", virtualLinks.isEmpty());
Brian Stanke5df14472016-03-11 19:34:38 -0500331
332 // Add/remove the virtual link again.
Brian Stanke9a108972016-04-11 15:25:17 -0400333 VirtualLink virtualLink = manager.createVirtualLink(virtualNetwork1.id(), src, dst);
Brian Stanke5df14472016-03-11 19:34:38 -0500334 manager.removeVirtualLink(virtualLink.networkId(), virtualLink.src(), virtualLink.dst());
335 virtualLinks = manager.getVirtualLinks(virtualNetwork1.id());
336 assertTrue("The virtual link set should be empty.", virtualLinks.isEmpty());
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500337 }
338
339 /**
Brian Stanke9a108972016-04-11 15:25:17 -0400340 * Tests adding the same virtual link twice.
341 */
342 @Test(expected = IllegalStateException.class)
343 public void testAddSameVirtualLink() {
344 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
345 VirtualNetwork virtualNetwork1 = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
346 VirtualDevice srcVirtualDevice =
Brian Stanke7a81b532016-06-14 15:43:51 -0400347 manager.createVirtualDevice(virtualNetwork1.id(), DID1);
Brian Stanke9a108972016-04-11 15:25:17 -0400348 VirtualDevice dstVirtualDevice =
Brian Stanke7a81b532016-06-14 15:43:51 -0400349 manager.createVirtualDevice(virtualNetwork1.id(), DID2);
Brian Stanke9a108972016-04-11 15:25:17 -0400350 ConnectPoint src = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1));
351 ConnectPoint dst = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(2));
352 manager.createVirtualLink(virtualNetwork1.id(), src, dst);
353 manager.createVirtualLink(virtualNetwork1.id(), src, dst);
354 }
355
356 /**
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500357 * Tests add and remove of virtual ports.
358 */
359 @Test
360 public void testAddRemoveVirtualPort() {
361 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
362 VirtualNetwork virtualNetwork1 = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stanke5df14472016-03-11 19:34:38 -0500363 VirtualDevice virtualDevice =
Brian Stanke7a81b532016-06-14 15:43:51 -0400364 manager.createVirtualDevice(virtualNetwork1.id(), DID1);
Brian Stanke5df14472016-03-11 19:34:38 -0500365 Port port = new DefaultPort(virtualDevice, PortNumber.portNumber(1), true);
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500366
Brian Stanke5df14472016-03-11 19:34:38 -0500367 manager.createVirtualPort(virtualNetwork1.id(), virtualDevice.id(), PortNumber.portNumber(1), port);
368 manager.createVirtualPort(virtualNetwork1.id(), virtualDevice.id(), PortNumber.portNumber(2), port);
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500369
Brian Stanke5df14472016-03-11 19:34:38 -0500370 Set<VirtualPort> virtualPorts = manager.getVirtualPorts(virtualNetwork1.id(), virtualDevice.id());
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500371 assertNotNull("The virtual port set should not be null", virtualPorts);
372 assertEquals("The virtual port set size did not match.", 2, virtualPorts.size());
373
Brian Stanke5df14472016-03-11 19:34:38 -0500374
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500375 for (VirtualPort virtualPort : virtualPorts) {
376 manager.removeVirtualPort(virtualNetwork1.id(),
377 (DeviceId) virtualPort.element().id(), virtualPort.number());
378 // attempt to remove the same virtual port again.
379 manager.removeVirtualPort(virtualNetwork1.id(),
380 (DeviceId) virtualPort.element().id(), virtualPort.number());
381 }
Brian Stanke5df14472016-03-11 19:34:38 -0500382 virtualPorts = manager.getVirtualPorts(virtualNetwork1.id(), virtualDevice.id());
383 assertTrue("The virtual port set should be empty.", virtualPorts.isEmpty());
384
385 // Add/remove the virtual port again.
386 VirtualPort virtualPort = manager.createVirtualPort(virtualNetwork1.id(), virtualDevice.id(),
387 PortNumber.portNumber(1), port);
388 manager.removeVirtualPort(virtualNetwork1.id(), (DeviceId) virtualPort.element().id(), virtualPort.number());
389 virtualPorts = manager.getVirtualPorts(virtualNetwork1.id(), virtualDevice.id());
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500390 assertTrue("The virtual port set should be empty.", virtualPorts.isEmpty());
391 }
392
393 /**
Brian Stanke11f6d532016-07-05 16:17:59 -0400394 * Tests the addOrUpdateIntent() method in the store with a null intent.
395 */
396 @Test(expected = NullPointerException.class)
397 public void testAddOrUpdateNullIntent() {
398 manager.store.addOrUpdateIntent(null, null);
399 }
400
401 /**
402 * Tests the removeIntent() method in the store with a null intent key.
403 */
404 @Test(expected = NullPointerException.class)
405 public void testRemoveNullIntentKey() {
406 manager.store.removeIntent(null);
407 }
408
409 /**
410 * Tests the addOrUpdateIntent(), getIntents(), getIntent(), removeIntent() methods with the store.
411 */
412 @Test
413 public void testAddOrUpdateIntent() {
414 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
415 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
416 ConnectPoint cp1 = new ConnectPoint(DID1, P1);
417 ConnectPoint cp2 = new ConnectPoint(DID2, P1);
418
419 VirtualNetworkIntent virtualIntent = VirtualNetworkIntent.builder()
420 .networkId(virtualNetwork.id())
421 .key(Key.of("Test", APP_ID))
422 .appId(APP_ID)
423 .ingressPoint(cp1)
424 .egressPoint(cp2)
425 .build();
426
427 // Add the intent to the store.
428 manager.store.addOrUpdateIntent(virtualIntent, IntentState.INSTALL_REQ);
429 assertEquals("The intent size should match.", 1, manager.store.getIntents().size());
430 assertNotNull("The intent should not be null.", manager.store.getIntent(virtualIntent.key()));
431
432 // remove the intent from the store.
433 manager.store.removeIntent(virtualIntent.key());
434 assertTrue("The intents should be empty.", manager.store.getIntents().isEmpty());
435 assertNull("The intent should be null.", manager.store.getIntent(virtualIntent.key()));
436 }
437
438 /**
439 * Tests the addTunnelId() method in the store with a null intent.
440 */
441 @Test(expected = NullPointerException.class)
442 public void testAddTunnelIdNullIntent() {
443 manager.store.addTunnelId(null, null);
444 }
445
446 /**
447 * Tests the removeTunnelId() method in the store with a null intent.
448 */
449 @Test(expected = NullPointerException.class)
450 public void testRemoveTunnelIdNullIntent() {
451 manager.store.removeTunnelId(null, null);
452 }
453
454 /**
455 * Tests the addTunnelId, getTunnelIds(), removeTunnelId() methods with the store.
456 */
457 @Test
458 public void testAddTunnelId() {
459 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
460 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
461 ConnectPoint cp1 = new ConnectPoint(DID1, P1);
462 ConnectPoint cp2 = new ConnectPoint(DID2, P1);
463
464 VirtualNetworkIntent virtualIntent = VirtualNetworkIntent.builder()
465 .networkId(virtualNetwork.id())
466 .key(Key.of("Test", APP_ID))
467 .appId(APP_ID)
468 .ingressPoint(cp1)
469 .egressPoint(cp2)
470 .build();
471
472 TunnelId tunnelId = TunnelId.valueOf("virtual tunnel");
473 // Add the intent to tunnelID mapping to the store.
474 manager.store.addTunnelId(virtualIntent, tunnelId);
475 assertEquals("The tunnels size should match.", 1, manager.store.getTunnelIds(virtualIntent).size());
476
477 // Remove the intent to tunnelID mapping from the store.
478 manager.store.removeTunnelId(virtualIntent, tunnelId);
479 assertTrue("The tunnels should be empty.", manager.store.getTunnelIds(virtualIntent).isEmpty());
480 }
481
482 /**
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500483 * Method to validate that the actual versus expected virtual network events were
484 * received correctly.
485 *
486 * @param types expected virtual network events.
487 */
488 private void validateEvents(Enum... types) {
489 TestTools.assertAfter(100, () -> {
490 int i = 0;
491 assertEquals("wrong events received", types.length, listener.events.size());
492 for (Event event : listener.events) {
493 assertEquals("incorrect event type", types[i], event.type());
494 i++;
495 }
496 listener.events.clear();
497 });
498 }
499
500 /**
501 * Test listener class to receive virtual network events.
502 */
503 private static class TestListener implements VirtualNetworkListener {
504
Brian Stanke7a81b532016-06-14 15:43:51 -0400505 private List<VirtualNetworkEvent> events = Lists.newArrayList();
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500506
507 @Override
508 public void event(VirtualNetworkEvent event) {
509 events.add(event);
510 }
511
512 }
513
Brian Stanke5df14472016-03-11 19:34:38 -0500514 /**
515 * Core service test class.
516 */
Brian Stanke0e5c94e2016-03-08 11:20:04 -0500517 private class TestCoreService extends CoreServiceAdapter {
518
519 @Override
520 public IdGenerator getIdGenerator(String topic) {
521 return new IdGenerator() {
522 private AtomicLong counter = new AtomicLong(0);
523
524 @Override
525 public long getNewId() {
526 return counter.getAndIncrement();
527 }
528 };
529 }
530 }
531}