]> git.puffer.fish Git - mirror/frr.git/commitdiff
tests: improve test reliability 17773/head
authorChristian Hopps <chopps@labn.net>
Sun, 24 Nov 2024 08:06:05 +0000 (03:06 -0500)
committerChristian Hopps <chopps@labn.net>
Mon, 6 Jan 2025 13:53:12 +0000 (08:53 -0500)
Test for presence of IPv6 kernel routes too.

Signed-off-by: Christian Hopps <chopps@labn.net>
tests/topotests/mgmt_oper/oper.py
tests/topotests/mgmt_oper/test_oper.py

index bca452d0115b58ea2d8c380a3fb8504a5c3278dd..6e1866382bbbc62d25eada2a02c0147ad33e6d94 100644 (file)
@@ -62,7 +62,7 @@ def disable_debug(router):
     router.vtysh_cmd("no debug northbound callbacks configuration")
 
 
-@retry(retry_timeout=30, initial_wait=1)
+@retry(retry_timeout=30, initial_wait=0.1)
 def _do_oper_test(tgen, qr, seconds_left=None):
     r1 = tgen.gears["r1"].net
 
@@ -113,6 +113,7 @@ def _do_oper_test(tgen, qr, seconds_left=None):
                 "-------DIFF---------\n%s\n---------DIFF----------",
                 pprint.pformat(cmpout),
             )
+            cmpout = str(cmpout)
     else:
         cmpout = tt_json_cmp(ojson, ejson, exact=True)
         if cmpout and ejson_alt is not None:
@@ -185,6 +186,20 @@ def addrgen(a, count, step=1):
         a += step
 
 
+@retry(retry_timeout=30, initial_wait=0.1)
+def check_kernel_net(r1, net, vrf):
+    addr = ipaddress.ip_network(net)
+    vrfstr = f" vrf {vrf}" if vrf else ""
+    if addr.version == 6:
+        kernel = r1.cmd_raises(f"ip -6 route show{vrfstr}")
+    else:
+        kernel = r1.cmd_raises(f"ip -4 route show{vrfstr}")
+
+    nentries = len(re.findall("\n", kernel))
+    logging.info("checking kernel routing table%s: (%s entries)", vrfstr, nentries)
+    assert str(net) in kernel, f"Failed to find '{net}' in {nentries} entries"
+
+
 @retry(retry_timeout=30, initial_wait=0.1)
 def check_kernel_32(r1, start_addr, count, vrf, step=1):
     start = ipaddress.ip_address(start_addr)
index 23529bc75eca2c643d9b15843aceef58ab783fd8..0d346b5b7c33f142196cbb12900f7b32a9e054fd 100644 (file)
@@ -15,7 +15,7 @@ import math
 
 import pytest
 from lib.topogen import Topogen
-from oper import check_kernel_32, do_oper_test
+from oper import check_kernel_32, check_kernel_net, do_oper_test
 
 pytestmark = [pytest.mark.staticd, pytest.mark.mgmtd]
 
@@ -85,10 +85,17 @@ def test_oper(tgen):
     ]
 
     r1 = tgen.gears["r1"].net
+
     check_kernel_32(r1, "11.11.11.11", 1, "")
     check_kernel_32(r1, "12.12.12.12", 1, "")
     check_kernel_32(r1, "13.13.13.13", 1, "red")
     check_kernel_32(r1, "14.14.14.14", 1, "red")
+
+    check_kernel_net(r1, "2001:1111::/64", "")
+    check_kernel_net(r1, "2002:2222::/64", "")
+    check_kernel_net(r1, "2003:333::/64", "red")
+    check_kernel_net(r1, "2004:4444::/64", "red")
+
     do_oper_test(tgen, query_results)