summaryrefslogtreecommitdiffstats
path: root/tests/topotests/all_protocol_startup/test_all_protocol_startup.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/topotests/all_protocol_startup/test_all_protocol_startup.py')
-rw-r--r--tests/topotests/all_protocol_startup/test_all_protocol_startup.py65
1 files changed, 50 insertions, 15 deletions
diff --git a/tests/topotests/all_protocol_startup/test_all_protocol_startup.py b/tests/topotests/all_protocol_startup/test_all_protocol_startup.py
index b4bc1e14..80bd2505 100644
--- a/tests/topotests/all_protocol_startup/test_all_protocol_startup.py
+++ b/tests/topotests/all_protocol_startup/test_all_protocol_startup.py
@@ -38,9 +38,10 @@ from lib.common_config import (
required_linux_kernel_version,
)
-from lib.topolog import logger
import json
+import functools
+# Global that must be set on a failure to stop subsequent tests from being run
fatal_error = ""
@@ -153,7 +154,6 @@ def test_error_messages_vtysh():
print("\n\n** Check for error messages on VTYSH")
print("******************************************\n")
- failures = 0
for i in range(1, 2):
#
# First checking Standard Output
@@ -402,17 +402,27 @@ def test_converge_protocols():
def route_get_nhg_id(route_str):
- net = get_topogen().net
- output = net["r1"].cmd(
- 'vtysh -c "show ip route {} nexthop-group"'.format(route_str)
- )
- match = re.search(r"Nexthop Group ID: (\d+)", output)
- assert match is not None, "Nexthop Group ID not found for sharpd route {}".format(
- route_str
- )
+ global fatal_error
+
+ def get_func(route_str):
+ net = get_topogen().net
+ output = net["r1"].cmd(
+ 'vtysh -c "show ip route {} nexthop-group"'.format(route_str)
+ )
+ match = re.search(r"Nexthop Group ID: (\d+)", output)
+ if match is not None:
+ nhg_id = int(match.group(1))
+ return nhg_id
+ else:
+ return None
- nhg_id = int(match.group(1))
- return nhg_id
+ test_func = functools.partial(get_func, route_str)
+ _, nhg_id = topotest.run_and_expect_type(test_func, int, count=30, wait=1)
+ if nhg_id == None:
+ fatal_error = "Nexthop Group ID not found for route {}".format(route_str)
+ assert nhg_id != None, fatal_error
+ else:
+ return nhg_id
def verify_nexthop_group(nhg_id, recursive=False, ecmp=0):
@@ -489,8 +499,12 @@ def verify_nexthop_group(nhg_id, recursive=False, ecmp=0):
def verify_route_nexthop_group(route_str, recursive=False, ecmp=0):
+ global fatal_error
+
# Verify route and that zebra created NHGs for and they are valid/installed
+
nhg_id = route_get_nhg_id(route_str)
+
verify_nexthop_group(nhg_id, recursive, ecmp)
@@ -1650,8 +1664,13 @@ def test_mpls_interfaces():
def test_resilient_nexthop_group():
+ global fatal_error
net = get_topogen().net
+ # Skip if previous fatal error condition is raised
+ if fatal_error != "":
+ pytest.skip(fatal_error)
+
result = required_linux_kernel_version("5.19")
if result is not True:
pytest.skip("Kernel requirements are not met, kernel version should be >= 5.19")
@@ -1660,8 +1679,18 @@ def test_resilient_nexthop_group():
'vtysh -c "conf" -c "nexthop-group resilience" -c "resilient buckets 64 idle-timer 128 unbalanced-timer 256" -c "nexthop 1.1.1.1 r1-eth1 onlink" -c "nexthop 1.1.1.2 r1-eth2 onlink"'
)
- output = net["r1"].cmd('vtysh -c "show nexthop-group rib sharp"')
- buckets = re.findall(r"Buckets", output)
+ # Temporary helper function
+ def _show_func():
+ output = net["r1"].cmd('vtysh -c "show nexthop-group rib sharp"')
+ buckets = re.findall(r"Buckets", output)
+
+ return len(buckets)
+
+ _, result = topotest.run_and_expect(_show_func, 1, count=30, wait=1)
+ if result != 1:
+ fatal_error = "Resilient NHG not created in zebra"
+
+ assert result == 1, fatal_error
output = net["r1"].cmd('vtysh -c "show nexthop-group rib sharp json"')
@@ -1674,8 +1703,14 @@ def test_resilient_nexthop_group():
if "buckets" in n:
break
+ if "buckets" not in n:
+ fatal_error = "Resilient NHG not found in json output"
+ assert "buckets" in n, fatal_error
+
verify_nexthop_group(int(nhgid))
- assert len(buckets) == 1, "Resilient NHG not created in zebra"
+
+ # Remove NHG
+ net["r1"].cmd('vtysh -c "conf" -c "no nexthop-group resilience"')
def test_shutdown_check_stderr():