From: Xiao Liang Date: Tue, 15 Apr 2025 08:34:20 +0000 (+0800) Subject: topotests: Add check of imported routes for bgp_evpn_rt5 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=refs%2Fpull%2F18656%2Fhead;p=mirror%2Ffrr.git 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 --- 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