Skip to content

Commit

Permalink
tests: add a new BGP AIGP topotest
Browse files Browse the repository at this point in the history
The topotest verifies that a local route is favored irrespective
of its AIGP value.

Signed-off-by: Enke Chen <enchen@paloaltonetworks.com>
  • Loading branch information
enkechen-panw committed Oct 23, 2024
1 parent f0cecf6 commit f736878
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 0 deletions.
5 changes: 5 additions & 0 deletions tests/topotests/bgp_aigp_rr/r1/bgpd.conf
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,15 @@ 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
!
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
!
4 changes: 4 additions & 0 deletions tests/topotests/bgp_aigp_rr/r2/bgpd.conf
Original file line number Diff line number Diff line change
Expand Up @@ -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
!
Expand All @@ -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
!
48 changes: 48 additions & 0 deletions tests/topotests/bgp_aigp_rr/test_bgp_aigp_rr.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,50 @@ def _bgp_check_aigp_metric(router, prefix, aigp):
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)
Expand All @@ -122,6 +166,10 @@ def _bgp_check_aigp_metric(router, prefix, aigp):
_, 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:]
Expand Down

0 comments on commit f736878

Please sign in to comment.