blob: acd8340f1cb1318cbbf88a7e2a9914df1e42ead2 [file] [log] [blame]
sunishvkf7c56552016-07-18 16:02:39 +05301/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2016-present Open Networking Foundation
sunishvkf7c56552016-07-18 16:02:39 +05303 *
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.provider.ospf.topology.impl;
18
19import com.fasterxml.jackson.databind.JsonNode;
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.net.ConnectPoint;
26import org.onosproject.net.Device;
27import org.onosproject.net.DeviceId;
28import org.onosproject.net.Link;
29import org.onosproject.net.MastershipRole;
30import org.onosproject.net.PortNumber;
31import org.onosproject.net.device.DeviceDescription;
32import org.onosproject.net.device.DeviceListener;
33import org.onosproject.net.device.DeviceProvider;
34import org.onosproject.net.device.DeviceProviderRegistry;
35import org.onosproject.net.device.DeviceProviderService;
36import org.onosproject.net.device.DeviceServiceAdapter;
37import org.onosproject.net.device.PortDescription;
38import org.onosproject.net.device.PortStatistics;
39import org.onosproject.net.link.LinkDescription;
40import org.onosproject.net.link.LinkListener;
41import org.onosproject.net.link.LinkProvider;
42import org.onosproject.net.link.LinkProviderRegistry;
43import org.onosproject.net.link.LinkProviderService;
44import org.onosproject.net.link.LinkServiceAdapter;
45import org.onosproject.net.provider.ProviderId;
46import org.onosproject.ospf.controller.OspfController;
47import org.onosproject.ospf.controller.OspfDeviceTed;
48import org.onosproject.ospf.controller.OspfLinkListener;
49import org.onosproject.ospf.controller.OspfLinkTed;
50import org.onosproject.ospf.controller.OspfProcess;
51import org.onosproject.ospf.controller.OspfRouter;
52import org.onosproject.ospf.controller.OspfRouterListener;
53import org.onosproject.ospf.controller.impl.OspfDeviceTedImpl;
54import org.onosproject.ospf.controller.impl.OspfLinkTedImpl;
55import org.onosproject.ospf.controller.impl.OspfRouterImpl;
56
57import java.util.Collection;
58import java.util.Collections;
59import java.util.HashSet;
60import java.util.List;
61import java.util.Set;
62import java.util.concurrent.CopyOnWriteArraySet;
63
64import static org.junit.Assert.*;
65
66/**
67 * Test cases for OSPF topology provider.
68 */
69public class OspfTopologyProviderTest {
70
71 private final OspfTopologyProvider provider = new OspfTopologyProvider();
72 private final TestDeviceRegistry nodeRegistry = new TestDeviceRegistry();
73 private final TestLinkRegistry linkRegistry = new TestLinkRegistry();
74 private final TestController controller = new TestController();
75 private final TestLinkService linkService = new TestLinkService();
76
77 @Before
78 public void setUp() throws Exception {
79 provider.deviceProviderRegistry = nodeRegistry;
80 provider.linkProviderRegistry = linkRegistry;
81 provider.controller = controller;
82 provider.linkService = linkService;
83 provider.activate();
84 assertNotNull("provider should be registered", nodeRegistry.provider);
85 assertNotNull("listener should be registered", controller.nodeListener);
86
87 }
88
89 @After
90 public void tearDown() throws Exception {
91 provider.deactivate();
92 assertNull("listener should be removed", controller.nodeListener);
93 provider.controller = null;
94 provider.deviceProviderRegistry = null;
95 }
96
97 @Test
98 public void triggerProbe() {
99 DeviceId deviceId = DeviceId.deviceId("2.2.2.2");
100 provider.triggerProbe(deviceId);
101 }
102
103 @Test
104 public void roleChanged() {
105 DeviceId deviceId = DeviceId.deviceId("2.2.2.2");
106 provider.roleChanged(deviceId, MastershipRole.MASTER);
107 }
108
109 @Test
110 public void changePortState() {
111 DeviceId deviceId = DeviceId.deviceId("2.2.2.2");
112 provider.changePortState(deviceId, PortNumber.portNumber(0), false);
113 }
114
115 @Test
116 public void isReachable() {
117 DeviceId deviceId = DeviceId.deviceId("1.1.1.1");
118 provider.isReachable(deviceId);
119 }
120
121 /* Validate node is added to the device validating URI, RIB should get updated properly */
122 @Test
123 public void ospfTopologyProviderTestAddDevice1() {
124 int deviceAddCount = 0;
125 OspfRouter ospfRouter = new OspfRouterImpl();
126 ospfRouter.setDr(false);
127 ospfRouter.setOpaque(false);
128 ospfRouter.setNeighborRouterId(Ip4Address.valueOf("2.2.2.2"));
129 ospfRouter.setInterfaceId(Ip4Address.valueOf("10.10.10.2"));
130 ospfRouter.setAreaIdOfInterface(Ip4Address.valueOf("5.5.5.5"));
131 ospfRouter.setRouterIp(Ip4Address.valueOf("1.1.1.1"));
132 OspfDeviceTed ospfDeviceTed = new OspfDeviceTedImpl();
133 ospfDeviceTed.setAbr(false);
134 ospfDeviceTed.setAsbr(false);
135 ospfRouter.setDeviceTed(ospfDeviceTed);
136 OspfLinkTed ospfLinkTed = new OspfLinkTedImpl();
137 ospfLinkTed.setMaximumLink(Bandwidth.bps(10));
138 ospfLinkTed.setMaxReserved(Bandwidth.bps(20));
139 ospfLinkTed.setTeMetric(10);
140 OspfRouter ospfRouter1 = new OspfRouterImpl();
141 ospfRouter1.setDr(true);
142 ospfRouter1.setOpaque(true);
143 ospfRouter1.setNeighborRouterId(Ip4Address.valueOf("2.2.2.2"));
144 ospfRouter1.setInterfaceId(Ip4Address.valueOf("10.10.10.2"));
145 ospfRouter1.setAreaIdOfInterface(Ip4Address.valueOf("5.5.5.5"));
146 ospfRouter1.setRouterIp(Ip4Address.valueOf("1.1.1.1"));
147 OspfDeviceTed ospfDeviceTed1 = new OspfDeviceTedImpl();
148 ospfDeviceTed1.setAbr(false);
149 ospfDeviceTed1.setAsbr(false);
150 ospfRouter.setDeviceTed(ospfDeviceTed);
151 OspfLinkTed ospfLinkTed1 = new OspfLinkTedImpl();
152 ospfLinkTed1.setMaximumLink(Bandwidth.bps(10));
153 ospfLinkTed1.setMaxReserved(Bandwidth.bps(20));
154 ospfLinkTed1.setTeMetric(10);
155 for (OspfRouterListener l : controller.nodeListener) {
156 l.routerAdded(ospfRouter);
157
158 deviceAddCount = nodeRegistry.connected.size();
159 assertTrue(deviceAddCount == 1);
160 l.routerRemoved(ospfRouter);
161 deviceAddCount = nodeRegistry.connected.size();
162 assertTrue(deviceAddCount == 0);
163 }
164 for (OspfLinkListener l : controller.linkListener) {
165 l.addLink(ospfRouter, ospfLinkTed);
166 l.deleteLink(ospfRouter, ospfLinkTed);
167
168 }
169 }
170
171 @Test
172 public void ospfTopologyProviderTestAddDevice2() {
173 int deviceAddCount = 0;
174 OspfRouter ospfRouter = new OspfRouterImpl();
175 ospfRouter.setDr(true);
176 ospfRouter.setOpaque(true);
177 ospfRouter.setNeighborRouterId(Ip4Address.valueOf("3.3.3.3"));
178 ospfRouter.setInterfaceId(Ip4Address.valueOf("10.10.10.3"));
179 ospfRouter.setAreaIdOfInterface(Ip4Address.valueOf("6.6.6.6"));
180 ospfRouter.setRouterIp(Ip4Address.valueOf("7.7.7.7"));
181 OspfDeviceTed ospfDeviceTed = new OspfDeviceTedImpl();
182 ospfDeviceTed.setAbr(true);
183 ospfDeviceTed.setAsbr(true);
184 ospfRouter.setDeviceTed(ospfDeviceTed);
185 OspfLinkTed ospfLinkTed = new OspfLinkTedImpl();
186 ospfLinkTed.setMaximumLink(Bandwidth.bps(30));
187 ospfLinkTed.setMaxReserved(Bandwidth.bps(40));
188 ospfLinkTed.setTeMetric(50);
189 for (OspfRouterListener l : controller.nodeListener) {
190 l.routerAdded(ospfRouter);
191 deviceAddCount = nodeRegistry.connected.size();
192 assertTrue(deviceAddCount == 1);
193 l.routerRemoved(ospfRouter);
194 deviceAddCount = nodeRegistry.connected.size();
195 assertTrue(deviceAddCount == 0);
196 }
197 }
198
199
200 /* Class implement device test registry */
201 private class TestDeviceRegistry implements DeviceProviderRegistry {
202 DeviceProvider provider;
203 Set<DeviceId> connected = new HashSet<>();
204
205 @Override
206 public DeviceProviderService register(DeviceProvider provider) {
207 this.provider = provider;
208 return new TestProviderService();
209 }
210
211 @Override
212 public void unregister(DeviceProvider provider) {
213 }
214
215 @Override
216 public Set<ProviderId> getProviders() {
217 return null;
218 }
219
220 private class TestProviderService implements DeviceProviderService {
221
222 @Override
223 public DeviceProvider provider() {
224 return null;
225 }
226
227 @Override
228 public void deviceConnected(DeviceId deviceId, DeviceDescription deviceDescription) {
229 connected.add(deviceId);
230 }
231
232 @Override
233 public void deviceDisconnected(DeviceId deviceId) {
234 connected.remove(deviceId);
235 }
236
237 @Override
238 public void updatePorts(DeviceId deviceId, List<PortDescription> portDescriptions) {
239 // TODO Auto-generated method stub
240 }
241
242 @Override
243 public void portStatusChanged(DeviceId deviceId, PortDescription portDescription) {
244 // TODO Auto-generated method stub
245 }
246
247 @Override
248 public void receivedRoleReply(DeviceId deviceId, MastershipRole requested, MastershipRole response) {
249 // TODO Auto-generated method stub
250 }
251
252 @Override
253 public void updatePortStatistics(DeviceId deviceId, Collection<PortStatistics> portStatistics) {
254 // TODO Auto-generated method stub
255 }
256 }
257 }
258
259 private class TestDeviceService extends DeviceServiceAdapter {
260 private DeviceListener listener;
261
262 @Override
263 public void addListener(DeviceListener listener) {
264 this.listener = listener;
265 }
266
267 @Override
268 public Iterable<Device> getDevices() {
269 return Collections.emptyList();
270 }
271 }
272
273 private class TestLinkService extends LinkServiceAdapter {
274 private LinkListener listener;
275
276 @Override
277 public void addListener(LinkListener listener) {
278 this.listener = listener;
279 }
280
281 @Override
282 public Iterable<Link> getLinks() {
283 return Collections.emptyList();
284 }
285 }
286
287 /* Class implement device test registry */
288 private class TestLinkRegistry implements LinkProviderRegistry {
289 LinkProvider provider;
290 Set<DeviceId> connected = new HashSet<>();
291
292 @Override
293 public LinkProviderService register(LinkProvider provider) {
294 this.provider = provider;
295 return new TestLinkProviderService();
296 }
297
298 @Override
299 public void unregister(LinkProvider provider) {
300 }
301
302 @Override
303 public Set<ProviderId> getProviders() {
304 return null;
305 }
306
307 private class TestLinkProviderService implements LinkProviderService {
308 @Override
309 public void linkDetected(LinkDescription linkDescription) {
310 }
311
312 @Override
313 public void linkVanished(LinkDescription linkDescription) {
314 }
315
316 @Override
317 public void linksVanished(ConnectPoint connectPoint) {
318 }
319
320 @Override
321 public void linksVanished(DeviceId deviceId) {
322 }
323
324 @Override
325 public LinkProvider provider() {
326 return null;
327 }
328 }
329 }
330
331 /* class implement test controller */
332 private class TestController implements OspfController {
333 protected Set<OspfRouterListener> nodeListener = new CopyOnWriteArraySet<>();
334 protected Set<OspfLinkListener> linkListener = new CopyOnWriteArraySet<>();
335
336 @Override
337 public void addRouterListener(OspfRouterListener nodeListener) {
338 this.nodeListener.add(nodeListener);
339 }
340
341 @Override
342 public void removeRouterListener(OspfRouterListener nodeListener) {
343 this.nodeListener = null;
344 }
345
346 @Override
347 public void addLinkListener(OspfLinkListener listener) {
348 this.linkListener.add(listener);
349 }
350
351 @Override
352 public void removeLinkListener(OspfLinkListener listener) {
353 this.nodeListener = null;
354 }
355
356 @Override
357 public void updateConfig(JsonNode processesNode) {
358 }
359
360
361 @Override
362 public void deleteConfig(List<OspfProcess> processes, String attribute) {
363 }
364
365 @Override
366 public Set<OspfRouterListener> listener() {
367 return null;
368 }
369
370 @Override
371 public Set<OspfLinkListener> linkListener() {
372 return null;
373 }
374
375 @Override
376 public List<OspfProcess> getAllConfiguredProcesses() {
377 return null;
378 }
379 }
380}