From 5273b2dc5e2cef5a340eb3862a42c4560eedd001 Mon Sep 17 00:00:00 2001 From: The MMGen Project Date: Wed, 19 Mar 2025 12:11:26 +0300 Subject: [PATCH] cmdtest.py: minor cleanups --- test/cmdtest.py | 14 +++++----- test/cmdtest_d/group_mgr.py | 25 +++++++++++++++-- test/cmdtest_d/runner.py | 55 +++++++++++++++++++------------------ 3 files changed, 58 insertions(+), 36 deletions(-) diff --git a/test/cmdtest.py b/test/cmdtest.py index 0a7b61d9..3ce6c3a6 100755 --- a/test/cmdtest.py +++ b/test/cmdtest.py @@ -250,14 +250,14 @@ def list_cmds(): for gname in gm.cmd_groups: tg = gm.gm_init_group(cfg, None, gname, None, None) - desc = tg.__doc__.strip() if tg.__doc__ else type(tg).__name__ - d.append((gname, desc, gm.cmd_list, gm.dpy_data)) + gdesc = tg.__doc__.strip() if tg.__doc__ else type(tg).__name__ + d.append((gname, gdesc, gm.cmd_list, gm.dpy_data)) cw = max(max(len(k) for k in gm.dpy_data), cw) - for gname, gdesc, clist, dpdata in d: + for gname, gdesc, cmd_list, dpy_data in d: yield '\n'+green(f'{gname!r} - {gdesc}:') - for cmd in clist: - data = dpdata[cmd] + for cmd in cmd_list: + data = dpy_data[cmd] yield ' {:{w}} - {}'.format( cmd, (data if isinstance(data, str) else data[1]), @@ -266,8 +266,6 @@ def list_cmds(): from mmgen.ui import do_pager do_pager('\n'.join(gen_output())) - sys.exit(0) - def create_tmp_dirs(shm_dir): if sys.platform in ('win32', 'darwin'): for cfg in sorted(cfgs): @@ -301,8 +299,10 @@ if __name__ == '__main__': if cfg.list_cmd_groups: from test.cmdtest_d.group_mgr import CmdGroupMgr CmdGroupMgr(cfg).list_cmd_groups() + sys.exit(0) elif cfg.list_cmds: list_cmds() + sys.exit(0) if cfg.pause: set_restore_term_at_exit() diff --git a/test/cmdtest_d/group_mgr.py b/test/cmdtest_d/group_mgr.py index 29a3e801..912d61d7 100755 --- a/test/cmdtest_d/group_mgr.py +++ b/test/cmdtest_d/group_mgr.py @@ -26,6 +26,19 @@ class CmdGroupMgr: cmd_groups = cmd_groups_dfl.copy() cmd_groups.update(cmd_groups_extra) + cfg_attrs = ( + 'seed_len', + 'seed_id', + 'wpasswd', + 'kapasswd', + 'segwit', + 'hash_preset', + 'bw_filename', + 'bw_params', + 'ref_bw_seed_id', + 'addr_idx_list', + 'pass_idx_list') + def __init__(self, cfg): self.cfg = cfg self.network_id = cfg._proto.coin.lower() + ('_tn' if cfg._proto.testnet else '') @@ -109,8 +122,10 @@ class CmdGroupMgr: cdata.append((k, (i, f'{b} ({j}-bit)', [[[]+sdeps, i]]))) else: cdata.append((k, (i, f'{b[1]} ({j}-bit)', [[b[0]+sdeps, i]]))) + elif full_data: + cdata.append((a, b)) else: - cdata.append((a, b if full_data else (cls.tmpdir_nums[0], b, [[[], cls.tmpdir_nums[0]]]))) + cdata.append((a, (cls.tmpdir_nums[0], b, [[[], cls.tmpdir_nums[0]]]))) if add_dpy: self.dpy_data.update(dict(cdata)) @@ -118,6 +133,13 @@ class CmdGroupMgr: self.cmd_list = tuple(e[0] for e in cdata) self.dpy_data = dict(cdata) + cls.full_data = full_data or is3seed + + if not cls.full_data: + cls.tmpdir_num = cls.tmpdir_nums[0] + for k, v in cfgs[str(cls.tmpdir_num)].items(): + setattr(cls, k, v) + return cls def gm_init_group(self, cfg, trunner, gname, sg_name, spawn_prog): @@ -161,7 +183,6 @@ class CmdGroupMgr: do_pager('\n'.join(gen_output())) Msg('\n' + ' '.join(e[0] for e in ginfo)) - sys.exit(0) def find_cmd_in_groups(self, cmd, group=None): """ diff --git a/test/cmdtest_d/runner.py b/test/cmdtest_d/runner.py index e5d63574..443c5c3e 100755 --- a/test/cmdtest_d/runner.py +++ b/test/cmdtest_d/runner.py @@ -33,6 +33,13 @@ from .common import get_file_with_ext, confirm_continue from .cfg import cfgs, cmd_groups_dfl from .group_mgr import CmdGroupMgr +def format_args(args): + try: + return ' '.join((f"'{a}'" if ' ' in a else a) for a in args).replace('\\', '/') # for MSYS2 + except Exception as e: + print(type(e), e) + print('cmdline:', args) + class CmdTestRunner: 'cmdtest.py test runner' @@ -150,17 +157,11 @@ class CmdTestRunner: passthru_opts + args) - try: - qargs = ['{q}{}{q}'.format(a, q = "'" if ' ' in a else '') for a in args] - except: - msg(f'args: {args}') - raise - - cmd_disp = ' '.join(qargs).replace('\\', '/') # for mingw + cmd_disp = format_args(args) if self.logging: self.log_fd.write('[{}][{}:{}] {}\n'.format( - (self.proto.coin.lower() if 'coin' in self.tg.passthru_opts else 'NONE'), + (self.proto.coin.lower() if 'coin' in passthru_opts else 'NONE'), self.tg.group_name, self.tg.test_name, cmd_disp)) @@ -428,14 +429,16 @@ class CmdTestRunner: if self.deps_only and cmd == self.deps_only: sys.exit(0) - d = [(str(num), ext) for exts, num in self.gm.dpy_data[cmd][2] for ext in exts] + if self.tg.full_data: + d = [(str(num), ext) for exts, num in self.gm.dpy_data[cmd][2] for ext in exts] + # delete files depended on by this cmd + arg_list = [get_file_with_ext(cfgs[num]['tmpdir'], ext) for num, ext in d] - # delete files depended on by this cmd - arg_list = [get_file_with_ext(cfgs[num]['tmpdir'], ext) for num, ext in d] - - # remove shared_deps from arg list - if hasattr(self.tg, 'shared_deps'): - arg_list = arg_list[:-len(self.tg.shared_deps)] + # remove shared_deps from arg list + if hasattr(self.tg, 'shared_deps'): + arg_list = arg_list[:-len(self.tg.shared_deps)] + else: + arg_list = [] if self.resume_cmd: if cmd != self.resume_cmd: @@ -449,20 +452,18 @@ class CmdTestRunner: start = time.time() self.tg.test_name = cmd # NB: Do not remove, this needs to be set twice - cdata = self.gm.dpy_data[cmd] -# self.tg.test_dpydata = cdata - self.tg.tmpdir_num = cdata[0] -# self.tg.self.cfg = cfgs[str(cdata[0])] # will remove this eventually - test_cfg = cfgs[str(cdata[0])] - for k in ( - 'seed_len', 'seed_id', 'wpasswd', 'kapasswd', 'segwit', 'hash_preset', 'bw_filename', - 'bw_params', 'ref_bw_seed_id', 'addr_idx_list', 'pass_idx_list'): - if k in test_cfg: - setattr(self.tg, k, test_cfg[k]) + + if self.tg.full_data: + tmpdir_num = self.gm.dpy_data[cmd][0] + self.tg.tmpdir_num = tmpdir_num + for k in (test_cfg := cfgs[str(tmpdir_num)]): + if k in self.gm.cfg_attrs: + setattr(self.tg, k, test_cfg[k]) ret = getattr(self.tg, cmd)(*arg_list) # run the test if type(ret).__name__ == 'coroutine': ret = asyncio.run(ret) + self.process_retval(cmd, ret) if self.cfg.profile: @@ -484,13 +485,13 @@ class CmdTestRunner: elif ret == 'ok': ok() self.cmd_total += 1 - elif ret == 'error': - die(2, red(f'\nTest {self.tg.test_name!r} failed')) elif ret in ('skip', 'skip_msg', 'silent'): if ret == 'silent': self.cmd_total += 1 elif ret == 'skip_msg': ok('SKIP') + 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'))))