test.py: add 'shared_deps' feature

This commit is contained in:
The MMGen Project 2019-10-31 10:46:46 +00:00
commit 768f4b960c
Signed by: mmgen
GPG key ID: 3F8B1861E32B7DA2
2 changed files with 28 additions and 6 deletions

View file

@ -501,14 +501,24 @@ class CmdGroupMgr(object):
cls = self.load_mod(gname,modname)
cdata = []
def get_shared_deps(cmdname,tmpdir_idx):
"""
shared_deps are "implied" dependencies for all cmds in cmd_group that don't appear in
the cmd_group data or cmds' argument lists. Supported only for 3seed tests at present.
"""
if not hasattr(cls,'shared_deps'): return []
return [k for k,v in cfgs[str(tmpdir_idx)]['dep_generators'].items()
if k in cls.shared_deps and v != cmdname]
for a,b in cls.cmd_group:
if is3seed:
for n,(i,j) in enumerate(zip(cls.tmpdir_nums,(128,192,256))):
k = '{}_{}'.format(a,n+1)
sdeps = get_shared_deps(k,i)
if type(b) == str:
cdata.append( (k, (i,'{} ({}-bit)'.format(b,j),[[[],i]])) )
cdata.append( (k, (i,'{} ({}-bit)'.format(b,j),[[[]+sdeps,i]])) )
else:
cdata.append( (k, (i,'{} ({}-bit)'.format(b[1],j),[[b[0],i]])) )
cdata.append( (k, (i,'{} ({}-bit)'.format(b[1],j),[[b[0]+sdeps,i]])) )
else:
cdata.append( (a, b if full_data else (cls.tmpdir_nums[0],b,[[[],cls.tmpdir_nums[0]]])) )
@ -639,7 +649,7 @@ class TestSuiteRunner(object):
m = '{} test{} performed. Elapsed time: {:02d}:{:02d}\n'
sys.stderr.write(green(m.format(self.cmd_total,suf(self.cmd_total),t//60,t%60)))
def init_group(self,gname,cmd=None):
def init_group(self,gname,cmd=None,quiet=False):
ts_cls = CmdGroupMgr().load_mod(gname)
for k in ('segwit','segwit_random','bech32'):
@ -671,7 +681,8 @@ class TestSuiteRunner(object):
iqmsg('INFO → skipping ' + m)
return False
bmsg('Executing ' + m)
if not quiet:
bmsg('Executing ' + m)
self.ts = self.gm.gm_init_group(self,gname,self.spawn_wrapper)
@ -682,6 +693,7 @@ class TestSuiteRunner(object):
def run_tests(self,usr_args):
self.start_time = int(time.time())
gname_save = None
if usr_args:
for arg in usr_args:
if arg in self.gm.cmd_groups:
@ -700,10 +712,14 @@ class TestSuiteRunner(object):
else:
gname = self.gm.find_cmd_in_groups(arg)
if gname:
if not self.init_group(gname,arg): continue
clean(self.ts.tmpdir_nums)
same_grp = gname == gname_save # same group as previous cmd: don't clean, suppress blue msg
if not self.init_group(gname,arg,quiet=same_grp):
continue
if not same_grp:
clean(self.ts.tmpdir_nums)
self.check_needs_rerun(arg,build=True)
do_between()
gname_save = gname
else:
die(1,'{!r}: command not recognized'.format(arg))
else:
@ -783,6 +799,10 @@ class TestSuiteRunner(object):
# 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.ts,'shared_deps'):
arg_list = arg_list[:-len(self.ts.shared_deps)]
if opt.resume:
if cmd == opt.resume:
bmsg('Resuming at {!r}'.format(cmd))

View file

@ -42,6 +42,7 @@ class TestSuiteRef3Seed(TestSuiteBase,TestSuiteShared):
'lens': (128, 192, 256),
'sids': ('FE3C6545', '1378FC64', '98831F3A'),
}
shared_deps = ['mmdat',pwfile]
cmd_group = (
# reading saved reference wallets
('ref_wallet_chk', ([],'saved reference wallet')),
@ -189,6 +190,7 @@ class TestSuiteRef3Seed(TestSuiteBase,TestSuiteShared):
class TestSuiteRef3Addr(TestSuiteRef3Seed):
'generated reference address, key and password files for 128-, 192- and 256-bit seeds'
tmpdir_nums = [26,27,28]
shared_deps = ['mmdat',pwfile]
chk_data = {
'lens': (128, 192, 256),