blob: 9e1992e3f8470c016dc6cc5f04fed93c15baf1d5 [file] [log] [blame]
Shashikanth VH1ca26ce2015-11-20 23:19:49 +05301/*
Brian O'Connor5ab426f2016-04-09 01:19:45 -07002 * Copyright 2015-present Open Networking Laboratory
Shashikanth VH1ca26ce2015-11-20 23:19:49 +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 */
13package org.onosproject.provider.bgp.topology.impl;
14
Priyanka Bfc51c952016-03-26 14:30:33 +053015import static org.hamcrest.MatcherAssert.assertThat;
16import static org.hamcrest.core.Is.is;
17import static org.hamcrest.core.IsNot.not;
18import static org.onosproject.net.Link.State.ACTIVE;
Priyanka B658aa6982016-05-27 21:34:49 +053019import static org.onosproject.net.MastershipRole.MASTER;
20import static org.hamcrest.Matchers.nullValue;
Shashikanth VH1ca26ce2015-11-20 23:19:49 +053021
22import java.util.Collection;
Priyanka Bfc51c952016-03-26 14:30:33 +053023import java.util.HashMap;
Shashikanth VH1ca26ce2015-11-20 23:19:49 +053024import java.util.HashSet;
25import java.util.LinkedList;
26import java.util.List;
27import java.util.Map;
28import java.util.Set;
29import java.util.concurrent.CopyOnWriteArraySet;
30
31import org.junit.After;
32import org.junit.Before;
33import org.junit.Test;
Priyanka B658aa6982016-05-27 21:34:49 +053034import org.onlab.junit.TestUtils;
35import org.onlab.junit.TestUtils.TestUtilsException;
Priyanka Bfc51c952016-03-26 14:30:33 +053036import org.onlab.packet.ChassisId;
Priyanka B658aa6982016-05-27 21:34:49 +053037import org.onlab.packet.Ip4Address;
38import org.onlab.util.Bandwidth;
Priyanka Bfc51c952016-03-26 14:30:33 +053039import org.onosproject.bgp.controller.BgpLinkListener;
Shashikanth VH1ca26ce2015-11-20 23:19:49 +053040import org.onosproject.bgp.controller.BgpNodeListener;
Shashikanth VH5dd8dbe2015-11-26 13:22:18 +053041import org.onosproject.bgpio.exceptions.BgpParseException;
Priyanka Bfc51c952016-03-26 14:30:33 +053042import org.onosproject.bgpio.protocol.linkstate.BgpLinkLSIdentifier;
43import org.onosproject.bgpio.protocol.linkstate.BgpLinkLsNlriVer4;
Shashikanth VH5dd8dbe2015-11-26 13:22:18 +053044import org.onosproject.bgpio.protocol.linkstate.BgpNodeLSIdentifier;
45import org.onosproject.bgpio.protocol.linkstate.BgpNodeLSNlriVer4;
Priyanka Bfc51c952016-03-26 14:30:33 +053046import org.onosproject.bgpio.protocol.linkstate.BgpNodeLSNlriVer4.ProtocolType;
Shashikanth VH1ca26ce2015-11-20 23:19:49 +053047import org.onosproject.bgpio.protocol.linkstate.NodeDescriptors;
Priyanka Bfc51c952016-03-26 14:30:33 +053048import org.onosproject.bgpio.protocol.linkstate.PathAttrNlriDetails;
Shashikanth VH1ca26ce2015-11-20 23:19:49 +053049import org.onosproject.bgpio.types.AutonomousSystemTlv;
Shashikanth VH5dd8dbe2015-11-26 13:22:18 +053050import org.onosproject.bgpio.types.BgpValueType;
Priyanka Bfc51c952016-03-26 14:30:33 +053051import org.onosproject.bgpio.types.IsIsNonPseudonode;
Priyanka B658aa6982016-05-27 21:34:49 +053052import org.onosproject.bgpio.types.LinkStateAttributes;
53import org.onosproject.incubator.net.resource.label.LabelResourceAdminService;
54import org.onosproject.incubator.net.resource.label.LabelResourceId;
55import org.onosproject.incubator.net.resource.label.LabelResourcePool;
Priyanka B658aa6982016-05-27 21:34:49 +053056import org.onosproject.mastership.MastershipServiceAdapter;
Priyanka B658aa6982016-05-27 21:34:49 +053057import org.onosproject.net.link.LinkServiceAdapter;
Priyanka Bfc51c952016-03-26 14:30:33 +053058import org.onosproject.bgpio.types.LinkLocalRemoteIdentifiersTlv;
Shashikanth VH1ca26ce2015-11-20 23:19:49 +053059import org.onosproject.bgpio.types.RouteDistinguisher;
Priyanka B658aa6982016-05-27 21:34:49 +053060import org.onosproject.bgpio.types.attr.BgpAttrNodeFlagBitTlv;
61import org.onosproject.bgpio.types.attr.BgpAttrNodeIsIsAreaId;
62import org.onosproject.bgpio.types.attr.BgpAttrRouterIdV4;
63import org.onosproject.bgpio.types.attr.BgpLinkAttrIgpMetric;
64import org.onosproject.bgpio.types.attr.BgpLinkAttrMaxLinkBandwidth;
65import org.onosproject.bgpio.types.attr.BgpLinkAttrTeDefaultMetric;
Shashikanth VH1ca26ce2015-11-20 23:19:49 +053066import org.onosproject.bgpio.util.Constants;
Priyanka B658aa6982016-05-27 21:34:49 +053067import org.onosproject.cluster.NodeId;
Priyanka Bfc51c952016-03-26 14:30:33 +053068import org.onosproject.net.ConnectPoint;
Priyanka B4c3b4512016-07-22 11:41:49 +053069import org.onosproject.net.DefaultAnnotations;
Priyanka Bfc51c952016-03-26 14:30:33 +053070import org.onosproject.net.DefaultDevice;
71import org.onosproject.net.DefaultLink;
72import org.onosproject.net.Device;
Shashikanth VH1ca26ce2015-11-20 23:19:49 +053073import org.onosproject.net.DeviceId;
Priyanka Bfc51c952016-03-26 14:30:33 +053074import org.onosproject.net.Link;
Shashikanth VH1ca26ce2015-11-20 23:19:49 +053075import org.onosproject.net.MastershipRole;
Priyanka B658aa6982016-05-27 21:34:49 +053076import org.onosproject.net.PortNumber;
77import org.onosproject.net.config.Config;
78import org.onosproject.net.config.ConfigApplyDelegate;
79import org.onosproject.net.config.ConfigFactory;
80import org.onosproject.net.config.NetworkConfigRegistryAdapter;
Shashikanth VH1ca26ce2015-11-20 23:19:49 +053081import org.onosproject.net.device.DeviceDescription;
Priyanka B4c3b4512016-07-22 11:41:49 +053082import org.onosproject.net.device.DeviceEvent;
83import org.onosproject.net.device.DeviceListener;
Shashikanth VH1ca26ce2015-11-20 23:19:49 +053084import org.onosproject.net.device.DeviceProvider;
85import org.onosproject.net.device.DeviceProviderRegistry;
86import org.onosproject.net.device.DeviceProviderService;
Priyanka Bfc51c952016-03-26 14:30:33 +053087import org.onosproject.net.device.DeviceServiceAdapter;
Shashikanth VH1ca26ce2015-11-20 23:19:49 +053088import org.onosproject.net.device.PortDescription;
89import org.onosproject.net.device.PortStatistics;
Priyanka Bfc51c952016-03-26 14:30:33 +053090import org.onosproject.net.link.LinkDescription;
91import org.onosproject.net.link.LinkProvider;
92import org.onosproject.net.link.LinkProviderRegistry;
93import org.onosproject.net.link.LinkProviderService;
Shashikanth VH1ca26ce2015-11-20 23:19:49 +053094import org.onosproject.net.provider.ProviderId;
Priyanka B4c3b4512016-07-22 11:41:49 +053095import org.onosproject.net.config.basics.BandwidthCapacity;
Priyanka B658aa6982016-05-27 21:34:49 +053096import org.onosproject.net.resource.Resource;
97import org.onosproject.net.resource.ResourceAdminService;
98import org.onosproject.net.resource.ResourceId;
99
100import com.fasterxml.jackson.databind.JsonNode;
101import com.fasterxml.jackson.databind.ObjectMapper;
102import com.fasterxml.jackson.databind.node.JsonNodeFactory;
103import com.fasterxml.jackson.databind.node.ObjectNode;
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530104
Priyanka Bfc51c952016-03-26 14:30:33 +0530105/**
106 * Test for BGP topology provider.
107 */
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530108public class BgpTopologyProviderTest {
Priyanka B9bee0802016-04-27 22:06:02 +0530109 private static final DeviceId DID2 = DeviceId.deviceId("l3:rd=0::routinguniverse=0:asn=10");
Sho SHIMIZUca596942016-08-18 09:41:20 -0700110 private static final String UNKNOWN = "unknown";
Priyanka B9bee0802016-04-27 22:06:02 +0530111 public static ProviderId providerId = new ProviderId("l3", "foo");
Priyanka B658aa6982016-05-27 21:34:49 +0530112 private static final NodeId NODE1 = new NodeId("Master1");
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530113
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530114 private final BgpTopologyProvider provider = new BgpTopologyProvider();
115 private final TestDeviceRegistry nodeRegistry = new TestDeviceRegistry();
Priyanka Bfc51c952016-03-26 14:30:33 +0530116 private final TestLinkRegistry linkRegistry = new TestLinkRegistry();
117 private final MockBgpController controller = new MockBgpController();
118 private MockDeviceService deviceService = new MockDeviceService();
Priyanka B658aa6982016-05-27 21:34:49 +0530119 private MockLinkService linkService = new MockLinkService();
120 private MockMastershipService mastershipService = new MockMastershipService();
121 private MockNetConfigRegistryAdapter networkConfigService = new MockNetConfigRegistryAdapter();
122 private MockLabelResourceService labelResourceAdminService = new MockLabelResourceService();
Priyanka Bfc51c952016-03-26 14:30:33 +0530123 private Map<DeviceId, Device> deviceMap = new HashMap<>();
Priyanka B4c3b4512016-07-22 11:41:49 +0530124 private DeviceListener listener;
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530125
126 @Before
Priyanka B658aa6982016-05-27 21:34:49 +0530127 public void startUp() throws TestUtilsException {
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530128 provider.deviceProviderRegistry = nodeRegistry;
Priyanka Bfc51c952016-03-26 14:30:33 +0530129 provider.linkProviderRegistry = linkRegistry;
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530130 provider.controller = controller;
Priyanka Bfc51c952016-03-26 14:30:33 +0530131 provider.deviceService = deviceService;
Priyanka B658aa6982016-05-27 21:34:49 +0530132 provider.linkService = linkService;
133 provider.labelResourceAdminService = labelResourceAdminService;
134 provider.mastershipService = mastershipService;
135 provider.networkConfigService = networkConfigService;
Priyanka B4c3b4512016-07-22 11:41:49 +0530136 listener = TestUtils.getField(provider, "deviceListener");
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530137 provider.activate();
Priyanka Bfc51c952016-03-26 14:30:33 +0530138 assertThat("device provider should be registered", not(nodeRegistry.provider));
139 assertThat("link provider should be registered", not(linkRegistry.linkProvider));
140 assertThat("node listener should be registered", not(controller.nodeListener));
141 assertThat("link listener should be registered", not(controller.linkListener));
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530142 }
143
144 @After
145 public void tearDown() {
146 provider.deactivate();
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530147 provider.controller = null;
Priyanka Bfc51c952016-03-26 14:30:33 +0530148 provider.deviceService = null;
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530149 provider.deviceProviderRegistry = null;
Priyanka B658aa6982016-05-27 21:34:49 +0530150 provider.linkService = null;
151 provider.mastershipService = null;
152 provider.networkConfigService = null;
153 provider.labelResourceAdminService = null;
Priyanka Bfc51c952016-03-26 14:30:33 +0530154 assertThat(controller.nodeListener, is(new HashSet<BgpNodeListener>()));
155 assertThat(controller.linkListener, is(new HashSet<BgpLinkListener>()));
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530156 }
157
Priyanka B658aa6982016-05-27 21:34:49 +0530158 private class MockLabelResourceService implements LabelResourceAdminService {
159
160 Map<DeviceId, LabelResourcePool> resourcePool = new HashMap<>();
161
162 @Override
163 public boolean createDevicePool(DeviceId deviceId, LabelResourceId beginLabel, LabelResourceId endLabel) {
164 LabelResourcePool labelResource = new LabelResourcePool(deviceId.toString(),
165 beginLabel.labelId(),
166 endLabel.labelId());
167 if (resourcePool.containsValue(labelResource)) {
168 return false;
169 }
170
171 resourcePool.put(deviceId, labelResource);
172 return true;
173 }
174
175 @Override
176 public boolean createGlobalPool(LabelResourceId beginLabel, LabelResourceId endLabel) {
177 // TODO Auto-generated method stub
178 return false;
179 }
180
181 @Override
182 public boolean destroyDevicePool(DeviceId deviceId) {
183 LabelResourcePool devicePool = resourcePool.get(deviceId);
184
185 if (devicePool == null) {
186 return false;
187 }
188
189 resourcePool.remove(deviceId);
190 return true;
191 }
192
193 @Override
194 public boolean destroyGlobalPool() {
195 // TODO Auto-generated method stub
196 return false;
197 }
198 }
199
200 /* Mock test for device service */
201 private class MockNetConfigRegistryAdapter extends NetworkConfigRegistryAdapter {
202 private ConfigFactory cfgFactory;
203 private Map<ConnectPoint, BandwidthCapacity> classConfig = new HashMap<>();
204
205 @Override
206 public void registerConfigFactory(ConfigFactory configFactory) {
207 cfgFactory = configFactory;
208 }
209
210 @Override
211 public void unregisterConfigFactory(ConfigFactory configFactory) {
212 cfgFactory = null;
213 }
214
215 @Override
216 public <S, C extends Config<S>> C addConfig(S subject, Class<C> configClass) {
217 if (configClass == BandwidthCapacity.class) {
218 BandwidthCapacity devCap = new BandwidthCapacity();
219 classConfig.put((ConnectPoint) subject, devCap);
220
221 JsonNode node = new ObjectNode(new MockJsonNode());
222 ObjectMapper mapper = new ObjectMapper();
223 ConfigApplyDelegate delegate = new InternalApplyDelegate();
224 devCap.init((ConnectPoint) subject, null, node, mapper, delegate);
225 return (C) devCap;
226 }
227
228 return null;
229 }
230
231 @Override
232 public <S, C extends Config<S>> void removeConfig(S subject, Class<C> configClass) {
233 classConfig.remove(subject);
234 }
235
236 @Override
237 public <S, C extends Config<S>> C getConfig(S subject, Class<C> configClass) {
238 if (configClass == BandwidthCapacity.class) {
239 return (C) classConfig.get(subject);
240 }
241 return null;
242 }
243
244 private class MockJsonNode extends JsonNodeFactory {
245 }
246
247 // Auxiliary delegate to receive notifications about changes applied to
248 // the network configuration - by the apps.
249 private class InternalApplyDelegate implements ConfigApplyDelegate {
250 @Override
251 public void onApply(Config config) {
252 }
253 }
254 }
255
256 private class MockMastershipService extends MastershipServiceAdapter {
257 @Override
258 public MastershipRole getLocalRole(DeviceId deviceId) {
259 return MASTER;
260 }
261
262 @Override
263 public boolean isLocalMaster(DeviceId deviceId) {
264 return getLocalRole(deviceId) == MASTER;
265 }
266
267 @Override
268 public NodeId getMasterFor(DeviceId deviceId) {
269 return NODE1;
270 }
271 }
272
273 private class MockResourceAdminService implements ResourceAdminService {
274 Map<ResourceId, List<Resource>> registeredRes = new HashMap<>();
275
276 @Override
Sho SHIMIZUef835c92016-08-08 13:51:17 -0700277 public boolean register(List<? extends Resource> resources) {
Priyanka B658aa6982016-05-27 21:34:49 +0530278 for (Resource res : resources) {
279 List<Resource> resource = new LinkedList<>();
280 resource.add(res);
281 if (registeredRes.containsKey(res.id())) {
282 resource.addAll(registeredRes.get(res.id()));
283 }
284 registeredRes.put(res.id(), resource);
285 }
286 return true;
287 }
288
289 @Override
Sho SHIMIZUef835c92016-08-08 13:51:17 -0700290 public boolean unregister(List<? extends ResourceId> ids) {
Priyanka B658aa6982016-05-27 21:34:49 +0530291 for (ResourceId id : ids) {
292 if (registeredRes.containsKey(id)) {
293 registeredRes.remove(id);
294 } else {
295 return false;
296 }
297 }
298 return true;
299 }
300 }
301
302 private class MockLinkService extends LinkServiceAdapter {
303
304 @Override
305 public Link getLink(ConnectPoint src, ConnectPoint dst) {
306 for (Link link : linkRegistry.links) {
307 if (link.src().equals(src) && link.dst().equals(dst)) {
308 return link;
309 }
310 }
311 return null;
312 }
313 }
314
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530315 /* Class implement device test registry */
316 private class TestDeviceRegistry implements DeviceProviderRegistry {
317 DeviceProvider provider;
318
319 Set<DeviceId> connected = new HashSet<>();
Priyanka B658aa6982016-05-27 21:34:49 +0530320 Map<DeviceId, List<PortDescription>> portUpdated = new HashMap<>();
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530321
322 @Override
323 public DeviceProviderService register(DeviceProvider provider) {
324 this.provider = provider;
325 return new TestProviderService();
326 }
327
328 @Override
329 public void unregister(DeviceProvider provider) {
330 }
331
332 @Override
333 public Set<ProviderId> getProviders() {
334 return null;
335 }
336
337 private class TestProviderService implements DeviceProviderService {
338
339 @Override
340 public DeviceProvider provider() {
341 return null;
342 }
343
344 @Override
345 public void deviceConnected(DeviceId deviceId, DeviceDescription deviceDescription) {
Priyanka Bfc51c952016-03-26 14:30:33 +0530346 if (!deviceId.equals(DID2)) {
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530347 connected.add(deviceId);
Priyanka Bfc51c952016-03-26 14:30:33 +0530348 Device device = new DefaultDevice(BgpTopologyProviderTest.providerId, deviceId, Device.Type.ROUTER,
Priyanka B658aa6982016-05-27 21:34:49 +0530349 UNKNOWN, UNKNOWN, UNKNOWN, UNKNOWN, new ChassisId(), deviceDescription.annotations());
Priyanka Bfc51c952016-03-26 14:30:33 +0530350 deviceMap.put(deviceId, device);
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530351 }
352 }
353
354 @Override
355 public void deviceDisconnected(DeviceId deviceId) {
Priyanka Bfc51c952016-03-26 14:30:33 +0530356 if (!deviceId.equals(DID2)) {
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530357 connected.remove(deviceId);
Priyanka Bfc51c952016-03-26 14:30:33 +0530358 deviceMap.remove(deviceId);
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530359 }
360 }
361
362 @Override
363 public void updatePorts(DeviceId deviceId, List<PortDescription> portDescriptions) {
Priyanka B658aa6982016-05-27 21:34:49 +0530364 portUpdated.put(deviceId, portDescriptions);
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530365 }
366
367 @Override
368 public void portStatusChanged(DeviceId deviceId, PortDescription portDescription) {
369 // TODO Auto-generated method stub
370
371 }
372
373 @Override
374 public void receivedRoleReply(DeviceId deviceId, MastershipRole requested, MastershipRole response) {
375 // TODO Auto-generated method stub
376
377 }
378
379 @Override
380 public void updatePortStatistics(DeviceId deviceId, Collection<PortStatistics> portStatistics) {
381 // TODO Auto-generated method stub
382
383 }
384 }
385 }
386
Priyanka Bfc51c952016-03-26 14:30:33 +0530387 /* Class implement device test registry */
388 private class TestLinkRegistry implements LinkProviderRegistry {
389 LinkProvider linkProvider;
390 Set<Link> links = new HashSet<>();
391
392 @Override
393 public LinkProviderService register(LinkProvider provider) {
394 this.linkProvider = provider;
395 return new TestProviderService();
396 }
397
398 @Override
399 public void unregister(LinkProvider provider) {
400 // TODO Auto-generated method stub
401 }
402
403 @Override
404 public Set<ProviderId> getProviders() {
405 return null;
406 }
407
408 private class TestProviderService implements LinkProviderService {
409
410 @Override
411 public void linkDetected(LinkDescription linkDescription) {
Priyanka B658aa6982016-05-27 21:34:49 +0530412 links.add(DefaultLink.builder()
413 .src(linkDescription.src())
414 .dst(linkDescription.dst())
415 .state(ACTIVE)
416 .type(linkDescription.type())
417 .providerId(BgpTopologyProviderTest.providerId)
418 .annotations(linkDescription.annotations())
419 .build());
Priyanka Bfc51c952016-03-26 14:30:33 +0530420 }
421
422 @Override
423 public void linkVanished(LinkDescription linkDescription) {
424 links.remove(DefaultLink.builder().src(linkDescription.src())
425 .dst(linkDescription.dst()).state(ACTIVE).type(linkDescription.type())
426 .providerId(BgpTopologyProviderTest.providerId).build());
427 }
428
429 @Override
430 public void linksVanished(ConnectPoint connectPoint) {
431 // TODO Auto-generated method stub
432 }
433
434 @Override
435 public void linksVanished(DeviceId deviceId) {
436 // TODO Auto-generated method stub
437 }
438
439 @Override
440 public LinkProvider provider() {
441 // TODO Auto-generated method stub
442 return null;
443 }
444 }
445 }
446
447 /* Test class for BGP controller */
448 private class MockBgpController extends BgpControllerAdapter {
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530449 protected Set<BgpNodeListener> nodeListener = new CopyOnWriteArraySet<>();
Priyanka Bfc51c952016-03-26 14:30:33 +0530450 protected Set<BgpLinkListener> linkListener = new CopyOnWriteArraySet<>();
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530451
452 @Override
453 public void addListener(BgpNodeListener nodeListener) {
454 this.nodeListener.add(nodeListener);
455 }
456
457 @Override
458 public void removeListener(BgpNodeListener nodeListener) {
Priyanka Bfc51c952016-03-26 14:30:33 +0530459 this.nodeListener.remove(nodeListener);
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530460 }
461
462 @Override
Priyanka Bfc51c952016-03-26 14:30:33 +0530463 public void addLinkListener(BgpLinkListener linkListener) {
464 this.linkListener.add(linkListener);
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530465 }
466
467 @Override
Priyanka Bfc51c952016-03-26 14:30:33 +0530468 public void removeLinkListener(BgpLinkListener linkListener) {
469 this.linkListener.remove(linkListener);
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530470 }
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530471 }
472
Priyanka Bfc51c952016-03-26 14:30:33 +0530473 /* Mock test for device service */
474 private class MockDeviceService extends DeviceServiceAdapter {
475 @Override
476 public Device getDevice(DeviceId deviceId) {
477 return deviceMap.get(deviceId);
478 }
479 }
480
481 /**
482 * Validate node is added to the device validating URI, RIB should get updated properly.
483 */
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530484 @Test
485 public void bgpTopologyProviderTestAddDevice1() {
Priyanka Bfc51c952016-03-26 14:30:33 +0530486 LinkedList<BgpValueType> subTlvs = new LinkedList<>();
Shashikanth VH5dd8dbe2015-11-26 13:22:18 +0530487 BgpValueType tlv = new AutonomousSystemTlv(100);
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530488 short deslength = AutonomousSystemTlv.LENGTH;
489 short desType = AutonomousSystemTlv.TYPE;
490
491 subTlvs.add(tlv);
Shashikanth VH5dd8dbe2015-11-26 13:22:18 +0530492 BgpNodeLSIdentifier localNodeDescriptors = new BgpNodeLSIdentifier(new NodeDescriptors(subTlvs, deslength,
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530493 desType));
Shashikanth VH5dd8dbe2015-11-26 13:22:18 +0530494 BgpNodeLSNlriVer4 nodeNlri = new BgpNodeLSNlriVer4(0, (byte) Constants.DIRECT, localNodeDescriptors, false,
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530495 new RouteDistinguisher());
496
Priyanka Bfc51c952016-03-26 14:30:33 +0530497 PathAttrNlriDetails details = new PathAttrNlriDetails();
498 details.setIdentifier(0);
499 details.setProtocolID(ProtocolType.DIRECT);
500 List<BgpValueType> pathAttributes = new LinkedList<>();
501 details.setPathAttribute(pathAttributes);
502
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530503 for (BgpNodeListener l : controller.nodeListener) {
Priyanka Bfc51c952016-03-26 14:30:33 +0530504 l.addNode(nodeNlri, details);
505 assertThat(nodeRegistry.connected.size(), is(1));
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530506 l.deleteNode(nodeNlri);
Priyanka Bfc51c952016-03-26 14:30:33 +0530507 assertThat(nodeRegistry.connected.size(), is(0));
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530508 }
509 }
510
Priyanka Bfc51c952016-03-26 14:30:33 +0530511 /**
512 * Validate node is not added to the device for invalid URI, RIB count should be zero.
513 */
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530514 @Test
515 public void bgpTopologyProviderTestAddDevice2() {
Shashikanth VH5dd8dbe2015-11-26 13:22:18 +0530516 LinkedList<BgpValueType> subTlvs;
517 BgpValueType tlv = new AutonomousSystemTlv(10);
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530518 short deslength = AutonomousSystemTlv.LENGTH;
519 short desType = AutonomousSystemTlv.TYPE;
520
Priyanka Bfc51c952016-03-26 14:30:33 +0530521 PathAttrNlriDetails details = new PathAttrNlriDetails();
522 details.setIdentifier(0);
523 details.setProtocolID(ProtocolType.DIRECT);
524 List<BgpValueType> pathAttributes = new LinkedList<>();
525 details.setPathAttribute(pathAttributes);
526
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530527 subTlvs = new LinkedList<>();
528 subTlvs.add(tlv);
Shashikanth VH5dd8dbe2015-11-26 13:22:18 +0530529 BgpNodeLSIdentifier localNodeDescriptors = new BgpNodeLSIdentifier(new NodeDescriptors(subTlvs, deslength,
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530530 desType));
Shashikanth VH5dd8dbe2015-11-26 13:22:18 +0530531 BgpNodeLSNlriVer4 nodeNlri = new BgpNodeLSNlriVer4(0, (byte) Constants.DIRECT, localNodeDescriptors, false,
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530532 new RouteDistinguisher());
533
Priyanka Bfc51c952016-03-26 14:30:33 +0530534
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530535 for (BgpNodeListener l : controller.nodeListener) {
Priyanka Bfc51c952016-03-26 14:30:33 +0530536 l.addNode(nodeNlri, details);
537 assertThat(nodeRegistry.connected.size(), is(0));
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530538 }
539 }
540
Priyanka Bfc51c952016-03-26 14:30:33 +0530541 /**
542 * Delete node when node does not exist, RIB count should be zero.
543 */
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530544 @Test
545 public void bgpTopologyProviderTestAddDevice3() {
Shashikanth VH5dd8dbe2015-11-26 13:22:18 +0530546 LinkedList<BgpValueType> subTlvs;
547 BgpValueType tlv = new AutonomousSystemTlv(10);
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530548 short deslength = AutonomousSystemTlv.LENGTH;
549 short desType = AutonomousSystemTlv.TYPE;
550
551 subTlvs = new LinkedList<>();
552 subTlvs.add(tlv);
Shashikanth VH5dd8dbe2015-11-26 13:22:18 +0530553 BgpNodeLSIdentifier localNodeDescriptors = new BgpNodeLSIdentifier(new NodeDescriptors(subTlvs, deslength,
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530554 desType));
Shashikanth VH5dd8dbe2015-11-26 13:22:18 +0530555 BgpNodeLSNlriVer4 nodeNlri = new BgpNodeLSNlriVer4(0, (byte) Constants.DIRECT, localNodeDescriptors, false,
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530556 new RouteDistinguisher());
557
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530558 for (BgpNodeListener l : controller.nodeListener) {
559 l.deleteNode(nodeNlri);
Priyanka Bfc51c952016-03-26 14:30:33 +0530560 assertThat(nodeRegistry.connected.size(), is(0));
561 }
562 }
563
Priyanka B658aa6982016-05-27 21:34:49 +0530564
565 /**
566 * Validate node is added to the device with all device annotations.
567 */
568 @Test
569 public void bgpTopologyProviderTestAddDevice4() {
570 LinkedList<BgpValueType> subTlvs = new LinkedList<>();
571 BgpValueType tlv = new AutonomousSystemTlv(100);
572 short deslength = AutonomousSystemTlv.LENGTH;
573 short desType = AutonomousSystemTlv.TYPE;
574
575 subTlvs.add(tlv);
576 BgpNodeLSIdentifier localNodeDescriptors = new BgpNodeLSIdentifier(new NodeDescriptors(subTlvs, deslength,
577 desType));
578 BgpNodeLSNlriVer4 nodeNlri = new BgpNodeLSNlriVer4(0, (byte) Constants.DIRECT, localNodeDescriptors, false,
579 new RouteDistinguisher());
580
581 PathAttrNlriDetails details = new PathAttrNlriDetails();
582 details.setIdentifier(0);
583 details.setProtocolID(ProtocolType.DIRECT);
584 List<BgpValueType> pathAttributes = new LinkedList<>();
585 List<BgpValueType> linkStateAttr = new LinkedList<>();
586 tlv = BgpAttrNodeFlagBitTlv.of(true, true, true, false);
587 linkStateAttr.add(tlv);
588 tlv = BgpAttrNodeIsIsAreaId.of(new byte[] {01, 01, 01, 01});
589 linkStateAttr.add(tlv);
590 tlv = BgpAttrRouterIdV4.of(Ip4Address.valueOf("1.1.1.1"), LinkStateAttributes.ATTR_NODE_IPV4_LOCAL_ROUTER_ID);
591 linkStateAttr.add(tlv);
592 pathAttributes.add(new LinkStateAttributes(linkStateAttr));
593 details.setPathAttribute(pathAttributes);
594
595 for (BgpNodeListener l : controller.nodeListener) {
596 l.addNode(nodeNlri, details);
597
598 assertThat(deviceMap.values().iterator().next().annotations().value(BgpTopologyProvider.ABR_BIT),
599 is("false"));
600 assertThat(deviceMap.values().iterator().next().annotations().value(BgpTopologyProvider.EXTERNAL_BIT),
601 is("true"));
602 assertThat(deviceMap.values().iterator().next().annotations().value(BgpTopologyProvider.INTERNAL_BIT),
603 is("false"));
604 assertThat(deviceMap.values().iterator().next().annotations().value(BgpTopologyProvider.PSEUDO),
605 is("false"));
606 assertThat(deviceMap.values().iterator().next().annotations().value(BgpTopologyProvider.AREAID).getBytes(),
607 is(new byte[] {01, 01, 01, 01}));
608 assertThat(deviceMap.values().iterator().next().annotations().value(BgpTopologyProvider.LSRID),
609 is("1.1.1.1"));
610
611 assertThat(nodeRegistry.connected.size(), is(1));
612 l.deleteNode(nodeNlri);
613 assertThat(nodeRegistry.connected.size(), is(0));
614 }
615 }
616
Priyanka Bfc51c952016-03-26 14:30:33 +0530617 /**
618 * Add a link and two devices.
619 *
620 * @throws BgpParseException while adding a link.
621 */
622 @Test
623 public void bgpTopologyProviderTestAddLink1() throws BgpParseException {
624 LinkedList<BgpValueType> localTlvs = new LinkedList<>();
625 LinkedList<BgpValueType> remoteTlvs = new LinkedList<>();
626 LinkedList<BgpValueType> linkdes = new LinkedList<>();
627 BgpValueType tlv = new AutonomousSystemTlv(10);
628 short deslength = AutonomousSystemTlv.LENGTH;
629 short desType = AutonomousSystemTlv.TYPE;
630
631 localTlvs.add(tlv);
632 remoteTlvs.add(tlv);
633 tlv = IsIsNonPseudonode.of(new byte[] {20, 20, 20, 20, 00, 20});
634 localTlvs.add(tlv);
635 tlv = IsIsNonPseudonode.of(new byte[] {30, 30, 30, 30, 00, 30});
636 remoteTlvs.add(tlv);
637 NodeDescriptors localNode = new NodeDescriptors(localTlvs, deslength, desType);
638 NodeDescriptors remoteNode = new NodeDescriptors(remoteTlvs, deslength, desType);
639 BgpNodeLSIdentifier localNodeDescriptors = new BgpNodeLSIdentifier(localNode);
640 BgpNodeLSNlriVer4 nodeNlri = new BgpNodeLSNlriVer4(0, (byte) Constants.DIRECT, localNodeDescriptors, false,
641 new RouteDistinguisher());
642
643 BgpNodeLSIdentifier remoteNodeDescriptors = new BgpNodeLSIdentifier(remoteNode);
644 BgpNodeLSNlriVer4 remNodeNlri = new BgpNodeLSNlriVer4(0, (byte) Constants.DIRECT, remoteNodeDescriptors, false,
645 new RouteDistinguisher());
646
647 PathAttrNlriDetails details = new PathAttrNlriDetails();
648 details.setIdentifier(0);
649 details.setProtocolID(ProtocolType.DIRECT);
650 List<BgpValueType> pathAttributes = new LinkedList<>();
651 details.setPathAttribute(pathAttributes);
652
653 tlv = LinkLocalRemoteIdentifiersTlv.of(99, 100);
654 linkdes.add(tlv);
655 BgpLinkLSIdentifier linkId = new BgpLinkLSIdentifier(localNode, remoteNode, linkdes);
656 BgpLinkLsNlriVer4 linkNlri = new BgpLinkLsNlriVer4((byte) Constants.DIRECT, 0, linkId,
657 new RouteDistinguisher(), false);
658 for (BgpNodeListener l : controller.nodeListener) {
659 l.addNode(nodeNlri, details);
660 assertThat(nodeRegistry.connected.size(), is(1));
661 l.addNode(remNodeNlri, details);
662 assertThat(nodeRegistry.connected.size(), is(2));
663 }
664 for (BgpLinkListener l : controller.linkListener) {
665 l.addLink(linkNlri, details);
666 assertThat(linkRegistry.links.size(), is(1));
667 }
668 }
669
670 /**
671 * Add a link and delete a link.
672 *
673 * @throws BgpParseException while adding or removing the link
674 */
675 @Test
676 public void bgpTopologyProviderTestAddLink2() throws BgpParseException {
677 LinkedList<BgpValueType> localTlvs = new LinkedList<>();
678 LinkedList<BgpValueType> remoteTlvs = new LinkedList<>();
679 LinkedList<BgpValueType> linkdes = new LinkedList<>();
680 BgpValueType tlv = new AutonomousSystemTlv(10);
681 short deslength = AutonomousSystemTlv.LENGTH;
682 short desType = AutonomousSystemTlv.TYPE;
683
684 localTlvs.add(tlv);
685 remoteTlvs.add(tlv);
686 tlv = IsIsNonPseudonode.of(new byte[] {20, 20, 20, 20, 00, 20});
687 localTlvs.add(tlv);
688 tlv = IsIsNonPseudonode.of(new byte[] {30, 30, 30, 30, 00, 30});
689 remoteTlvs.add(tlv);
690 NodeDescriptors localNode = new NodeDescriptors(localTlvs, deslength, desType);
691 NodeDescriptors remoteNode = new NodeDescriptors(remoteTlvs, deslength, desType);
692 BgpNodeLSIdentifier localNodeDescriptors = new BgpNodeLSIdentifier(localNode);
693 BgpNodeLSNlriVer4 nodeNlri = new BgpNodeLSNlriVer4(0, (byte) Constants.DIRECT, localNodeDescriptors, false,
694 new RouteDistinguisher());
695
696 BgpNodeLSIdentifier remoteNodeDescriptors = new BgpNodeLSIdentifier(remoteNode);
697 BgpNodeLSNlriVer4 remNodeNlri = new BgpNodeLSNlriVer4(0, (byte) Constants.DIRECT, remoteNodeDescriptors, false,
698 new RouteDistinguisher());
699
700 PathAttrNlriDetails details = new PathAttrNlriDetails();
701 details.setIdentifier(0);
702 details.setProtocolID(ProtocolType.DIRECT);
703 List<BgpValueType> pathAttributes = new LinkedList<>();
704 details.setPathAttribute(pathAttributes);
705
706 tlv = LinkLocalRemoteIdentifiersTlv.of(99, 100);
707 linkdes.add(tlv);
708 BgpLinkLSIdentifier linkId = new BgpLinkLSIdentifier(localNode, remoteNode, linkdes);
709 BgpLinkLsNlriVer4 linkNlri = new BgpLinkLsNlriVer4((byte) Constants.DIRECT, 0, linkId,
710 new RouteDistinguisher(), false);
711 for (BgpNodeListener l : controller.nodeListener) {
712 l.addNode(nodeNlri, details);
713 assertThat(nodeRegistry.connected.size(), is(1));
714 l.addNode(remNodeNlri, details);
715 assertThat(nodeRegistry.connected.size(), is(2));
716 l.deleteNode(nodeNlri);
717 assertThat(nodeRegistry.connected.size(), is(1));
718 }
719 for (BgpLinkListener l : controller.linkListener) {
720 l.addLink(linkNlri, details);
721 assertThat(linkRegistry.links.size(), is(1));
722 l.deleteLink(linkNlri);
723 assertThat(linkRegistry.links.size(), is(0));
724 }
725 }
726
727 /**
Priyanka B658aa6982016-05-27 21:34:49 +0530728 * Add a link and delete a link with registering/unregistering bandwidth.
729 *
730 * @throws BgpParseException while adding or removing the link
731 * @throws InterruptedException while registering for bandwidth
732 */
733 @Test
734 public void bgpTopologyProviderTestAddLink3() throws BgpParseException, InterruptedException {
735 LinkedList<BgpValueType> localTlvs = new LinkedList<>();
736 LinkedList<BgpValueType> remoteTlvs = new LinkedList<>();
737 LinkedList<BgpValueType> linkdes = new LinkedList<>();
738 BgpValueType tlv = new AutonomousSystemTlv(10);
739 short deslength = AutonomousSystemTlv.LENGTH;
740 short desType = AutonomousSystemTlv.TYPE;
741
742 localTlvs.add(tlv);
743 remoteTlvs.add(tlv);
744 tlv = IsIsNonPseudonode.of(new byte[] {20, 20, 20, 20, 00, 20});
745 localTlvs.add(tlv);
746 tlv = IsIsNonPseudonode.of(new byte[] {30, 30, 30, 30, 00, 30});
747 remoteTlvs.add(tlv);
748 NodeDescriptors localNode = new NodeDescriptors(localTlvs, deslength, desType);
749 NodeDescriptors remoteNode = new NodeDescriptors(remoteTlvs, deslength, desType);
750 BgpNodeLSIdentifier localNodeDescriptors = new BgpNodeLSIdentifier(localNode);
751 BgpNodeLSNlriVer4 nodeNlri = new BgpNodeLSNlriVer4(0, (byte) Constants.DIRECT, localNodeDescriptors, false,
752 new RouteDistinguisher());
753
754 BgpNodeLSIdentifier remoteNodeDescriptors = new BgpNodeLSIdentifier(remoteNode);
755 BgpNodeLSNlriVer4 remNodeNlri = new BgpNodeLSNlriVer4(0, (byte) Constants.DIRECT, remoteNodeDescriptors, false,
756 new RouteDistinguisher());
757
758 PathAttrNlriDetails details = new PathAttrNlriDetails();
759 details.setIdentifier(0);
760 details.setProtocolID(ProtocolType.DIRECT);
761 List<BgpValueType> pathAttributes = new LinkedList<>();
762 details.setPathAttribute(pathAttributes);
763
764 tlv = LinkLocalRemoteIdentifiersTlv.of(99, 100);
765 linkdes.add(tlv);
766 BgpLinkLSIdentifier linkId = new BgpLinkLSIdentifier(localNode, remoteNode, linkdes);
767 BgpLinkLsNlriVer4 linkNlri = new BgpLinkLsNlriVer4((byte) Constants.DIRECT, 0, linkId,
768 new RouteDistinguisher(), false);
769
770 for (BgpNodeListener l : controller.nodeListener) {
771 l.addNode(nodeNlri, details);
772 assertThat(nodeRegistry.connected.size(), is(1));
773 l.addNode(remNodeNlri, details);
774 assertThat(nodeRegistry.connected.size(), is(2));
775 l.deleteNode(remNodeNlri);
776 assertThat(nodeRegistry.connected.size(), is(1));
777 }
778
779 List<BgpValueType> linkPathAttributes = new LinkedList<>();
780 List<BgpValueType> linkStateAttr = new LinkedList<>();
781 tlv = BgpLinkAttrIgpMetric.of(10, 4);
782 linkStateAttr.add(tlv);
783 tlv = BgpLinkAttrTeDefaultMetric.of(20);
784 linkStateAttr.add(tlv);
785 tlv = BgpLinkAttrMaxLinkBandwidth.of(30, LinkStateAttributes.ATTR_LINK_MAX_RES_BANDWIDTH);
786 linkStateAttr.add(tlv);
787 linkPathAttributes.add(new LinkStateAttributes(linkStateAttr));
788 details.setPathAttribute(linkPathAttributes);
789
790 for (BgpLinkListener l : controller.linkListener) {
791 l.addLink(linkNlri, details);
792 assertThat(linkRegistry.links.size(), is(1));
793 assertThat(linkRegistry.links.iterator().next().annotations().value(BgpTopologyProvider.COST),
794 is("10"));
795 assertThat(linkRegistry.links.iterator().next().annotations().value(BgpTopologyProvider.TE_COST),
796 is("20"));
797
798 l.deleteLink(linkNlri);
799 assertThat(linkRegistry.links.size(), is(0));
800 }
801 }
802
803 /**
Priyanka Bfc51c952016-03-26 14:30:33 +0530804 * Invalid link.
805 *
806 * @throws BgpParseException while adding or deleting a link
807 */
808 @Test
809 public void bgpTopologyProviderTestDeleteLink3() throws BgpParseException {
810 LinkedList<BgpValueType> localTlvs = new LinkedList<>();
811 LinkedList<BgpValueType> remoteTlvs = new LinkedList<>();
812 LinkedList<BgpValueType> linkdes = new LinkedList<>();
813 BgpValueType tlv = new AutonomousSystemTlv(10);
814 short deslength = AutonomousSystemTlv.LENGTH;
815 short desType = AutonomousSystemTlv.TYPE;
816
817 localTlvs.add(tlv);
818 remoteTlvs.add(tlv);
819 tlv = IsIsNonPseudonode.of(new byte[] {20, 20, 20, 20, 00, 20});
820 localTlvs.add(tlv);
821 tlv = IsIsNonPseudonode.of(new byte[] {30, 30, 30, 30, 00, 30});
822 remoteTlvs.add(tlv);
823 NodeDescriptors localNode = new NodeDescriptors(localTlvs, deslength, desType);
824 NodeDescriptors remoteNode = new NodeDescriptors(remoteTlvs, deslength, desType);
825 BgpNodeLSIdentifier localNodeDescriptors = new BgpNodeLSIdentifier(localNode);
826 BgpNodeLSNlriVer4 nodeNlri = new BgpNodeLSNlriVer4(0, (byte) Constants.DIRECT, localNodeDescriptors, false,
827 new RouteDistinguisher());
828
829 BgpNodeLSIdentifier remoteNodeDescriptors = new BgpNodeLSIdentifier(remoteNode);
830 BgpNodeLSNlriVer4 remNodeNlri = new BgpNodeLSNlriVer4(0, (byte) Constants.DIRECT, remoteNodeDescriptors, false,
831 new RouteDistinguisher());
832
833 PathAttrNlriDetails details = new PathAttrNlriDetails();
834 details.setIdentifier(0);
835 details.setProtocolID(ProtocolType.DIRECT);
836 List<BgpValueType> pathAttributes = new LinkedList<>();
837 details.setPathAttribute(pathAttributes);
838
839 tlv = LinkLocalRemoteIdentifiersTlv.of(99, 100);
840 linkdes.add(tlv);
841 BgpLinkLSIdentifier linkId = new BgpLinkLSIdentifier(localNode, remoteNode, linkdes);
842 BgpLinkLsNlriVer4 linkNlri = new BgpLinkLsNlriVer4((byte) Constants.DIRECT, 0, linkId,
843 new RouteDistinguisher(), false);
844 for (BgpNodeListener l : controller.nodeListener) {
845 l.addNode(nodeNlri, details);
846 l.addNode(remNodeNlri, details);
847 assertThat(nodeRegistry.connected.size(), is(2));
848 l.deleteNode(nodeNlri);
849 assertThat(nodeRegistry.connected.size(), is(1));
850 }
851 for (BgpLinkListener l : controller.linkListener) {
852 l.deleteLink(linkNlri);
853 assertThat(linkRegistry.links.size(), is(0));
Shashikanth VH1ca26ce2015-11-20 23:19:49 +0530854 }
855 }
Priyanka B658aa6982016-05-27 21:34:49 +0530856
857 /**
858 * Add device check label registration is done.
859 *
860 * @throws BgpParseException while adding a device
861 */
862 @Test
863 public void bgpTopologyProviderDeviceTestLabel1() throws BgpParseException {
864 LinkedList<BgpValueType> subTlvs = new LinkedList<>();
865 BgpValueType tlv = new AutonomousSystemTlv(100);
866 short deslength = AutonomousSystemTlv.LENGTH;
867 short desType = AutonomousSystemTlv.TYPE;
868
869 subTlvs.add(tlv);
870 BgpNodeLSIdentifier localNodeDescriptors = new BgpNodeLSIdentifier(new NodeDescriptors(subTlvs, deslength,
871 desType));
872 BgpNodeLSNlriVer4 nodeNlri = new BgpNodeLSNlriVer4(0, (byte) Constants.DIRECT, localNodeDescriptors, false,
873 new RouteDistinguisher());
874
875 PathAttrNlriDetails details = new PathAttrNlriDetails();
876 details.setIdentifier(0);
877 details.setProtocolID(ProtocolType.DIRECT);
878 List<BgpValueType> pathAttributes = new LinkedList<>();
879 List<BgpValueType> linkStateAttributes = new LinkedList<>();
880 tlv = BgpAttrRouterIdV4.of(Ip4Address.valueOf("1.1.1.1"), LinkStateAttributes.ATTR_NODE_IPV4_LOCAL_ROUTER_ID);
881 linkStateAttributes.add(tlv);
882 pathAttributes.add(new LinkStateAttributes(linkStateAttributes));
883 details.setPathAttribute(pathAttributes);
884
885 for (BgpNodeListener l : controller.nodeListener) {
886 l.addNode(nodeNlri, details);
887 assertThat(nodeRegistry.connected.size(), is(1));
888 }
Priyanka B4c3b4512016-07-22 11:41:49 +0530889 DefaultAnnotations.Builder newBuilder = DefaultAnnotations.builder();
Priyanka B658aa6982016-05-27 21:34:49 +0530890
Priyanka B4c3b4512016-07-22 11:41:49 +0530891 newBuilder.set("lsrId", "1.1.1.1");
Priyanka B658aa6982016-05-27 21:34:49 +0530892
Priyanka B4c3b4512016-07-22 11:41:49 +0530893 Device device = new DefaultDevice(BgpTopologyProviderTest.providerId, nodeRegistry.connected.iterator().next(),
894 Device.Type.ROUTER, UNKNOWN, UNKNOWN, UNKNOWN, UNKNOWN, new ChassisId(), newBuilder.build());
895
896 DeviceEvent event = new DeviceEvent(DeviceEvent.Type.DEVICE_ADDED, device);
Priyanka B658aa6982016-05-27 21:34:49 +0530897 listener.event(event);
898 assertThat(labelResourceAdminService.resourcePool.keySet().size(), is(1));
899 }
900
901 /**
902 * Add device check label registration is done and delete node destroy label pool.
903 *
904 * @throws BgpParseException while adding a device
905 */
906 @Test
907 public void bgpTopologyProviderDeviceTestLabel2() throws BgpParseException {
908 LinkedList<BgpValueType> subTlvs = new LinkedList<>();
909 BgpValueType tlv = new AutonomousSystemTlv(100);
910 short deslength = AutonomousSystemTlv.LENGTH;
911 short desType = AutonomousSystemTlv.TYPE;
912
913 subTlvs.add(tlv);
914 BgpNodeLSIdentifier localNodeDescriptors = new BgpNodeLSIdentifier(new NodeDescriptors(subTlvs, deslength,
915 desType));
916 BgpNodeLSNlriVer4 nodeNlri = new BgpNodeLSNlriVer4(0, (byte) Constants.DIRECT, localNodeDescriptors, false,
917 new RouteDistinguisher());
918
919 PathAttrNlriDetails details = new PathAttrNlriDetails();
920 details.setIdentifier(0);
921 details.setProtocolID(ProtocolType.DIRECT);
922 List<BgpValueType> pathAttributes = new LinkedList<>();
923 List<BgpValueType> linkStateAttributes = new LinkedList<>();
924 tlv = BgpAttrRouterIdV4.of(Ip4Address.valueOf("1.1.1.1"), LinkStateAttributes.ATTR_NODE_IPV4_LOCAL_ROUTER_ID);
925 linkStateAttributes.add(tlv);
926 pathAttributes.add(new LinkStateAttributes(linkStateAttributes));
927 details.setPathAttribute(pathAttributes);
928
929 for (BgpNodeListener l : controller.nodeListener) {
930 l.addNode(nodeNlri, details);
931 assertThat(nodeRegistry.connected.size(), is(1));
Priyanka B4c3b4512016-07-22 11:41:49 +0530932
933 DefaultAnnotations.Builder newBuilder = DefaultAnnotations.builder();
934
935 newBuilder.set("lsrId", "1.1.1.1");
936
937 Device device = new DefaultDevice(BgpTopologyProviderTest.providerId,
938 nodeRegistry.connected.iterator().next(), Device.Type.ROUTER, UNKNOWN,
939 UNKNOWN, UNKNOWN, UNKNOWN, new ChassisId(), newBuilder.build());
940
941 DeviceEvent event = new DeviceEvent(DeviceEvent.Type.DEVICE_ADDED, device);
Priyanka B658aa6982016-05-27 21:34:49 +0530942 listener.event(event);
943 assertThat(labelResourceAdminService.resourcePool.keySet().size(), is(1));
944
945 l.deleteNode(nodeNlri);
946 assertThat(nodeRegistry.connected.size(), is(0));
947 assertThat(labelResourceAdminService.resourcePool.keySet().size(), is(0));
948 }
949 }
950
951 /**
952 * Add a link register bandwidth and remove link unregister bandwidth.
953 *
954 * @throws BgpParseException while registering/unregistering bandwidth
955 */
956 @Test
957 public void bgpTopologyProviderDeviceTestLabel3() throws BgpParseException {
958 LinkedList<BgpValueType> localTlvs = new LinkedList<>();
959 LinkedList<BgpValueType> remoteTlvs = new LinkedList<>();
960 LinkedList<BgpValueType> linkdes = new LinkedList<>();
961 BgpValueType tlv = new AutonomousSystemTlv(10);
962 short deslength = AutonomousSystemTlv.LENGTH;
963 short desType = AutonomousSystemTlv.TYPE;
964
965 localTlvs.add(tlv);
966 remoteTlvs.add(tlv);
967 tlv = IsIsNonPseudonode.of(new byte[] {20, 20, 20, 20, 00, 20});
968 localTlvs.add(tlv);
969 tlv = IsIsNonPseudonode.of(new byte[] {30, 30, 30, 30, 00, 30});
970 remoteTlvs.add(tlv);
971 NodeDescriptors localNode = new NodeDescriptors(localTlvs, deslength, desType);
972 NodeDescriptors remoteNode = new NodeDescriptors(remoteTlvs, deslength, desType);
973 BgpNodeLSIdentifier localNodeDescriptors = new BgpNodeLSIdentifier(localNode);
974 BgpNodeLSNlriVer4 nodeNlri = new BgpNodeLSNlriVer4(0, (byte) Constants.DIRECT, localNodeDescriptors, false,
975 new RouteDistinguisher());
976
977 BgpNodeLSIdentifier remoteNodeDescriptors = new BgpNodeLSIdentifier(remoteNode);
978 BgpNodeLSNlriVer4 remNodeNlri = new BgpNodeLSNlriVer4(0, (byte) Constants.DIRECT, remoteNodeDescriptors, false,
979 new RouteDistinguisher());
980
981 PathAttrNlriDetails details = new PathAttrNlriDetails();
982 details.setIdentifier(0);
983 details.setProtocolID(ProtocolType.DIRECT);
984 List<BgpValueType> pathAttributes = new LinkedList<>();
985 List<BgpValueType> linkStateAttributes = new LinkedList<>();
986 tlv = BgpAttrRouterIdV4.of(Ip4Address.valueOf("1.1.1.1"), LinkStateAttributes.ATTR_NODE_IPV4_LOCAL_ROUTER_ID);
987 linkStateAttributes.add(tlv);
988 pathAttributes.add(new LinkStateAttributes(linkStateAttributes));
989 details.setPathAttribute(pathAttributes);
990
991 tlv = LinkLocalRemoteIdentifiersTlv.of(99, 100);
992 linkdes.add(tlv);
993 BgpLinkLSIdentifier linkId = new BgpLinkLSIdentifier(localNode, remoteNode, linkdes);
994 BgpLinkLsNlriVer4 linkNlri = new BgpLinkLsNlriVer4((byte) Constants.DIRECT, 0, linkId,
995 new RouteDistinguisher(), false);
996
997 for (BgpNodeListener l : controller.nodeListener) {
998 l.addNode(nodeNlri, details);
999 assertThat(nodeRegistry.connected.size(), is(1));
1000 //Check label resource reserved for that device
Priyanka B4c3b4512016-07-22 11:41:49 +05301001 DefaultAnnotations.Builder newBuilder = DefaultAnnotations.builder();
1002
1003 newBuilder.set("lsrId", "1.1.1.1");
1004
1005 Device device = new DefaultDevice(BgpTopologyProviderTest.providerId,
1006 nodeRegistry.connected.iterator().next(), Device.Type.ROUTER,
1007 UNKNOWN, UNKNOWN, UNKNOWN, UNKNOWN, new ChassisId(), newBuilder.build());
1008
1009 DeviceEvent event = new DeviceEvent(DeviceEvent.Type.DEVICE_ADDED, device);
Priyanka B658aa6982016-05-27 21:34:49 +05301010 listener.event(event);
1011 assertThat(labelResourceAdminService.resourcePool.keySet().size(), is(1));
1012 l.addNode(remNodeNlri, details);
1013 assertThat(nodeRegistry.connected.size(), is(2));
1014 l.deleteNode(remNodeNlri);
1015 assertThat(nodeRegistry.connected.size(), is(1));
1016 assertThat(labelResourceAdminService.resourcePool.keySet().size(), is(1));
1017 }
1018
1019 List<BgpValueType> linkPathAttributes = new LinkedList<>();
1020 List<BgpValueType> linkStateAttr = new LinkedList<>();
1021 tlv = BgpLinkAttrIgpMetric.of(10, 4);
1022 linkStateAttr.add(tlv);
1023 tlv = BgpLinkAttrTeDefaultMetric.of(20);
1024 linkStateAttr.add(tlv);
Priyanka Bc1e4e4c2016-07-01 14:57:19 +05301025 tlv = BgpLinkAttrMaxLinkBandwidth.of((float) 70 * 1_000_000L,
1026 LinkStateAttributes.ATTR_LINK_MAX_RES_BANDWIDTH);
Priyanka B658aa6982016-05-27 21:34:49 +05301027 linkStateAttr.add(tlv);
1028 linkPathAttributes.add(new LinkStateAttributes(linkStateAttr));
1029 details.setPathAttribute(linkPathAttributes);
1030
1031 for (BgpLinkListener l : controller.linkListener) {
1032 l.addLink(linkNlri, details);
1033 assertThat(linkRegistry.links.size(), is(1));
1034 assertThat(linkRegistry.links.iterator().next().annotations().value(BgpTopologyProvider.COST),
1035 is("10"));
1036 assertThat(linkRegistry.links.iterator().next().annotations().value(BgpTopologyProvider.TE_COST),
1037 is("20"));
1038
1039 ConnectPoint src = new ConnectPoint(
1040 DeviceId.deviceId("l3:rd=0::routinguniverse=0:asn=10:isoid=1414.1414.0014"),
1041 PortNumber.portNumber(4294967395L));
1042 ConnectPoint dst = new ConnectPoint(
1043 DeviceId.deviceId("l3:rd=0::routinguniverse=0:asn=10:isoid=1e1e.1e1e.001e"),
1044 PortNumber.portNumber(4294967396L));
1045 BandwidthCapacity bandwidth = networkConfigService.getConfig(src, BandwidthCapacity.class);
1046 assertThat(bandwidth.capacity().bps(), is(70.0 * 1_000_000L));
1047
1048 bandwidth = networkConfigService.getConfig(dst, BandwidthCapacity.class);
1049 assertThat(bandwidth.capacity(), is(Bandwidth.bps(70.0 * 1_000_000L)));
1050
1051 l.deleteLink(linkNlri);
1052 assertThat(linkRegistry.links.size(), is(0));
1053 bandwidth = networkConfigService.getConfig(src, BandwidthCapacity.class);
1054 assertThat(bandwidth, is(nullValue()));
1055 bandwidth = networkConfigService.getConfig(dst, BandwidthCapacity.class);
1056 assertThat(bandwidth, is(nullValue()));
1057 }
1058 }
Shashikanth VH1ca26ce2015-11-20 23:19:49 +05301059}