summaryrefslogtreecommitdiffhomepage
path: root/test/scenario_test/addpath_test.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/scenario_test/addpath_test.py')
-rw-r--r--test/scenario_test/addpath_test.py39
1 files changed, 35 insertions, 4 deletions
diff --git a/test/scenario_test/addpath_test.py b/test/scenario_test/addpath_test.py
index c2d2c5bf..2789c3b2 100644
--- a/test/scenario_test/addpath_test.py
+++ b/test/scenario_test/addpath_test.py
@@ -37,9 +37,12 @@ class GoBGPTestBase(unittest.TestCase):
g1 = GoBGPContainer(name='g1', asn=65000, router_id='192.168.0.1',
ctn_image_name=gobgp_ctn_image_name,
log_level=parser_option.gobgp_log_level)
- e1 = ExaBGPContainer(name='e1', asn=65000, router_id='192.168.0.2')
+ g2 = GoBGPContainer(name='g2', asn=65000, router_id='192.168.0.2',
+ ctn_image_name=gobgp_ctn_image_name,
+ log_level=parser_option.gobgp_log_level)
+ e1 = ExaBGPContainer(name='e1', asn=65000, router_id='192.168.0.3')
- ctns = [g1, e1]
+ ctns = [g1, g2, e1]
e1.add_route(route='192.168.100.0/24', identifier=10, aspath=[100, 200, 300])
e1.add_route(route='192.168.100.0/24', identifier=20, aspath=[100, 200])
@@ -51,18 +54,46 @@ class GoBGPTestBase(unittest.TestCase):
g1.add_peer(e1, addpath=True)
e1.add_peer(g1, addpath=True)
+
+ g1.add_peer(g2, addpath=False, is_rr_client=True)
+ g2.add_peer(g1, addpath=False)
+
cls.g1 = g1
+ cls.g2 = g2
cls.e1 = e1
# test each neighbor state is turned establish
def test_01_neighbor_established(self):
+ self.g1.wait_for(expected_state=BGP_FSM_ESTABLISHED, peer=self.g2)
self.g1.wait_for(expected_state=BGP_FSM_ESTABLISHED, peer=self.e1)
# test three routes are installed to the rib due to add-path feature
def test_02_check_g1_global_rib(self):
rib = self.g1.get_global_rib()
- self.assertTrue(len(rib) == 1)
- self.assertTrue(len(rib[0]['paths']) == 3)
+ self.assertEqual(len(rib), 1)
+ self.assertEqual(len(rib[0]['paths']), 3)
+
+ # test only the best path is advertised to g2
+ def test_03_check_g2_global_rib(self):
+ rib = self.g2.get_global_rib()
+ self.assertEqual(len(rib), 1)
+ self.assertEqual(len(rib[0]['paths']), 1)
+ self.assertEqual(rib[0]['paths'][0]["aspath"], [100])
+
+ # test a withdraw route with path_id is removed from the rib
+ def test_04_withdraw_route_with_path_id(self):
+ self.e1.del_route(route='192.168.100.0/24', identifier=30)
+
+ rib = self.g1.get_global_rib()
+ self.assertEqual(len(rib), 1)
+ self.assertEqual(len(rib[0]['paths']), 2)
+
+ # test the best path is replaced due to the removal from g1 rib
+ def test_05_check_g2_global_rib(self):
+ rib = self.g2.get_global_rib()
+ self.assertEqual(len(rib), 1)
+ self.assertEqual(len(rib[0]['paths']), 1)
+ self.assertEqual(rib[0]['paths'][0]["aspath"], [100, 200])
if __name__ == '__main__':