From 78db0a8156e499a48e7a0387c8af450460a0eb0c Mon Sep 17 00:00:00 2001 From: The MMGen Project Date: Sat, 19 Jul 2025 10:21:11 +0000 Subject: [PATCH] CmdTestRunner: add `warn()` method --- test/cmdtest_d/ethdev.py | 3 +-- test/cmdtest_d/include/runner.py | 20 +++++++++++++++++--- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/test/cmdtest_d/ethdev.py b/test/cmdtest_d/ethdev.py index 0aacdb73..fb69653c 100755 --- a/test/cmdtest_d/ethdev.py +++ b/test/cmdtest_d/ethdev.py @@ -1184,8 +1184,7 @@ class CmdTestEthdev(CmdTestEthdevMethods, CmdTestBase, CmdTestShared): imsg(f'Message: {self.message}') imsg(f'Signature: {sig}') if sig != sig_chk: - msg(yellow('Warning: Geth and MMGen signatures don’t match!')) - time.sleep(2) + self.tr.warn('MMGen signature doesn’t match reference signature from Geth daemon') return 'ok' diff --git a/test/cmdtest_d/include/runner.py b/test/cmdtest_d/include/runner.py index 7a75617b..bb7f1ba5 100755 --- a/test/cmdtest_d/include/runner.py +++ b/test/cmdtest_d/include/runner.py @@ -16,7 +16,7 @@ import sys, os, time, asyncio from mmgen.cfg import gc from mmgen.color import red, yellow, green, blue, cyan, gray, nocolor -from mmgen.util import msg, Msg, rmsg, bmsg, die, suf, make_timestr +from mmgen.util import msg, Msg, rmsg, ymsg, bmsg, die, suf, make_timestr from ...include.common import ( cmdtest_py_log_fn, @@ -58,6 +58,7 @@ class CmdTestRunner: self.rebuild_list = {} self.gm = CmdGroupMgr(cfg) self.repo_root = repo_root + self.warnings = [] self.skipped_warnings = [] self.resume_cmd = None self.deps_only = None @@ -489,6 +490,10 @@ class CmdTestRunner: print(yellow('The following tests were skipped and may require attention:')) r = '-' * 72 + '\n' print(r+('\n'+r).join(self.skipped_warnings)) + if self.warnings: + print(yellow('The following issues were encountered and may require attention:')) + r = '-' * 72 + '\n' + print(r+('\n'+r).join(self.warnings)) def process_retval(self, cmd, ret): if type(ret).__name__ == 'CmdTestPexpect': @@ -505,11 +510,20 @@ class CmdTestRunner: elif ret == 'error': die(2, red(f'\nTest {self.tg.test_name!r} failed')) elif isinstance(ret, tuple) and ret[0] == 'skip_warn': - self.skipped_warnings.append( - 'Test {!r} was skipped:\n {}'.format(cmd, '\n '.join(ret[1].split('\n')))) + wmsg = 'Test {!r} was skipped:\n {}'.format(cmd, '\n '.join(ret[1].split('\n'))) + self.skipped_warnings.append(wmsg) + if self.logging: + self.log_fd.write(f'WARNING: {wmsg}\n') else: die(2, f'{cmd!r} returned {ret}') + def warn(self, text): + ymsg(text) + wmsg = 'Test ‘{}:{}’: {}'.format(self.tg.group_name, self.tg.test_name, text) + self.warnings.append(wmsg) + if self.logging: + self.log_fd.write(f'WARNING: {wmsg}\n') + def check_deps(self, cmds): # TODO: broken, unused if len(cmds) != 1: die(1, f'Usage: {gc.prog_name} check_deps ')