From 9c6e6a35d470473c8320b8b2af09587bbec1a3f3 Mon Sep 17 00:00:00 2001 From: Xiao Liang Date: Tue, 15 Apr 2025 16:34:20 +0800 Subject: [PATCH] topotests: Add check of imported routes for bgp_evpn_rt5 In bgp_evpn_rt5, check if EVPN routes are correctly imported to VRF. Note that EVPN and RT extended communities should have been stripped. Signed-off-by: Xiao Liang --- .../r1/bgp_vrf_ipv4_routes_detail.json | 23 ++++++++++++++ .../r1/bgp_vrf_ipv6_routes_detail.json | 24 ++++++++++++++ .../r2/bgp_vrf_ipv4_routes_detail.json | 23 ++++++++++++++ .../r2/bgp_vrf_ipv6_routes_detail.json | 24 ++++++++++++++ tests/topotests/bgp_evpn_rt5/test_bgp_evpn.py | 31 +++++++++++++++++++ 5 files changed, 125 insertions(+) create mode 100644 tests/topotests/bgp_evpn_rt5/r1/bgp_vrf_ipv4_routes_detail.json create mode 100644 tests/topotests/bgp_evpn_rt5/r1/bgp_vrf_ipv6_routes_detail.json create mode 100644 tests/topotests/bgp_evpn_rt5/r2/bgp_vrf_ipv4_routes_detail.json create mode 100644 tests/topotests/bgp_evpn_rt5/r2/bgp_vrf_ipv6_routes_detail.json diff --git a/tests/topotests/bgp_evpn_rt5/r1/bgp_vrf_ipv4_routes_detail.json b/tests/topotests/bgp_evpn_rt5/r1/bgp_vrf_ipv4_routes_detail.json new file mode 100644 index 0000000000..3327bbcd31 --- /dev/null +++ b/tests/topotests/bgp_evpn_rt5/r1/bgp_vrf_ipv4_routes_detail.json @@ -0,0 +1,23 @@ +{ + "vrfName": "r1-vrf-101", + "routerId": "192.168.102.21", + "localAS": 65000, + "routes": { + "192.168.101.41/32": [ + { + "importedFrom": "65000:201", + "vni": "101", + "valid": true, + "extendedCommunity": null, + "nexthops": [ + { + "ip": "192.168.100.41", + "hostname": "r2", + "afi": "ipv4", + "used": true + } + ] + } + ] + } +} diff --git a/tests/topotests/bgp_evpn_rt5/r1/bgp_vrf_ipv6_routes_detail.json b/tests/topotests/bgp_evpn_rt5/r1/bgp_vrf_ipv6_routes_detail.json new file mode 100644 index 0000000000..f89b89f1dd --- /dev/null +++ b/tests/topotests/bgp_evpn_rt5/r1/bgp_vrf_ipv6_routes_detail.json @@ -0,0 +1,24 @@ +{ + "vrfName": "r1-vrf-101", + "routerId": "192.168.102.21", + "localAS": 65000, + "routes": { + "fd00::2/128": [ + { + "importedFrom": "65000:201", + "vni": "101", + "valid": true, + "extendedCommunity": null, + "nexthops": [ + { + "ip": "::ffff:192.168.100.41", + "hostname": "r2", + "afi": "ipv6", + "scope": "global", + "used": true + } + ] + } + ] + } +} diff --git a/tests/topotests/bgp_evpn_rt5/r2/bgp_vrf_ipv4_routes_detail.json b/tests/topotests/bgp_evpn_rt5/r2/bgp_vrf_ipv4_routes_detail.json new file mode 100644 index 0000000000..c50964f8c0 --- /dev/null +++ b/tests/topotests/bgp_evpn_rt5/r2/bgp_vrf_ipv4_routes_detail.json @@ -0,0 +1,23 @@ +{ + "vrfName": "r2-vrf-101", + "routerId": "192.168.101.41", + "localAS": 65000, + "routes": { + "192.168.102.21/32": [ + { + "importedFrom": "65000:101", + "vni": "101", + "valid": true, + "extendedCommunity": null, + "nexthops": [ + { + "ip": "192.168.100.21", + "hostname": "r1", + "afi": "ipv4", + "used": true + } + ] + } + ] + } +} diff --git a/tests/topotests/bgp_evpn_rt5/r2/bgp_vrf_ipv6_routes_detail.json b/tests/topotests/bgp_evpn_rt5/r2/bgp_vrf_ipv6_routes_detail.json new file mode 100644 index 0000000000..17928a9b0d --- /dev/null +++ b/tests/topotests/bgp_evpn_rt5/r2/bgp_vrf_ipv6_routes_detail.json @@ -0,0 +1,24 @@ +{ + "vrfName": "r2-vrf-101", + "routerId": "192.168.101.41", + "localAS": 65000, + "routes": { + "fd00::1/128": [ + { + "importedFrom": "65000:101", + "vni": "101", + "valid": true, + "extendedCommunity": null, + "nexthops": [ + { + "ip": "::ffff:192.168.100.21", + "hostname": "r1", + "afi": "ipv6", + "scope": "global", + "used": true + } + ] + } + ] + } +} diff --git a/tests/topotests/bgp_evpn_rt5/test_bgp_evpn.py b/tests/topotests/bgp_evpn_rt5/test_bgp_evpn.py index f699bea7c2..c5f400ce84 100644 --- a/tests/topotests/bgp_evpn_rt5/test_bgp_evpn.py +++ b/tests/topotests/bgp_evpn_rt5/test_bgp_evpn.py @@ -280,6 +280,37 @@ def test_protocols_dump_info(): logger.info(output) +def test_bgp_vrf_routes(): + """ + Check routes are correctly imported to VRF + """ + tgen = get_topogen() + if tgen.routers_have_failure(): + pytest.skip(tgen.errors) + + for rname in ("r1", "r2"): + router = tgen.gears[rname] + for af in ("ipv4", "ipv6"): + json_file = "{}/{}/bgp_vrf_{}_routes_detail.json".format( + CWD, router.name, af + ) + if not os.path.isfile(json_file): + assert 0, "bgp vrf routes file not found" + + expected = json.loads(open(json_file).read()) + test_func = partial( + topotest.router_json_cmp, + router, + "show bgp vrf {}-vrf-101 {} unicast detail json".format( + router.name, af + ), + expected, + ) + _, result = topotest.run_and_expect(test_func, None, count=20, wait=1) + assertmsg = '"{}" JSON output mismatches'.format(router.name) + assert result is None, assertmsg + + def test_router_check_ip(): """ Check routes are correctly installed -- 2.39.5