summaryrefslogtreecommitdiffstats
path: root/tests/topotests/bgp_vpnv4_ebgp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/topotests/bgp_vpnv4_ebgp')
-rw-r--r--tests/topotests/bgp_vpnv4_ebgp/r2/bgp_ipv4_vpn_route_1723101.json50
-rw-r--r--tests/topotests/bgp_vpnv4_ebgp/test_bgp_vpnv4_ebgp.py168
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()