blob: 9a5b8c1ff917bf5708bde5cc4b4a86eda4626a19 [file] [log] [blame]
sunish vk7bdf4d42016-06-24 12:29:43 +05301/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2016-present Open Networking Foundation
sunish vk7bdf4d42016-06-24 12:29:43 +05303 *
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5 * the License. You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11 * specific language governing permissions and limitations under the License.
12 */
13
14package org.onosproject.provider.isis.topology.impl;
15
16import com.fasterxml.jackson.databind.JsonNode;
17import com.fasterxml.jackson.databind.ObjectMapper;
18import com.fasterxml.jackson.databind.node.JsonNodeFactory;
19import com.fasterxml.jackson.databind.node.ObjectNode;
20import org.junit.After;
21import org.junit.Before;
22import org.junit.Test;
23import org.onlab.packet.Ip4Address;
24import org.onlab.util.Bandwidth;
25import org.onosproject.isis.controller.IsisController;
26import org.onosproject.isis.controller.IsisProcess;
27import org.onosproject.isis.controller.impl.topology.DefaultIsisLink;
28import org.onosproject.isis.controller.impl.topology.DefaultIsisLinkTed;
29import org.onosproject.isis.controller.impl.topology.DefaultIsisRouter;
30import org.onosproject.isis.controller.topology.IsisLink;
31import org.onosproject.isis.controller.topology.IsisLinkListener;
32import org.onosproject.isis.controller.topology.IsisLinkTed;
33import org.onosproject.isis.controller.topology.IsisRouter;
34import org.onosproject.isis.controller.topology.IsisRouterListener;
35import org.onosproject.net.ConnectPoint;
36import org.onosproject.net.Device;
37import org.onosproject.net.DeviceId;
38import org.onosproject.net.Link;
39import org.onosproject.net.MastershipRole;
40import org.onosproject.net.PortNumber;
41import org.onosproject.net.config.Config;
42import org.onosproject.net.config.ConfigApplyDelegate;
43import org.onosproject.net.config.ConfigFactory;
44import org.onosproject.net.config.NetworkConfigRegistryAdapter;
45import org.onosproject.net.config.basics.BandwidthCapacity;
46import org.onosproject.net.device.DeviceDescription;
47import org.onosproject.net.device.DeviceListener;
48import org.onosproject.net.device.DeviceProvider;
49import org.onosproject.net.device.DeviceProviderRegistry;
50import org.onosproject.net.device.DeviceProviderService;
51import org.onosproject.net.device.DeviceServiceAdapter;
52import org.onosproject.net.device.PortDescription;
53import org.onosproject.net.device.PortStatistics;
54import org.onosproject.net.link.LinkDescription;
55import org.onosproject.net.link.LinkListener;
56import org.onosproject.net.link.LinkProvider;
57import org.onosproject.net.link.LinkProviderRegistry;
58import org.onosproject.net.link.LinkProviderService;
59import org.onosproject.net.link.LinkServiceAdapter;
60import org.onosproject.net.provider.ProviderId;
61
62import java.util.ArrayList;
63import java.util.Collection;
64import java.util.Collections;
65import java.util.HashMap;
66import java.util.HashSet;
67import java.util.List;
68import java.util.Map;
69import java.util.Set;
70import java.util.concurrent.CopyOnWriteArraySet;
71
72import static org.junit.Assert.assertNotNull;
73import static org.junit.Assert.assertTrue;
74
75/**
76 * Test cases for ISIS topology provider.
77 */
78public class IsisTopologyProviderTest {
79
80 private final IsisTopologyProvider provider = new IsisTopologyProvider();
81 private final TestDeviceRegistry nodeRegistry = new TestDeviceRegistry();
82 private final TestLinkRegistry linkRegistry = new TestLinkRegistry();
83 private final TestController controller = new TestController();
84 private final TestLinkService linkService = new TestLinkService();
85 private MockNetConfigRegistryAdapter networkConfigService = new MockNetConfigRegistryAdapter();
86
87 @Before
88 public void setUp() throws Exception {
89 provider.deviceProviderRegistry = nodeRegistry;
90 provider.linkProviderRegistry = linkRegistry;
91 provider.networkConfigService = networkConfigService;
92 provider.controller = controller;
93 provider.linkService = linkService;
94 provider.activate();
95 assertNotNull("provider should be registered", nodeRegistry.provider);
96 assertNotNull("listener should be registered", controller.nodeListener);
97 }
98
99 @After
100 public void tearDown() throws Exception {
101 provider.deactivate();
102 provider.controller = null;
103 provider.deviceProviderRegistry = null;
104 provider.networkConfigService = null;
105 }
106
107 @Test
108 public void triggerProbe() {
109 DeviceId deviceId = DeviceId.deviceId("2929.2929.2929.00-00");
110 provider.triggerProbe(deviceId);
111 }
112
113 @Test
114 public void roleChanged() {
115 DeviceId deviceId = DeviceId.deviceId("1111.1111.1111.00-00");
116 provider.roleChanged(deviceId, MastershipRole.MASTER);
117 }
118
119 @Test
120 public void changePortState() {
121 DeviceId deviceId = DeviceId.deviceId("2222.2222.2222.00-82");
122 provider.changePortState(deviceId, PortNumber.portNumber(168430087), false);
123 }
124
125 @Test
126 public void isReachable() {
127 DeviceId deviceId = DeviceId.deviceId("1010.1010.1111.00-22");
128 provider.isReachable(deviceId);
129 }
130
131
132 /* Validate node is added to the device validating URI and should get updated properly */
133 @Test
134 public void isisTopologyProviderTestAddDevice1() {
135 int deviceAddCount = 0;
136 IsisRouter isisRouter = new DefaultIsisRouter();
137 isisRouter.setSystemId("2929.2929.2929.00");
138 isisRouter.setNeighborRouterId(Ip4Address.valueOf("10.10.10.1"));
139 isisRouter.setInterfaceId(Ip4Address.valueOf("10.10.10.2"));
140 isisRouter.setDis(false);
141
142 for (IsisRouterListener l : controller.nodeListener) {
143 l.routerAdded(isisRouter);
144 deviceAddCount = nodeRegistry.connected.size();
145 assertTrue(deviceAddCount == 1);
146 l.routerRemoved(isisRouter);
147 deviceAddCount = nodeRegistry.connected.size();
148 assertTrue(deviceAddCount == 0);
149 }
150 }
151
152 @Test
153 public void isisTopologyProviderTestAddDevice2() {
154 int deviceAddCount = 0;
155 IsisRouter isisRouter = new DefaultIsisRouter();
156 isisRouter.setSystemId("7777.7777.7777.00");
157 isisRouter.setNeighborRouterId(Ip4Address.valueOf("10.10.10.1"));
158 isisRouter.setInterfaceId(Ip4Address.valueOf("10.10.10.7"));
159 isisRouter.setDis(false);
160 IsisRouter isisRouter1 = new DefaultIsisRouter();
161 isisRouter1.setSystemId("1111.1111.1111.00");
162 isisRouter1.setNeighborRouterId(Ip4Address.valueOf("10.10.10.7"));
163 isisRouter1.setInterfaceId(Ip4Address.valueOf("10.10.10.1"));
164 isisRouter1.setDis(true);
165 for (IsisRouterListener l : controller.nodeListener) {
166 l.routerAdded(isisRouter);
167 deviceAddCount = nodeRegistry.connected.size();
168 assertTrue(deviceAddCount == 1);
169 l.routerAdded(isisRouter1);
170 deviceAddCount = nodeRegistry.connected.size();
171 assertTrue(deviceAddCount == 2);
172 l.routerRemoved(isisRouter);
173 deviceAddCount = nodeRegistry.connected.size();
174 assertTrue(deviceAddCount == 1);
175 }
176 }
177
178 @Test
179 public void isisTopologyProviderTestAddLink() {
180 int deviceAddCount = 0;
181 IsisRouter isisRouter = new DefaultIsisRouter();
182 isisRouter.setSystemId("7777.7777.7777.00");
183 isisRouter.setNeighborRouterId(Ip4Address.valueOf("10.10.10.1"));
184 isisRouter.setInterfaceId(Ip4Address.valueOf("10.10.10.7"));
185 isisRouter.setDis(false);
186 IsisRouter isisRouter1 = new DefaultIsisRouter();
187 isisRouter1.setSystemId("1111.1111.1111.00");
188 isisRouter1.setNeighborRouterId(Ip4Address.valueOf("10.10.10.7"));
189 isisRouter1.setInterfaceId(Ip4Address.valueOf("10.10.10.1"));
190 isisRouter1.setDis(true);
191 IsisLink isisLink = new DefaultIsisLink();
192 isisLink.setRemoteSystemId("7777.7777.7777.00");
193 isisLink.setLocalSystemId("1111.1111.1111.00");
194 isisLink.setInterfaceIp(Ip4Address.valueOf("10.10.10.1"));
195 isisLink.setNeighborIp(Ip4Address.valueOf("10.10.10.7"));
196 IsisLinkTed isisLinkTed = new DefaultIsisLinkTed();
197 isisLinkTed.setTeDefaultMetric(10);
198 isisLinkTed.setAdministrativeGroup(5);
199 isisLinkTed.setIpv4InterfaceAddress(Ip4Address.valueOf("10.10.10.1"));
200 isisLinkTed.setIpv4NeighborAddress(Ip4Address.valueOf("10.10.10.7"));
201 isisLinkTed.setMaximumLinkBandwidth(Bandwidth.bps(0));
202 isisLinkTed.setMaximumReservableLinkBandwidth(Bandwidth.bps(1.0));
203 List<Bandwidth> unresList = new ArrayList<>();
204 unresList.add(Bandwidth.bps(0.0));
205 unresList.add(Bandwidth.bps(1.0));
206 unresList.add(Bandwidth.bps(2.0));
207 unresList.add(Bandwidth.bps(3.0));
208 isisLinkTed.setUnreservedBandwidth(unresList);
209 isisLink.setLinkTed(isisLinkTed);
210 for (IsisRouterListener l : controller.nodeListener) {
211 l.routerAdded(isisRouter);
212 deviceAddCount = nodeRegistry.connected.size();
213 assertTrue(deviceAddCount == 1);
214 l.routerAdded(isisRouter1);
215 deviceAddCount = nodeRegistry.connected.size();
216 assertTrue(deviceAddCount == 2);
217 }
218 for (IsisLinkListener l : controller.linkListener) {
219 l.addLink(isisLink);
220 l.deleteLink(isisLink);
221
222 }
223 }
224
225
226 /* Class implement device test registry */
227 private class TestDeviceRegistry implements DeviceProviderRegistry {
228 DeviceProvider provider;
229
230 Set<DeviceId> connected = new HashSet<>();
231
232 @Override
233 public DeviceProviderService register(DeviceProvider provider) {
234 this.provider = provider;
235 return new TestProviderService();
236 }
237
238 @Override
239 public void unregister(DeviceProvider provider) {
240 }
241
242 @Override
243 public Set<ProviderId> getProviders() {
244 return null;
245 }
246
247 private class TestProviderService implements DeviceProviderService {
248
249 @Override
250 public DeviceProvider provider() {
251 return null;
252 }
253
254 @Override
255 public void deviceConnected(DeviceId deviceId, DeviceDescription deviceDescription) {
256
257 connected.add(deviceId);
258
259 }
260
sunish vk7bdf4d42016-06-24 12:29:43 +0530261 @Override
262 public void deviceDisconnected(DeviceId deviceId) {
263
264 connected.remove(deviceId);
265 }
266
267
268 @Override
269 public void updatePorts(DeviceId deviceId, List<PortDescription> portDescriptions) {
270 // TODO Auto-generated method stub
271
272 }
273
274 @Override
275 public void portStatusChanged(DeviceId deviceId, PortDescription portDescription) {
276 // TODO Auto-generated method stub
277
278 }
279
280 @Override
281 public void receivedRoleReply(DeviceId deviceId, MastershipRole requested, MastershipRole response) {
282 // TODO Auto-generated method stub
283
284 }
285
286
287 @Override
288 public void updatePortStatistics(DeviceId deviceId, Collection<PortStatistics> portStatistics) {
289 // TODO Auto-generated method stub
290
291 }
292 }
293 }
294
295
296
297 private class TestDeviceService extends DeviceServiceAdapter {
298 private DeviceListener listener;
299
300 @Override
301 public void addListener(DeviceListener listener) {
302 this.listener = listener;
303 }
304
305 @Override
306 public Iterable<Device> getDevices() {
307 return Collections.emptyList();
308 }
309 }
310
311 private class TestLinkService extends LinkServiceAdapter {
312 private LinkListener listener;
313
314 @Override
315 public void addListener(LinkListener listener) {
316 this.listener = listener;
317 }
318
319 @Override
320 public Iterable<Link> getLinks() {
321 return Collections.emptyList();
322 }
323 }
324
325 /* Class implement device test registry */
326 private class TestLinkRegistry implements LinkProviderRegistry {
327 LinkProvider provider;
328
329 Set<DeviceId> connected = new HashSet<>();
330
331 @Override
332 public LinkProviderService register(LinkProvider provider) {
333 this.provider = provider;
334 return new TestLinkProviderService();
335 }
336
337 @Override
338 public void unregister(LinkProvider provider) {
339
340 }
341
342 @Override
343 public Set<ProviderId> getProviders() {
344 return null;
345 }
346
347 private class TestLinkProviderService implements LinkProviderService {
348
349 @Override
350 public void linkDetected(LinkDescription linkDescription) {
351
352 }
353
354 @Override
355 public void linkVanished(LinkDescription linkDescription) {
356
357 }
358
359 @Override
360 public void linksVanished(ConnectPoint connectPoint) {
361
362 }
363
364 @Override
365 public void linksVanished(DeviceId deviceId) {
366
367 }
368
369 @Override
370 public LinkProvider provider() {
371 return null;
372 }
373 }
374 }
375
376 /* class implement test controller */
377 private class TestController implements IsisController {
378 protected Set<IsisRouterListener> nodeListener = new CopyOnWriteArraySet<>();
379 protected Set<IsisLinkListener> linkListener = new CopyOnWriteArraySet<>();
380
381 @Override
382 public void addRouterListener(IsisRouterListener nodeListener) {
383 this.nodeListener.add(nodeListener);
384 }
385
386 @Override
387 public void removeRouterListener(IsisRouterListener nodeListener) {
388 this.nodeListener.remove(nodeListener);
389 }
390
391 @Override
392 public void addLinkListener(IsisLinkListener listener) {
393 this.linkListener.add(listener);
394 }
395
396 @Override
397 public void removeLinkListener(IsisLinkListener listener) {
398 this.linkListener.remove(listener);
399 }
400
401 @Override
402 public void updateConfig(JsonNode processesNode) {
403
404 }
405
406 @Override
407 public List<IsisProcess> allConfiguredProcesses() {
408 return null;
409 }
410
411 @Override
412 public Set<IsisRouterListener> listener() {
413 return null;
414 }
415
416 @Override
417 public Set<IsisLinkListener> linkListener() {
418 return null;
419 }
420
421 }
422
423 /* Mock test for device service */
424 private class MockNetConfigRegistryAdapter extends NetworkConfigRegistryAdapter {
425 private ConfigFactory cfgFactory;
426 private Map<ConnectPoint, BandwidthCapacity> classConfig = new HashMap<>();
427
428 @Override
429 public void registerConfigFactory(ConfigFactory configFactory) {
430 cfgFactory = configFactory;
431 }
432
433 @Override
434 public void unregisterConfigFactory(ConfigFactory configFactory) {
435 cfgFactory = null;
436 }
437
438 @Override
439 public <S, C extends Config<S>> C addConfig(S subject, Class<C> configClass) {
440 if (configClass == BandwidthCapacity.class) {
441 BandwidthCapacity devCap = new BandwidthCapacity();
442 classConfig.put((ConnectPoint) subject, devCap);
443
444 JsonNode node = new ObjectNode(new MockJsonNode());
445 ObjectMapper mapper = new ObjectMapper();
446 ConfigApplyDelegate delegate = new InternalApplyDelegate();
447 devCap.init((ConnectPoint) subject, null, node, mapper, delegate);
448 return (C) devCap;
449 }
450
451 return null;
452 }
453
454 @Override
455 public <S, C extends Config<S>> void removeConfig(S subject, Class<C> configClass) {
456 classConfig.remove(subject);
457 }
458
459 @Override
460 public <S, C extends Config<S>> C getConfig(S subject, Class<C> configClass) {
461 if (configClass == BandwidthCapacity.class) {
462 return (C) classConfig.get(subject);
463 }
464 return null;
465 }
466
467 private class MockJsonNode extends JsonNodeFactory {
468 }
469
470 // Auxiliary delegate to receive notifications about changes applied to
471 // the network configuration - by the apps.
472 private class InternalApplyDelegate implements ConfigApplyDelegate {
473 @Override
474 public void onApply(Config config) {
475 }
476 }
477 }
478}