blob: 70f1c1b6e0c642da1bc62e889a06f10a0e776223 [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;
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 getLinks(), getActiveLinks(), getLinkCount(), getLink(),
92 * getLinks(ConnectPoint), getDeviceLinks(), getDeviceEgressLinks(), getDeviceIngressLinks(),
93 * getEgressLinks(), getIngressLinks() methods.
94 */
95 @Test
96 public void testGetLinks() {
97
98 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
99 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
100 VirtualDevice srcVirtualDevice =
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400101 manager.createVirtualDevice(virtualNetwork.id(), DID1);
Brian Stanke86914282016-05-25 15:36:50 -0400102 VirtualDevice dstVirtualDevice =
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400103 manager.createVirtualDevice(virtualNetwork.id(), DID2);
Brian Stanke86914282016-05-25 15:36:50 -0400104 ConnectPoint src = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1));
Brian Stankefb61df42016-07-25 11:47:51 -0400105 manager.createVirtualPort(virtualNetwork.id(), src.deviceId(), src.port(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700106 new ConnectPoint(srcVirtualDevice.id(), src.port()));
Brian Stankefb61df42016-07-25 11:47:51 -0400107
Brian Stanke86914282016-05-25 15:36:50 -0400108 ConnectPoint dst = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(2));
Brian Stankefb61df42016-07-25 11:47:51 -0400109 manager.createVirtualPort(virtualNetwork.id(), dst.deviceId(), dst.port(),
Yoonseon Han6c603892016-09-01 11:52:21 -0700110 new ConnectPoint(dstVirtualDevice.id(), dst.port()));
Brian Stankefb61df42016-07-25 11:47:51 -0400111
Brian Stanke86914282016-05-25 15:36:50 -0400112 VirtualLink link1 = manager.createVirtualLink(virtualNetwork.id(), src, dst);
113 VirtualLink link2 = manager.createVirtualLink(virtualNetwork.id(), dst, src);
114
115 LinkService linkService = manager.get(virtualNetwork.id(), LinkService.class);
116
117 // test the getLinks() method
118 Iterator<Link> it = linkService.getLinks().iterator();
119 assertEquals("The link set size did not match.", 2, Iterators.size(it));
120
Brian Stankefb61df42016-07-25 11:47:51 -0400121 // test the getActiveLinks() method where all links are INACTIVE
Brian Stanke86914282016-05-25 15:36:50 -0400122 Iterator<Link> it2 = linkService.getActiveLinks().iterator();
Brian Stankefb61df42016-07-25 11:47:51 -0400123 assertEquals("The link set size did not match.", 0, Iterators.size(it2));
Brian Stanke86914282016-05-25 15:36:50 -0400124
125 // test the getActiveLinks() method where one link is ACTIVE
Brian Stankefb61df42016-07-25 11:47:51 -0400126 virtualNetworkManagerStore.updateLink(link1, link1.tunnelId(), Link.State.ACTIVE);
Brian Stanke86914282016-05-25 15:36:50 -0400127 Iterator<Link> it3 = linkService.getActiveLinks().iterator();
128 assertEquals("The link set size did not match.", 1, Iterators.size(it3));
129
130 // test the getLinkCount() method
131 assertEquals("The link set size did not match.", 2, linkService.getLinkCount());
132
133 // test the getLink() method
134 assertEquals("The expect link did not match.", link1,
135 linkService.getLink(src, dst));
136 assertEquals("The expect link did not match.", link2,
137 linkService.getLink(dst, src));
138 assertNotEquals("The expect link should not have matched.", link1,
139 linkService.getLink(dst, src));
140
141 // test the getLinks(ConnectPoint) method
142 assertEquals("The link set size did not match.", 2, linkService.getLinks(src).size());
143 assertEquals("The link set size did not match.", 2, linkService.getLinks(dst).size());
144 ConnectPoint connectPoint = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(3));
145 assertEquals("The link set size did not match.", 0, linkService.getLinks(connectPoint).size());
146
147 // test the getDeviceLinks() method
148 assertEquals("The link set size did not match.", 2,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400149 linkService.getDeviceLinks(DID1).size());
Brian Stanke86914282016-05-25 15:36:50 -0400150 assertEquals("The link set size did not match.", 2,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400151 linkService.getDeviceLinks(DID2).size());
Brian Stanke86914282016-05-25 15:36:50 -0400152 assertEquals("The link set size did not match.", 0,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400153 linkService.getDeviceLinks(DID3).size());
Brian Stanke86914282016-05-25 15:36:50 -0400154
155 // test the getDeviceEgressLinks() method
156 assertEquals("The link set size did not match.", 1,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400157 linkService.getDeviceEgressLinks(DID1).size());
Brian Stanke86914282016-05-25 15:36:50 -0400158 assertEquals("The link set size did not match.", 1,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400159 linkService.getDeviceEgressLinks(DID2).size());
Brian Stanke86914282016-05-25 15:36:50 -0400160 assertEquals("The link set size did not match.", 0,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400161 linkService.getDeviceEgressLinks(DID3).size());
Brian Stanke86914282016-05-25 15:36:50 -0400162
163 // test the getDeviceIngressLinks() method
164 assertEquals("The link set size did not match.", 1,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400165 linkService.getDeviceIngressLinks(DID1).size());
Brian Stanke86914282016-05-25 15:36:50 -0400166 assertEquals("The link set size did not match.", 1,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400167 linkService.getDeviceIngressLinks(DID2).size());
Brian Stanke86914282016-05-25 15:36:50 -0400168 assertEquals("The link set size did not match.", 0,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400169 linkService.getDeviceIngressLinks(DID3).size());
Brian Stanke86914282016-05-25 15:36:50 -0400170
171 // test the getEgressLinks() method
172 assertEquals("The link set size did not match.", 1,
173 linkService.getEgressLinks(src).size());
174 assertEquals("The link set size did not match.", 1,
175 linkService.getEgressLinks(dst).size());
176 assertEquals("The link set size did not match.", 0,
177 linkService.getEgressLinks(connectPoint).size());
178
179 // test the getIngressLinks() method
180 assertEquals("The link set size did not match.", 1,
181 linkService.getIngressLinks(src).size());
182 assertEquals("The link set size did not match.", 1,
183 linkService.getIngressLinks(dst).size());
184 assertEquals("The link set size did not match.", 0,
185 linkService.getIngressLinks(connectPoint).size());
186 }
187
188 /**
189 * Tests the getLink() method using a null src connect point.
190 */
191 @Test(expected = NullPointerException.class)
192 public void testGetLinkByNullSrc() {
193
194 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
195 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
196 VirtualDevice srcVirtualDevice =
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400197 manager.createVirtualDevice(virtualNetwork.id(), DID1);
Brian Stanke86914282016-05-25 15:36:50 -0400198 VirtualDevice dstVirtualDevice =
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400199 manager.createVirtualDevice(virtualNetwork.id(), DID2);
Brian Stanke86914282016-05-25 15:36:50 -0400200 ConnectPoint src = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1));
201 ConnectPoint dst = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(2));
202 manager.createVirtualLink(virtualNetwork.id(), src, dst);
203 manager.createVirtualLink(virtualNetwork.id(), dst, src);
204
205 LinkService linkService = manager.get(virtualNetwork.id(), LinkService.class);
206
207 // test the getLink() method with a null src connect point.
208 linkService.getLink(null, dst);
209 }
210
211 /**
212 * Tests the getLink() method using a null dst connect point.
213 */
214 @Test(expected = NullPointerException.class)
215 public void testGetLinkByNullDst() {
216
217 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
218 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
219 VirtualDevice srcVirtualDevice =
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400220 manager.createVirtualDevice(virtualNetwork.id(), DID1);
Brian Stanke86914282016-05-25 15:36:50 -0400221 VirtualDevice dstVirtualDevice =
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400222 manager.createVirtualDevice(virtualNetwork.id(), DID2);
Brian Stanke86914282016-05-25 15:36:50 -0400223 ConnectPoint src = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1));
224 ConnectPoint dst = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(2));
225 manager.createVirtualLink(virtualNetwork.id(), src, dst);
226 manager.createVirtualLink(virtualNetwork.id(), dst, src);
227
228 LinkService linkService = manager.get(virtualNetwork.id(), LinkService.class);
229
230 // test the getLink() method with a null dst connect point.
231 linkService.getLink(src, null);
232 }
233
234 /**
235 * Tests querying for links using a null device identifier.
236 */
237 @Test(expected = NullPointerException.class)
238 public void testGetDeviceLinksByNullId() {
239 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
240 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
241 LinkService linkService = manager.get(virtualNetwork.id(), LinkService.class);
242
243 // test the getDeviceLinks() method with a null device identifier.
244 linkService.getDeviceLinks(null);
245 }
246
247 /**
248 * Tests querying for links using a null connect point.
249 */
250 @Test(expected = NullPointerException.class)
251 public void testGetLinksByNullId() {
252 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
253 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
254 LinkService linkService = manager.get(virtualNetwork.id(), LinkService.class);
255
256 // test the getLinks() method with a null connect point.
257 linkService.getLinks(null);
258 }
259
260 /**
261 * Tests querying for device egress links using a null device identifier.
262 */
263 @Test(expected = NullPointerException.class)
264 public void testGetDeviceEgressLinksByNullId() {
265 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
266 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
267 LinkService linkService = manager.get(virtualNetwork.id(), LinkService.class);
268
269 // test the getDeviceEgressLinks() method with a null device identifier.
270 linkService.getDeviceEgressLinks(null);
271 }
272
273 /**
274 * Tests querying for device ingress links using a null device identifier.
275 */
276 @Test(expected = NullPointerException.class)
277 public void testGetDeviceIngressLinksByNullId() {
278 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
279 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
280 LinkService linkService = manager.get(virtualNetwork.id(), LinkService.class);
281
282 // test the getDeviceIngressLinks() method with a null device identifier.
283 linkService.getDeviceIngressLinks(null);
284 }
285
286 /**
287 * Tests querying for egress links using a null connect point.
288 */
289 @Test(expected = NullPointerException.class)
290 public void testGetEgressLinksByNullId() {
291 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
292 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
293 LinkService linkService = manager.get(virtualNetwork.id(), LinkService.class);
294
295 // test the getEgressLinks() method with a null connect point.
296 linkService.getEgressLinks(null);
297 }
298
299 /**
300 * Tests querying for ingress links using a null connect point.
301 */
302 @Test(expected = NullPointerException.class)
303 public void testGetIngressLinksByNullId() {
304 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
305 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
306 LinkService linkService = manager.get(virtualNetwork.id(), LinkService.class);
307
308 // test the getIngressLinks() method with a null connect point.
309 linkService.getIngressLinks(null);
310 }
311
312 /**
313 * Core service test class.
314 */
315 private class TestCoreService extends CoreServiceAdapter {
316
317 @Override
318 public IdGenerator getIdGenerator(String topic) {
319 return new IdGenerator() {
320 private AtomicLong counter = new AtomicLong(0);
321
322 @Override
323 public long getNewId() {
324 return counter.getAndIncrement();
325 }
326 };
327 }
328 }
329}