tests: Check if routes are marked as stale and retained with N-bit for GR

Related-to: b7c657d4e0 ("bgpd: Retain the routes if we do a clear with N-bit set for Graceful-Restart")

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
(cherry picked from commit a4f61b78dd)
This commit is contained in:
Donatas Abraitis 2025-03-25 17:35:41 +02:00 committed by ton31337
parent 405e413e6a
commit 9fe80ef9cd
3 changed files with 28 additions and 17 deletions

View file

@ -3,7 +3,6 @@ router bgp 65001
bgp graceful-restart bgp graceful-restart
neighbor 192.168.255.2 remote-as external neighbor 192.168.255.2 remote-as external
neighbor 192.168.255.2 timers 1 3 neighbor 192.168.255.2 timers 1 3
neighbor 192.168.255.2 timers delayopen 10
address-family ipv4 address-family ipv4
redistribute connected redistribute connected
exit-address-family exit-address-family

View file

@ -4,7 +4,6 @@ router bgp 65002
bgp graceful-restart bgp graceful-restart
neighbor 192.168.255.1 remote-as external neighbor 192.168.255.1 remote-as external
neighbor 192.168.255.1 timers 1 3 neighbor 192.168.255.1 timers 1 3
neighbor 192.168.255.1 timers delayopen 10
address-family ipv4 address-family ipv4
redistribute connected redistribute connected
exit-address-family exit-address-family

View file

@ -165,8 +165,8 @@ def test_bgp_administrative_reset_gr():
} }
return topotest.json_cmp(output, expected) return topotest.json_cmp(output, expected)
def _bgp_check_gr_notification_stale(): def _bgp_check_gr_notification_stale(router, prefix):
output = json.loads(r1.vtysh_cmd("show bgp ipv4 unicast 172.16.255.2/32 json")) output = json.loads(router.vtysh_cmd(f"show bgp ipv4 unicast {prefix} json"))
expected = { expected = {
"paths": [ "paths": [
{ {
@ -177,16 +177,6 @@ def test_bgp_administrative_reset_gr():
} }
return topotest.json_cmp(output, expected) return topotest.json_cmp(output, expected)
def _bgp_clear_r1_and_shutdown():
r2.vtysh_cmd(
"""
clear ip bgp 192.168.255.1
configure terminal
router bgp
neighbor 192.168.255.1 shutdown
"""
)
def _bgp_verify_show_bgp_router_json(): def _bgp_verify_show_bgp_router_json():
output = json.loads(r1.vtysh_cmd("show bgp router json")) output = json.loads(r1.vtysh_cmd("show bgp router json"))
expected = { expected = {
@ -202,14 +192,37 @@ def test_bgp_administrative_reset_gr():
_, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5) _, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5)
assert result is None, "Failed to see BGP convergence on R2" assert result is None, "Failed to see BGP convergence on R2"
step("Reset and shutdown R1") step("Reset and delay the session establishement for R1")
_bgp_clear_r1_and_shutdown() r1.vtysh_cmd(
"""
configure terminal"
router bgp
neighbor 192.168.255.2 timers delayopen 60
"""
)
r2.vtysh_cmd(
"""
configure terminal"
router bgp
neighbor 192.168.255.1 timers delayopen 60
"""
)
r2.vtysh_cmd("clear ip bgp 192.168.255.1")
step("Check if stale routes are retained on R1") step("Check if stale routes are retained on R1")
test_func = functools.partial(_bgp_check_gr_notification_stale) test_func = functools.partial(
_bgp_check_gr_notification_stale, r1, "172.16.255.2/32"
)
_, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5) _, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5)
assert result is None, "Failed to see retained stale routes on R1" assert result is None, "Failed to see retained stale routes on R1"
step("Check if stale routes are retained on R2")
test_func = functools.partial(
_bgp_check_gr_notification_stale, r2, "172.16.255.1/32"
)
_, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5)
assert result is None, "Failed to see retained stale routes on R2"
step("Check if Hard Reset notification wasn't sent from R2") step("Check if Hard Reset notification wasn't sent from R2")
test_func = functools.partial(_bgp_check_hard_reset) test_func = functools.partial(_bgp_check_hard_reset)
_, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5) _, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5)