blob: 2805f9e505c0790c2585d9eddce6246563a08079 [file] [log] [blame]
Brian Stanke86914282016-05-25 15:36:50 -04001/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2016-present Open Networking Foundation
Brian Stanke86914282016-05-25 15:36:50 -04003 *
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;
Thomas Vachuska52f2cd12018-11-08 21:20:04 -080029import org.onosproject.net.TenantId;
Brian Stanke86914282016-05-25 15:36:50 -040030import org.onosproject.incubator.net.virtual.VirtualDevice;
31import org.onosproject.incubator.net.virtual.VirtualLink;
32import org.onosproject.incubator.net.virtual.VirtualNetwork;
Thomas Vachuska52f2cd12018-11-08 21:20:04 -080033import org.onosproject.incubator.net.virtual.store.impl.DistributedVirtualNetworkStore;
Brian Stanke86914282016-05-25 15:36:50 -040034import org.onosproject.net.ConnectPoint;
Brian Stanke86914282016-05-25 15:36:50 -040035import org.onosproject.net.Link;
36import org.onosproject.net.NetTestTools;
37import 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.link.LinkService;
40import org.onosproject.store.service.TestStorageService;
41
42import java.util.Iterator;
43import java.util.concurrent.atomic.AtomicLong;
44
45import static org.junit.Assert.assertEquals;
46import static org.junit.Assert.assertNotEquals;
47
48/**
49 * Junit tests for VirtualNetworkLinkService.
50 */
yoonseon214963b2016-11-21 15:41:07 -080051public class VirtualNetworkLinkManagerTest extends TestDeviceParams {
Brian Stanke86914282016-05-25 15:36:50 -040052
53 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;
yoonseonc6a69272017-01-12 18:22:20 -080058 private TestServiceDirectory testDirectory;
Brian Stanke86914282016-05-25 15:36:50 -040059
60 @Before
61 public void setUp() throws Exception {
62 virtualNetworkManagerStore = new DistributedVirtualNetworkStore();
63
yoonseon214963b2016-11-21 15:41:07 -080064 coreService = new VirtualNetworkLinkManagerTest.TestCoreService();
yoonseonc6a69272017-01-12 18:22:20 -080065 TestUtils.setField(virtualNetworkManagerStore, "coreService", coreService);
Brian Stanke86914282016-05-25 15:36:50 -040066 TestUtils.setField(virtualNetworkManagerStore, "storageService", new TestStorageService());
67 virtualNetworkManagerStore.activate();
68
69 manager = new VirtualNetworkManager();
70 manager.store = virtualNetworkManagerStore;
yoonseon322c9c32016-12-07 16:47:02 -080071 manager.coreService = coreService;
Brian Stanke86914282016-05-25 15:36:50 -040072 NetTestTools.injectEventDispatcher(manager, new TestEventDispatcher());
yoonseonc6a69272017-01-12 18:22:20 -080073
74 testDirectory = new TestServiceDirectory();
75 TestUtils.setField(manager, "serviceDirectory", testDirectory);
76
Brian Stanke86914282016-05-25 15:36:50 -040077 manager.activate();
78 }
79
80 @After
81 public void tearDown() {
82 virtualNetworkManagerStore.deactivate();
83 manager.deactivate();
84 NetTestTools.injectEventDispatcher(manager, null);
85 }
86
87 /**
88 * Tests the getLinks(), getActiveLinks(), getLinkCount(), getLink(),
89 * getLinks(ConnectPoint), getDeviceLinks(), getDeviceEgressLinks(), getDeviceIngressLinks(),
90 * getEgressLinks(), getIngressLinks() methods.
91 */
92 @Test
93 public void testGetLinks() {
94
95 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
96 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
97 VirtualDevice srcVirtualDevice =
Brian Stanke8e9f8d12016-06-08 14:48:33 -040098 manager.createVirtualDevice(virtualNetwork.id(), DID1);
Brian Stanke86914282016-05-25 15:36:50 -040099 VirtualDevice dstVirtualDevice =
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400100 manager.createVirtualDevice(virtualNetwork.id(), DID2);
Brian Stanke86914282016-05-25 15:36:50 -0400101 ConnectPoint src = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1));
Brian Stankefb61df42016-07-25 11:47:51 -0400102 manager.createVirtualPort(virtualNetwork.id(), src.deviceId(), src.port(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700103 new ConnectPoint(srcVirtualDevice.id(), src.port()));
Brian Stankefb61df42016-07-25 11:47:51 -0400104
Brian Stanke86914282016-05-25 15:36:50 -0400105 ConnectPoint dst = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(2));
Brian Stankefb61df42016-07-25 11:47:51 -0400106 manager.createVirtualPort(virtualNetwork.id(), dst.deviceId(), dst.port(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700107 new ConnectPoint(dstVirtualDevice.id(), dst.port()));
Brian Stankefb61df42016-07-25 11:47:51 -0400108
Brian Stanke86914282016-05-25 15:36:50 -0400109 VirtualLink link1 = manager.createVirtualLink(virtualNetwork.id(), src, dst);
110 VirtualLink link2 = manager.createVirtualLink(virtualNetwork.id(), dst, src);
111
112 LinkService linkService = manager.get(virtualNetwork.id(), LinkService.class);
113
114 // test the getLinks() method
115 Iterator<Link> it = linkService.getLinks().iterator();
116 assertEquals("The link set size did not match.", 2, Iterators.size(it));
117
Brian Stankefb61df42016-07-25 11:47:51 -0400118 // test the getActiveLinks() method where all links are INACTIVE
Brian Stanke86914282016-05-25 15:36:50 -0400119 Iterator<Link> it2 = linkService.getActiveLinks().iterator();
Brian Stankefb61df42016-07-25 11:47:51 -0400120 assertEquals("The link set size did not match.", 0, Iterators.size(it2));
Brian Stanke86914282016-05-25 15:36:50 -0400121
122 // test the getActiveLinks() method where one link is ACTIVE
Brian Stankefb61df42016-07-25 11:47:51 -0400123 virtualNetworkManagerStore.updateLink(link1, link1.tunnelId(), Link.State.ACTIVE);
Brian Stanke86914282016-05-25 15:36:50 -0400124 Iterator<Link> it3 = linkService.getActiveLinks().iterator();
125 assertEquals("The link set size did not match.", 1, Iterators.size(it3));
126
127 // test the getLinkCount() method
128 assertEquals("The link set size did not match.", 2, linkService.getLinkCount());
129
130 // test the getLink() method
131 assertEquals("The expect link did not match.", link1,
132 linkService.getLink(src, dst));
133 assertEquals("The expect link did not match.", link2,
134 linkService.getLink(dst, src));
135 assertNotEquals("The expect link should not have matched.", link1,
136 linkService.getLink(dst, src));
137
138 // test the getLinks(ConnectPoint) method
139 assertEquals("The link set size did not match.", 2, linkService.getLinks(src).size());
140 assertEquals("The link set size did not match.", 2, linkService.getLinks(dst).size());
141 ConnectPoint connectPoint = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(3));
142 assertEquals("The link set size did not match.", 0, linkService.getLinks(connectPoint).size());
143
144 // test the getDeviceLinks() method
145 assertEquals("The link set size did not match.", 2,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400146 linkService.getDeviceLinks(DID1).size());
Brian Stanke86914282016-05-25 15:36:50 -0400147 assertEquals("The link set size did not match.", 2,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400148 linkService.getDeviceLinks(DID2).size());
Brian Stanke86914282016-05-25 15:36:50 -0400149 assertEquals("The link set size did not match.", 0,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400150 linkService.getDeviceLinks(DID3).size());
Brian Stanke86914282016-05-25 15:36:50 -0400151
152 // test the getDeviceEgressLinks() method
153 assertEquals("The link set size did not match.", 1,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400154 linkService.getDeviceEgressLinks(DID1).size());
Brian Stanke86914282016-05-25 15:36:50 -0400155 assertEquals("The link set size did not match.", 1,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400156 linkService.getDeviceEgressLinks(DID2).size());
Brian Stanke86914282016-05-25 15:36:50 -0400157 assertEquals("The link set size did not match.", 0,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400158 linkService.getDeviceEgressLinks(DID3).size());
Brian Stanke86914282016-05-25 15:36:50 -0400159
160 // test the getDeviceIngressLinks() method
161 assertEquals("The link set size did not match.", 1,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400162 linkService.getDeviceIngressLinks(DID1).size());
Brian Stanke86914282016-05-25 15:36:50 -0400163 assertEquals("The link set size did not match.", 1,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400164 linkService.getDeviceIngressLinks(DID2).size());
Brian Stanke86914282016-05-25 15:36:50 -0400165 assertEquals("The link set size did not match.", 0,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400166 linkService.getDeviceIngressLinks(DID3).size());
Brian Stanke86914282016-05-25 15:36:50 -0400167
168 // test the getEgressLinks() method
169 assertEquals("The link set size did not match.", 1,
170 linkService.getEgressLinks(src).size());
171 assertEquals("The link set size did not match.", 1,
172 linkService.getEgressLinks(dst).size());
173 assertEquals("The link set size did not match.", 0,
174 linkService.getEgressLinks(connectPoint).size());
175
176 // test the getIngressLinks() method
177 assertEquals("The link set size did not match.", 1,
178 linkService.getIngressLinks(src).size());
179 assertEquals("The link set size did not match.", 1,
180 linkService.getIngressLinks(dst).size());
181 assertEquals("The link set size did not match.", 0,
182 linkService.getIngressLinks(connectPoint).size());
183 }
184
185 /**
186 * Tests the getLink() method using a null src connect point.
187 */
188 @Test(expected = NullPointerException.class)
189 public void testGetLinkByNullSrc() {
190
191 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
192 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
193 VirtualDevice srcVirtualDevice =
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400194 manager.createVirtualDevice(virtualNetwork.id(), DID1);
Brian Stanke86914282016-05-25 15:36:50 -0400195 VirtualDevice dstVirtualDevice =
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400196 manager.createVirtualDevice(virtualNetwork.id(), DID2);
Brian Stanke86914282016-05-25 15:36:50 -0400197 ConnectPoint src = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1));
198 ConnectPoint dst = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(2));
199 manager.createVirtualLink(virtualNetwork.id(), src, dst);
200 manager.createVirtualLink(virtualNetwork.id(), dst, src);
201
202 LinkService linkService = manager.get(virtualNetwork.id(), LinkService.class);
203
204 // test the getLink() method with a null src connect point.
205 linkService.getLink(null, dst);
206 }
207
208 /**
209 * Tests the getLink() method using a null dst connect point.
210 */
211 @Test(expected = NullPointerException.class)
212 public void testGetLinkByNullDst() {
213
214 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
215 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
216 VirtualDevice srcVirtualDevice =
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400217 manager.createVirtualDevice(virtualNetwork.id(), DID1);
Brian Stanke86914282016-05-25 15:36:50 -0400218 VirtualDevice dstVirtualDevice =
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400219 manager.createVirtualDevice(virtualNetwork.id(), DID2);
Brian Stanke86914282016-05-25 15:36:50 -0400220 ConnectPoint src = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1));
221 ConnectPoint dst = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(2));
222 manager.createVirtualLink(virtualNetwork.id(), src, dst);
223 manager.createVirtualLink(virtualNetwork.id(), dst, src);
224
225 LinkService linkService = manager.get(virtualNetwork.id(), LinkService.class);
226
227 // test the getLink() method with a null dst connect point.
228 linkService.getLink(src, null);
229 }
230
231 /**
232 * Tests querying for links using a null device identifier.
233 */
234 @Test(expected = NullPointerException.class)
235 public void testGetDeviceLinksByNullId() {
236 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
237 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
238 LinkService linkService = manager.get(virtualNetwork.id(), LinkService.class);
239
240 // test the getDeviceLinks() method with a null device identifier.
241 linkService.getDeviceLinks(null);
242 }
243
244 /**
245 * Tests querying for links using a null connect point.
246 */
247 @Test(expected = NullPointerException.class)
248 public void testGetLinksByNullId() {
249 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
250 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
251 LinkService linkService = manager.get(virtualNetwork.id(), LinkService.class);
252
253 // test the getLinks() method with a null connect point.
254 linkService.getLinks(null);
255 }
256
257 /**
258 * Tests querying for device egress links using a null device identifier.
259 */
260 @Test(expected = NullPointerException.class)
261 public void testGetDeviceEgressLinksByNullId() {
262 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
263 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
264 LinkService linkService = manager.get(virtualNetwork.id(), LinkService.class);
265
266 // test the getDeviceEgressLinks() method with a null device identifier.
267 linkService.getDeviceEgressLinks(null);
268 }
269
270 /**
271 * Tests querying for device ingress links using a null device identifier.
272 */
273 @Test(expected = NullPointerException.class)
274 public void testGetDeviceIngressLinksByNullId() {
275 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
276 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
277 LinkService linkService = manager.get(virtualNetwork.id(), LinkService.class);
278
279 // test the getDeviceIngressLinks() method with a null device identifier.
280 linkService.getDeviceIngressLinks(null);
281 }
282
283 /**
284 * Tests querying for egress links using a null connect point.
285 */
286 @Test(expected = NullPointerException.class)
287 public void testGetEgressLinksByNullId() {
288 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
289 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
290 LinkService linkService = manager.get(virtualNetwork.id(), LinkService.class);
291
292 // test the getEgressLinks() method with a null connect point.
293 linkService.getEgressLinks(null);
294 }
295
296 /**
297 * Tests querying for ingress links using a null connect point.
298 */
299 @Test(expected = NullPointerException.class)
300 public void testGetIngressLinksByNullId() {
301 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
302 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
303 LinkService linkService = manager.get(virtualNetwork.id(), LinkService.class);
304
305 // test the getIngressLinks() method with a null connect point.
306 linkService.getIngressLinks(null);
307 }
308
309 /**
310 * Core service test class.
311 */
312 private class TestCoreService extends CoreServiceAdapter {
313
314 @Override
315 public IdGenerator getIdGenerator(String topic) {
316 return new IdGenerator() {
317 private AtomicLong counter = new AtomicLong(0);
318
319 @Override
320 public long getNewId() {
321 return counter.getAndIncrement();
322 }
323 };
324 }
325 }
326}