From fa30b34026f76a5b8af997152fced2d281782e0d Mon Sep 17 00:00:00 2001 From: MarcoFalke <*~=`'#}+{/-|&$^_@721217.xyz> Date: Thu, 17 Jul 2025 13:00:05 +0200 Subject: [PATCH 1/2] test: Do not pass tests on unhandled exceptions This adds a missing catch for BaseException (e.g. SystemExit), which would otherwise be silently ignored. Also, remove the redundant other catches, which are just calling log.exception with a redundant log message. --- test/functional/test_framework/test_framework.py | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/test/functional/test_framework/test_framework.py b/test/functional/test_framework/test_framework.py index a5346b09fdc..31b252f203c 100755 --- a/test/functional/test_framework/test_framework.py +++ b/test/functional/test_framework/test_framework.py @@ -194,27 +194,18 @@ class BitcoinTestFramework(metaclass=BitcoinTestMetaClass): else: self.run_test() - except JSONRPCException: - self.log.exception("JSONRPC error") - self.success = TestStatus.FAILED except SkipTest as e: self.log.warning("Test Skipped: %s" % e.message) self.success = TestStatus.SKIPPED - except AssertionError: - self.log.exception("Assertion failed") - self.success = TestStatus.FAILED - except KeyError: - self.log.exception("Key error") - self.success = TestStatus.FAILED except subprocess.CalledProcessError as e: self.log.exception("Called Process failed with '{}'".format(e.output)) self.success = TestStatus.FAILED - except Exception: - self.log.exception("Unexpected exception caught during testing") - self.success = TestStatus.FAILED except KeyboardInterrupt: self.log.warning("Exiting after keyboard interrupt") self.success = TestStatus.FAILED + except BaseException: + self.log.exception("Unexpected exception") + self.success = TestStatus.FAILED finally: exit_code = self.shutdown() sys.exit(exit_code) From faa3e684118bffa7a98cf76eeeb59243219df900 Mon Sep 17 00:00:00 2001 From: MarcoFalke <*~=`'#}+{/-|&$^_@721217.xyz> Date: Fri, 18 Jul 2025 07:36:32 +0200 Subject: [PATCH 2/2] test: Log KeyboardInterrupt as exception log.exception is more verbose and useful to debug timeouts. Also, log stderr for CalledProcessError to make debugging easier. --- test/functional/test_framework/test_framework.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/test/functional/test_framework/test_framework.py b/test/functional/test_framework/test_framework.py index 31b252f203c..7a0bb5118db 100755 --- a/test/functional/test_framework/test_framework.py +++ b/test/functional/test_framework/test_framework.py @@ -198,10 +198,7 @@ class BitcoinTestFramework(metaclass=BitcoinTestMetaClass): self.log.warning("Test Skipped: %s" % e.message) self.success = TestStatus.SKIPPED except subprocess.CalledProcessError as e: - self.log.exception("Called Process failed with '{}'".format(e.output)) - self.success = TestStatus.FAILED - except KeyboardInterrupt: - self.log.warning("Exiting after keyboard interrupt") + self.log.exception(f"Called Process failed with stdout='{e.stdout}'; stderr='{e.stderr}';") self.success = TestStatus.FAILED except BaseException: self.log.exception("Unexpected exception")