Browse Source

cmdtest.py: minor cleanups

The MMGen Project 2 weeks ago
parent
commit
5273b2dc5e
3 changed files with 58 additions and 36 deletions
  1. 7 7
      test/cmdtest.py
  2. 23 2
      test/cmdtest_d/group_mgr.py
  3. 28 27
      test/cmdtest_d/runner.py

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

+ 23 - 2
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):
 		"""

+ 28 - 27
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'))))