blob: a2062d946bf3fc07b48c0c276ead852db2ebe635 [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.VirtualLink;
32import org.onosproject.incubator.net.virtual.VirtualNetwork;
33import org.onosproject.incubator.store.virtual.impl.DistributedVirtualNetworkStore;
34import 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 Stanke11f6d532016-07-05 16:17:59 -040039import org.onosproject.net.intent.FakeIntentManager;
40import org.onosproject.net.intent.TestableIntentService;
Brian Stanke86914282016-05-25 15:36:50 -040041import org.onosproject.net.link.LinkService;
42import org.onosproject.store.service.TestStorageService;
43
44import java.util.Iterator;
45import java.util.concurrent.atomic.AtomicLong;
46
47import static org.junit.Assert.assertEquals;
48import static org.junit.Assert.assertNotEquals;
49
50/**
51 * Junit tests for VirtualNetworkLinkService.
52 */
yoonseon214963b2016-11-21 15:41:07 -080053public class VirtualNetworkLinkManagerTest extends TestDeviceParams {
Brian Stanke86914282016-05-25 15:36:50 -040054
55 private final String tenantIdValue1 = "TENANT_ID1";
Brian Stanke86914282016-05-25 15:36:50 -040056
57 private VirtualNetworkManager manager;
58 private DistributedVirtualNetworkStore virtualNetworkManagerStore;
59 private CoreService coreService;
Brian Stanke11f6d532016-07-05 16:17:59 -040060 private TestableIntentService intentService = new FakeIntentManager();
yoonseonc6a69272017-01-12 18:22:20 -080061 private TestServiceDirectory testDirectory;
Brian Stanke86914282016-05-25 15:36:50 -040062
63 @Before
64 public void setUp() throws Exception {
65 virtualNetworkManagerStore = new DistributedVirtualNetworkStore();
66
yoonseon214963b2016-11-21 15:41:07 -080067 coreService = new VirtualNetworkLinkManagerTest.TestCoreService();
yoonseonc6a69272017-01-12 18:22:20 -080068 TestUtils.setField(virtualNetworkManagerStore, "coreService", coreService);
Brian Stanke86914282016-05-25 15:36:50 -040069 TestUtils.setField(virtualNetworkManagerStore, "storageService", new TestStorageService());
70 virtualNetworkManagerStore.activate();
71
72 manager = new VirtualNetworkManager();
73 manager.store = virtualNetworkManagerStore;
Brian Stanke11f6d532016-07-05 16:17:59 -040074 manager.intentService = intentService;
yoonseon322c9c32016-12-07 16:47:02 -080075 manager.coreService = coreService;
Brian Stanke86914282016-05-25 15:36:50 -040076 NetTestTools.injectEventDispatcher(manager, new TestEventDispatcher());
yoonseonc6a69272017-01-12 18:22:20 -080077
78 testDirectory = new TestServiceDirectory();
79 TestUtils.setField(manager, "serviceDirectory", testDirectory);
80
Brian Stanke86914282016-05-25 15:36:50 -040081 manager.activate();
82 }
83
84 @After
85 public void tearDown() {
86 virtualNetworkManagerStore.deactivate();
87 manager.deactivate();
88 NetTestTools.injectEventDispatcher(manager, null);
89 }
90
91 /**
92 * Tests the getLinks(), getActiveLinks(), getLinkCount(), getLink(),
93 * getLinks(ConnectPoint), getDeviceLinks(), getDeviceEgressLinks(), getDeviceIngressLinks(),
94 * getEgressLinks(), getIngressLinks() methods.
95 */
96 @Test
97 public void testGetLinks() {
98
99 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
100 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
101 VirtualDevice srcVirtualDevice =
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400102 manager.createVirtualDevice(virtualNetwork.id(), DID1);
Brian Stanke86914282016-05-25 15:36:50 -0400103 VirtualDevice dstVirtualDevice =
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400104 manager.createVirtualDevice(virtualNetwork.id(), DID2);
Brian Stanke86914282016-05-25 15:36:50 -0400105 ConnectPoint src = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1));
Brian Stankefb61df42016-07-25 11:47:51 -0400106 manager.createVirtualPort(virtualNetwork.id(), src.deviceId(), src.port(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700107 new ConnectPoint(srcVirtualDevice.id(), src.port()));
Brian Stankefb61df42016-07-25 11:47:51 -0400108
Brian Stanke86914282016-05-25 15:36:50 -0400109 ConnectPoint dst = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(2));
Brian Stankefb61df42016-07-25 11:47:51 -0400110 manager.createVirtualPort(virtualNetwork.id(), dst.deviceId(), dst.port(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700111 new ConnectPoint(dstVirtualDevice.id(), dst.port()));
Brian Stankefb61df42016-07-25 11:47:51 -0400112
Brian Stanke86914282016-05-25 15:36:50 -0400113 VirtualLink link1 = manager.createVirtualLink(virtualNetwork.id(), src, dst);
114 VirtualLink link2 = manager.createVirtualLink(virtualNetwork.id(), dst, src);
115
116 LinkService linkService = manager.get(virtualNetwork.id(), LinkService.class);
117
118 // test the getLinks() method
119 Iterator<Link> it = linkService.getLinks().iterator();
120 assertEquals("The link set size did not match.", 2, Iterators.size(it));
121
Brian Stankefb61df42016-07-25 11:47:51 -0400122 // test the getActiveLinks() method where all links are INACTIVE
Brian Stanke86914282016-05-25 15:36:50 -0400123 Iterator<Link> it2 = linkService.getActiveLinks().iterator();
Brian Stankefb61df42016-07-25 11:47:51 -0400124 assertEquals("The link set size did not match.", 0, Iterators.size(it2));
Brian Stanke86914282016-05-25 15:36:50 -0400125
126 // test the getActiveLinks() method where one link is ACTIVE
Brian Stankefb61df42016-07-25 11:47:51 -0400127 virtualNetworkManagerStore.updateLink(link1, link1.tunnelId(), Link.State.ACTIVE);
Brian Stanke86914282016-05-25 15:36:50 -0400128 Iterator<Link> it3 = linkService.getActiveLinks().iterator();
129 assertEquals("The link set size did not match.", 1, Iterators.size(it3));
130
131 // test the getLinkCount() method
132 assertEquals("The link set size did not match.", 2, linkService.getLinkCount());
133
134 // test the getLink() method
135 assertEquals("The expect link did not match.", link1,
136 linkService.getLink(src, dst));
137 assertEquals("The expect link did not match.", link2,
138 linkService.getLink(dst, src));
139 assertNotEquals("The expect link should not have matched.", link1,
140 linkService.getLink(dst, src));
141
142 // test the getLinks(ConnectPoint) method
143 assertEquals("The link set size did not match.", 2, linkService.getLinks(src).size());
144 assertEquals("The link set size did not match.", 2, linkService.getLinks(dst).size());
145 ConnectPoint connectPoint = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(3));
146 assertEquals("The link set size did not match.", 0, linkService.getLinks(connectPoint).size());
147
148 // test the getDeviceLinks() method
149 assertEquals("The link set size did not match.", 2,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400150 linkService.getDeviceLinks(DID1).size());
Brian Stanke86914282016-05-25 15:36:50 -0400151 assertEquals("The link set size did not match.", 2,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400152 linkService.getDeviceLinks(DID2).size());
Brian Stanke86914282016-05-25 15:36:50 -0400153 assertEquals("The link set size did not match.", 0,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400154 linkService.getDeviceLinks(DID3).size());
Brian Stanke86914282016-05-25 15:36:50 -0400155
156 // test the getDeviceEgressLinks() method
157 assertEquals("The link set size did not match.", 1,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400158 linkService.getDeviceEgressLinks(DID1).size());
Brian Stanke86914282016-05-25 15:36:50 -0400159 assertEquals("The link set size did not match.", 1,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400160 linkService.getDeviceEgressLinks(DID2).size());
Brian Stanke86914282016-05-25 15:36:50 -0400161 assertEquals("The link set size did not match.", 0,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400162 linkService.getDeviceEgressLinks(DID3).size());
Brian Stanke86914282016-05-25 15:36:50 -0400163
164 // test the getDeviceIngressLinks() method
165 assertEquals("The link set size did not match.", 1,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400166 linkService.getDeviceIngressLinks(DID1).size());
Brian Stanke86914282016-05-25 15:36:50 -0400167 assertEquals("The link set size did not match.", 1,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400168 linkService.getDeviceIngressLinks(DID2).size());
Brian Stanke86914282016-05-25 15:36:50 -0400169 assertEquals("The link set size did not match.", 0,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400170 linkService.getDeviceIngressLinks(DID3).size());
Brian Stanke86914282016-05-25 15:36:50 -0400171
172 // test the getEgressLinks() method
173 assertEquals("The link set size did not match.", 1,
174 linkService.getEgressLinks(src).size());
175 assertEquals("The link set size did not match.", 1,
176 linkService.getEgressLinks(dst).size());
177 assertEquals("The link set size did not match.", 0,
178 linkService.getEgressLinks(connectPoint).size());
179
180 // test the getIngressLinks() method
181 assertEquals("The link set size did not match.", 1,
182 linkService.getIngressLinks(src).size());
183 assertEquals("The link set size did not match.", 1,
184 linkService.getIngressLinks(dst).size());
185 assertEquals("The link set size did not match.", 0,
186 linkService.getIngressLinks(connectPoint).size());
187 }
188
189 /**
190 * Tests the getLink() method using a null src connect point.
191 */
192 @Test(expected = NullPointerException.class)
193 public void testGetLinkByNullSrc() {
194
195 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
196 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
197 VirtualDevice srcVirtualDevice =
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400198 manager.createVirtualDevice(virtualNetwork.id(), DID1);
Brian Stanke86914282016-05-25 15:36:50 -0400199 VirtualDevice dstVirtualDevice =
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400200 manager.createVirtualDevice(virtualNetwork.id(), DID2);
Brian Stanke86914282016-05-25 15:36:50 -0400201 ConnectPoint src = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1));
202 ConnectPoint dst = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(2));
203 manager.createVirtualLink(virtualNetwork.id(), src, dst);
204 manager.createVirtualLink(virtualNetwork.id(), dst, src);
205
206 LinkService linkService = manager.get(virtualNetwork.id(), LinkService.class);
207
208 // test the getLink() method with a null src connect point.
209 linkService.getLink(null, dst);
210 }
211
212 /**
213 * Tests the getLink() method using a null dst connect point.
214 */
215 @Test(expected = NullPointerException.class)
216 public void testGetLinkByNullDst() {
217
218 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
219 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
220 VirtualDevice srcVirtualDevice =
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400221 manager.createVirtualDevice(virtualNetwork.id(), DID1);
Brian Stanke86914282016-05-25 15:36:50 -0400222 VirtualDevice dstVirtualDevice =
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400223 manager.createVirtualDevice(virtualNetwork.id(), DID2);
Brian Stanke86914282016-05-25 15:36:50 -0400224 ConnectPoint src = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1));
225 ConnectPoint dst = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(2));
226 manager.createVirtualLink(virtualNetwork.id(), src, dst);
227 manager.createVirtualLink(virtualNetwork.id(), dst, src);
228
229 LinkService linkService = manager.get(virtualNetwork.id(), LinkService.class);
230
231 // test the getLink() method with a null dst connect point.
232 linkService.getLink(src, null);
233 }
234
235 /**
236 * Tests querying for links using a null device identifier.
237 */
238 @Test(expected = NullPointerException.class)
239 public void testGetDeviceLinksByNullId() {
240 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
241 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
242 LinkService linkService = manager.get(virtualNetwork.id(), LinkService.class);
243
244 // test the getDeviceLinks() method with a null device identifier.
245 linkService.getDeviceLinks(null);
246 }
247
248 /**
249 * Tests querying for links using a null connect point.
250 */
251 @Test(expected = NullPointerException.class)
252 public void testGetLinksByNullId() {
253 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
254 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
255 LinkService linkService = manager.get(virtualNetwork.id(), LinkService.class);
256
257 // test the getLinks() method with a null connect point.
258 linkService.getLinks(null);
259 }
260
261 /**
262 * Tests querying for device egress links using a null device identifier.
263 */
264 @Test(expected = NullPointerException.class)
265 public void testGetDeviceEgressLinksByNullId() {
266 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
267 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
268 LinkService linkService = manager.get(virtualNetwork.id(), LinkService.class);
269
270 // test the getDeviceEgressLinks() method with a null device identifier.
271 linkService.getDeviceEgressLinks(null);
272 }
273
274 /**
275 * Tests querying for device ingress links using a null device identifier.
276 */
277 @Test(expected = NullPointerException.class)
278 public void testGetDeviceIngressLinksByNullId() {
279 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
280 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
281 LinkService linkService = manager.get(virtualNetwork.id(), LinkService.class);
282
283 // test the getDeviceIngressLinks() method with a null device identifier.
284 linkService.getDeviceIngressLinks(null);
285 }
286
287 /**
288 * Tests querying for egress links using a null connect point.
289 */
290 @Test(expected = NullPointerException.class)
291 public void testGetEgressLinksByNullId() {
292 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
293 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
294 LinkService linkService = manager.get(virtualNetwork.id(), LinkService.class);
295
296 // test the getEgressLinks() method with a null connect point.
297 linkService.getEgressLinks(null);
298 }
299
300 /**
301 * Tests querying for ingress links using a null connect point.
302 */
303 @Test(expected = NullPointerException.class)
304 public void testGetIngressLinksByNullId() {
305 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
306 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
307 LinkService linkService = manager.get(virtualNetwork.id(), LinkService.class);
308
309 // test the getIngressLinks() method with a null connect point.
310 linkService.getIngressLinks(null);
311 }
312
313 /**
314 * Core service test class.
315 */
316 private class TestCoreService extends CoreServiceAdapter {
317
318 @Override
319 public IdGenerator getIdGenerator(String topic) {
320 return new IdGenerator() {
321 private AtomicLong counter = new AtomicLong(0);
322
323 @Override
324 public long getNewId() {
325 return counter.getAndIncrement();
326 }
327 };
328 }
329 }
330}