]> git.puffer.fish Git - matthieu/frr.git/commitdiff
tests: remove reliance on time.sleep
authorChristian Hopps <chopps@labn.net>
Thu, 2 May 2024 10:09:42 +0000 (06:09 -0400)
committerChristian Hopps <chopps@labn.net>
Thu, 2 May 2024 10:10:48 +0000 (06:10 -0400)
Use proper retry loop to wait for state to converge, not some arbitrary delay.

fixes #15878

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

index 0f6c3cdf5f1ee218a4caa102e866d74829310c93..162c1eb5ccb5a09d09edecb143cfb5f63112c2b9 100644 (file)
@@ -62,7 +62,8 @@ def disable_debug(router):
     router.vtysh_cmd("no debug northbound callbacks configuration")
 
 
-def do_oper_test(tgen, query_results):
+@retry(retry_timeout=30, initial_wait=1)
+def _do_oper_test(tgen, qr):
     r1 = tgen.gears["r1"].net
 
     qcmd = (
@@ -73,50 +74,55 @@ def do_oper_test(tgen, query_results):
         r"""| sed -e 's/"if-index": [0-9][0-9]*/"if-index": "rubout"/'"""
         r"""| sed -e 's/"id": [0-9][0-9]*/"id": "rubout"/'"""
     )
-
-    doreset = True
+    # Don't use this for now.
     dd_json_cmp = None
-    for qr in query_results:
-        step(f"Perform query '{qr[0]}'", reset=doreset)
-        if doreset:
-            doreset = False
-        expected = open(qr[1], encoding="ascii").read()
-        output = r1.cmd_nostatus(qcmd.format(qr[0], qr[2] if len(qr) > 2 else ""))
-
-        try:
-            ojson = json.loads(output)
-        except json.decoder.JSONDecodeError as error:
-            logging.error("Error decoding json: %s\noutput:\n%s", error, output)
-            raise
-
-        try:
-            ejson = json.loads(expected)
-        except json.decoder.JSONDecodeError as error:
-            logging.error(
-                "Error decoding json exp result: %s\noutput:\n%s", error, expected
+
+    expected = open(qr[1], encoding="ascii").read()
+    output = r1.cmd_nostatus(qcmd.format(qr[0], qr[2] if len(qr) > 2 else ""))
+
+    try:
+        ojson = json.loads(output)
+    except json.decoder.JSONDecodeError as error:
+        logging.error("Error decoding json: %s\noutput:\n%s", error, output)
+        raise
+
+    try:
+        ejson = json.loads(expected)
+    except json.decoder.JSONDecodeError as error:
+        logging.error(
+            "Error decoding json exp result: %s\noutput:\n%s", error, expected
+        )
+        raise
+
+    if dd_json_cmp:
+        cmpout = json_cmp(ojson, ejson, exact_match=True)
+        if cmpout:
+            logging.warning(
+                "-------DIFF---------\n%s\n---------DIFF----------",
+                pprint.pformat(cmpout),
             )
-            raise
-
-        if dd_json_cmp:
-            cmpout = json_cmp(ojson, ejson, exact_match=True)
-            if cmpout:
-                logging.warning(
-                    "-------DIFF---------\n%s\n---------DIFF----------",
-                    pprint.pformat(cmpout),
-                )
-        else:
-            cmpout = tt_json_cmp(ojson, ejson, exact=True)
-            if cmpout:
-                logging.warning(
-                    "-------EXPECT--------\n%s\n------END-EXPECT------",
-                    json.dumps(ejson, indent=4),
-                )
-                logging.warning(
-                    "--------GOT----------\n%s\n-------END-GOT--------",
-                    json.dumps(ojson, indent=4),
-                )
-
-        assert cmpout is None
+    else:
+        cmpout = tt_json_cmp(ojson, ejson, exact=True)
+        if cmpout:
+            logging.warning(
+                "-------EXPECT--------\n%s\n------END-EXPECT------",
+                json.dumps(ejson, indent=4),
+            )
+            logging.warning(
+                "--------GOT----------\n%s\n-------END-GOT--------",
+                json.dumps(ojson, indent=4),
+            )
+
+    assert cmpout is None
+
+
+def do_oper_test(tgen, query_results):
+    reset = True
+    for qr in query_results:
+        step(f"Perform query '{qr[0]}'", reset=reset)
+        if reset:
+            reset = False
+        _do_oper_test(tgen, qr)
 
 
 def get_ip_networks(super_prefix, count):
index 6971eafc57e0b5f73016946329f156fe51ce3dc4..8b8a51c29e0b42d18acebdfd596ed384501a5861 100644 (file)
@@ -95,7 +95,6 @@ def test_oper(tgen):
     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")
-    time.sleep(2)
     do_oper_test(tgen, query_results)
 
 
index 41c2b8cd7819e2569e53cc6b188897952c8dab38..87794d7d6686ce3a73c4c73193e734413a9d8904 100644 (file)
@@ -52,7 +52,6 @@ def test_oper_simple(tgen):
 
     r1 = tgen.gears["r1"].net
 
-    time.sleep(2)
     count = 20 * 1000
 
     vrf = None  # "red"