blob: f056f7c239eed10a0a463fa66f1e5d9fef396e35 [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.VirtualLink;
31import org.onosproject.incubator.net.virtual.VirtualNetwork;
32import org.onosproject.incubator.store.virtual.impl.DistributedVirtualNetworkStore;
33import org.onosproject.net.ConnectPoint;
Brian Stanke86914282016-05-25 15:36:50 -040034import org.onosproject.net.Link;
35import org.onosproject.net.NetTestTools;
36import org.onosproject.net.PortNumber;
Brian Stanke8e9f8d12016-06-08 14:48:33 -040037import org.onosproject.net.TestDeviceParams;
Brian Stanke86914282016-05-25 15:36:50 -040038import org.onosproject.net.link.LinkService;
39import org.onosproject.store.service.TestStorageService;
40
41import java.util.Iterator;
42import java.util.concurrent.atomic.AtomicLong;
43
44import static org.junit.Assert.assertEquals;
45import static org.junit.Assert.assertNotEquals;
46
47/**
48 * Junit tests for VirtualNetworkLinkService.
49 */
Brian Stanke8e9f8d12016-06-08 14:48:33 -040050public class VirtualNetworkLinkServiceTest extends TestDeviceParams {
Brian Stanke86914282016-05-25 15:36:50 -040051
52 private final String tenantIdValue1 = "TENANT_ID1";
Brian Stanke86914282016-05-25 15:36:50 -040053
54 private VirtualNetworkManager manager;
55 private DistributedVirtualNetworkStore virtualNetworkManagerStore;
56 private CoreService coreService;
57
58 @Before
59 public void setUp() throws Exception {
60 virtualNetworkManagerStore = new DistributedVirtualNetworkStore();
61
62 coreService = new VirtualNetworkLinkServiceTest.TestCoreService();
63 virtualNetworkManagerStore.setCoreService(coreService);
64 TestUtils.setField(coreService, "coreService", new VirtualNetworkLinkServiceTest.TestCoreService());
65 TestUtils.setField(virtualNetworkManagerStore, "storageService", new TestStorageService());
66 virtualNetworkManagerStore.activate();
67
68 manager = new VirtualNetworkManager();
69 manager.store = virtualNetworkManagerStore;
70 NetTestTools.injectEventDispatcher(manager, new TestEventDispatcher());
71 manager.activate();
72 }
73
74 @After
75 public void tearDown() {
76 virtualNetworkManagerStore.deactivate();
77 manager.deactivate();
78 NetTestTools.injectEventDispatcher(manager, null);
79 }
80
81 /**
82 * Tests the getLinks(), getActiveLinks(), getLinkCount(), getLink(),
83 * getLinks(ConnectPoint), getDeviceLinks(), getDeviceEgressLinks(), getDeviceIngressLinks(),
84 * getEgressLinks(), getIngressLinks() methods.
85 */
86 @Test
87 public void testGetLinks() {
88
89 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
90 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
91 VirtualDevice srcVirtualDevice =
Brian Stanke8e9f8d12016-06-08 14:48:33 -040092 manager.createVirtualDevice(virtualNetwork.id(), DID1);
Brian Stanke86914282016-05-25 15:36:50 -040093 VirtualDevice dstVirtualDevice =
Brian Stanke8e9f8d12016-06-08 14:48:33 -040094 manager.createVirtualDevice(virtualNetwork.id(), DID2);
Brian Stanke86914282016-05-25 15:36:50 -040095 ConnectPoint src = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1));
96 ConnectPoint dst = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(2));
97 VirtualLink link1 = manager.createVirtualLink(virtualNetwork.id(), src, dst);
98 VirtualLink link2 = manager.createVirtualLink(virtualNetwork.id(), dst, src);
99
100 LinkService linkService = manager.get(virtualNetwork.id(), LinkService.class);
101
102 // test the getLinks() method
103 Iterator<Link> it = linkService.getLinks().iterator();
104 assertEquals("The link set size did not match.", 2, Iterators.size(it));
105
106 // test the getActiveLinks() method where no links are ACTIVE
107 Iterator<Link> it2 = linkService.getActiveLinks().iterator();
108 assertEquals("The link set size did not match.", 0, Iterators.size(it2));
109
110 // test the getActiveLinks() method where one link is ACTIVE
111 virtualNetworkManagerStore.updateLink(link1, link1.tunnelId(), Link.State.ACTIVE);
112 Iterator<Link> it3 = linkService.getActiveLinks().iterator();
113 assertEquals("The link set size did not match.", 1, Iterators.size(it3));
114
115 // test the getLinkCount() method
116 assertEquals("The link set size did not match.", 2, linkService.getLinkCount());
117
118 // test the getLink() method
119 assertEquals("The expect link did not match.", link1,
120 linkService.getLink(src, dst));
121 assertEquals("The expect link did not match.", link2,
122 linkService.getLink(dst, src));
123 assertNotEquals("The expect link should not have matched.", link1,
124 linkService.getLink(dst, src));
125
126 // test the getLinks(ConnectPoint) method
127 assertEquals("The link set size did not match.", 2, linkService.getLinks(src).size());
128 assertEquals("The link set size did not match.", 2, linkService.getLinks(dst).size());
129 ConnectPoint connectPoint = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(3));
130 assertEquals("The link set size did not match.", 0, linkService.getLinks(connectPoint).size());
131
132 // test the getDeviceLinks() method
133 assertEquals("The link set size did not match.", 2,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400134 linkService.getDeviceLinks(DID1).size());
Brian Stanke86914282016-05-25 15:36:50 -0400135 assertEquals("The link set size did not match.", 2,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400136 linkService.getDeviceLinks(DID2).size());
Brian Stanke86914282016-05-25 15:36:50 -0400137 assertEquals("The link set size did not match.", 0,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400138 linkService.getDeviceLinks(DID3).size());
Brian Stanke86914282016-05-25 15:36:50 -0400139
140 // test the getDeviceEgressLinks() method
141 assertEquals("The link set size did not match.", 1,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400142 linkService.getDeviceEgressLinks(DID1).size());
Brian Stanke86914282016-05-25 15:36:50 -0400143 assertEquals("The link set size did not match.", 1,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400144 linkService.getDeviceEgressLinks(DID2).size());
Brian Stanke86914282016-05-25 15:36:50 -0400145 assertEquals("The link set size did not match.", 0,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400146 linkService.getDeviceEgressLinks(DID3).size());
Brian Stanke86914282016-05-25 15:36:50 -0400147
148 // test the getDeviceIngressLinks() method
149 assertEquals("The link set size did not match.", 1,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400150 linkService.getDeviceIngressLinks(DID1).size());
Brian Stanke86914282016-05-25 15:36:50 -0400151 assertEquals("The link set size did not match.", 1,
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400152 linkService.getDeviceIngressLinks(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.getDeviceIngressLinks(DID3).size());
Brian Stanke86914282016-05-25 15:36:50 -0400155
156 // test the getEgressLinks() method
157 assertEquals("The link set size did not match.", 1,
158 linkService.getEgressLinks(src).size());
159 assertEquals("The link set size did not match.", 1,
160 linkService.getEgressLinks(dst).size());
161 assertEquals("The link set size did not match.", 0,
162 linkService.getEgressLinks(connectPoint).size());
163
164 // test the getIngressLinks() method
165 assertEquals("The link set size did not match.", 1,
166 linkService.getIngressLinks(src).size());
167 assertEquals("The link set size did not match.", 1,
168 linkService.getIngressLinks(dst).size());
169 assertEquals("The link set size did not match.", 0,
170 linkService.getIngressLinks(connectPoint).size());
171 }
172
173 /**
174 * Tests the getLink() method using a null src connect point.
175 */
176 @Test(expected = NullPointerException.class)
177 public void testGetLinkByNullSrc() {
178
179 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
180 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
181 VirtualDevice srcVirtualDevice =
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400182 manager.createVirtualDevice(virtualNetwork.id(), DID1);
Brian Stanke86914282016-05-25 15:36:50 -0400183 VirtualDevice dstVirtualDevice =
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400184 manager.createVirtualDevice(virtualNetwork.id(), DID2);
Brian Stanke86914282016-05-25 15:36:50 -0400185 ConnectPoint src = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1));
186 ConnectPoint dst = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(2));
187 manager.createVirtualLink(virtualNetwork.id(), src, dst);
188 manager.createVirtualLink(virtualNetwork.id(), dst, src);
189
190 LinkService linkService = manager.get(virtualNetwork.id(), LinkService.class);
191
192 // test the getLink() method with a null src connect point.
193 linkService.getLink(null, dst);
194 }
195
196 /**
197 * Tests the getLink() method using a null dst connect point.
198 */
199 @Test(expected = NullPointerException.class)
200 public void testGetLinkByNullDst() {
201
202 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
203 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
204 VirtualDevice srcVirtualDevice =
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400205 manager.createVirtualDevice(virtualNetwork.id(), DID1);
Brian Stanke86914282016-05-25 15:36:50 -0400206 VirtualDevice dstVirtualDevice =
Brian Stanke8e9f8d12016-06-08 14:48:33 -0400207 manager.createVirtualDevice(virtualNetwork.id(), DID2);
Brian Stanke86914282016-05-25 15:36:50 -0400208 ConnectPoint src = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1));
209 ConnectPoint dst = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(2));
210 manager.createVirtualLink(virtualNetwork.id(), src, dst);
211 manager.createVirtualLink(virtualNetwork.id(), dst, src);
212
213 LinkService linkService = manager.get(virtualNetwork.id(), LinkService.class);
214
215 // test the getLink() method with a null dst connect point.
216 linkService.getLink(src, null);
217 }
218
219 /**
220 * Tests querying for links using a null device identifier.
221 */
222 @Test(expected = NullPointerException.class)
223 public void testGetDeviceLinksByNullId() {
224 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
225 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
226 LinkService linkService = manager.get(virtualNetwork.id(), LinkService.class);
227
228 // test the getDeviceLinks() method with a null device identifier.
229 linkService.getDeviceLinks(null);
230 }
231
232 /**
233 * Tests querying for links using a null connect point.
234 */
235 @Test(expected = NullPointerException.class)
236 public void testGetLinksByNullId() {
237 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
238 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
239 LinkService linkService = manager.get(virtualNetwork.id(), LinkService.class);
240
241 // test the getLinks() method with a null connect point.
242 linkService.getLinks(null);
243 }
244
245 /**
246 * Tests querying for device egress links using a null device identifier.
247 */
248 @Test(expected = NullPointerException.class)
249 public void testGetDeviceEgressLinksByNullId() {
250 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
251 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
252 LinkService linkService = manager.get(virtualNetwork.id(), LinkService.class);
253
254 // test the getDeviceEgressLinks() method with a null device identifier.
255 linkService.getDeviceEgressLinks(null);
256 }
257
258 /**
259 * Tests querying for device ingress links using a null device identifier.
260 */
261 @Test(expected = NullPointerException.class)
262 public void testGetDeviceIngressLinksByNullId() {
263 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
264 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
265 LinkService linkService = manager.get(virtualNetwork.id(), LinkService.class);
266
267 // test the getDeviceIngressLinks() method with a null device identifier.
268 linkService.getDeviceIngressLinks(null);
269 }
270
271 /**
272 * Tests querying for egress links using a null connect point.
273 */
274 @Test(expected = NullPointerException.class)
275 public void testGetEgressLinksByNullId() {
276 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
277 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
278 LinkService linkService = manager.get(virtualNetwork.id(), LinkService.class);
279
280 // test the getEgressLinks() method with a null connect point.
281 linkService.getEgressLinks(null);
282 }
283
284 /**
285 * Tests querying for ingress links using a null connect point.
286 */
287 @Test(expected = NullPointerException.class)
288 public void testGetIngressLinksByNullId() {
289 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
290 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
291 LinkService linkService = manager.get(virtualNetwork.id(), LinkService.class);
292
293 // test the getIngressLinks() method with a null connect point.
294 linkService.getIngressLinks(null);
295 }
296
297 /**
298 * Core service test class.
299 */
300 private class TestCoreService extends CoreServiceAdapter {
301
302 @Override
303 public IdGenerator getIdGenerator(String topic) {
304 return new IdGenerator() {
305 private AtomicLong counter = new AtomicLong(0);
306
307 @Override
308 public long getNewId() {
309 return counter.getAndIncrement();
310 }
311 };
312 }
313 }
314}