blob: 5143b8b81bcad0a2d676e59aeb877774a1c58599 [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;
34import org.onosproject.net.DeviceId;
35import org.onosproject.net.Link;
36import org.onosproject.net.NetTestTools;
37import org.onosproject.net.PortNumber;
38import 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 */
50public class VirtualNetworkLinkServiceTest {
51
52 private final String tenantIdValue1 = "TENANT_ID1";
53 private final String deviceIdValue1 = "DEVICE_ID1";
54 private final String deviceIdValue2 = "DEVICE_ID2";
55 private final String deviceIdValue3 = "DEVICE_ID3";
56
57 private VirtualNetworkManager manager;
58 private DistributedVirtualNetworkStore virtualNetworkManagerStore;
59 private CoreService coreService;
60
61 @Before
62 public void setUp() throws Exception {
63 virtualNetworkManagerStore = new DistributedVirtualNetworkStore();
64
65 coreService = new VirtualNetworkLinkServiceTest.TestCoreService();
66 virtualNetworkManagerStore.setCoreService(coreService);
67 TestUtils.setField(coreService, "coreService", new VirtualNetworkLinkServiceTest.TestCoreService());
68 TestUtils.setField(virtualNetworkManagerStore, "storageService", new TestStorageService());
69 virtualNetworkManagerStore.activate();
70
71 manager = new VirtualNetworkManager();
72 manager.store = virtualNetworkManagerStore;
73 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 getLinks(), getActiveLinks(), getLinkCount(), getLink(),
86 * getLinks(ConnectPoint), getDeviceLinks(), getDeviceEgressLinks(), getDeviceIngressLinks(),
87 * getEgressLinks(), getIngressLinks() methods.
88 */
89 @Test
90 public void testGetLinks() {
91
92 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
93 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
94 VirtualDevice srcVirtualDevice =
95 manager.createVirtualDevice(virtualNetwork.id(), DeviceId.deviceId(deviceIdValue1));
96 VirtualDevice dstVirtualDevice =
97 manager.createVirtualDevice(virtualNetwork.id(), DeviceId.deviceId(deviceIdValue2));
98 ConnectPoint src = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1));
99 ConnectPoint dst = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(2));
100 VirtualLink link1 = manager.createVirtualLink(virtualNetwork.id(), src, dst);
101 VirtualLink link2 = manager.createVirtualLink(virtualNetwork.id(), dst, src);
102
103 LinkService linkService = manager.get(virtualNetwork.id(), LinkService.class);
104
105 // test the getLinks() method
106 Iterator<Link> it = linkService.getLinks().iterator();
107 assertEquals("The link set size did not match.", 2, Iterators.size(it));
108
109 // test the getActiveLinks() method where no links are ACTIVE
110 Iterator<Link> it2 = linkService.getActiveLinks().iterator();
111 assertEquals("The link set size did not match.", 0, Iterators.size(it2));
112
113 // test the getActiveLinks() method where one link is ACTIVE
114 virtualNetworkManagerStore.updateLink(link1, link1.tunnelId(), Link.State.ACTIVE);
115 Iterator<Link> it3 = linkService.getActiveLinks().iterator();
116 assertEquals("The link set size did not match.", 1, Iterators.size(it3));
117
118 // test the getLinkCount() method
119 assertEquals("The link set size did not match.", 2, linkService.getLinkCount());
120
121 // test the getLink() method
122 assertEquals("The expect link did not match.", link1,
123 linkService.getLink(src, dst));
124 assertEquals("The expect link did not match.", link2,
125 linkService.getLink(dst, src));
126 assertNotEquals("The expect link should not have matched.", link1,
127 linkService.getLink(dst, src));
128
129 // test the getLinks(ConnectPoint) method
130 assertEquals("The link set size did not match.", 2, linkService.getLinks(src).size());
131 assertEquals("The link set size did not match.", 2, linkService.getLinks(dst).size());
132 ConnectPoint connectPoint = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(3));
133 assertEquals("The link set size did not match.", 0, linkService.getLinks(connectPoint).size());
134
135 // test the getDeviceLinks() method
136 assertEquals("The link set size did not match.", 2,
137 linkService.getDeviceLinks(DeviceId.deviceId(deviceIdValue1)).size());
138 assertEquals("The link set size did not match.", 2,
139 linkService.getDeviceLinks(DeviceId.deviceId(deviceIdValue2)).size());
140 assertEquals("The link set size did not match.", 0,
141 linkService.getDeviceLinks(DeviceId.deviceId(deviceIdValue3)).size());
142
143 // test the getDeviceEgressLinks() method
144 assertEquals("The link set size did not match.", 1,
145 linkService.getDeviceEgressLinks(DeviceId.deviceId(deviceIdValue1)).size());
146 assertEquals("The link set size did not match.", 1,
147 linkService.getDeviceEgressLinks(DeviceId.deviceId(deviceIdValue2)).size());
148 assertEquals("The link set size did not match.", 0,
149 linkService.getDeviceEgressLinks(DeviceId.deviceId(deviceIdValue3)).size());
150
151 // test the getDeviceIngressLinks() method
152 assertEquals("The link set size did not match.", 1,
153 linkService.getDeviceIngressLinks(DeviceId.deviceId(deviceIdValue1)).size());
154 assertEquals("The link set size did not match.", 1,
155 linkService.getDeviceIngressLinks(DeviceId.deviceId(deviceIdValue2)).size());
156 assertEquals("The link set size did not match.", 0,
157 linkService.getDeviceIngressLinks(DeviceId.deviceId(deviceIdValue3)).size());
158
159 // test the getEgressLinks() method
160 assertEquals("The link set size did not match.", 1,
161 linkService.getEgressLinks(src).size());
162 assertEquals("The link set size did not match.", 1,
163 linkService.getEgressLinks(dst).size());
164 assertEquals("The link set size did not match.", 0,
165 linkService.getEgressLinks(connectPoint).size());
166
167 // test the getIngressLinks() method
168 assertEquals("The link set size did not match.", 1,
169 linkService.getIngressLinks(src).size());
170 assertEquals("The link set size did not match.", 1,
171 linkService.getIngressLinks(dst).size());
172 assertEquals("The link set size did not match.", 0,
173 linkService.getIngressLinks(connectPoint).size());
174 }
175
176 /**
177 * Tests the getLink() method using a null src connect point.
178 */
179 @Test(expected = NullPointerException.class)
180 public void testGetLinkByNullSrc() {
181
182 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
183 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
184 VirtualDevice srcVirtualDevice =
185 manager.createVirtualDevice(virtualNetwork.id(), DeviceId.deviceId(deviceIdValue1));
186 VirtualDevice dstVirtualDevice =
187 manager.createVirtualDevice(virtualNetwork.id(), DeviceId.deviceId(deviceIdValue2));
188 ConnectPoint src = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1));
189 ConnectPoint dst = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(2));
190 manager.createVirtualLink(virtualNetwork.id(), src, dst);
191 manager.createVirtualLink(virtualNetwork.id(), dst, src);
192
193 LinkService linkService = manager.get(virtualNetwork.id(), LinkService.class);
194
195 // test the getLink() method with a null src connect point.
196 linkService.getLink(null, dst);
197 }
198
199 /**
200 * Tests the getLink() method using a null dst connect point.
201 */
202 @Test(expected = NullPointerException.class)
203 public void testGetLinkByNullDst() {
204
205 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
206 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
207 VirtualDevice srcVirtualDevice =
208 manager.createVirtualDevice(virtualNetwork.id(), DeviceId.deviceId(deviceIdValue1));
209 VirtualDevice dstVirtualDevice =
210 manager.createVirtualDevice(virtualNetwork.id(), DeviceId.deviceId(deviceIdValue2));
211 ConnectPoint src = new ConnectPoint(srcVirtualDevice.id(), PortNumber.portNumber(1));
212 ConnectPoint dst = new ConnectPoint(dstVirtualDevice.id(), PortNumber.portNumber(2));
213 manager.createVirtualLink(virtualNetwork.id(), src, dst);
214 manager.createVirtualLink(virtualNetwork.id(), dst, src);
215
216 LinkService linkService = manager.get(virtualNetwork.id(), LinkService.class);
217
218 // test the getLink() method with a null dst connect point.
219 linkService.getLink(src, null);
220 }
221
222 /**
223 * Tests querying for links using a null device identifier.
224 */
225 @Test(expected = NullPointerException.class)
226 public void testGetDeviceLinksByNullId() {
227 manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
228 VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
229 LinkService linkService = manager.get(virtualNetwork.id(), LinkService.class);
230
231 // test the getDeviceLinks() method with a null device identifier.
232 linkService.getDeviceLinks(null);
233 }
234
235 /**
236 * Tests querying for links using a null connect point.
237 */
238 @Test(expected = NullPointerException.class)
239 public void testGetLinksByNullId() {
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 getLinks() method with a null connect point.
245 linkService.getLinks(null);
246 }
247
248 /**
249 * Tests querying for device egress links using a null device identifier.
250 */
251 @Test(expected = NullPointerException.class)
252 public void testGetDeviceEgressLinksByNullId() {
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 getDeviceEgressLinks() method with a null device identifier.
258 linkService.getDeviceEgressLinks(null);
259 }
260
261 /**
262 * Tests querying for device ingress links using a null device identifier.
263 */
264 @Test(expected = NullPointerException.class)
265 public void testGetDeviceIngressLinksByNullId() {
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 getDeviceIngressLinks() method with a null device identifier.
271 linkService.getDeviceIngressLinks(null);
272 }
273
274 /**
275 * Tests querying for egress links using a null connect point.
276 */
277 @Test(expected = NullPointerException.class)
278 public void testGetEgressLinksByNullId() {
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 getEgressLinks() method with a null connect point.
284 linkService.getEgressLinks(null);
285 }
286
287 /**
288 * Tests querying for ingress links using a null connect point.
289 */
290 @Test(expected = NullPointerException.class)
291 public void testGetIngressLinksByNullId() {
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 getIngressLinks() method with a null connect point.
297 linkService.getIngressLinks(null);
298 }
299
300 /**
301 * Core service test class.
302 */
303 private class TestCoreService extends CoreServiceAdapter {
304
305 @Override
306 public IdGenerator getIdGenerator(String topic) {
307 return new IdGenerator() {
308 private AtomicLong counter = new AtomicLong(0);
309
310 @Override
311 public long getNewId() {
312 return counter.getAndIncrement();
313 }
314 };
315 }
316 }
317}