blob: 44099e386c4633f2ab2aa143d4cdf33d2f2ad6c1 [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;
yoonseonc6a69272017-01-12 18:22:20 -080024import org.onlab.osgi.TestServiceDirectory;
Brian Stanke86914282016-05-25 15:36:50 -040025import org.onosproject.common.event.impl.TestEventDispatcher;
26import org.onosproject.core.CoreService;
27import org.onosproject.core.CoreServiceAdapter;
28import org.onosproject.core.IdGenerator;
29import org.onosproject.incubator.net.virtual.TenantId;
30import org.onosproject.incubator.net.virtual.VirtualDevice;
31import org.onosproject.incubator.net.virtual.VirtualNetwork;
32import org.onosproject.incubator.net.virtual.VirtualPort;
33import org.onosproject.incubator.store.virtual.impl.DistributedVirtualNetworkStore;
Yoonseon Han6c603892016-09-01 11:52:21 -070034import org.onosproject.net.ConnectPoint;
Brian Stanke86914282016-05-25 15:36:50 -040035import org.onosproject.net.Device;
Brian Stanke86914282016-05-25 15:36:50 -040036import org.onosproject.net.MastershipRole;
37import org.onosproject.net.NetTestTools;
Brian Stanke86914282016-05-25 15:36:50 -040038import 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 */
yoonseon214963b2016-11-21 15:41:07 -080053public class VirtualNetworkDeviceManagerTest 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();
yoonseonc6a69272017-01-12 18:22:20 -080060 private TestServiceDirectory testDirectory;
Brian Stanke86914282016-05-25 15:36:50 -040061
62 @Before
63 public void setUp() throws Exception {
64 virtualNetworkManagerStore = new DistributedVirtualNetworkStore();
65
yoonseon214963b2016-11-21 15:41:07 -080066 coreService = new VirtualNetworkDeviceManagerTest.TestCoreService();
yoonseonc6a69272017-01-12 18:22:20 -080067 TestUtils.setField(virtualNetworkManagerStore, "coreService", coreService);
Brian Stanke86914282016-05-25 15:36:50 -040068 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;
yoonseon322c9c32016-12-07 16:47:02 -080074 manager.coreService = coreService;
Brian Stanke86914282016-05-25 15:36:50 -040075 NetTestTools.injectEventDispatcher(manager, new TestEventDispatcher());
yoonseonc6a69272017-01-12 18:22:20 -080076
77 testDirectory = new TestServiceDirectory();
78 TestUtils.setField(manager, "serviceDirectory", testDirectory);
79
Brian Stanke86914282016-05-25 15:36:50 -040080 manager.activate();
81 }
82
83 @After
84 public void tearDown() {
85 virtualNetworkManagerStore.deactivate();
86 manager.deactivate();
87 NetTestTools.injectEventDispatcher(manager, null);
88 }
89
90 /**
91 * Tests the getDevices(), getAvailableDevices(), getDeviceCount(), getDevice(), and isAvailable() methods.
92 */
93 @Test
94 public void testGetDevices() {
95 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
96 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stanke8e9f8d12016-06-08 14:48:33 -040097 VirtualDevice device1 = manager.createVirtualDevice(virtualNetwork.id(), DID1);
98 VirtualDevice device2 = manager.createVirtualDevice(virtualNetwork.id(), DID2);
Brian Stanke86914282016-05-25 15:36:50 -040099
100 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
101
102 // test the getDevices() method
103 Iterator<Device> it = deviceService.getDevices().iterator();
104 assertEquals("The device set size did not match.", 2, Iterators.size(it));
105
106 // test the getAvailableDevices() method
107 Iterator<Device> it2 = deviceService.getAvailableDevices().iterator();
108 assertEquals("The device set size did not match.", 2, Iterators.size(it2));
109
110 // test the getDeviceCount() method
111 assertEquals("The device set size did not match.", 2, deviceService.getDeviceCount());
112
113 // test the getDevice() method
114 assertEquals("The expect device did not match.", device1,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400115 deviceService.getDevice(DID1));
Brian Stanke86914282016-05-25 15:36:50 -0400116 assertNotEquals("The expect device should not have matched.", device1,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400117 deviceService.getDevice(DID2));
Brian Stanke86914282016-05-25 15:36:50 -0400118
119 // test the isAvailable() method
120 assertTrue("The expect device availability did not match.",
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400121 deviceService.isAvailable(DID1));
Brian Stanke86914282016-05-25 15:36:50 -0400122 assertFalse("The expect device availability did not match.",
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400123 deviceService.isAvailable(DID3));
Brian Stanke86914282016-05-25 15:36:50 -0400124 }
125
126 /**
127 * Tests querying for a device using a null device identifier.
128 */
129 @Test(expected = NullPointerException.class)
130 public void testGetDeviceByNullId() {
131 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
132 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
133 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
134
135 // test the getDevice() method with null device id value.
136 deviceService.getDevice(null);
137 }
138
139 /**
140 * Tests querying for a device using a null device type.
141 */
142 @Test(expected = NullPointerException.class)
143 public void testGetDeviceByNullType() {
144 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
145 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
146 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
147
148 // test the getDevices() method with null type value.
149 deviceService.getDevices(null);
150 }
151
152 /**
153 * Tests the isAvailable method using a null device identifier.
154 */
155 @Test(expected = NullPointerException.class)
156 public void testIsAvailableByNullId() {
157 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
158 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
159 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
160
161 // test the isAvailable() method with null device id value.
162 deviceService.isAvailable(null);
163 }
164
165 /**
166 * Tests querying for a device and available devices by device type.
167 */
168 @Test
169 public void testGetDeviceType() {
170 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
171 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400172 manager.createVirtualDevice(virtualNetwork.id(), DID1);
173 manager.createVirtualDevice(virtualNetwork.id(), DID2);
Brian Stanke86914282016-05-25 15:36:50 -0400174
175 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
176
177 // test the getDevices(Type) method.
178 Iterator<Device> it = deviceService.getDevices(Device.Type.VIRTUAL).iterator();
179 assertEquals("The device set size did not match.", 2, Iterators.size(it));
180 Iterator<Device> it2 = deviceService.getDevices(Device.Type.SWITCH).iterator();
181 assertEquals("The device set size did not match.", 0, Iterators.size(it2));
182
183 // test the getAvailableDevices(Type) method.
184 Iterator<Device> it3 = deviceService.getAvailableDevices(Device.Type.VIRTUAL).iterator();
185 assertEquals("The device set size did not match.", 2, Iterators.size(it3));
186 }
187
188 /**
189 * Tests querying the role of a device by null device identifier.
190 */
191 @Test(expected = NullPointerException.class)
192 public void testGetRoleByNullId() {
193 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
194 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
195 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
196
197 // test the getRole() method using a null device identifier
198 deviceService.getRole(null);
199 }
200
201 /**
202 * Tests querying the role of a device by device identifier.
203 */
204 @Test
205 public void testGetRole() {
206 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
207 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
208 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
209
210 // test the getRole() method
211 assertEquals("The expect device role did not match.", MastershipRole.MASTER,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400212 deviceService.getRole(DID1));
Brian Stanke86914282016-05-25 15:36:50 -0400213 }
214
215 /**
216 * Tests querying the ports of a device by null device identifier.
217 */
218 @Test(expected = NullPointerException.class)
219 public void testGetPortsByNullId() {
220 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
221 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
222 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
223
224 // test the getPorts() method using a null device identifier
225 deviceService.getPorts(null);
226 }
227
228 /**
229 * Tests querying the ports of a device by device identifier.
230 */
231 @Test
232 public void testGetPorts() {
233 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
234 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400235 VirtualDevice virtualDevice = manager.createVirtualDevice(virtualNetwork.id(), DID1);
236 manager.createVirtualDevice(virtualNetwork.id(), DID2);
Brian Stanke86914282016-05-25 15:36:50 -0400237
238 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
239
Yoonseon Han6c603892016-09-01 11:52:21 -0700240 ConnectPoint cp = new ConnectPoint(virtualDevice.id(), PortNumber.portNumber(1));
Brian Stanke86914282016-05-25 15:36:50 -0400241
Yoonseon Han6c603892016-09-01 11:52:21 -0700242 manager.createVirtualPort(virtualNetwork.id(), virtualDevice.id(), PortNumber.portNumber(1), cp);
243 manager.createVirtualPort(virtualNetwork.id(), virtualDevice.id(), PortNumber.portNumber(2), cp);
Brian Stanke86914282016-05-25 15:36:50 -0400244
245 // test the getPorts() method
246 assertEquals("The port set size did not match.", 2,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400247 deviceService.getPorts(DID1).size());
Brian Stanke86914282016-05-25 15:36:50 -0400248 assertEquals("The port set size did not match.", 0,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400249 deviceService.getPorts(DID2).size());
Brian Stanke86914282016-05-25 15:36:50 -0400250 }
251
252 /**
253 * Tests querying the port of a device by device identifier and port number.
254 */
255 @Test
256 public void testGetPort() {
257 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
258 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400259 VirtualDevice virtualDevice = manager.createVirtualDevice(virtualNetwork.id(), DID1);
260 manager.createVirtualDevice(virtualNetwork.id(), DID2);
Brian Stanke86914282016-05-25 15:36:50 -0400261
262 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
263
Yoonseon Han6c603892016-09-01 11:52:21 -0700264 ConnectPoint cp = new ConnectPoint(virtualDevice.id(), PortNumber.portNumber(1));
Brian Stanke86914282016-05-25 15:36:50 -0400265
266 VirtualPort virtualPort1 = manager.createVirtualPort(virtualNetwork.id(), virtualDevice.id(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700267 PortNumber.portNumber(1), cp);
268 manager.createVirtualPort(virtualNetwork.id(), virtualDevice.id(), PortNumber.portNumber(2), cp);
Brian Stanke86914282016-05-25 15:36:50 -0400269
270 // test the getPort() method
271 assertEquals("The port did not match as expected.", virtualPort1,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400272 deviceService.getPort(DID1, PortNumber.portNumber(1)));
Brian Stanke86914282016-05-25 15:36:50 -0400273 assertNotEquals("The port did not match as expected.", virtualPort1,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400274 deviceService.getPort(DID1, PortNumber.portNumber(3)));
Brian Stanke86914282016-05-25 15:36:50 -0400275 }
276
277 /**
278 * Tests querying the port statistics of a device by null device identifier.
279 */
280 @Test(expected = NullPointerException.class)
281 public void testGetPortsStatisticsByNullId() {
282 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
283 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
284 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
285
286 // test the getPortStatistics() method using a null device identifier
287 deviceService.getPortStatistics(null);
288 }
289
290 /**
291 * Tests querying the port statistics of a device by device identifier.
292 */
293 @Test
294 public void testGetPortStatistics() {
295 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
296 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400297 VirtualDevice virtualDevice = manager.createVirtualDevice(virtualNetwork.id(), DID1);
298 manager.createVirtualDevice(virtualNetwork.id(), DID2);
Brian Stanke86914282016-05-25 15:36:50 -0400299
300 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
301
302 // test the getPortStatistics() method
303 assertEquals("The port statistics set size did not match.", 0,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400304 deviceService.getPortStatistics(DID1).size());
Brian Stanke86914282016-05-25 15:36:50 -0400305 }
306
307 /**
308 * Tests querying the port delta statistics of a device by null device identifier.
309 */
310 @Test(expected = NullPointerException.class)
311 public void testGetPortsDeltaStatisticsByNullId() {
312 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
313 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
314 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
315
316 // test the getPortDeltaStatistics() method using a null device identifier
317 deviceService.getPortDeltaStatistics(null);
318 }
319
320 /**
321 * Tests querying the port delta statistics of a device by device identifier.
322 */
323 @Test
324 public void testGetPortDeltaStatistics() {
325 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
326 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400327 VirtualDevice virtualDevice = manager.createVirtualDevice(virtualNetwork.id(), DID1);
328 manager.createVirtualDevice(virtualNetwork.id(), DID2);
Brian Stanke86914282016-05-25 15:36:50 -0400329
330 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
331
332 // test the getPortDeltaStatistics() method
333 assertEquals("The port delta statistics set size did not match.", 0,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400334 deviceService.getPortDeltaStatistics(DID1).size());
Brian Stanke86914282016-05-25 15:36:50 -0400335 }
336
337 /**
338 * Core service test class.
339 */
340 private class TestCoreService extends CoreServiceAdapter {
341
342 @Override
343 public IdGenerator getIdGenerator(String topic) {
344 return new IdGenerator() {
345 private AtomicLong counter = new AtomicLong(0);
346
347 @Override
348 public long getNewId() {
349 return counter.getAndIncrement();
350 }
351 };
352 }
353 }
354}