blob: b682d05573a99ed0e43bb67e8a3ef00a399b557c [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;
Yoonseon Han6c603892016-09-01 11:52:21 -070033import org.onosproject.net.ConnectPoint;
Brian Stanke86914282016-05-25 15:36:50 -040034import org.onosproject.net.Device;
Brian Stanke86914282016-05-25 15:36:50 -040035import org.onosproject.net.MastershipRole;
36import org.onosproject.net.NetTestTools;
Brian Stanke86914282016-05-25 15:36:50 -040037import org.onosproject.net.PortNumber;
Brian Stanke8e9f8d12016-06-08 14:48:33 -040038import org.onosproject.net.TestDeviceParams;
Brian Stanke86914282016-05-25 15:36:50 -040039import org.onosproject.net.device.DeviceService;
Brian Stanke11f6d532016-07-05 16:17:59 -040040import org.onosproject.net.intent.FakeIntentManager;
41import org.onosproject.net.intent.TestableIntentService;
Brian Stanke86914282016-05-25 15:36:50 -040042import org.onosproject.store.service.TestStorageService;
43
44import java.util.Iterator;
45import java.util.concurrent.atomic.AtomicLong;
46
47import static org.junit.Assert.*;
48
49/**
50 * Junit tests for VirtualNetworkDeviceService.
51 */
Brian Stanke8e9f8d12016-06-08 14:48:33 -040052public class VirtualNetworkDeviceServiceTest extends TestDeviceParams {
Brian Stanke86914282016-05-25 15:36:50 -040053 private final String tenantIdValue1 = "TENANT_ID1";
Brian Stanke86914282016-05-25 15:36:50 -040054
55 private VirtualNetworkManager manager;
56 private DistributedVirtualNetworkStore virtualNetworkManagerStore;
57 private CoreService coreService;
Brian Stanke11f6d532016-07-05 16:17:59 -040058 private TestableIntentService intentService = new FakeIntentManager();
Brian Stanke86914282016-05-25 15:36:50 -040059
60 @Before
61 public void setUp() throws Exception {
62 virtualNetworkManagerStore = new DistributedVirtualNetworkStore();
63
64 coreService = new VirtualNetworkDeviceServiceTest.TestCoreService();
65 virtualNetworkManagerStore.setCoreService(coreService);
66 TestUtils.setField(coreService, "coreService", new VirtualNetworkDeviceServiceTest.TestCoreService());
67 TestUtils.setField(virtualNetworkManagerStore, "storageService", new TestStorageService());
68 virtualNetworkManagerStore.activate();
69
70 manager = new VirtualNetworkManager();
71 manager.store = virtualNetworkManagerStore;
Brian Stanke11f6d532016-07-05 16:17:59 -040072 manager.intentService = intentService;
Brian Stanke86914282016-05-25 15:36:50 -040073 NetTestTools.injectEventDispatcher(manager, new TestEventDispatcher());
74 manager.activate();
75 }
76
77 @After
78 public void tearDown() {
79 virtualNetworkManagerStore.deactivate();
80 manager.deactivate();
81 NetTestTools.injectEventDispatcher(manager, null);
82 }
83
84 /**
85 * Tests the getDevices(), getAvailableDevices(), getDeviceCount(), getDevice(), and isAvailable() methods.
86 */
87 @Test
88 public void testGetDevices() {
89 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
90 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stanke8e9f8d12016-06-08 14:48:33 -040091 VirtualDevice device1 = manager.createVirtualDevice(virtualNetwork.id(), DID1);
92 VirtualDevice device2 = manager.createVirtualDevice(virtualNetwork.id(), DID2);
Brian Stanke86914282016-05-25 15:36:50 -040093
94 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
95
96 // test the getDevices() method
97 Iterator<Device> it = deviceService.getDevices().iterator();
98 assertEquals("The device set size did not match.", 2, Iterators.size(it));
99
100 // test the getAvailableDevices() method
101 Iterator<Device> it2 = deviceService.getAvailableDevices().iterator();
102 assertEquals("The device set size did not match.", 2, Iterators.size(it2));
103
104 // test the getDeviceCount() method
105 assertEquals("The device set size did not match.", 2, deviceService.getDeviceCount());
106
107 // test the getDevice() method
108 assertEquals("The expect device did not match.", device1,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400109 deviceService.getDevice(DID1));
Brian Stanke86914282016-05-25 15:36:50 -0400110 assertNotEquals("The expect device should not have matched.", device1,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400111 deviceService.getDevice(DID2));
Brian Stanke86914282016-05-25 15:36:50 -0400112
113 // test the isAvailable() method
114 assertTrue("The expect device availability did not match.",
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400115 deviceService.isAvailable(DID1));
Brian Stanke86914282016-05-25 15:36:50 -0400116 assertFalse("The expect device availability did not match.",
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400117 deviceService.isAvailable(DID3));
Brian Stanke86914282016-05-25 15:36:50 -0400118 }
119
120 /**
121 * Tests querying for a device using a null device identifier.
122 */
123 @Test(expected = NullPointerException.class)
124 public void testGetDeviceByNullId() {
125 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
126 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
127 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
128
129 // test the getDevice() method with null device id value.
130 deviceService.getDevice(null);
131 }
132
133 /**
134 * Tests querying for a device using a null device type.
135 */
136 @Test(expected = NullPointerException.class)
137 public void testGetDeviceByNullType() {
138 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
139 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
140 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
141
142 // test the getDevices() method with null type value.
143 deviceService.getDevices(null);
144 }
145
146 /**
147 * Tests the isAvailable method using a null device identifier.
148 */
149 @Test(expected = NullPointerException.class)
150 public void testIsAvailableByNullId() {
151 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
152 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
153 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
154
155 // test the isAvailable() method with null device id value.
156 deviceService.isAvailable(null);
157 }
158
159 /**
160 * Tests querying for a device and available devices by device type.
161 */
162 @Test
163 public void testGetDeviceType() {
164 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
165 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400166 manager.createVirtualDevice(virtualNetwork.id(), DID1);
167 manager.createVirtualDevice(virtualNetwork.id(), DID2);
Brian Stanke86914282016-05-25 15:36:50 -0400168
169 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
170
171 // test the getDevices(Type) method.
172 Iterator<Device> it = deviceService.getDevices(Device.Type.VIRTUAL).iterator();
173 assertEquals("The device set size did not match.", 2, Iterators.size(it));
174 Iterator<Device> it2 = deviceService.getDevices(Device.Type.SWITCH).iterator();
175 assertEquals("The device set size did not match.", 0, Iterators.size(it2));
176
177 // test the getAvailableDevices(Type) method.
178 Iterator<Device> it3 = deviceService.getAvailableDevices(Device.Type.VIRTUAL).iterator();
179 assertEquals("The device set size did not match.", 2, Iterators.size(it3));
180 }
181
182 /**
183 * Tests querying the role of a device by null device identifier.
184 */
185 @Test(expected = NullPointerException.class)
186 public void testGetRoleByNullId() {
187 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
188 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
189 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
190
191 // test the getRole() method using a null device identifier
192 deviceService.getRole(null);
193 }
194
195 /**
196 * Tests querying the role of a device by device identifier.
197 */
198 @Test
199 public void testGetRole() {
200 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
201 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
202 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
203
204 // test the getRole() method
205 assertEquals("The expect device role did not match.", MastershipRole.MASTER,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400206 deviceService.getRole(DID1));
Brian Stanke86914282016-05-25 15:36:50 -0400207 }
208
209 /**
210 * Tests querying the ports of a device by null device identifier.
211 */
212 @Test(expected = NullPointerException.class)
213 public void testGetPortsByNullId() {
214 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
215 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
216 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
217
218 // test the getPorts() method using a null device identifier
219 deviceService.getPorts(null);
220 }
221
222 /**
223 * Tests querying the ports of a device by device identifier.
224 */
225 @Test
226 public void testGetPorts() {
227 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
228 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400229 VirtualDevice virtualDevice = manager.createVirtualDevice(virtualNetwork.id(), DID1);
230 manager.createVirtualDevice(virtualNetwork.id(), DID2);
Brian Stanke86914282016-05-25 15:36:50 -0400231
232 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
233
Yoonseon Han6c603892016-09-01 11:52:21 -0700234 ConnectPoint cp = new ConnectPoint(virtualDevice.id(), PortNumber.portNumber(1));
Brian Stanke86914282016-05-25 15:36:50 -0400235
Yoonseon Han6c603892016-09-01 11:52:21 -0700236 manager.createVirtualPort(virtualNetwork.id(), virtualDevice.id(), PortNumber.portNumber(1), cp);
237 manager.createVirtualPort(virtualNetwork.id(), virtualDevice.id(), PortNumber.portNumber(2), cp);
Brian Stanke86914282016-05-25 15:36:50 -0400238
239 // test the getPorts() method
240 assertEquals("The port set size did not match.", 2,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400241 deviceService.getPorts(DID1).size());
Brian Stanke86914282016-05-25 15:36:50 -0400242 assertEquals("The port set size did not match.", 0,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400243 deviceService.getPorts(DID2).size());
Brian Stanke86914282016-05-25 15:36:50 -0400244 }
245
246 /**
247 * Tests querying the port of a device by device identifier and port number.
248 */
249 @Test
250 public void testGetPort() {
251 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
252 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400253 VirtualDevice virtualDevice = manager.createVirtualDevice(virtualNetwork.id(), DID1);
254 manager.createVirtualDevice(virtualNetwork.id(), DID2);
Brian Stanke86914282016-05-25 15:36:50 -0400255
256 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
257
Yoonseon Han6c603892016-09-01 11:52:21 -0700258 ConnectPoint cp = new ConnectPoint(virtualDevice.id(), PortNumber.portNumber(1));
Brian Stanke86914282016-05-25 15:36:50 -0400259
260 VirtualPort virtualPort1 = manager.createVirtualPort(virtualNetwork.id(), virtualDevice.id(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700261 PortNumber.portNumber(1), cp);
262 manager.createVirtualPort(virtualNetwork.id(), virtualDevice.id(), PortNumber.portNumber(2), cp);
Brian Stanke86914282016-05-25 15:36:50 -0400263
264 // test the getPort() method
265 assertEquals("The port did not match as expected.", virtualPort1,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400266 deviceService.getPort(DID1, PortNumber.portNumber(1)));
Brian Stanke86914282016-05-25 15:36:50 -0400267 assertNotEquals("The port did not match as expected.", virtualPort1,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400268 deviceService.getPort(DID1, PortNumber.portNumber(3)));
Brian Stanke86914282016-05-25 15:36:50 -0400269 }
270
271 /**
272 * Tests querying the port statistics of a device by null device identifier.
273 */
274 @Test(expected = NullPointerException.class)
275 public void testGetPortsStatisticsByNullId() {
276 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
277 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
278 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
279
280 // test the getPortStatistics() method using a null device identifier
281 deviceService.getPortStatistics(null);
282 }
283
284 /**
285 * Tests querying the port statistics of a device by device identifier.
286 */
287 @Test
288 public void testGetPortStatistics() {
289 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
290 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400291 VirtualDevice virtualDevice = manager.createVirtualDevice(virtualNetwork.id(), DID1);
292 manager.createVirtualDevice(virtualNetwork.id(), DID2);
Brian Stanke86914282016-05-25 15:36:50 -0400293
294 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
295
296 // test the getPortStatistics() method
297 assertEquals("The port statistics set size did not match.", 0,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400298 deviceService.getPortStatistics(DID1).size());
Brian Stanke86914282016-05-25 15:36:50 -0400299 }
300
301 /**
302 * Tests querying the port delta statistics of a device by null device identifier.
303 */
304 @Test(expected = NullPointerException.class)
305 public void testGetPortsDeltaStatisticsByNullId() {
306 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
307 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
308 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
309
310 // test the getPortDeltaStatistics() method using a null device identifier
311 deviceService.getPortDeltaStatistics(null);
312 }
313
314 /**
315 * Tests querying the port delta statistics of a device by device identifier.
316 */
317 @Test
318 public void testGetPortDeltaStatistics() {
319 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
320 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400321 VirtualDevice virtualDevice = manager.createVirtualDevice(virtualNetwork.id(), DID1);
322 manager.createVirtualDevice(virtualNetwork.id(), DID2);
Brian Stanke86914282016-05-25 15:36:50 -0400323
324 DeviceService deviceService = manager.get(virtualNetwork.id(), DeviceService.class);
325
326 // test the getPortDeltaStatistics() method
327 assertEquals("The port delta statistics set size did not match.", 0,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400328 deviceService.getPortDeltaStatistics(DID1).size());
Brian Stanke86914282016-05-25 15:36:50 -0400329 }
330
331 /**
332 * Core service test class.
333 */
334 private class TestCoreService extends CoreServiceAdapter {
335
336 @Override
337 public IdGenerator getIdGenerator(String topic) {
338 return new IdGenerator() {
339 private AtomicLong counter = new AtomicLong(0);
340
341 @Override
342 public long getNewId() {
343 return counter.getAndIncrement();
344 }
345 };
346 }
347 }
348}