cmdtest.py: minor cleanups

This commit is contained in:
The MMGen Project 2025-03-19 12:11:26 +03:00
commit 5273b2dc5e
Signed by: mmgen
GPG key ID: 3F8B1861E32B7DA2
3 changed files with 58 additions and 36 deletions

View file

@ -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()

View file

@ -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):
"""

View file

@ -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'))))