diff options
Diffstat (limited to 'tests/topotests/bgp_vpnv4_ebgp')
-rw-r--r-- | tests/topotests/bgp_vpnv4_ebgp/r2/bgp_ipv4_vpn_route_1723101.json | 50 | ||||
-rw-r--r-- | tests/topotests/bgp_vpnv4_ebgp/test_bgp_vpnv4_ebgp.py | 168 |
2 files changed, 208 insertions, 10 deletions
diff --git a/tests/topotests/bgp_vpnv4_ebgp/r2/bgp_ipv4_vpn_route_1723101.json b/tests/topotests/bgp_vpnv4_ebgp/r2/bgp_ipv4_vpn_route_1723101.json new file mode 100644 index 0000000..2ed7631 --- /dev/null +++ b/tests/topotests/bgp_vpnv4_ebgp/r2/bgp_ipv4_vpn_route_1723101.json @@ -0,0 +1,50 @@ +{ + "444:1":{ + "prefix":"172.31.0.1/32", + "advertisedTo":{ + "192.168.0.1":{ + } + }, + "paths":[ + { + "aspath":{ + "string":"65500", + "segments":[ + { + "type":"as-sequence", + "list":[ + 65500 + ] + } + ], + "length":1 + }, + "origin":"incomplete", + "metric":0, + "valid":true, + "bestpath":{ + "overall":true, + "selectionReason":"First path received" + }, + "extendedCommunity":{ + "string":"RT:52:101" + }, + "remoteLabel":102, + "nexthops":[ + { + "ip":"192.168.0.1", + "afi":"ipv4", + "metric":0, + "accessible":true, + "used":true + } + ], + "peer":{ + "peerId":"192.168.0.1", + "routerId":"192.0.2.1", + "type":"external" + } + } + ] + } +} diff --git a/tests/topotests/bgp_vpnv4_ebgp/test_bgp_vpnv4_ebgp.py b/tests/topotests/bgp_vpnv4_ebgp/test_bgp_vpnv4_ebgp.py index 8b2e674..1898243 100644 --- a/tests/topotests/bgp_vpnv4_ebgp/test_bgp_vpnv4_ebgp.py +++ b/tests/topotests/bgp_vpnv4_ebgp/test_bgp_vpnv4_ebgp.py @@ -228,7 +228,12 @@ def test_export_route_target_empty(): router = tgen.gears["r1"] logger.info("r1, Remove 'rt vpn export 52:100' command") router.vtysh_cmd( - "configure terminal\nrouter bgp 65500 vrf vrf1\naddress-family ipv4 unicast\nno rt vpn export 52:100\n" + """ +configure terminal +router bgp 65500 vrf vrf1 + address-family ipv4 unicast + no rt vpn export 52:100 +""" ) prefix = "172.31.0.1/32" @@ -254,10 +259,15 @@ def test_export_route_target_with_routemap_with_export_route_target(): router = tgen.gears["r1"] logger.info("r1, configuring route target with route-map with export route target") router.vtysh_cmd( - "configure terminal\nrouter bgp 65500 vrf vrf1\naddress-family ipv4 unicast\nroute-map vpn export rmap\n" - ) - router.vtysh_cmd( - "configure terminal\nroute-map rmap permit 1\nset extcommunity rt 52:100\n" + """ +configure terminal +router bgp 65500 vrf vrf1 + address-family ipv4 unicast + route-map vpn export RMAP +! +route-map RMAP permit 1 + set extcommunity rt 52:100 +""" ) prefix = "172.31.0.1/32" @@ -283,7 +293,11 @@ def test_export_route_target_with_routemap_without_export_route_target(): router = tgen.gears["r1"] logger.info("r1, removing 'set extcommunity rt 52:100.") router.vtysh_cmd( - "configure terminal\nroute-map rmap permit 1\nno set extcommunity rt\n" + """ +configure terminal +route-map RMAP permit 1 + no set extcommunity rt +""" ) prefix = "172.31.0.1/32" @@ -309,7 +323,12 @@ def test_export_route_target_with_default_command(): router = tgen.gears["r1"] logger.info("r1, detach route-map and re-add route target vpn export") router.vtysh_cmd( - "configure terminal\nrouter bgp 65500 vrf vrf1\naddress-family ipv4 unicast\nrt vpn export 52:100\n" + """ +configure terminal +router bgp 65500 vrf vrf1 + address-family ipv4 unicast + rt vpn export 52:100 +""" ) prefix = "172.31.0.1/32" logger.info("r1, check that exported prefix {} is added back".format(prefix)) @@ -334,9 +353,14 @@ def test_export_suppress_route_target_with_route_map_command(): router = tgen.gears["r1"] logger.info("r1, add an extended comm-list to delete 52:100") - router.vtysh_cmd("configure terminal\nbgp extcommunity-list 1 permit rt 52:100\n") router.vtysh_cmd( - "configure terminal\nroute-map rmap permit 1\nset extended-comm-list 1 delete\n" + """ +configure terminal +bgp extcommunity-list 1 permit rt 52:100 +! +route-map RMAP permit 1 + set extended-comm-list 1 delete +""" ) prefix = "172.31.0.1/32" logger.info("r1, check that exported prefix {} is removed".format(prefix)) @@ -361,7 +385,11 @@ def test_export_add_route_target_to_route_map_command(): router = tgen.gears["r1"] logger.info("r1, add an additional set extcommunity 52:101") router.vtysh_cmd( - "configure terminal\nroute-map rmap permit 1\nset extcommunity rt 52:101\n" + """ +configure terminal +route-map RMAP permit 1 + set extcommunity rt 52:101 +""" ) prefix = "172.31.0.1/32" logger.info("r1, check that exported prefix {} is added back".format(prefix)) @@ -376,6 +404,126 @@ def test_export_add_route_target_to_route_map_command(): assert success, "{}, vpnv4 update {} still not present".format(router.name, prefix) +def test_adj_rib_out_label_change(): + """ + Check that changing the VPN label on r1 + is propagated on r2 + """ + tgen = get_topogen() + if tgen.routers_have_failure(): + pytest.skip(tgen.errors) + + logger.info("Changing VPN label value to export") + dump = tgen.gears["r1"].vtysh_cmd( + """ +configure terminal + router bgp 65500 vrf vrf1 + address-family ipv4 unicast + label vpn export 102 +""" + ) + # Check BGP IPv4 route entry for 172.31.0.1 on r1 + logger.info("Checking BGP IPv4 routes for convergence on r1") + router = tgen.gears["r2"] + json_file = "{}/{}/bgp_ipv4_vpn_route_1723101.json".format(CWD, router.name) + expected = json.loads(open(json_file).read()) + test_func = partial( + topotest.router_json_cmp, + router, + "show bgp ipv4 vpn 172.31.0.1/32 json", + expected, + ) + _, result = topotest.run_and_expect(test_func, None, count=10, wait=0.5) + assertmsg = '"{}" JSON output mismatches'.format(router.name) + assert result is None, assertmsg + + +def test_adj_rib_in_label_change(): + """ + Check that syncinig with ADJ-RIB-in on r2 + permits restoring the initial label value + """ + tgen = get_topogen() + if tgen.routers_have_failure(): + pytest.skip(tgen.errors) + + logger.info("Enable soft-reconfiguration inbound on r2") + + r2 = tgen.gears["r2"] + r2.vtysh_cmd( + """ +configure terminal +router bgp 65501 + address-family ipv4 vpn + neighbor 192.168.0.1 soft-reconfiguration inbound +""" + ) + + logger.info("Applying a deny-all route-map to input on r2") + r2.vtysh_cmd( + """ +configure terminal +route-map DENY-ALL deny 1 +! +router bgp 65501 + address-family ipv4 vpn + neighbor 192.168.0.1 route-map DENY-ALL in +""" + ) + + # check that 172.31.0.1 should not be present + logger.info("Check that received update 172.31.0.1 is not present") + + expected = {} + test_func = partial( + topotest.router_json_cmp, + r2, + "show bgp ipv4 vpn 172.31.0.1/32 json", + expected, + exact=True, + ) + success, result = topotest.run_and_expect(test_func, None, count=10, wait=0.5) + assert success, "r2, vpnv4 update 172.31.0.1 still present" + + +def test_adj_rib_in_label_change_remove_rmap(): + """ + Check that syncinig with ADJ-RIB-in on r2 + permits restoring the initial label value + """ + tgen = get_topogen() + if tgen.routers_have_failure(): + pytest.skip(tgen.errors) + + logger.info("Removing the deny-all route-map from input on r2") + + r2 = tgen.gears["r2"] + r2.vtysh_cmd( + """ +configure terminal +router bgp 65501 + address-family ipv4 vpn + no neighbor 192.168.0.1 route-map DENY-ALL in +""" + ) + # Check BGP IPv4 route entry for 172.31.0.1 on r1 + logger.info( + "Checking that 172.31.0.1 BGP update is present and has valid label on r2" + ) + json_file = "{}/{}/bgp_ipv4_vpn_route_1723101.json".format(CWD, r2.name) + + expected = json.loads(open(json_file).read()) + test_func = partial( + topotest.router_json_cmp, + r2, + "show bgp ipv4 vpn 172.31.0.1/32 json", + expected, + ) + _, result = topotest.run_and_expect(test_func, None, count=10, wait=0.5) + assertmsg = '"{}" JSON output mismatches'.format(r2.name) + assert result is None, assertmsg + + def test_memory_leak(): "Run the memory leak test and report results." tgen = get_topogen() |