blob: 8c5832dd59d0078a2d9821ce07f1dda295918e61 [file] [log] [blame]
Vidyashree Rama7bd3d782015-11-23 08:46:33 +05301/*
2 * Copyright 2014-2015 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 */
16package org.onosproject.bgp;
17
18import com.google.common.net.InetAddresses;
Priyanka B249027e2015-12-14 12:42:41 +053019
Vidyashree Rama7bd3d782015-11-23 08:46:33 +053020import org.jboss.netty.bootstrap.ClientBootstrap;
Priyanka B249027e2015-12-14 12:42:41 +053021import org.jboss.netty.buffer.ChannelBuffer;
22import org.jboss.netty.buffer.ChannelBuffers;
Vidyashree Rama7bd3d782015-11-23 08:46:33 +053023import org.jboss.netty.channel.Channel;
24import org.jboss.netty.channel.ChannelFactory;
25import org.jboss.netty.channel.ChannelPipeline;
26import org.jboss.netty.channel.ChannelPipelineFactory;
27import org.jboss.netty.channel.Channels;
28import org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory;
29import org.junit.After;
30import org.junit.Before;
Thomas Vachuska35239732016-01-19 10:17:43 -080031import org.junit.Ignore;
Vidyashree Rama7bd3d782015-11-23 08:46:33 +053032import org.junit.Test;
33
34import static org.hamcrest.core.Is.is;
35import static org.junit.Assert.assertThat;
36
37import org.onlab.junit.TestUtils;
Priyanka B249027e2015-12-14 12:42:41 +053038import org.onlab.junit.TestUtils.TestUtilsException;
39import org.onlab.packet.Ip4Address;
40import org.onlab.packet.IpAddress;
Vidyashree Rama7bd3d782015-11-23 08:46:33 +053041
42import java.net.InetAddress;
43import java.net.InetSocketAddress;
44import java.net.SocketAddress;
45import java.util.LinkedList;
Priyanka B249027e2015-12-14 12:42:41 +053046import java.util.Map;
Vidyashree Rama7bd3d782015-11-23 08:46:33 +053047import java.util.concurrent.Executors;
48import java.util.concurrent.TimeUnit;
49
50import org.slf4j.Logger;
51import org.slf4j.LoggerFactory;
Shashikanth VH5dd8dbe2015-11-26 13:22:18 +053052import org.onosproject.bgp.controller.BgpCfg;
Priyanka B249027e2015-12-14 12:42:41 +053053import org.onosproject.bgp.controller.BgpId;
54import org.onosproject.bgp.controller.impl.AdjRibIn;
Shashikanth VH5dd8dbe2015-11-26 13:22:18 +053055import org.onosproject.bgp.controller.impl.BgpControllerImpl;
Priyanka B249027e2015-12-14 12:42:41 +053056import org.onosproject.bgp.controller.impl.BgpLocalRibImpl;
57import org.onosproject.bgp.controller.impl.BgpPeerImpl;
58import org.onosproject.bgp.controller.impl.VpnAdjRibIn;
59import org.onosproject.bgpio.protocol.linkstate.BgpLinkLSIdentifier;
60import org.onosproject.bgpio.protocol.linkstate.BgpNodeLSIdentifier;
61import org.onosproject.bgpio.protocol.linkstate.BgpPrefixLSIdentifier;
62import org.onosproject.bgpio.protocol.linkstate.NodeDescriptors;
63import org.onosproject.bgpio.protocol.linkstate.PathAttrNlriDetails;
64import org.onosproject.bgpio.protocol.linkstate.PathAttrNlriDetailsLocalRib;
65import org.onosproject.bgpio.types.AutonomousSystemTlv;
66import org.onosproject.bgpio.types.BgpLSIdentifierTlv;
Shashikanth VH5dd8dbe2015-11-26 13:22:18 +053067import org.onosproject.bgpio.types.BgpValueType;
Vidyashree Rama7bd3d782015-11-23 08:46:33 +053068import org.onosproject.bgpio.types.FourOctetAsNumCapabilityTlv;
Priyanka B249027e2015-12-14 12:42:41 +053069import org.onosproject.bgpio.types.IPReachabilityInformationTlv;
70import org.onosproject.bgpio.types.IPv4AddressTlv;
71import org.onosproject.bgpio.types.IsIsNonPseudonode;
Vidyashree Rama7bd3d782015-11-23 08:46:33 +053072import org.onosproject.bgpio.types.MultiProtocolExtnCapabilityTlv;
Priyanka B249027e2015-12-14 12:42:41 +053073import org.onosproject.bgpio.types.IsIsPseudonode;
74import org.onosproject.bgpio.types.RouteDistinguisher;
Vidyashree Rama7bd3d782015-11-23 08:46:33 +053075
76/**
77 * Test case for BGPControllerImpl.
78 */
Thomas Vachuska35239732016-01-19 10:17:43 -080079@Ignore("Tests are failing due to NPE and due to failure to bind port")
Shashikanth VH5dd8dbe2015-11-26 13:22:18 +053080public class BgpControllerImplTest {
Vidyashree Rama7bd3d782015-11-23 08:46:33 +053081
82 protected static final Logger log = LoggerFactory
Shashikanth VH5dd8dbe2015-11-26 13:22:18 +053083 .getLogger(BgpControllerImplTest.class);
Vidyashree Rama7bd3d782015-11-23 08:46:33 +053084
85 private static final String IP_LOOPBACK_ID1 = "127.0.0.1";
86
87 private static final int MESSAGE_TIMEOUT_MS = 3000;
88 public byte version;
89 public short asNumber;
90 public short holdTime;
91 public int bgpId = InetAddresses.coerceToInteger(InetAddresses.forString(IP_LOOPBACK_ID1));
92 public boolean isLargeAsCapabilitySet = false;
Shashikanth VH5dd8dbe2015-11-26 13:22:18 +053093 public LinkedList<BgpValueType> capabilityTlv = new LinkedList<>();
Vidyashree Rama7bd3d782015-11-23 08:46:33 +053094
95 @Before
96 public void setUp() throws Exception {
97 peer1 = new BgpPeerTest(version, asNumber,
98 holdTime, bgpId, isLargeAsCapabilitySet,
99 capabilityTlv);
Priyanka B249027e2015-12-14 12:42:41 +0530100 peer2 = new BgpPeerTest(version, asNumber,
101 holdTime, bgpId, isLargeAsCapabilitySet,
102 capabilityTlv);
Vidyashree Rama7bd3d782015-11-23 08:46:33 +0530103
Shashikanth VH5dd8dbe2015-11-26 13:22:18 +0530104 bgpControllerImpl = new BgpControllerImpl();
Vidyashree Rama7bd3d782015-11-23 08:46:33 +0530105
106 // NOTE: We use port 0 to bind on any available port
107 bgpControllerImpl.controller().setBgpPortNum();
108 bgpControllerImpl.activate();
109
110 Channel serverChannel = TestUtils.getField(bgpControllerImpl.controller(),
111 "serverChannel");
112 SocketAddress socketAddress = serverChannel.getLocalAddress();
113 InetSocketAddress inetSocketAddress =
114 (InetSocketAddress) socketAddress;
115 InetAddress connectToAddress = InetAddresses.forString("127.0.0.1");
116 connectToSocket = new InetSocketAddress(connectToAddress,
117 inetSocketAddress.getPort());
118
119 bgpControllerImpl.getConfig().setRouterId("1.1.1.1");
120 bgpControllerImpl.getConfig().setAsNumber(200);
121 bgpControllerImpl.getConfig().setHoldTime((short) 120);
Shashikanth VH5dd8dbe2015-11-26 13:22:18 +0530122 bgpControllerImpl.getConfig().setState(BgpCfg.State.IP_AS_CONFIGURED);
Vidyashree Rama7bd3d782015-11-23 08:46:33 +0530123
124 bgpControllerImpl.getConfig().addPeer("127.0.0.1", 200);
Priyanka B249027e2015-12-14 12:42:41 +0530125 bgpControllerImpl.getConfig().addPeer("127.0.0.9", 200);
126 bgpControllerImpl.getConfig().addPeer("127.0.0.33", 200);
127 bgpControllerImpl.getConfig().addPeer("127.0.0.10", 200);
128 bgpControllerImpl.getConfig().addPeer("127.0.0.20", 200);
129 bgpControllerImpl.getConfig().addPeer("127.0.0.30", 200);
130 bgpControllerImpl.getConfig().addPeer("127.0.0.40", 200);
131 bgpControllerImpl.getConfig().addPeer("127.0.0.50", 200);
132 bgpControllerImpl.getConfig().addPeer("127.0.0.60", 200);
133 bgpControllerImpl.getConfig().addPeer("127.0.0.70", 200);
134 bgpControllerImpl.getConfig().addPeer("127.0.0.80", 200);
135 bgpControllerImpl.getConfig().addPeer("127.0.0.90", 200);
136 bgpControllerImpl.getConfig().addPeer("127.0.0.91", 200);
137 bgpControllerImpl.getConfig().addPeer("127.0.0.92", 200);
138 bgpControllerImpl.getConfig().addPeer("127.0.0.99", 200);
139 bgpControllerImpl.getConfig().addPeer("127.0.0.94", 200);
140 bgpControllerImpl.getConfig().addPeer("127.0.0.95", 200);
141 bgpControllerImpl.getConfig().addPeer("127.0.0.35", 200);
Vidyashree Rama7bd3d782015-11-23 08:46:33 +0530142 }
143
144 @After
145 public void tearDown() throws Exception {
146 bgpControllerImpl.deactivate();
147 bgpControllerImpl = null;
148 }
149
Shashikanth VH5dd8dbe2015-11-26 13:22:18 +0530150 private BgpControllerImpl bgpControllerImpl;
Vidyashree Rama7bd3d782015-11-23 08:46:33 +0530151
152 BgpPeerTest peer1;
Priyanka B249027e2015-12-14 12:42:41 +0530153 BgpPeerTest peer2;
Vidyashree Rama7bd3d782015-11-23 08:46:33 +0530154 // The socket that the remote peers should connect to
155 private InetSocketAddress connectToSocket;
156
157 @Test
158 public void bgpOpenMessageTest1() throws InterruptedException {
159 peer1.peerChannelHandler.asNumber = 200;
160 peer1.peerChannelHandler.version = 4;
161 peer1.peerChannelHandler.holdTime = 120;
162 peer1.connect(connectToSocket);
163 boolean result;
164 result = peer1.peerFrameDecoder.receivedOpenMessageLatch.await(
165 MESSAGE_TIMEOUT_MS,
166 TimeUnit.MILLISECONDS);
167 assertThat(result, is(true));
168 result = peer1.peerFrameDecoder.receivedKeepaliveMessageLatch.await(
169 MESSAGE_TIMEOUT_MS,
170 TimeUnit.MILLISECONDS);
171 assertThat(result, is(true));
172 }
173
174 @Test
175 public void bgpOpenMessageTest2() throws InterruptedException {
176 // Open message with as number which is not configured at peer
177 peer1.peerChannelHandler.asNumber = 500;
178 peer1.peerChannelHandler.version = 4;
179 peer1.peerChannelHandler.holdTime = 120;
180 peer1.connect(connectToSocket);
181
182 boolean result;
183 result = peer1.peerFrameDecoder.receivedNotificationMessageLatch.await(
184 MESSAGE_TIMEOUT_MS,
185 TimeUnit.MILLISECONDS);
Shashikanth VH97e571e2016-01-05 12:15:14 +0530186 assertThat(result, is(true));
Vidyashree Rama7bd3d782015-11-23 08:46:33 +0530187 }
188
189 @Test
190 public void bgpOpenMessageTest3() throws InterruptedException {
191 // Open message with invalid hold time value
192 peer1.peerChannelHandler.asNumber = 200;
193 peer1.peerChannelHandler.version = 4;
194 peer1.peerChannelHandler.holdTime = 1;
195 peer1.connect(connectToSocket);
196
197 boolean result;
198 result = peer1.peerFrameDecoder.receivedNotificationMessageLatch.await(
199 MESSAGE_TIMEOUT_MS,
200 TimeUnit.MILLISECONDS);
201 assertThat(result, is(true));
202 }
203
204 @Test
205 public void bgpOpenMessageTest4() throws InterruptedException {
206 // Open message with invalid as number
207 peer1.peerChannelHandler.asNumber = 200;
208 peer1.peerChannelHandler.version = 4;
209 peer1.peerChannelHandler.holdTime = 120;
210 peer1.peerChannelHandler.isLargeAsCapabilitySet = true;
Shashikanth VH5dd8dbe2015-11-26 13:22:18 +0530211 BgpValueType tempTlv = new FourOctetAsNumCapabilityTlv(766545);
Vidyashree Rama7bd3d782015-11-23 08:46:33 +0530212 peer1.peerChannelHandler.capabilityTlv.add(tempTlv);
213 peer1.connect(connectToSocket);
214
215 boolean result;
216 result = peer1.peerFrameDecoder.receivedNotificationMessageLatch.await(
217 MESSAGE_TIMEOUT_MS,
218 TimeUnit.MILLISECONDS);
219 assertThat(result, is(true));
220 }
221
222 @Test
223 public void bgpOpenMessageTest5() throws InterruptedException {
224 // Open message with LS capability
225 short afi = 16388;
226 byte res = 0;
227 byte safi = 71;
228 peer1.peerChannelHandler.asNumber = 200;
229 peer1.peerChannelHandler.version = 4;
230 peer1.peerChannelHandler.holdTime = 120;
231 bgpControllerImpl.getConfig().setLsCapability(true);
Shashikanth VH5dd8dbe2015-11-26 13:22:18 +0530232 BgpValueType tempTlv1 = new MultiProtocolExtnCapabilityTlv(afi, res, safi);
Vidyashree Rama7bd3d782015-11-23 08:46:33 +0530233 peer1.peerChannelHandler.capabilityTlv.add(tempTlv1);
234 peer1.connect(connectToSocket);
235
236 boolean result;
237 result = peer1.peerFrameDecoder.receivedOpenMessageLatch.await(
238 MESSAGE_TIMEOUT_MS,
239 TimeUnit.MILLISECONDS);
240 assertThat(result, is(true));
241 result = peer1.peerFrameDecoder.receivedKeepaliveMessageLatch.await(
242 MESSAGE_TIMEOUT_MS,
243 TimeUnit.MILLISECONDS);
244 assertThat(result, is(true));
245 }
246
247 @Test
248 public void bgpOpenMessageTest6() throws InterruptedException {
249 // Open message with as4 capability
250 peer1.peerChannelHandler.asNumber = 200;
251 peer1.peerChannelHandler.version = 4;
252 peer1.peerChannelHandler.holdTime = 120;
253 peer1.peerChannelHandler.isLargeAsCapabilitySet = true;
254 bgpControllerImpl.getConfig().setLargeASCapability(true);
Shashikanth VH5dd8dbe2015-11-26 13:22:18 +0530255 BgpValueType tempTlv = new FourOctetAsNumCapabilityTlv(200);
Vidyashree Rama7bd3d782015-11-23 08:46:33 +0530256 peer1.peerChannelHandler.capabilityTlv.add(tempTlv);
257 peer1.connect(connectToSocket);
258
259 boolean result;
260 result = peer1.peerFrameDecoder.receivedOpenMessageLatch.await(
261 MESSAGE_TIMEOUT_MS,
262 TimeUnit.MILLISECONDS);
263 assertThat(result, is(true));
264 result = peer1.peerFrameDecoder.receivedKeepaliveMessageLatch.await(
265 MESSAGE_TIMEOUT_MS,
266 TimeUnit.MILLISECONDS);
267 assertThat(result, is(true));
268
269 result = peer1.peerFrameDecoder.receivedKeepaliveMessageLatch.await(
270 MESSAGE_TIMEOUT_MS,
271 TimeUnit.MILLISECONDS);
272 assertThat(result, is(true));
273 }
274
275 @Test
276 public void bgpOpenMessageTest7() throws InterruptedException {
277 // Open message with both LS capability and as4 capability
278 short afi = 16388;
279 byte res = 0;
280 byte safi = 71;
281 peer1.peerChannelHandler.asNumber = 200;
282 peer1.peerChannelHandler.version = 4;
283 peer1.peerChannelHandler.holdTime = 120;
284
285 peer1.peerChannelHandler.isLargeAsCapabilitySet = true;
286 bgpControllerImpl.getConfig().setLargeASCapability(true);
Shashikanth VH5dd8dbe2015-11-26 13:22:18 +0530287 BgpValueType tempTlv = new FourOctetAsNumCapabilityTlv(200);
Vidyashree Rama7bd3d782015-11-23 08:46:33 +0530288 peer1.peerChannelHandler.capabilityTlv.add(tempTlv);
289
290 bgpControllerImpl.getConfig().setLsCapability(true);
Shashikanth VH5dd8dbe2015-11-26 13:22:18 +0530291 BgpValueType tempTlv1 = new MultiProtocolExtnCapabilityTlv(afi, res, safi);
Vidyashree Rama7bd3d782015-11-23 08:46:33 +0530292 peer1.peerChannelHandler.capabilityTlv.add(tempTlv1);
293 peer1.connect(connectToSocket);
294
295 boolean result;
296 result = peer1.peerFrameDecoder.receivedOpenMessageLatch.await(
297 MESSAGE_TIMEOUT_MS,
298 TimeUnit.MILLISECONDS);
299 assertThat(result, is(true));
300 }
301
302 /**
Priyanka B249027e2015-12-14 12:42:41 +0530303 * Peer1 has Node NLRI (MpReach).
304 */
305 @Test
306 public void testBgpUpdateMessage1() throws InterruptedException {
307 // Initiate the connections
308 peer1.peerChannelHandler.asNumber = 200;
309 peer1.peerChannelHandler.version = 4;
310 peer1.peerChannelHandler.holdTime = 120;
311
312 short afi = 16388;
313 byte res = 0;
314 byte safi = 71;
315
316 bgpControllerImpl.getConfig().setLsCapability(true);
317 BgpValueType tempTlv1 = new MultiProtocolExtnCapabilityTlv(afi, res, safi);
318 peer1.peerChannelHandler.capabilityTlv.add(tempTlv1);
319 peer1.connectFrom(connectToSocket, new InetSocketAddress("127.0.0.9", 0));
320 TimeUnit.MILLISECONDS.sleep(1000);
321
322 //Get peer1
323 BgpId bgpId = new BgpId(IpAddress.valueOf("127.0.0.9"));
324 BgpPeerImpl peer = (BgpPeerImpl) bgpControllerImpl.getPeer(bgpId);
325
326 LinkedList<BgpValueType> subTlvs = new LinkedList<>();
327 BgpValueType tlv = AutonomousSystemTlv.of(2478);
328 subTlvs.add(tlv);
329 tlv = BgpLSIdentifierTlv.of(33686018);
330 subTlvs.add(tlv);
331 NodeDescriptors nodeDes = new NodeDescriptors(subTlvs, (short) 0x10, (short) 256);
332 BgpNodeLSIdentifier key = new BgpNodeLSIdentifier(nodeDes);
333 AdjRibIn adj = peer.adjRib();
334
335 //In Adj-RIB, nodeTree should contains specified key
336 assertThat(adj.nodeTree().containsKey(key), is(true));
337
338 BgpLocalRibImpl obj = (BgpLocalRibImpl) bgpControllerImpl.bgpLocalRib();
339 //In Local-RIB, nodeTree should contains specified key
340 assertThat(obj.nodeTree().containsKey(key), is(true));
341 }
342
343 /**
344 * Peer1 has Node NLRI (MpReach) and Peer2 has Node NLRI with same MpReach and MpUnReach.
345 */
346 @Test
347 public void testBgpUpdateMessage2() throws InterruptedException, TestUtilsException {
348 // Initiate the connections
349 peer1.peerChannelHandler.asNumber = 200;
350 peer1.peerChannelHandler.version = 4;
351 peer1.peerChannelHandler.holdTime = 120;
352 short afi = 16388;
353 byte res = 0;
354 byte safi = 71;
355
356 bgpControllerImpl.getConfig().setLsCapability(true);
357 BgpValueType tempTlv1 = new MultiProtocolExtnCapabilityTlv(afi, res, safi);
358 peer2.peerChannelHandler.capabilityTlv.add(tempTlv1);
359 Channel channel = peer1.connectFrom(connectToSocket, new InetSocketAddress("127.0.0.95", 0));
360 TimeUnit.MILLISECONDS.sleep(1000);
361
362 //Get peer1
363 BgpId bgpId = new BgpId(IpAddress.valueOf("127.0.0.95"));
364 BgpPeerImpl peer = (BgpPeerImpl) bgpControllerImpl.getPeer(bgpId);
365
366 LinkedList<BgpValueType> subTlvs = new LinkedList<>();
367 BgpValueType tlv = AutonomousSystemTlv.of(2478);
368 subTlvs.add(tlv);
369 tlv = BgpLSIdentifierTlv.of(33686018);
370 subTlvs.add(tlv);
371 NodeDescriptors nodeDes = new NodeDescriptors(subTlvs, (short) 0x10, (short) 256);
372 BgpNodeLSIdentifier key = new BgpNodeLSIdentifier(nodeDes);
373 TimeUnit.MILLISECONDS.sleep(500);
374 AdjRibIn adj = peer.adjRib();
375
376 //In Adj-RIB, nodeTree should contains specified key
377 assertThat(adj.nodeTree().containsKey(key), is(true));
378
379 BgpLocalRibImpl obj = (BgpLocalRibImpl) bgpControllerImpl.bgpLocalRib();
380 //In Local-RIB, nodeTree should contains specified key
381 assertThat(obj.nodeTree().containsKey(key), is(true));
382
383 peer2.peerChannelHandler.asNumber = 200;
384 peer2.peerChannelHandler.version = 4;
385 peer2.peerChannelHandler.holdTime = 120;
386
387 bgpControllerImpl.getConfig().setLsCapability(true);
388 tempTlv1 = new MultiProtocolExtnCapabilityTlv(afi, res, safi);
389 peer2.peerChannelHandler.capabilityTlv.add(tempTlv1);
390 peer2.connectFrom(connectToSocket, new InetSocketAddress("127.0.0.70", 0));
391 TimeUnit.MILLISECONDS.sleep(1000);
392
393 //Get peer2
394 bgpId = new BgpId(IpAddress.valueOf("127.0.0.70"));
395 peer = (BgpPeerImpl) bgpControllerImpl.getPeer(bgpId);
396 TimeUnit.MILLISECONDS.sleep(200);
397 adj = peer.adjRib();
398
399 //In Adj-RIB, nodetree should be empty
400 assertThat(adj.nodeTree().isEmpty(), is(true));
401
402 //Disconnect peer1
403 channel.disconnect();
404 channel.close();
405
406 obj = (BgpLocalRibImpl) bgpControllerImpl.bgpLocalRib();
407 TimeUnit.MILLISECONDS.sleep(200);
408 //In Local-RIB, nodetree should be empty
409 assertThat(obj.nodeTree().isEmpty(), is(true));
410 }
411
412 /**
413 * Peer1 has Link NLRI (MpReach).
414 */
415 @Test
416 public void testBgpUpdateMessage3() throws InterruptedException, TestUtilsException {
417 // Initiate the connections
418 peer1.peerChannelHandler.asNumber = 200;
419 peer1.peerChannelHandler.version = 4;
420 peer1.peerChannelHandler.holdTime = 120;
421
422 short afi = 16388;
423 byte res = 0;
424 byte safi = 71;
425
426 bgpControllerImpl.getConfig().setLsCapability(true);
427 BgpValueType tempTlv1 = new MultiProtocolExtnCapabilityTlv(afi, res, safi);
428 peer1.peerChannelHandler.capabilityTlv.add(tempTlv1);
429 peer1.connectFrom(connectToSocket, new InetSocketAddress("127.0.0.10", 0));
430 TimeUnit.MILLISECONDS.sleep(1000);
431
432 //Get peer1
433 BgpId bgpId = new BgpId(IpAddress.valueOf("127.0.0.10"));
434 BgpPeerImpl peer = (BgpPeerImpl) bgpControllerImpl.getPeer(bgpId);
435
436 LinkedList<BgpValueType> localNodeSubTlvs = new LinkedList<>();
437 LinkedList<BgpValueType> remoteNodeSubTlvs = new LinkedList<>();
438 BgpValueType tlv = AutonomousSystemTlv.of(2222);
439 localNodeSubTlvs.add(tlv);
440 remoteNodeSubTlvs.add(tlv);
441 tlv = BgpLSIdentifierTlv.of(33686018);
442 localNodeSubTlvs.add(tlv);
443 remoteNodeSubTlvs.add(tlv);
444 byte[] isoNodeID = new byte[] {0x19, 0x00, (byte) 0x95, 0x02, 0x50, 0x21 };
445 tlv = IsIsPseudonode.of(isoNodeID, (byte) 0x03);
446 localNodeSubTlvs.add(tlv);
447 isoNodeID = new byte[] {0x19, 0x00, (byte) 0x95, 0x02, 0x50, 0x21 };
448 tlv = IsIsNonPseudonode.of(isoNodeID);
449 remoteNodeSubTlvs.add(tlv);
450 NodeDescriptors localNodeDes = new NodeDescriptors(localNodeSubTlvs, (short) 0x1b, (short) 256);
451 NodeDescriptors remoteNodeDes = new NodeDescriptors(remoteNodeSubTlvs, (short) 0x1a, (short) 0x101);
452 LinkedList<BgpValueType> linkDescriptor = new LinkedList<>();
453 tlv = IPv4AddressTlv.of(Ip4Address.valueOf("2.2.2.2"), (short) 0x103);
454 linkDescriptor.add(tlv);
455
456 BgpLinkLSIdentifier key = new BgpLinkLSIdentifier(localNodeDes, remoteNodeDes, linkDescriptor);
457 TimeUnit.MILLISECONDS.sleep(200);
458 AdjRibIn adj = peer.adjRib();
459
460 //In Adj-RIB, linkTree should contain specified key
461 assertThat(adj.linkTree().containsKey(key), is(true));
462
463 BgpLocalRibImpl obj = (BgpLocalRibImpl) bgpControllerImpl.bgpLocalRib();
464 TimeUnit.MILLISECONDS.sleep(200);
465
466 //In Local-RIB, linkTree should contain specified key
467 assertThat(obj.linkTree().containsKey(key), is(true));
468 }
469
470 /**
471 * Peer1 has Node NLRI and Peer2 has Node NLRI with different MpReach and MpUnReach with VPN.
472 */
473 @Test
474 public void testBgpUpdateMessage4() throws InterruptedException {
475 // Initiate the connections
476 peer1.peerChannelHandler.asNumber = 200;
477 peer1.peerChannelHandler.version = 4;
478 peer1.peerChannelHandler.holdTime = 120;
479
480 short afi = 16388;
481 byte res = 0;
482 byte safi = (byte) 0x80;
483
484 bgpControllerImpl.getConfig().setLsCapability(true);
485 BgpValueType tempTlv1 = new MultiProtocolExtnCapabilityTlv(afi, res, safi);
486 peer1.peerChannelHandler.capabilityTlv.add(tempTlv1);
487 Channel channel = peer1.connectFrom(connectToSocket, new InetSocketAddress("127.0.0.35", 0));
488 TimeUnit.MILLISECONDS.sleep(1000);
489
490 //Get peer1
491 IpAddress ipAddress = IpAddress.valueOf("127.0.0.35");
492 BgpId bgpId = new BgpId(ipAddress);
493 BgpPeerImpl peer = (BgpPeerImpl) bgpControllerImpl.getPeer(bgpId);
494 LinkedList<BgpValueType> subTlvs1 = new LinkedList<>();
495
496 LinkedList<BgpValueType> subTlvs = new LinkedList<>();
497 BgpValueType tlv = AutonomousSystemTlv.of(2478);
498 subTlvs.add(tlv);
499 tlv = BgpLSIdentifierTlv.of(33686018);
500 subTlvs.add(tlv);
501
502 NodeDescriptors nodeDes = new NodeDescriptors(subTlvs, (short) 0x10, (short) 256);
503 BgpNodeLSIdentifier key = new BgpNodeLSIdentifier(nodeDes);
504 RouteDistinguisher rd = new RouteDistinguisher((long) 0x0A);
505 VpnAdjRibIn vpnAdj = peer.vpnAdjRib();
506
507 //In Adj-RIB, vpnNodeTree should contain rd
508 assertThat(vpnAdj.vpnNodeTree().containsKey(rd), is(true));
509
510 Map<BgpNodeLSIdentifier, PathAttrNlriDetails> treeValue = vpnAdj.vpnNodeTree().get(rd);
511 //In Adj-RIB, vpnNodeTree should contain rd key which contains specified value
512 assertThat(treeValue.containsKey(key), is(true));
513
514 BgpLocalRibImpl obj = (BgpLocalRibImpl) bgpControllerImpl.bgpLocalRibVpn();
515 //In Local-RIB, vpnNodeTree should contain rd
516 assertThat(obj.vpnNodeTree().containsKey(rd), is(true));
517
518 Map<BgpNodeLSIdentifier, PathAttrNlriDetailsLocalRib> value = obj.vpnNodeTree().get(rd);
519 //In Local-RIB, vpnNodeTree should contain rd key which contains specified value
520 assertThat(value.containsKey(key), is(true));
521
522 peer2.peerChannelHandler.asNumber = 200;
523 peer2.peerChannelHandler.version = 4;
524 peer2.peerChannelHandler.holdTime = 120;
525
526 bgpControllerImpl.getConfig().setLsCapability(true);
527 tempTlv1 = new MultiProtocolExtnCapabilityTlv(afi, res, safi);
528 peer1.peerChannelHandler.capabilityTlv.add(tempTlv1);
529 peer2.connectFrom(connectToSocket, new InetSocketAddress("127.0.0.40", 0));
530 TimeUnit.MILLISECONDS.sleep(1000);
531
532 //Get peer2
533 bgpId = new BgpId(IpAddress.valueOf("127.0.0.40"));
534 peer = (BgpPeerImpl) bgpControllerImpl.getPeer(bgpId);
535
536 tlv = AutonomousSystemTlv.of(686);
537 subTlvs1.add(tlv);
538 tlv = BgpLSIdentifierTlv.of(33686018);
539 subTlvs1.add(tlv);
540 nodeDes = new NodeDescriptors(subTlvs1, (short) 0x10, (short) 256);
541 key = new BgpNodeLSIdentifier(nodeDes);
542 vpnAdj = peer.vpnAdjRib();
543
544 //In Adj-RIB, vpnNodeTree should contain rd
545 assertThat(vpnAdj.vpnNodeTree().containsKey(rd), is(true));
546
547 treeValue = vpnAdj.vpnNodeTree().get(rd);
548 //In Adj-RIB, vpnNodeTree should contain rd key which contains specified value
549 assertThat(treeValue.containsKey(key), is(true));
550
551 //Disconnect peer1
552 channel.disconnect();
553 channel.close();
554
555 obj = (BgpLocalRibImpl) bgpControllerImpl.bgpLocalRibVpn();
556
557 //In Local-RIB, vpnNodeTree should contain rd
558 assertThat(obj.vpnNodeTree().containsKey(rd), is(true));
559
560 value = obj.vpnNodeTree().get(rd);
561 //In Local-RIB, vpnNodeTree should contain rd key which contains specified value
562 assertThat(value.containsKey(key), is(true));
563 }
564
565 /**
566 * Peer1 has Node NLRI and Peer2 has Node NLRI with different MpReach and MpUnReach.
567 */
568 @Test
569 public void testBgpUpdateMessage5() throws InterruptedException, TestUtilsException {
570 // Initiate the connections
571 peer1.peerChannelHandler.asNumber = 200;
572 peer1.peerChannelHandler.version = 4;
573 peer1.peerChannelHandler.holdTime = 120;
574
575 short afi = 16388;
576 byte res = 0;
577 byte safi = 71;
578
579 bgpControllerImpl.getConfig().setLsCapability(true);
580 BgpValueType tempTlv1 = new MultiProtocolExtnCapabilityTlv(afi, res, safi);
581 peer1.peerChannelHandler.capabilityTlv.add(tempTlv1);
582 Channel channel = peer1.connectFrom(connectToSocket, new InetSocketAddress("127.0.0.99", 0));
583 TimeUnit.MILLISECONDS.sleep(1000);
584
585 //Get peer1
586 BgpId bgpId = new BgpId(IpAddress.valueOf("127.0.0.99"));
587 BgpPeerImpl peer = (BgpPeerImpl) bgpControllerImpl.getPeer(bgpId);
588
589 LinkedList<BgpValueType> subTlvs = new LinkedList<>();
590 BgpValueType tlv = null;
591 tlv = AutonomousSystemTlv.of(2478);
592 subTlvs.add(tlv);
593 tlv = BgpLSIdentifierTlv.of(33686018);
594 subTlvs.add(tlv);
595 NodeDescriptors nodeDes = new NodeDescriptors(subTlvs, (short) 0x10, (short) 256);
596 BgpNodeLSIdentifier key = new BgpNodeLSIdentifier(nodeDes);
597 TimeUnit.MILLISECONDS.sleep(500);
598 AdjRibIn adj = peer.adjRib();
599
600 //In Adj-RIB, nodeTree should contain specified key
601 assertThat(adj.nodeTree().containsKey(key), is(true));
602
603 BgpLocalRibImpl obj = (BgpLocalRibImpl) bgpControllerImpl.bgpLocalRib();
604 //In Local-RIB, nodeTree should contain specified key
605 assertThat(obj.nodeTree().containsKey(key), is(true));
606
607 peer2.peerChannelHandler.asNumber = 200;
608 peer2.peerChannelHandler.version = 4;
609 peer2.peerChannelHandler.holdTime = 120;
610
611 bgpControllerImpl.getConfig().setLsCapability(true);
612 tempTlv1 = new MultiProtocolExtnCapabilityTlv(afi, res, safi);
613 peer2.peerChannelHandler.capabilityTlv.add(tempTlv1);
614 peer2.connectFrom(connectToSocket, new InetSocketAddress("127.0.0.92", 0));
615 TimeUnit.MILLISECONDS.sleep(1000);
616
617 //Get peer2
618 bgpId = new BgpId(IpAddress.valueOf("127.0.0.92"));
619 peer = (BgpPeerImpl) bgpControllerImpl.getPeer(bgpId);
620 adj = peer.adjRib();
621
622 //In Adj-RIB, nodetree should be empty
623 assertThat(adj.nodeTree().isEmpty(), is(true));
624
625 //peer1 disconnects
626 channel.disconnect();
627 channel.close();
628
629 obj = (BgpLocalRibImpl) bgpControllerImpl.bgpLocalRib();
630 TimeUnit.MILLISECONDS.sleep(200);
631
632 //In Local-RIB, nodeTree should be empty
633 assertThat(obj.nodeTree().isEmpty(), is(true));
634 }
635
636 /**
637 * Peer2 has Prefix NLRI (MpReach).
638 */
639 @Test
640 public void testBgpUpdateMessage6() throws InterruptedException {
641 // Initiate the connections
642 peer1.peerChannelHandler.asNumber = 200;
643 peer1.peerChannelHandler.version = 4;
644 peer1.peerChannelHandler.holdTime = 120;
645
646 short afi = 16388;
647 byte res = 0;
648 byte safi = 71;
649
650 bgpControllerImpl.getConfig().setLsCapability(true);
651 BgpValueType tempTlv1 = new MultiProtocolExtnCapabilityTlv(afi, res, safi);
652 peer1.peerChannelHandler.capabilityTlv.add(tempTlv1);
653 Channel channel = peer1.connectFrom(connectToSocket, new InetSocketAddress("127.0.0.94", 0));
654 TimeUnit.MILLISECONDS.sleep(1000);
655
656 //Get peer1
657 BgpId bgpId = new BgpId(IpAddress.valueOf("127.0.0.94"));
658 BgpPeerImpl peer = (BgpPeerImpl) bgpControllerImpl.getPeer(bgpId);
659
660 LinkedList<BgpValueType> subTlvs = new LinkedList<>();
661 BgpValueType tlv = AutonomousSystemTlv.of(2478);
662 subTlvs.add(tlv);
663 tlv = BgpLSIdentifierTlv.of(33686018);
664 subTlvs.add(tlv);
665 NodeDescriptors nodeDes = new NodeDescriptors(subTlvs, (short) 0x10, (short) 256);
666 BgpNodeLSIdentifier key = new BgpNodeLSIdentifier(nodeDes);
667 TimeUnit.MILLISECONDS.sleep(500);
668 AdjRibIn adj = peer.adjRib();
669
670 //In Adj-RIB, nodeTree should contain specified key
671 assertThat(adj.nodeTree().containsKey(key), is(true));
672
673 BgpLocalRibImpl obj = (BgpLocalRibImpl) bgpControllerImpl.bgpLocalRib();
674 //In Local-RIB, nodeTree should contain specified key
675 assertThat(obj.nodeTree().containsKey(key), is(true));
676
677 peer2.peerChannelHandler.asNumber = 200;
678 peer2.peerChannelHandler.version = 4;
679 peer2.peerChannelHandler.holdTime = 120;
680
681 bgpControllerImpl.getConfig().setLsCapability(true);
682 tempTlv1 = new MultiProtocolExtnCapabilityTlv(afi, res, safi);
683 peer2.peerChannelHandler.capabilityTlv.add(tempTlv1);
684 peer2.connectFrom(connectToSocket, new InetSocketAddress("127.0.0.80", 0));
685 TimeUnit.MILLISECONDS.sleep(1000);
686
687 //Get peer2
688 bgpId = new BgpId(IpAddress.valueOf("127.0.0.80"));
689 peer = (BgpPeerImpl) bgpControllerImpl.getPeer(bgpId);
690 TimeUnit.MILLISECONDS.sleep(500);
691 adj = peer.adjRib();
692
693 //In Adj-RIB, nodeTree should contain specified key
694 assertThat(adj.nodeTree().containsKey(key), is(true));
695
696 //peer1 disconnects
697 channel.disconnect();
698 channel.close();
699
700 obj = (BgpLocalRibImpl) bgpControllerImpl.bgpLocalRib();
701 TimeUnit.MILLISECONDS.sleep(200);
702
703 //In Local-RIB, nodeTree should contain specified key
704 assertThat(obj.nodeTree().containsKey(key), is(true));
705 }
706
707 /**
708 * Peer1 has Node NLRI (MpReach) and peer2 has Node NLRI with same MpReach and MpUnReach with IsIsNonPseudonode.
709 */
710 @Test
711 public void testBgpUpdateMessage7() throws InterruptedException, TestUtilsException {
712 // Initiate the connections
713 peer1.peerChannelHandler.asNumber = 200;
714 peer1.peerChannelHandler.version = 4;
715 peer1.peerChannelHandler.holdTime = 120;
716
717 short afi = 16388;
718 byte res = 0;
719 byte safi = 71;
720
721 bgpControllerImpl.getConfig().setLsCapability(true);
722 BgpValueType tempTlv1 = new MultiProtocolExtnCapabilityTlv(afi, res, safi);
723 peer1.peerChannelHandler.capabilityTlv.add(tempTlv1);
724 Channel channel = peer1.connectFrom(connectToSocket, new InetSocketAddress("127.0.0.91", 0));
725 TimeUnit.MILLISECONDS.sleep(1000);
726
727 //Get peer1
728 BgpId bgpId = new BgpId(IpAddress.valueOf("127.0.0.91"));
729 BgpPeerImpl peer = (BgpPeerImpl) bgpControllerImpl.getPeer(bgpId);
730
731 LinkedList<BgpValueType> subTlvs = new LinkedList<>();
732 LinkedList<BgpValueType> subTlvs1 = new LinkedList<>();
733 BgpValueType tlv = null;
734 tlv = AutonomousSystemTlv.of(2478);
735 subTlvs.add(tlv);
736 tlv = BgpLSIdentifierTlv.of(33686018);
737 subTlvs.add(tlv);
738 subTlvs1.add(tlv);
739 NodeDescriptors nodeDes = new NodeDescriptors(subTlvs, (short) 0x10, (short) 256);
740 BgpNodeLSIdentifier key = new BgpNodeLSIdentifier(nodeDes);
741 AdjRibIn adj = peer.adjRib();
742
743 //In Adj-RIB, nodeTree should contains specified key
744 assertThat(adj.nodeTree().containsKey(key), is(true));
745
746 BgpLocalRibImpl obj = (BgpLocalRibImpl) bgpControllerImpl.bgpLocalRib();
747 //In Local-RIB, nodeTree should contains specified key
748 assertThat(obj.nodeTree().containsKey(key), is(true));
749
750 peer2.peerChannelHandler.asNumber = 200;
751 peer2.peerChannelHandler.version = 4;
752 peer2.peerChannelHandler.holdTime = 120;
753
754 bgpControllerImpl.getConfig().setLsCapability(true);
755 tempTlv1 = new MultiProtocolExtnCapabilityTlv(afi, res, safi);
756 peer2.peerChannelHandler.capabilityTlv.add(tempTlv1);
757 peer2.connectFrom(connectToSocket, new InetSocketAddress("127.0.0.90", 0));
758 TimeUnit.MILLISECONDS.sleep(1000);
759
760 //Get peer2
761 bgpId = new BgpId(IpAddress.valueOf("127.0.0.90"));
762 peer = (BgpPeerImpl) bgpControllerImpl.getPeer(bgpId);
763
764 tlv = AutonomousSystemTlv.of(2222);
765 subTlvs1.add(tlv);
766 byte[] isoNodeID = new byte[] {0x19, 0x00, (byte) 0x95, 0x01, (byte) 0x90, 0x58};
767 tlv = IsIsNonPseudonode.of(isoNodeID);
768 subTlvs1.add(tlv);
769 nodeDes = new NodeDescriptors(subTlvs1, (short) 0x1a, (short) 256);
770 key = new BgpNodeLSIdentifier(nodeDes);
771 adj = peer.adjRib();
772
773 //In Adj-RIB, nodeTree should contains specified key
774 log.info("key " + key.toString());
775 log.info("adj.nodeTree() " + adj.nodeTree().toString());
776 assertThat(adj.nodeTree().containsKey(key), is(true));
777
778 //peer1 disconnects
779 channel.disconnect();
780 channel.close();
781
782 obj = (BgpLocalRibImpl) bgpControllerImpl.bgpLocalRib();
783 TimeUnit.MILLISECONDS.sleep(200);
784
785 //In Local-RIB, nodeTree should contains specified key
786 assertThat(obj.nodeTree().containsKey(key), is(true));
787 }
788
789 /**
790 * Peer1 has Prefix NLRI (MpReach).
791 */
792 @Test
793 public void testBgpUpdateMessage8() throws InterruptedException {
794 // Initiate the connections
795 peer1.peerChannelHandler.asNumber = 200;
796 peer1.peerChannelHandler.version = 4;
797 peer1.peerChannelHandler.holdTime = 150;
798
799 short afi = 16388;
800 byte res = 0;
801 byte safi = 71;
802
803 bgpControllerImpl.getConfig().setLsCapability(true);
804 BgpValueType tempTlv1 = new MultiProtocolExtnCapabilityTlv(afi, res, safi);
805 peer1.peerChannelHandler.capabilityTlv.add(tempTlv1);
806 peer1.connectFrom(connectToSocket, new InetSocketAddress("127.0.0.20", 0));
807 TimeUnit.MILLISECONDS.sleep(1000);
808
809 //Get peer1
810 BgpId bgpId = new BgpId(IpAddress.valueOf("127.0.0.20"));
811 BgpPeerImpl peer = (BgpPeerImpl) bgpControllerImpl.getPeer(bgpId);
812
813 LinkedList<BgpValueType> subTlvs = new LinkedList<>();
814 BgpValueType tlv = AutonomousSystemTlv.of(2222);
815 subTlvs.add(tlv);
816 tlv = BgpLSIdentifierTlv.of(33686018);
817 subTlvs.add(tlv);
818 byte[] isoNodeID = new byte[] {0x19, 0x21, 0x68, 0x07, 0x70, 0x01};
819 tlv = IsIsNonPseudonode.of(isoNodeID);
820 subTlvs.add(tlv);
821 NodeDescriptors nodeDes = new NodeDescriptors(subTlvs, (short) 0x1a, (short) 256);
822 LinkedList<BgpValueType> prefixDescriptor = new LinkedList<>();
823 byte[] prefix = new byte[] {0x20, (byte) 0xc0, (byte) 0xa8, 0x4d, 0x01};
824 ChannelBuffer tempCb = ChannelBuffers.dynamicBuffer();
825 tempCb.writeBytes(prefix);
826 tlv = IPReachabilityInformationTlv.read(tempCb, (short) 5);
827 prefixDescriptor.add(tlv);
828 BgpPrefixLSIdentifier key = new BgpPrefixLSIdentifier(nodeDes, prefixDescriptor);
829
830 AdjRibIn adj = peer.adjRib();
831
832 //In Adj-RIB, prefixTree should contain specified key
833 assertThat(adj.prefixTree().containsKey(key), is(true));
834
835 BgpLocalRibImpl obj = (BgpLocalRibImpl) bgpControllerImpl.bgpLocalRib();
836 //In Local-RIB, prefixTree should contain specified key
837 assertThat(obj.prefixTree().containsKey(key), is(true));
838 }
839
840 /**
841 * Peer1 has Node NLRI (MpReach) and Peer2 has node NLRI with different MpReach
842 * and MpUnReach with IsIsNonPseudonode.
843 */
844 @Test
845 public void testBgpUpdateMessage9() throws InterruptedException {
846 // Initiate the connections
847 peer1.peerChannelHandler.asNumber = 200;
848 peer1.peerChannelHandler.version = 4;
849 peer1.peerChannelHandler.holdTime = 120;
850
851 short afi = 16388;
852 byte res = 0;
853 byte safi = (byte) 0x80;
854
855 bgpControllerImpl.getConfig().setLsCapability(true);
856 BgpValueType tempTlv1 = new MultiProtocolExtnCapabilityTlv(afi, res, safi);
857 peer1.peerChannelHandler.capabilityTlv.add(tempTlv1);
858 Channel channel = peer1.connectFrom(connectToSocket, new InetSocketAddress("127.0.0.30", 0));
859 TimeUnit.MILLISECONDS.sleep(1000);
860
861 //Get peer1
862 BgpId bgpId = new BgpId(IpAddress.valueOf("127.0.0.30"));
863 BgpPeerImpl peer = (BgpPeerImpl) bgpControllerImpl.getPeer(bgpId);
864
865 LinkedList<BgpValueType> subTlvs = new LinkedList<>();
866 BgpValueType tlv = AutonomousSystemTlv.of(2478);
867 subTlvs.add(tlv);
868 tlv = BgpLSIdentifierTlv.of(33686018);
869 subTlvs.add(tlv);
870
871 NodeDescriptors nodeDes = new NodeDescriptors(subTlvs, (short) 0x10, (short) 256);
872 BgpNodeLSIdentifier key = new BgpNodeLSIdentifier(nodeDes);
873 RouteDistinguisher rd = new RouteDistinguisher((long) 0x0A);
874 VpnAdjRibIn vpnAdj = peer.vpnAdjRib();
875
876 //In Adj-RIB, vpnNodeTree should contain specified rd
877 assertThat(vpnAdj.vpnNodeTree().containsKey(rd), is(true));
878
879 Map<BgpNodeLSIdentifier, PathAttrNlriDetails> treeValue = vpnAdj.vpnNodeTree().get(rd);
880 //In Adj-RIB, vpnNodeTree should contain specified rd with specified value
881 assertThat(treeValue.containsKey(key), is(true));
882
883 BgpLocalRibImpl obj = (BgpLocalRibImpl) bgpControllerImpl.bgpLocalRibVpn();
884 //In Local-RIB, vpnNodeTree should contain specified rd
885 assertThat(obj.vpnNodeTree().containsKey(rd), is(true));
886
887 Map<BgpNodeLSIdentifier, PathAttrNlriDetailsLocalRib> value = obj.vpnNodeTree().get(rd);
888 //In Local-RIB, vpnNodeTree should contain specified rd with specified value
889 assertThat(value.containsKey(key), is(true));
890
891 peer2.peerChannelHandler.asNumber = 200;
892 peer2.peerChannelHandler.version = 4;
893 peer2.peerChannelHandler.holdTime = 120;
894
895 bgpControllerImpl.getConfig().setLsCapability(true);
896 tempTlv1 = new MultiProtocolExtnCapabilityTlv(afi, res, safi);
897 peer2.peerChannelHandler.capabilityTlv.add(tempTlv1);
898 peer2.connectFrom(connectToSocket, new InetSocketAddress("127.0.0.50", 0));
899 TimeUnit.MILLISECONDS.sleep(1000);
900
901 //Get peer2
902 bgpId = new BgpId(IpAddress.valueOf("127.0.0.50"));
903 peer = (BgpPeerImpl) bgpControllerImpl.getPeer(bgpId);
904 key = new BgpNodeLSIdentifier(nodeDes);
905 vpnAdj = peer.vpnAdjRib();
906
907 //In Adj-RIB, vpnNodeTree should be empty
908 assertThat(vpnAdj.vpnNodeTree().isEmpty(), is(true));
909
910 //peer1 disconnects
911 channel.disconnect();
912 channel.close();
913
914 obj = (BgpLocalRibImpl) bgpControllerImpl.bgpLocalRibVpn();
915 TimeUnit.MILLISECONDS.sleep(200);
916
917 //In Local-RIB, vpnNodeTree should be empty
918 assertThat(obj.vpnNodeTree().isEmpty(), is(true));
919 }
920
921 /**
Vidyashree Rama7bd3d782015-11-23 08:46:33 +0530922 * A class to capture the state for a BGP peer.
923 */
924 private final class BgpPeerTest {
925 private ClientBootstrap peerBootstrap;
926 private BgpPeerFrameDecoderTest peerFrameDecoder =
927 new BgpPeerFrameDecoderTest();
928 private BgpPeerChannelHandlerTest peerChannelHandler;
929
930 private BgpPeerTest(byte version, short asNumber,
931 short holdTime, int bgpId, boolean isLargeAsCapabilitySet,
Shashikanth VH5dd8dbe2015-11-26 13:22:18 +0530932 LinkedList<BgpValueType> capabilityTlv) {
Vidyashree Rama7bd3d782015-11-23 08:46:33 +0530933 peerChannelHandler = new BgpPeerChannelHandlerTest(version,
934 asNumber, holdTime, bgpId, isLargeAsCapabilitySet, capabilityTlv);
935 }
936
937 /**
938 * Starts the BGP peer.
939 *
940 * @param connectToSocket the socket to connect to
941 */
942 private void connect(InetSocketAddress connectToSocket)
943 throws InterruptedException {
944
945 ChannelFactory channelFactory =
946 new NioClientSocketChannelFactory(
947 Executors.newCachedThreadPool(),
948 Executors.newCachedThreadPool());
949 ChannelPipelineFactory pipelineFactory = () -> {
950 ChannelPipeline pipeline = Channels.pipeline();
951 pipeline.addLast("BgpPeerFrameDecoderTest",
952 peerFrameDecoder);
953 pipeline.addLast("BgpPeerChannelHandlerTest",
954 peerChannelHandler);
955 return pipeline;
956 };
957
958 peerBootstrap = new ClientBootstrap(channelFactory);
959 peerBootstrap.setOption("child.keepAlive", true);
960 peerBootstrap.setOption("child.tcpNoDelay", true);
961 peerBootstrap.setPipelineFactory(pipelineFactory);
962 peerBootstrap.connect(connectToSocket);
963 }
Priyanka B249027e2015-12-14 12:42:41 +0530964
965 private Channel connectFrom(InetSocketAddress connectToSocket, SocketAddress localAddress)
966 throws InterruptedException {
967
968 ChannelFactory channelFactory =
969 new NioClientSocketChannelFactory(
970 Executors.newCachedThreadPool(),
971 Executors.newCachedThreadPool());
972 ChannelPipelineFactory pipelineFactory = () -> {
973 ChannelPipeline pipeline = Channels.pipeline();
974 pipeline.addLast("BgpPeerFrameDecoderTest",
975 peerFrameDecoder);
976 pipeline.addLast("BgpPeerChannelHandlerTest",
977 peerChannelHandler);
978 return pipeline;
979 };
980
981 peerBootstrap = new ClientBootstrap(channelFactory);
982 peerBootstrap.setOption("child.keepAlive", true);
983 peerBootstrap.setOption("child.tcpNoDelay", true);
984 peerBootstrap.setPipelineFactory(pipelineFactory);
985 Channel channel = peerBootstrap.connect(connectToSocket, localAddress).getChannel();
986 return channel;
987 }
Vidyashree Rama7bd3d782015-11-23 08:46:33 +0530988 }
989}