From ab9b2c947f48eb25df3d547131b628363fdce790 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicki=20K=C5=99=C3=AD=C5=BEek?= Date: Fri, 6 Jun 2025 15:11:44 +0200 Subject: [PATCH] Improve logging from isctest.run.retry_with_timeout Allow use of exception (and by extension, assert statements) in the called function in order to extract essential debug information about the type of failure that was encountered. In case the called function fails to succeed on the last retry and raised an exception, log it as error and set it as the assert message to propagate it through the pytest framework. (cherry picked from commit 620c884133f1cac13efebaf381855462a123927c) --- bin/tests/system/isctest/kasp.py | 6 ++++-- bin/tests/system/isctest/run.py | 16 +++++++++++++--- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/bin/tests/system/isctest/kasp.py b/bin/tests/system/isctest/kasp.py index 1aec27c3f5..501bd5f4a4 100644 --- a/bin/tests/system/isctest/kasp.py +++ b/bin/tests/system/isctest/kasp.py @@ -643,7 +643,9 @@ def check_keys(zone, keys, expected): def _verify_keys(): # check number of keys matches expected. if len(keys) != len(expected): - return False + assert ( + False + ), f"check_keys(): mismatched number of keys, expected {len(expected)}, got {len(keys)}" if len(keys) == 0: return True @@ -662,7 +664,7 @@ def check_keys(zone, keys, expected): expected[i].key = key i += 1 if not found: - return False + assert False, f"check_keys(): key {key} not found" return True diff --git a/bin/tests/system/isctest/run.py b/bin/tests/system/isctest/run.py index c3b37ac059..b26190e4a3 100644 --- a/bin/tests/system/isctest/run.py +++ b/bin/tests/system/isctest/run.py @@ -127,12 +127,22 @@ def perl(script: str, args: Optional[List[str]] = None) -> None: def retry_with_timeout(func, timeout, delay=1, msg=None): start_time = time.time() + exc_msg = None while time.time() < start_time + timeout: - if func(): - return + exc_msg = None + try: + if func(): + return + except AssertionError as exc: + exc_msg = str(exc) time.sleep(delay) + if exc_msg is not None: + isctest.log.error(exc_msg) if msg is None: - msg = f"{func.__module__}.{func.__qualname__} timed out after {timeout} s" + if exc_msg is not None: + msg = exc_msg + else: + msg = f"{func.__module__}.{func.__qualname__} timed out after {timeout} s" assert False, msg