cmdtest.py opts: cleanups

This commit is contained in:
The MMGen Project 2025-01-27 16:01:53 +00:00
commit 46381def86
Signed by: mmgen
GPG key ID: 3F8B1861E32B7DA2
2 changed files with 43 additions and 55 deletions

View file

@ -67,13 +67,23 @@ class CmdTestOpts(CmdTestBase):
('opt_invalid_16', (41, 'invalid cmdline (overlong arg)', [])),
)
def spawn_prog(self, args, exit_val=None):
return self.spawn('test/misc/opts.py', args, cmd_dir='.', exit_val=exit_val)
def spawn_prog(self, args, opts=[], exit_val=None, need_proto=False):
return self.spawn(
'test/misc/opts.py',
opts + args,
cmd_dir = '.',
exit_val = exit_val,
env = {'TEST_MISC_OPTS_NEEDS_PROTO': '1' if need_proto else ''})
def check_vals(self, args, vals):
t = self.spawn_prog(args)
for k, v in vals:
t.expect(rf'{k}:\s+{v}', regex=True)
def check_vals(self, args, vals, check=True, need_proto=False):
show_opts = [a.removeprefix('cfg.') for a, b in vals if a.startswith('cfg.')]
t = self.spawn_prog(
args,
opts = ['--show-opts=' + ','.join(show_opts)] if show_opts else [],
need_proto = need_proto)
if check:
for k, v in vals:
t.expect(rf'{k}:\s+{v}', regex=True)
return t
def do_run(self, args, expect, exit_val, regex=False):
@ -249,49 +259,49 @@ class CmdTestOpts(CmdTestBase):
def opt_bad_autoset(self):
return self.do_run(['--fee-estimate-mode=Fubar'], 'not unique substring', 1)
def opt_invalid(self, args, expect, exit_val):
def opt_invalid(self, args, expect, exit_val=1):
t = self.spawn_prog(args, exit_val=exit_val)
t.expect(expect)
return t
def opt_invalid_1(self):
return self.opt_invalid(['--x'], 'must be at least', 1)
return self.opt_invalid(['--x'], 'must be at least')
def opt_invalid_2(self):
return self.opt_invalid(['---'], 'must be at least', 1)
return self.opt_invalid(['---'], 'must be at least')
def opt_invalid_5(self):
return self.opt_invalid(['-l'], 'missing parameter', 1)
return self.opt_invalid(['-l'], 'missing parameter')
def opt_invalid_6(self):
return self.opt_invalid(['-l', '-k'], 'missing parameter', 1)
return self.opt_invalid(['-l', '-k'], 'missing parameter')
def opt_invalid_7(self):
return self.opt_invalid(['--quiet=1'], 'requires no parameter', 1)
return self.opt_invalid(['--quiet=1'], 'requires no parameter')
def opt_invalid_8(self):
return self.opt_invalid(['-w'], 'unrecognized option', 1)
return self.opt_invalid(['-w'], 'unrecognized option')
def opt_invalid_9(self):
return self.opt_invalid(['--frobnicate'], 'unrecognized option', 1)
return self.opt_invalid(['--frobnicate'], 'unrecognized option')
def opt_invalid_10(self):
return self.opt_invalid(['--label', '-q'], 'missing parameter', 1)
return self.opt_invalid(['--label', '-q'], 'missing parameter')
def opt_invalid_11(self):
return self.opt_invalid(['-T', '-10'], 'missing parameter', 1)
return self.opt_invalid(['-T', '-10'], 'missing parameter')
def opt_invalid_12(self):
return self.opt_invalid(['-q', '-10'], 'unrecognized option', 1)
return self.opt_invalid(['-q', '-10'], 'unrecognized option')
def opt_invalid_13(self):
return self.opt_invalid(['--mi=3'], 'ambiguous option', 1)
return self.opt_invalid(['--mi=3'], 'ambiguous option')
def opt_invalid_14(self):
return self.opt_invalid(['--m=3'], 'must be at least', 1)
return self.opt_invalid(['--m=3'], 'must be at least')
def opt_invalid_15(self):
return self.opt_invalid(['m'] * 257, 'too many', 1)
return self.opt_invalid(['m'] * 257, 'too many')
def opt_invalid_16(self):
return self.opt_invalid(['e' * 4097], 'too long', 1)
return self.opt_invalid(['e' * 4097], 'too long')

View file

@ -1,5 +1,7 @@
#!/usr/bin/env python3
import os
from mmgen.cfg import Config
from mmgen.util import msg
@ -23,6 +25,7 @@ opts_data = {
-L, --label= l Specify a label 'l' for output wallet
-m, --minconf= n Minimum number of confirmations required to spend
outputs (default: 1)
-o, --show-opts= L List of cfg opts to display
-p, --hash-preset= p Use the scrypt hash parameters defined by preset 'p'
-P, --passwd-file= f Get wallet passphrase from file 'f'
-q, --quiet Be quieter
@ -43,45 +46,20 @@ sample note: {nn}
},
'code': {
'options': lambda cfg, help_notes, s: s.format(
kgs=help_notes('keygen_backends'),
coin_id=help_notes('coin_id'),
kgs = help_notes('keygen_backends'),
coin_id = help_notes('coin_id'),
),
'notes': lambda s: s.format(nn='a note'),
}
}
cfg = Config(opts_data=opts_data)
cfg = Config(opts_data=opts_data, need_proto=os.getenv('TEST_MISC_OPTS_NEEDS_PROTO'))
for k in (
'foo', # added opt
'print_checksum', # sets 'quiet'
'quiet', 'verbose', # _incompatible_opts
'passwd_file', # _infile_opts - check_infile()
'outdir', # check_outdir()
'cached_balances', # opt_sets_global
'minconf', # global_sets_opt
'hidden_incog_input_params',
'keep_label',
'seed_len',
'hash_preset',
'label',
'min_temp',
'max_temp',
'coin',
'pager',
'point',
'no_foobleize'):
msg('{:30} {}'.format(f'cfg.{k}:', getattr(cfg, k)))
msg('')
for k in (
'cached_balances', # opt_sets_global
'minconf'): # global_sets_opt
msg('{:30} {}'.format(f'cfg.{k}:', getattr(cfg, k)))
msg('')
for k in ('fee_estimate_mode',): # _autoset_opts
msg('{:30} {}'.format(f'cfg.{k}:', getattr(cfg, k)))
if cfg.show_opts:
opts = cfg.show_opts.split(',')
col1_w = max(len(s) for s in opts) + 5
for opt in opts:
msg('{:{w}} {}'.format(f'cfg.{opt}:', getattr(cfg, opt), w=col1_w))
msg('')
for n, arg in enumerate(cfg._args, 1):