From 1a2c3d684a6a8054eb8cf878955834cbbec6efe1 Mon Sep 17 00:00:00 2001 From: Enke Chen Date: Thu, 24 Oct 2024 10:30:24 -0700 Subject: [PATCH] tests: add a new BGP AIGP topotest The topotest verifies that a local route is favored irrespective of its AIGP value. Signed-off-by: Enke Chen --- tests/topotests/bgp_aigp_rr/r1/bgpd.conf | 5 +++ tests/topotests/bgp_aigp_rr/r2/bgpd.conf | 4 ++ .../topotests/bgp_aigp_rr/test_bgp_aigp_rr.py | 44 +++++++++++++++++++ 3 files changed, 53 insertions(+) diff --git a/tests/topotests/bgp_aigp_rr/r1/bgpd.conf b/tests/topotests/bgp_aigp_rr/r1/bgpd.conf index 90d34bdf83..4099a248f1 100644 --- a/tests/topotests/bgp_aigp_rr/r1/bgpd.conf +++ b/tests/topotests/bgp_aigp_rr/r1/bgpd.conf @@ -18,6 +18,7 @@ router bgp 65001 neighbor 10.0.0.4 timers connect 1 neighbor 10.0.0.4 route-reflector-client address-family ipv4 + network 10.0.1.2/32 route-map set-aigp neighbor 10.0.0.4 route-map set-nexthop out exit-address-family ! @@ -25,3 +26,7 @@ route-map set-nexthop permit 10 set ip next-hop peer-address exit ! +route-map set-aigp permit 10 + set aigp 50 + set weight 0 +! diff --git a/tests/topotests/bgp_aigp_rr/r2/bgpd.conf b/tests/topotests/bgp_aigp_rr/r2/bgpd.conf index 97059fdd33..0159dc8e7c 100644 --- a/tests/topotests/bgp_aigp_rr/r2/bgpd.conf +++ b/tests/topotests/bgp_aigp_rr/r2/bgpd.conf @@ -7,6 +7,7 @@ router bgp 65001 neighbor 10.0.0.1 timers connect 1 address-family ipv4 redistribute connected route-map connected-to-bgp + network 10.0.1.2/32 route-map set-aigp neighbor 10.0.0.1 next-hop-self exit-address-family ! @@ -16,3 +17,6 @@ route-map connected-to-bgp permit 10 match ip address prefix-list p22 set aigp 2 ! +route-map set-aigp permit 10 + set aigp 10 +! diff --git a/tests/topotests/bgp_aigp_rr/test_bgp_aigp_rr.py b/tests/topotests/bgp_aigp_rr/test_bgp_aigp_rr.py index 0079535da7..206e229b2e 100644 --- a/tests/topotests/bgp_aigp_rr/test_bgp_aigp_rr.py +++ b/tests/topotests/bgp_aigp_rr/test_bgp_aigp_rr.py @@ -101,6 +101,45 @@ def test_bgp_aigp_rr(): expected = {"paths": [{"aigpMetric": aigp, "valid": True}]} return topotest.json_cmp(output, expected) + def _bgp_check_aigp_bestpath(): + output = json.loads(r1.vtysh_cmd("show bgp ipv4 unicast 10.0.1.2/32 json")) + expected = { + "prefix": "10.0.1.2/32", + "paths": [ + { + "aigpMetric": 50, + "valid": True, + "sourced": True, + "local": True, + "bestpath": {"overall": True, "selectionReason": "Local Route"}, + "nexthops": [ + { + "ip": "0.0.0.0", + "hostname": "r1", + "afi": "ipv4", + "metric": 0, + "accessible": True, + "used": True, + } + ], + }, + { + "aigpMetric": 10, + "valid": True, + "nexthops": [ + { + "ip": "10.0.0.2", + "hostname": "r2", + "afi": "ipv4", + "metric": 10, + "accessible": True, + "used": True, + } + ], + }, + ], + } + return topotest.json_cmp(output, expected) # r2, 10.0.2.2/32 with aigp-metric 2 test_func = functools.partial(_bgp_check_aigp_metric, r2, "10.0.2.2/32", 2) @@ -122,6 +161,11 @@ def test_bgp_aigp_rr(): _, result = topotest.run_and_expect(test_func, None, count=60, wait=1) assert result is None, "aigp-metric for 10.0.2.2/32 is not 12" + # r1, check if the local route is favored over AIGP comparison + test_func = functools.partial(_bgp_check_aigp_bestpath) + _, result = topotest.run_and_expect(test_func, None, count=60, wait=1) + assert result is None, "Local route is not favored over AIGP in best-path selection" + if __name__ == "__main__": args = ["-s"] + sys.argv[1:] -- 2.39.5