2 * Copyright 2014-2015 Open Networking Laboratory
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
7 * http://www.apache.org/licenses/LICENSE-2.0
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.
13 package org.onosproject.provider.bgp.topology.impl;
15 import static org.junit.Assert.assertNotNull;
16 import static org.junit.Assert.assertNull;
17 import static org.junit.Assert.assertTrue;
19 import java.util.Collection;
20 import java.util.HashSet;
21 import java.util.LinkedList;
22 import java.util.List;
25 import java.util.concurrent.CopyOnWriteArraySet;
27 import org.junit.After;
28 import org.junit.Before;
29 import org.junit.Test;
30 import org.onosproject.bgp.controller.BgpCfg;
31 import org.onosproject.bgp.controller.BgpController;
32 import org.onosproject.bgp.controller.BgpId;
33 import org.onosproject.bgp.controller.BgpPeer;
34 import org.onosproject.bgp.controller.BgpNodeListener;
35 import org.onosproject.bgp.controller.BgpPeerManager;
36 import org.onosproject.bgpio.exceptions.BgpParseException;
37 import org.onosproject.bgpio.protocol.BgpMessage;
38 import org.onosproject.bgpio.protocol.linkstate.BgpNodeLSIdentifier;
39 import org.onosproject.bgpio.protocol.linkstate.BgpNodeLSNlriVer4;
40 import org.onosproject.bgpio.protocol.linkstate.NodeDescriptors;
41 import org.onosproject.bgpio.types.AutonomousSystemTlv;
42 import org.onosproject.bgpio.types.BgpValueType;
43 import org.onosproject.bgpio.types.RouteDistinguisher;
44 import org.onosproject.bgpio.util.Constants;
45 import org.onosproject.net.DeviceId;
46 import org.onosproject.net.MastershipRole;
47 import org.onosproject.net.device.DeviceDescription;
48 import org.onosproject.net.device.DeviceProvider;
49 import org.onosproject.net.device.DeviceProviderRegistry;
50 import org.onosproject.net.device.DeviceProviderService;
51 import org.onosproject.net.device.PortDescription;
52 import org.onosproject.net.device.PortStatistics;
53 import org.onosproject.net.provider.ProviderId;
55 public class BgpTopologyProviderTest {
57 private static final DeviceId DID1 = DeviceId
58 .deviceId("bgp:bgpls://0:direct:0/&=bgpnodelsidentifier%7bnodedescriptors=nodedescriptors%7bdestype=512,"
59 + "%20deslength=4,%20subtlvs=[autonomoussystemtlv%7btype=512,%20length=4,%20asnum=100%7d]%7d%7d");
60 private static final DeviceId DID2 = DeviceId
61 .deviceId("bgp:bgpls://0:direct:0/&=bgpnodelsidentifier%7bnodedescriptors=nodedescriptors%7bdestype=512,"
62 + "%20deslength=4,%20subtlvs=[autonomoussystemtlv%7btype=512,%20length=4,%20asnum=10%7d]%7d%7d");
63 private static final DeviceId DID3 = DeviceId
64 .deviceId("bgp:bgpls://direct:0/&=nodedescriptors%7bdestype=512,%20deslength=4,"
65 + "%20subtlvs=[autonomoussystemtlv%7btype=512,%20length=4,%20asnum=100%7d]%7d");
66 private final BgpTopologyProvider provider = new BgpTopologyProvider();
67 private final TestDeviceRegistry nodeRegistry = new TestDeviceRegistry();
68 private final TestController controller = new TestController();
71 public void startUp() {
72 provider.deviceProviderRegistry = nodeRegistry;
73 provider.controller = controller;
75 assertNotNull("provider should be registered", nodeRegistry.provider);
76 assertNotNull("listener should be registered", controller.nodeListener);
80 public void tearDown() {
81 provider.deactivate();
82 assertNull("listener should be removed", controller.nodeListener);
83 provider.controller = null;
84 provider.deviceProviderRegistry = null;
87 /* Class implement device test registry */
88 private class TestDeviceRegistry implements DeviceProviderRegistry {
89 DeviceProvider provider;
91 Set<DeviceId> connected = new HashSet<>();
94 public DeviceProviderService register(DeviceProvider provider) {
95 this.provider = provider;
96 return new TestProviderService();
100 public void unregister(DeviceProvider provider) {
104 public Set<ProviderId> getProviders() {
108 private class TestProviderService implements DeviceProviderService {
111 public DeviceProvider provider() {
116 public void deviceConnected(DeviceId deviceId, DeviceDescription deviceDescription) {
117 if (deviceId.equals(DID1)) {
118 connected.add(deviceId);
123 public void deviceDisconnected(DeviceId deviceId) {
124 if (deviceId.equals(DID1)) {
125 connected.remove(deviceId);
130 public void updatePorts(DeviceId deviceId, List<PortDescription> portDescriptions) {
131 // TODO Auto-generated method stub
136 public void portStatusChanged(DeviceId deviceId, PortDescription portDescription) {
137 // TODO Auto-generated method stub
142 public void receivedRoleReply(DeviceId deviceId, MastershipRole requested, MastershipRole response) {
143 // TODO Auto-generated method stub
148 public void updatePortStatistics(DeviceId deviceId, Collection<PortStatistics> portStatistics) {
149 // TODO Auto-generated method stub
155 /* class implement test controller */
156 private class TestController implements BgpController {
157 protected Set<BgpNodeListener> nodeListener = new CopyOnWriteArraySet<>();
160 public void addListener(BgpNodeListener nodeListener) {
161 this.nodeListener.add(nodeListener);
165 public void removeListener(BgpNodeListener nodeListener) {
166 this.nodeListener = null;
170 public Iterable<BgpPeer> getPeers() {
171 // TODO Auto-generated method stub
176 public BgpPeer getPeer(BgpId bgpId) {
177 // TODO Auto-generated method stub
182 public void writeMsg(BgpId bgpId, BgpMessage msg) {
183 // TODO Auto-generated method stub
188 public void processBGPPacket(BgpId bgpId, BgpMessage msg) throws BgpParseException {
189 // TODO Auto-generated method stub
194 public void closeConnectedPeers() {
195 // TODO Auto-generated method stub
200 public BgpCfg getConfig() {
201 // TODO Auto-generated method stub
206 public int connectedPeerCount() {
207 // TODO Auto-generated method stub
213 public BgpPeerManager peerManager() {
214 // TODO Auto-generated method stub
219 public Map<BgpId, BgpPeer> connectedPeers() {
220 // TODO Auto-generated method stub
225 public Set<BgpNodeListener> listener() {
226 // TODO Auto-generated method stub
231 /* Validate node is added to the device validating URI, RIB should get updated properly */
233 public void bgpTopologyProviderTestAddDevice1() {
234 int deviceAddCount = 0;
235 LinkedList<BgpValueType> subTlvs;
236 subTlvs = new LinkedList<>();
237 BgpValueType tlv = new AutonomousSystemTlv(100);
238 short deslength = AutonomousSystemTlv.LENGTH;
239 short desType = AutonomousSystemTlv.TYPE;
242 BgpNodeLSIdentifier localNodeDescriptors = new BgpNodeLSIdentifier(new NodeDescriptors(subTlvs, deslength,
244 BgpNodeLSNlriVer4 nodeNlri = new BgpNodeLSNlriVer4(0, (byte) Constants.DIRECT, localNodeDescriptors, false,
245 new RouteDistinguisher());
247 nodeNlri.setNodeLSIdentifier(localNodeDescriptors);
248 for (BgpNodeListener l : controller.nodeListener) {
250 deviceAddCount = nodeRegistry.connected.size();
251 assertTrue(deviceAddCount == 1);
252 l.deleteNode(nodeNlri);
253 deviceAddCount = nodeRegistry.connected.size();
254 assertTrue(deviceAddCount == 0);
258 /* Validate node is not added to the device for invalid URI, RIB count should be zero */
260 public void bgpTopologyProviderTestAddDevice2() {
261 LinkedList<BgpValueType> subTlvs;
262 BgpValueType tlv = new AutonomousSystemTlv(10);
263 short deslength = AutonomousSystemTlv.LENGTH;
264 short desType = AutonomousSystemTlv.TYPE;
266 subTlvs = new LinkedList<>();
268 BgpNodeLSIdentifier localNodeDescriptors = new BgpNodeLSIdentifier(new NodeDescriptors(subTlvs, deslength,
270 BgpNodeLSNlriVer4 nodeNlri = new BgpNodeLSNlriVer4(0, (byte) Constants.DIRECT, localNodeDescriptors, false,
271 new RouteDistinguisher());
273 nodeNlri.setNodeLSIdentifier(localNodeDescriptors);
274 for (BgpNodeListener l : controller.nodeListener) {
276 assertTrue("Failed to add device", (nodeRegistry.connected.size() == 0));
280 /* Delete node when node does not exist, RIB count should be zero */
282 public void bgpTopologyProviderTestAddDevice3() {
283 LinkedList<BgpValueType> subTlvs;
284 BgpValueType tlv = new AutonomousSystemTlv(10);
285 short deslength = AutonomousSystemTlv.LENGTH;
286 short desType = AutonomousSystemTlv.TYPE;
288 subTlvs = new LinkedList<>();
290 BgpNodeLSIdentifier localNodeDescriptors = new BgpNodeLSIdentifier(new NodeDescriptors(subTlvs, deslength,
292 BgpNodeLSNlriVer4 nodeNlri = new BgpNodeLSNlriVer4(0, (byte) Constants.DIRECT, localNodeDescriptors, false,
293 new RouteDistinguisher());
295 nodeNlri.setNodeLSIdentifier(localNodeDescriptors);
296 for (BgpNodeListener l : controller.nodeListener) {
297 l.deleteNode(nodeNlri);
298 assertTrue("Failed to add device", (nodeRegistry.connected.size() == 0));