blob: d44d038ad67a098a1b1af049f1dacd2f12c99d76 [file] [log] [blame]
Brian Stanke86914282016-05-25 15:36:50 -04001/*
2 * Copyright 2016-present Open Networking Laboratory
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.onosproject.incubator.net.virtual.impl;
18
19import com.google.common.collect.Iterators;
20import org.junit.After;
21import org.junit.Before;
22import org.junit.Test;
23import org.onlab.junit.TestUtils;
24import org.onosproject.common.event.impl.TestEventDispatcher;
25import org.onosproject.core.CoreService;
26import org.onosproject.core.CoreServiceAdapter;
27import org.onosproject.core.IdGenerator;
28import org.onosproject.incubator.net.virtual.TenantId;
29import org.onosproject.incubator.net.virtual.VirtualDevice;
30import org.onosproject.incubator.net.virtual.VirtualNetwork;
31import org.onosproject.incubator.net.virtual.VirtualPort;
32import org.onosproject.incubator.store.virtual.impl.DistributedVirtualNetworkStore;
33import org.onosproject.net.DefaultPort;
34import org.onosproject.net.Device;
Brian Stanke86914282016-05-25 15:36:50 -040035import org.onosproject.net.MastershipRole;
36import org.onosproject.net.NetTestTools;
37import org.onosproject.net.Port;
38import org.onosproject.net.PortNumber;
Brian Stanke8e9f8d12016-06-08 14:48:33 -040039import org.onosproject.net.TestDeviceParams;
Brian Stanke86914282016-05-25 15:36:50 -040040import org.onosproject.net.device.DeviceService;
Brian Stanke11f6d532016-07-05 16:17:59 -040041import org.onosproject.net.intent.FakeIntentManager;
42import org.onosproject.net.intent.TestableIntentService;
Brian Stanke86914282016-05-25 15:36:50 -040043import org.onosproject.store.service.TestStorageService;
44
45import java.util.Iterator;
46import java.util.concurrent.atomic.AtomicLong;
47
48import static org.junit.Assert.*;
49
50/**
51 * Junit tests for VirtualNetworkDeviceService.
52 */
Brian Stanke8e9f8d12016-06-08 14:48:33 -040053public class VirtualNetworkDeviceServiceTest extends TestDeviceParams {
Brian Stanke86914282016-05-25 15:36:50 -040054 private final String tenantIdValue1 = "TENANT_ID1";
Brian Stanke86914282016-05-25 15:36:50 -040055
56 private VirtualNetworkManager manager;
57 private DistributedVirtualNetworkStore virtualNetworkManagerStore;
58 private CoreService coreService;
Brian Stanke11f6d532016-07-05 16:17:59 -040059 private TestableIntentService intentService = new FakeIntentManager();
Brian Stanke86914282016-05-25 15:36:50 -040060
61 @Before
62 public void setUp() throws Exception {
63 virtualNetworkManagerStore = new DistributedVirtualNetworkStore();
64
65 coreService = new VirtualNetworkDeviceServiceTest.TestCoreService();
66 virtualNetworkManagerStore.setCoreService(coreService);
67 TestUtils.setField(coreService, "coreService", new VirtualNetworkDeviceServiceTest.TestCoreService());
68 TestUtils.setField(virtualNetworkManagerStore, "storageService", new TestStorageService());
69 virtualNetworkManagerStore.activate();
70
71 manager = new VirtualNetworkManager();
72 manager.store = virtualNetworkManagerStore;
Brian Stanke11f6d532016-07-05 16:17:59 -040073 manager.intentService = intentService;
Brian Stanke86914282016-05-25 15:36:50 -040074 NetTestTools.injectEventDispatcher(manager, new TestEventDispatcher());
75 manager.activate();
76 }
77
78 @After
79 public void tearDown() {
80 virtualNetworkManagerStore.deactivate();
81 manager.deactivate();
82 NetTestTools.injectEventDispatcher(manager, null);
83 }
84
85 /**
86 * Tests the getDevices(), getAvailableDevices(), getDeviceCount(), getDevice(), and isAvailable() methods.
87 */
88 @Test
89 public void testGetDevices() {
90 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
91 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stanke8e9f8d12016-06-08 14:48:33 -040092 VirtualDevice device1 = manager.createVirtualDevice(virtualNetwork.id(), DID1);
93 VirtualDevice device2 = manager.createVirtualDevice(virtualNetwork.id(), DID2);
Brian Stanke86914282016-05-25 15:36:50 -040094
95 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
96
97 // test the getDevices() method
98 Iterator<Device> it = deviceService.getDevices().iterator();
99 assertEquals("The device set size did not match.", 2, Iterators.size(it));
100
101 // test the getAvailableDevices() method
102 Iterator<Device> it2 = deviceService.getAvailableDevices().iterator();
103 assertEquals("The device set size did not match.", 2, Iterators.size(it2));
104
105 // test the getDeviceCount() method
106 assertEquals("The device set size did not match.", 2, deviceService.getDeviceCount());
107
108 // test the getDevice() method
109 assertEquals("The expect device did not match.", device1,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400110 deviceService.getDevice(DID1));
Brian Stanke86914282016-05-25 15:36:50 -0400111 assertNotEquals("The expect device should not have matched.", device1,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400112 deviceService.getDevice(DID2));
Brian Stanke86914282016-05-25 15:36:50 -0400113
114 // test the isAvailable() method
115 assertTrue("The expect device availability did not match.",
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400116 deviceService.isAvailable(DID1));
Brian Stanke86914282016-05-25 15:36:50 -0400117 assertFalse("The expect device availability did not match.",
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400118 deviceService.isAvailable(DID3));
Brian Stanke86914282016-05-25 15:36:50 -0400119 }
120
121 /**
122 * Tests querying for a device using a null device identifier.
123 */
124 @Test(expected = NullPointerException.class)
125 public void testGetDeviceByNullId() {
126 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
127 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
128 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
129
130 // test the getDevice() method with null device id value.
131 deviceService.getDevice(null);
132 }
133
134 /**
135 * Tests querying for a device using a null device type.
136 */
137 @Test(expected = NullPointerException.class)
138 public void testGetDeviceByNullType() {
139 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
140 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
141 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
142
143 // test the getDevices() method with null type value.
144 deviceService.getDevices(null);
145 }
146
147 /**
148 * Tests the isAvailable method using a null device identifier.
149 */
150 @Test(expected = NullPointerException.class)
151 public void testIsAvailableByNullId() {
152 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
153 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
154 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
155
156 // test the isAvailable() method with null device id value.
157 deviceService.isAvailable(null);
158 }
159
160 /**
161 * Tests querying for a device and available devices by device type.
162 */
163 @Test
164 public void testGetDeviceType() {
165 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
166 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400167 manager.createVirtualDevice(virtualNetwork.id(), DID1);
168 manager.createVirtualDevice(virtualNetwork.id(), DID2);
Brian Stanke86914282016-05-25 15:36:50 -0400169
170 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
171
172 // test the getDevices(Type) method.
173 Iterator<Device> it = deviceService.getDevices(Device.Type.VIRTUAL).iterator();
174 assertEquals("The device set size did not match.", 2, Iterators.size(it));
175 Iterator<Device> it2 = deviceService.getDevices(Device.Type.SWITCH).iterator();
176 assertEquals("The device set size did not match.", 0, Iterators.size(it2));
177
178 // test the getAvailableDevices(Type) method.
179 Iterator<Device> it3 = deviceService.getAvailableDevices(Device.Type.VIRTUAL).iterator();
180 assertEquals("The device set size did not match.", 2, Iterators.size(it3));
181 }
182
183 /**
184 * Tests querying the role of a device by null device identifier.
185 */
186 @Test(expected = NullPointerException.class)
187 public void testGetRoleByNullId() {
188 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
189 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
190 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
191
192 // test the getRole() method using a null device identifier
193 deviceService.getRole(null);
194 }
195
196 /**
197 * Tests querying the role of a device by device identifier.
198 */
199 @Test
200 public void testGetRole() {
201 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
202 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
203 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
204
205 // test the getRole() method
206 assertEquals("The expect device role did not match.", MastershipRole.MASTER,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400207 deviceService.getRole(DID1));
Brian Stanke86914282016-05-25 15:36:50 -0400208 }
209
210 /**
211 * Tests querying the ports of a device by null device identifier.
212 */
213 @Test(expected = NullPointerException.class)
214 public void testGetPortsByNullId() {
215 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
216 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
217 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
218
219 // test the getPorts() method using a null device identifier
220 deviceService.getPorts(null);
221 }
222
223 /**
224 * Tests querying the ports of a device by device identifier.
225 */
226 @Test
227 public void testGetPorts() {
228 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
229 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400230 VirtualDevice virtualDevice = manager.createVirtualDevice(virtualNetwork.id(), DID1);
231 manager.createVirtualDevice(virtualNetwork.id(), DID2);
Brian Stanke86914282016-05-25 15:36:50 -0400232
233 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
234
235 Port port = new DefaultPort(virtualDevice, PortNumber.portNumber(1), true);
236
237 manager.createVirtualPort(virtualNetwork.id(), virtualDevice.id(), PortNumber.portNumber(1), port);
238 manager.createVirtualPort(virtualNetwork.id(), virtualDevice.id(), PortNumber.portNumber(2), port);
239
240 // test the getPorts() method
241 assertEquals("The port set size did not match.", 2,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400242 deviceService.getPorts(DID1).size());
Brian Stanke86914282016-05-25 15:36:50 -0400243 assertEquals("The port set size did not match.", 0,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400244 deviceService.getPorts(DID2).size());
Brian Stanke86914282016-05-25 15:36:50 -0400245 }
246
247 /**
248 * Tests querying the port of a device by device identifier and port number.
249 */
250 @Test
251 public void testGetPort() {
252 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
253 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400254 VirtualDevice virtualDevice = manager.createVirtualDevice(virtualNetwork.id(), DID1);
255 manager.createVirtualDevice(virtualNetwork.id(), DID2);
Brian Stanke86914282016-05-25 15:36:50 -0400256
257 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
258
259 Port port = new DefaultPort(virtualDevice, PortNumber.portNumber(1), true);
260
261 VirtualPort virtualPort1 = manager.createVirtualPort(virtualNetwork.id(), virtualDevice.id(),
262 PortNumber.portNumber(1), port);
263 manager.createVirtualPort(virtualNetwork.id(), virtualDevice.id(), PortNumber.portNumber(2), port);
264
265 // test the getPort() method
266 assertEquals("The port did not match as expected.", virtualPort1,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400267 deviceService.getPort(DID1, PortNumber.portNumber(1)));
Brian Stanke86914282016-05-25 15:36:50 -0400268 assertNotEquals("The port did not match as expected.", virtualPort1,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400269 deviceService.getPort(DID1, PortNumber.portNumber(3)));
Brian Stanke86914282016-05-25 15:36:50 -0400270 }
271
272 /**
273 * Tests querying the port statistics of a device by null device identifier.
274 */
275 @Test(expected = NullPointerException.class)
276 public void testGetPortsStatisticsByNullId() {
277 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
278 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
279 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
280
281 // test the getPortStatistics() method using a null device identifier
282 deviceService.getPortStatistics(null);
283 }
284
285 /**
286 * Tests querying the port statistics of a device by device identifier.
287 */
288 @Test
289 public void testGetPortStatistics() {
290 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
291 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400292 VirtualDevice virtualDevice = manager.createVirtualDevice(virtualNetwork.id(), DID1);
293 manager.createVirtualDevice(virtualNetwork.id(), DID2);
Brian Stanke86914282016-05-25 15:36:50 -0400294
295 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
296
297 // test the getPortStatistics() method
298 assertEquals("The port statistics set size did not match.", 0,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400299 deviceService.getPortStatistics(DID1).size());
Brian Stanke86914282016-05-25 15:36:50 -0400300 }
301
302 /**
303 * Tests querying the port delta statistics of a device by null device identifier.
304 */
305 @Test(expected = NullPointerException.class)
306 public void testGetPortsDeltaStatisticsByNullId() {
307 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
308 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
309 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
310
311 // test the getPortDeltaStatistics() method using a null device identifier
312 deviceService.getPortDeltaStatistics(null);
313 }
314
315 /**
316 * Tests querying the port delta statistics of a device by device identifier.
317 */
318 @Test
319 public void testGetPortDeltaStatistics() {
320 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
321 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400322 VirtualDevice virtualDevice = manager.createVirtualDevice(virtualNetwork.id(), DID1);
323 manager.createVirtualDevice(virtualNetwork.id(), DID2);
Brian Stanke86914282016-05-25 15:36:50 -0400324
325 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
326
327 // test the getPortDeltaStatistics() method
328 assertEquals("The port delta statistics set size did not match.", 0,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400329 deviceService.getPortDeltaStatistics(DID1).size());
Brian Stanke86914282016-05-25 15:36:50 -0400330 }
331
332 /**
333 * Core service test class.
334 */
335 private class TestCoreService extends CoreServiceAdapter {
336
337 @Override
338 public IdGenerator getIdGenerator(String topic) {
339 return new IdGenerator() {
340 private AtomicLong counter = new AtomicLong(0);
341
342 @Override
343 public long getNewId() {
344 return counter.getAndIncrement();
345 }
346 };
347 }
348 }
349}