Browse Source

cmdtest.py opts: cleanups

The MMGen Project 2 months ago
parent
commit
46381def86
2 changed files with 43 additions and 55 deletions
  1. 32 22
      test/cmdtest_d/ct_opts.py
  2. 11 33
      test/misc/opts_main.py

+ 32 - 22
test/cmdtest_d/ct_opts.py

@@ -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 check_vals(self, args, vals):
-		t = self.spawn_prog(args)
-		for k, v in vals:
-			t.expect(rf'{k}:\s+{v}', regex=True)
+	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, 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')

+ 11 - 33
test/misc/opts_main.py

@@ -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)
-
-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)))
+cfg = Config(opts_data=opts_data, need_proto=os.getenv('TEST_MISC_OPTS_NEEDS_PROTO'))
 
-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):