diff options
Diffstat (limited to 'tests')
4 files changed, 23 insertions, 8 deletions
diff --git a/tests/topotests/bgp_duplicate_nexthop/test_bgp_duplicate_nexthop.py b/tests/topotests/bgp_duplicate_nexthop/test_bgp_duplicate_nexthop.py index 955881e6f9..83fae71bf5 100644 --- a/tests/topotests/bgp_duplicate_nexthop/test_bgp_duplicate_nexthop.py +++ b/tests/topotests/bgp_duplicate_nexthop/test_bgp_duplicate_nexthop.py @@ -320,7 +320,7 @@ def check_ipv4_prefix_recursive_with_multiple_nexthops( ) test_func = functools.partial( - ip_check_path_selection, tgen.gears["r1"], prefix, expected + ip_check_path_selection, tgen.gears["r1"], prefix, expected, check_fib=True ) _, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5) assert ( diff --git a/tests/topotests/bgp_peer_type_multipath_relax/r1/prefix1-eBGP-confed.json b/tests/topotests/bgp_peer_type_multipath_relax/r1/prefix1-eBGP-confed.json index 791b92df65..483165c0f3 100644 --- a/tests/topotests/bgp_peer_type_multipath_relax/r1/prefix1-eBGP-confed.json +++ b/tests/topotests/bgp_peer_type_multipath_relax/r1/prefix1-eBGP-confed.json @@ -23,7 +23,6 @@ "recursive":true }, { - "fib":true, "duplicate":true, "ip":"10.0.3.2", "active":true diff --git a/tests/topotests/bgp_peer_type_multipath_relax/r1/prefix1-eBGP-iBGP.json b/tests/topotests/bgp_peer_type_multipath_relax/r1/prefix1-eBGP-iBGP.json index 1fe9a6799f..638a825395 100644 --- a/tests/topotests/bgp_peer_type_multipath_relax/r1/prefix1-eBGP-iBGP.json +++ b/tests/topotests/bgp_peer_type_multipath_relax/r1/prefix1-eBGP-iBGP.json @@ -23,7 +23,6 @@ "recursive":true }, { - "fib":true, "duplicate":true, "ip":"10.0.3.2", "active":true diff --git a/tests/topotests/lib/common_check.py b/tests/topotests/lib/common_check.py index be3241fd20..19f02dbadc 100644 --- a/tests/topotests/lib/common_check.py +++ b/tests/topotests/lib/common_check.py @@ -10,11 +10,13 @@ import json from lib import topotest -def ip_check_path_selection(router, ipaddr_str, expected, vrf_name=None): +def ip_check_path_selection( + router, ipaddr_str, expected, vrf_name=None, check_fib=False +): if vrf_name: - cmdstr = f'show ip route vrf {vrf_name} {ipaddr_str} json' + cmdstr = f"show ip route vrf {vrf_name} {ipaddr_str} json" else: - cmdstr = f'show ip route {ipaddr_str} json' + cmdstr = f"show ip route {ipaddr_str} json" try: output = json.loads(router.vtysh_cmd(cmdstr)) except: @@ -25,6 +27,21 @@ def ip_check_path_selection(router, ipaddr_str, expected, vrf_name=None): num_nh_expected = len(expected[ipaddr_str][0]["nexthops"]) num_nh_observed = len(output[ipaddr_str][0]["nexthops"]) if num_nh_expected == num_nh_observed: + if check_fib: + # special case: when fib flag is unset, + # an extra test should be done to check that the flag is really unset + for nh_output, nh_expected in zip( + output[ipaddr_str][0]["nexthops"], + expected[ipaddr_str][0]["nexthops"], + ): + if ( + "fib" in nh_output.keys() + and nh_output["fib"] + and ("fib" not in nh_expected.keys() or not nh_expected["fib"]) + ): + return "{}, prefix {} nexthop {} has the fib flag set, whereas it is not expected".format( + router.name, ipaddr_str, nh_output["ip"] + ) return ret return "{}, prefix {} does not have the correct number of nexthops : observed {}, expected {}".format( router.name, ipaddr_str, num_nh_observed, num_nh_expected @@ -37,9 +54,9 @@ def iproute2_check_path_selection(router, ipaddr_str, expected, vrf_name=None): return None if vrf_name: - cmdstr = f'ip -json route show vrf {vrf_name} {ipaddr_str}' + cmdstr = f"ip -json route show vrf {vrf_name} {ipaddr_str}" else: - cmdstr = f'ip -json route show {ipaddr_str}' + cmdstr = f"ip -json route show {ipaddr_str}" try: output = json.loads(cmdstr) except: |
