Browse Source

minor cleanups

The MMGen Project 1 year ago
parent
commit
fe3d4500a2

+ 18 - 14
mmgen/autosign.py

@@ -51,8 +51,8 @@ class Signable:
 
 		def _unprocessed(self,attrname,rawext,sigext):
 			if not hasattr(self,attrname):
-				dirlist = tuple(self.dir.iterdir())
-				names = tuple(f.name for f in dirlist)
+				dirlist = sorted(self.dir.iterdir())
+				names = {f.name for f in dirlist}
 				setattr(
 					self,
 					attrname,
@@ -126,11 +126,22 @@ class Signable:
 			for f in bad_files:
 				yield red(f.name)
 
-	class xmr_transaction(transaction):
+	class xmr_signable(transaction): # virtual class
+
+		def print_summary(self,signables):
+			bmsg('\nAutosign summary:')
+			msg(
+				self.summary_indent
+				+ f'\n{self.summary_indent}'.join(s.get_info() for s in signables)
+				+ self.summary_footer )
+
+	class xmr_transaction(xmr_signable):
 		dir_name = 'xmr_tx_dir'
 		desc = 'Monero transaction'
 		subext = 'subtx'
 		multiple_ok = False
+		summary_indent = ''
+		summary_footer = ''
 
 		async def sign(self,f):
 			from .xmrwallet import MoneroMMGenTX,MoneroWalletOps,xmrwallet_uargs
@@ -146,16 +157,14 @@ class Signable:
 			tx2.write(ask_write=False)
 			return tx2
 
-		def print_summary(self,txs):
-			bmsg('\nAutosign summary:\n')
-			msg_r('\n'.join(tx.get_info() for tx in txs))
-
-	class xmr_wallet_outputs_file(transaction):
+	class xmr_wallet_outputs_file(xmr_signable):
 		desc = 'Monero wallet outputs file'
 		rawext = 'raw'
 		sigext = 'sig'
 		dir_name = 'xmr_outputs_dir'
 		clean_all = True
+		summary_indent = '  '
+		summary_footer = '\n'
 
 		async def sign(self,f):
 			from .xmrwallet import MoneroWalletOps,xmrwallet_uargs
@@ -171,10 +180,6 @@ class Signable:
 			obj.write()
 			return obj
 
-		def print_summary(self,txs):
-			bmsg('\nAutosign summary:')
-			msg('  ' + '\n  '.join(tx.get_info() for tx in txs) + '\n')
-
 	class message(base):
 		desc = 'message file'
 		rawext = 'rawmsg.json'
@@ -577,7 +582,6 @@ class Autosign:
 			prev_status = status
 			if not n % 10:
 				msg_r(f"\r{' '*17}\rWaiting")
-				sys.stderr.flush()
 			await asyncio.sleep(1)
 			msg_r('.')
 			n += 1
@@ -601,7 +605,7 @@ class Autosign:
 		from .led import LEDControl
 		self.led = LEDControl(
 			enabled = self.cfg.led,
-			simulate = os.getenv('MMGEN_TEST_SUITE_AUTOSIGN_LED_SIMULATE') )
+			simulate = self.cfg.test_suite_autosign_led_simulate )
 		self.led.set('off')
 
 def get_autosign_obj(cfg,coins=None):

+ 8 - 1
test/include/pexpect.py

@@ -38,7 +38,14 @@ NL = '\n'
 
 class MMGenPexpect:
 
-	def __init__(self,args,no_output=False,env=None,pexpect_spawn=False,send_delay=None,timeout=None):
+	def __init__(
+			self,
+			args,
+			no_output     = False,
+			env           = None,
+			pexpect_spawn = False,
+			send_delay    = None,
+			timeout       = None ):
 
 		self.pexpect_spawn = pexpect_spawn
 		self.send_delay = send_delay

+ 5 - 2
test/test.py

@@ -624,7 +624,9 @@ class TestSuiteRunner(object):
 						clr2(repr(cmd_disp) if gc.platform == 'win' else cmd_disp)
 					)
 			else:
-				omsg_r(f'{t_pfx}Testing {desc}: ')
+				omsg_r('{a}Testing {b}: '.format(
+					a = t_pfx,
+					b = desc )
 
 		if msg_only:
 			return
@@ -918,7 +920,8 @@ class TestSuiteRunner(object):
 		elif ret == 'error':
 			die(2,red(f'\nTest {self.ts.test_name!r} failed'))
 		elif ret in ('skip','silent'):
-			pass
+			if ret == 'silent':
+				self.cmd_total += 1
 		elif type(ret) == tuple and ret[0] == 'skip_warn':
 			self.skipped_warnings.append(
 				'Test {!r} was skipped:\n  {}'.format(cmd,'\n  '.join(ret[1].split('\n'))))

+ 7 - 0
test/test_py_d/ts_base.py

@@ -74,6 +74,13 @@ class TestSuiteBase:
 	def write_to_tmpfile(self,fn,data,binary=False):
 		return write_to_file(os.path.join(self.tmpdir,fn),data,binary=binary)
 
+	def delete_tmpfile(self,fn):
+		fn = os.path.join(self.tmpdir,fn)
+		try:
+			return os.unlink(fn)
+		except:
+			msg(f'{fn}: file does not exist or could not be deleted')
+
 	def skip_for_win(self):
 		if gc.platform == 'win':
 			msg(f'Skipping test {self.test_name!r}: not supported on MSys2 platform')

+ 3 - 5
test/test_py_d/ts_xmr_autosign.py

@@ -228,7 +228,7 @@ class TestSuiteXMRAutosign(TestSuiteXMRWallet,TestSuiteAutosignBase):
 	def sign_transfer_tx2(self):
 		return self._sign_transfer_tx()
 
-	def _xmr_autosign_op(self,op,desc,dtype=None,ext=None,wallet_arg=None,add_opts=[]):
+	def _xmr_autosign_op(self,op,desc=None,dtype=None,ext=None,wallet_arg=None,add_opts=[]):
 		data = self.users['alice']
 		args = (
 			self.extra_opts
@@ -239,7 +239,8 @@ class TestSuiteXMRAutosign(TestSuiteXMRWallet,TestSuiteAutosignBase):
 			+ ([get_file_with_ext(self.asi.xmr_tx_dir,ext)] if ext else [])
 			+ ([wallet_arg] if wallet_arg else [])
 		)
-		t = self.spawn( 'mmgen-xmrwallet', args, extra_desc=f'({desc}, Alice)' )
+		desc_pfx = f'{desc}, ' if desc else ''
+		t = self.spawn( 'mmgen-xmrwallet', args, extra_desc=f'({desc_pfx}Alice)' )
 		if dtype:
 			t.written_to_file(dtype.capitalize())
 		return t
@@ -281,7 +282,6 @@ class TestSuiteXMRAutosign(TestSuiteXMRWallet,TestSuiteAutosignBase):
 		data = self.users['alice']
 		t = self._xmr_autosign_op(
 			op       = op,
-			desc     = 'submitting TX',
 			add_opts = [f'--tx-relay-daemon={relay_parm}'] if relay_parm else [],
 			ext      = ext )
 		t.expect( f'{op.capitalize()} transaction? (y/N): ', 'y' )
@@ -295,7 +295,6 @@ class TestSuiteXMRAutosign(TestSuiteXMRWallet,TestSuiteAutosignBase):
 	def _export_outputs(self,wallet_arg,add_opts=[]):
 		return self._xmr_autosign_op(
 			op    = 'export-outputs',
-			desc  = 'exporting outputs',
 			dtype = 'wallet outputs',
 			wallet_arg = wallet_arg,
 			add_opts = add_opts )
@@ -319,7 +318,6 @@ class TestSuiteXMRAutosign(TestSuiteXMRWallet,TestSuiteAutosignBase):
 	def _import_key_images(self,wallet_arg):
 		return self._xmr_autosign_op(
 			op    = 'import-key-images',
-			desc  = 'importing key images',
 			wallet_arg = wallet_arg )
 
 	def import_key_images1(self):

+ 2 - 0
test/test_py_d/ts_xmrwallet.py

@@ -398,7 +398,9 @@ class TestSuiteXMRWallet(TestSuiteBase):
 			fr'Account index:\s+2\s+Creating new address.*Alice’s new address' )
 
 	async def mine_initial_coins(self):
+		self.spawn('', msg_only=True, extra_desc='(opening wallet)')
 		await self.open_wallet_user('miner',1)
+		ok()
 		return await self.mine_chk('miner',1,0,lambda x: x.ub > 20,'unlocked balance > 20')
 
 	async def fund_alice(self):