diff --git a/scripts/create-token.py b/scripts/create-token.py
index 8c5ca1ea..7b52fa43 100755
--- a/scripts/create-token.py
+++ b/scripts/create-token.py
@@ -16,6 +16,10 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
+"""
+scripts/create-token.py: Automated ERC20 token creation for the MMGen suite
+"""
+
import sys,os,json,re
from subprocess import run,PIPE
from collections import namedtuple
diff --git a/scripts/exec_wrapper.py b/scripts/exec_wrapper.py
index 7b8ddd89..a3755000 100755
--- a/scripts/exec_wrapper.py
+++ b/scripts/exec_wrapper.py
@@ -1,4 +1,16 @@
#!/usr/bin/env python3
+#
+# mmgen = Multi-Mode GENerator, a command-line cryptocurrency wallet
+# Copyright (C)2013-2023 The MMGen Project
+# Licensed under the GNU General Public License, Version 3:
+# https://www.gnu.org/licenses
+# Public project repositories:
+# https://github.com/mmgen/mmgen
+# https://gitlab.com/mmgen/mmgen
+
+"""
+scripts/exec_wrapper.py: wrapper to launch MMGen scripts in a testing environment
+"""
# Import as few modules and define as few names as possible at module level before exec'ing the
# file, as all names will be seen by the exec'ed code. To prevent name collisions, all names
@@ -14,7 +26,7 @@ def exec_wrapper_get_colors():
def exec_wrapper_init():
if exec_wrapper_os.path.dirname(exec_wrapper_sys.argv[1]) == 'test':
- 'support running of test scripts under wrapper'
+ # support running of test scripts under wrapper
cwd = exec_wrapper_os.getcwd() # assume we’re in repo root
exec_wrapper_sys.path[0] = cwd
exec_wrapper_sys.path[1] = exec_wrapper_os.path.join(cwd,'test')
diff --git a/scripts/gendiff.py b/scripts/gendiff.py
index 0b6a1b80..ed7a0b81 100755
--- a/scripts/gendiff.py
+++ b/scripts/gendiff.py
@@ -53,9 +53,7 @@ if len(fns) != 2:
cleaned_texts = [cleanup_file(fn) for fn in fns]
if len(fns) == 2:
- """
- chunk headers have trailing newlines, hence the rstrip()
- """
+ # chunk headers have trailing newlines, hence the rstrip()
sys.stderr.write('Generating diff\n')
print(
f'diff a/{fns[0]} b/{fns[1]}\n' +
diff --git a/test/gentest.py b/test/gentest.py
index aabef214..0a2b3704 100755
--- a/test/gentest.py
+++ b/test/gentest.py
@@ -200,7 +200,8 @@ class GenToolPycoin(GenTool):
try:
from pycoin.networks.registry import network_for_netcode
except:
- raise ImportError('Unable to import pycoin.networks.registry. Is pycoin installed on your system?')
+ raise ImportError(
+ 'Unable to import pycoin.networks.registry. Is pycoin installed on your system?')
self.nfnc = network_for_netcode
def run(self,sec,vcoin):
@@ -233,7 +234,8 @@ class GenToolMonero_python(GenTool):
try:
from monero.seed import Seed
except:
- raise ImportError('Unable to import monero-python. Is monero-python installed on your system?')
+ raise ImportError(
+ 'Unable to import monero-python. Is monero-python installed on your system?')
self.Seed = Seed
def run(self,sec,vcoin):
@@ -393,9 +395,25 @@ def ab_test(proto,scfg):
if scfg.all_backends: # check all backends against external tool
for n in range(len(get_backends(addr_type.pubkey_type))):
- do_ab_test( proto, scfg, addr_type, gen1=n+1, kg2=kg2, ag=ag, tool=tool, cache_data=scfg.rounds < 1000 and not n )
+ do_ab_test(
+ proto,
+ scfg,
+ addr_type,
+ gen1 = n+1,
+ kg2 = kg2,
+ ag = ag,
+ tool = tool,
+ cache_data = scfg.rounds < 1000 and not n)
else: # check specific backend against external tool or another backend
- do_ab_test( proto, scfg, addr_type, gen1=scfg.gen1, kg2=kg2, ag=ag, tool=tool, cache_data=False )
+ do_ab_test(
+ proto,
+ scfg,
+ addr_type,
+ gen1 = scfg.gen1,
+ kg2 = kg2,
+ ag = ag,
+ tool = tool,
+ cache_data = False)
def speed_test(proto,kg,ag,rounds):
qmsg(green('Testing speed of address generator {!r} for coin {}'.format(
diff --git a/test/hashfunc.py b/test/hashfunc.py
index 85d57f17..a885d0b8 100755
--- a/test/hashfunc.py
+++ b/test/hashfunc.py
@@ -29,10 +29,13 @@ test = sys.argv[1].capitalize()
assert test in ('Sha256','Sha512','Keccak'), "Valid choices for test are 'sha256','sha512' or 'keccak'"
random_rounds = int(sys.argv[2]) if len(sys.argv) == 3 else 500
-def msg(s): sys.stderr.write(s)
-def green(s): return '\033[32;1m' + s + '\033[0m'
+def msg(s):
+ sys.stderr.write(s)
-class TestHashFunc(object):
+def green(s):
+ return '\033[32;1m' + s + '\033[0m'
+
+class TestHashFunc:
def test_constants(self):
msg('Testing generated constants: ')
@@ -122,7 +125,8 @@ class TestKeccak(TestHashFunc):
import sha3
self.hashlib = sha3
- def test_constants(self): pass
+ def test_constants(self):
+ pass
class TestSha2(TestHashFunc):
diff --git a/test/include/common.py b/test/include/common.py
index 6e7dbe1f..f395d18e 100755
--- a/test/include/common.py
+++ b/test/include/common.py
@@ -124,8 +124,10 @@ def getrandstr(num_chars,no_space=False):
def cleandir(d,do_msg=False):
d_enc = d.encode()
- try: files = os.listdir(d_enc)
- except: return
+ try:
+ files = os.listdir(d_enc)
+ except:
+ return
from shutil import rmtree
if do_msg:
@@ -187,8 +189,10 @@ def cmp_or_die(s,t,desc=None):
def init_coverage():
coverdir = os.path.join('test','trace')
acc_file = os.path.join('test','trace.acc')
- try: os.mkdir(coverdir,0o755)
- except: pass
+ try:
+ os.mkdir(coverdir,0o755)
+ except:
+ pass
return coverdir,acc_file
def silence():
@@ -283,8 +287,10 @@ def check_solc_ver():
def get_ethkey():
cmdnames = ('ethkey','openethereum-ethkey')
for cmdname in cmdnames:
- try: run([cmdname,'--help'],stdout=PIPE)
- except: pass
+ try:
+ run([cmdname,'--help'],stdout=PIPE)
+ except:
+ pass
else:
return cmdname
else:
diff --git a/test/include/pexpect.py b/test/include/pexpect.py
index daa06c69..d1e2ef1a 100755
--- a/test/include/pexpect.py
+++ b/test/include/pexpect.py
@@ -70,8 +70,13 @@ class MMGenPexpect:
if cfg.exact_output:
self.p.logfile = sys.stdout
- def do_decrypt_ka_data(self,hp,pw,desc='key-address data',check=True,have_yes_opt=False):
-# self.hash_preset(desc,hp)
+ def do_decrypt_ka_data(
+ self,
+ hp,
+ pw,
+ desc = 'key-address data',
+ check = True,
+ have_yes_opt = False):
self.passphrase(desc,pw)
if not have_yes_opt:
self.expect('Check key-to-address validity? (y/N): ',('n','y')[check])
@@ -127,7 +132,8 @@ class MMGenPexpect:
self.expect('Repeat passphrase: ',passphrase+'\n')
def passphrase(self,desc,passphrase,pwtype=''):
- if pwtype: pwtype += ' '
+ if pwtype:
+ pwtype += ' '
self.expect(f'Enter {pwtype}passphrase for {desc}.*?: ',passphrase+'\n',regex=True)
def hash_preset(self,desc,preset=''):
diff --git a/test/objattrtest.py b/test/objattrtest.py
index 1cb147ba..024e4408 100755
--- a/test/objattrtest.py
+++ b/test/objattrtest.py
@@ -81,7 +81,8 @@ def get_descriptor_obj(objclass,attrname):
def test_attr_perm(obj,attrname,perm_name,perm_value,dobj,attrval_type):
- class SampleObjError(Exception): pass
+ class SampleObjError(Exception):
+ pass
pname = perm_name.replace('_ok','')
pstem = pname.rstrip('e')
@@ -168,7 +169,8 @@ def do_loop():
utests = cfg._args
for obj in test_data:
- if utests and obj not in utests: continue
+ if utests and obj not in utests:
+ continue
msg((blue if cfg.verbose else nocolor)(f'Testing {obj}'))
test_object(mod,test_data,obj)
diff --git a/test/objtest.py b/test/objtest.py
index 409dc2aa..73a8ee9d 100755
--- a/test/objtest.py
+++ b/test/objtest.py
@@ -116,8 +116,11 @@ def run_test(mod,test,arg,input_data,arg1,exc_name):
bad_ret = list() if issubclass(cls,list) else None
- if isinstance(ret_chk,str): ret_chk = ret_chk.encode()
- if isinstance(ret,str): ret = ret.encode()
+ if isinstance(ret_chk,str):
+ ret_chk = ret_chk.encode()
+
+ if isinstance(ret,str):
+ ret = ret.encode()
if cfg.getobj:
if input_data == 'bad':
@@ -141,8 +144,10 @@ def run_test(mod,test,arg,input_data,arg1,exc_name):
if cfg.getobj and (not cfg.silent and input_data == 'bad'):
pass
else:
- try: ret_disp = ret.decode()
- except: ret_disp = ret
+ try:
+ ret_disp = ret.decode()
+ except:
+ ret_disp = ret
msg(f'==> {ret_disp!r}')
if cfg.verbose and issubclass(cls,MMGenObject):
@@ -180,7 +185,8 @@ def do_loop():
utests = cfg._args
for test in test_data:
arg1 = test_data[test].get('arg1')
- if utests and test not in utests: continue
+ if utests and test not in utests:
+ continue
nl = ('\n','')[bool(cfg.super_silent) or clr == None]
clr = (blue,nocolor)[bool(cfg.super_silent)]
diff --git a/test/overlay/fakemods/mmgen/tw/view.py b/test/overlay/fakemods/mmgen/tw/view.py
index c82b89b1..a090c21a 100644
--- a/test/overlay/fakemods/mmgen/tw/view.py
+++ b/test/overlay/fakemods/mmgen/tw/view.py
@@ -15,8 +15,10 @@ if overlay_fake_os.getenv('MMGEN_TEST_SUITE_DETERMINISTIC'):
TwView.date_formatter = {
'days': lambda rpc,secs: (next(overlay_fake_data.time_iter) - secs) // 86400,
- 'date': lambda rpc,secs: '{}-{:02}-{:02}'.format(*time.gmtime(next(overlay_fake_data.time_iter))[:3])[2:],
- 'date_time': lambda rpc,secs: '{}-{:02}-{:02} {:02}:{:02}'.format(*time.gmtime(next(overlay_fake_data.time_iter))[:5]),
+ 'date': lambda rpc,secs: '{}-{:02}-{:02}'.format(
+ *time.gmtime(next(overlay_fake_data.time_iter))[:3])[2:],
+ 'date_time': lambda rpc,secs: '{}-{:02}-{:02} {:02}:{:02}'.format(
+ *time.gmtime(next(overlay_fake_data.time_iter))[:5]),
}
if overlay_fake_os.getenv('MMGEN_BOGUS_UNSPENT_DATA'):
diff --git a/test/test.py b/test/test.py
index 65bb9a9a..3269f10e 100755
--- a/test/test.py
+++ b/test/test.py
@@ -32,10 +32,13 @@ def create_shm_dir(data_dir,trash_dir):
from subprocess import run
if gc.platform == 'win':
for tdir in (data_dir,trash_dir):
- try: os.listdir(tdir)
- except: pass
+ try:
+ os.listdir(tdir)
+ except:
+ pass
else:
- try: shutil.rmtree(tdir)
+ try:
+ shutil.rmtree(tdir)
except: # we couldn't remove data dir - perhaps regtest daemon is running
try:
run(['python3',os.path.join('cmds','mmgen-regtest'),'stop'],check=True)
@@ -191,8 +194,10 @@ data_dir = Config.test_datadir
# step 1: delete data_dir symlink in ./test;
if not po.user_opts.get('skipping_deps'):
- try: os.unlink(data_dir)
- except: pass
+ try:
+ os.unlink(data_dir)
+ except:
+ pass
# step 2: opts.init will create new data_dir in ./test (if not cfg.skipping_deps)
cfg = Config(opts_data=opts_data)
@@ -589,18 +594,20 @@ class TestSuiteRunner(object):
else:
self.spawn_env['MMGEN_COLUMNS'] = '120'
- def spawn_wrapper(self,cmd,
- args = [],
- extra_desc = '',
- no_output = False,
- msg_only = False,
- no_msg = False,
- cmd_dir = 'cmds',
+ def spawn_wrapper(
+ self,
+ cmd,
+ args = [],
+ extra_desc = '',
+ no_output = False,
+ msg_only = False,
+ no_msg = False,
+ cmd_dir = 'cmds',
no_exec_wrapper = False,
- timeout = None,
- pexpect_spawn = None,
- direct_exec = False,
- env = {} ):
+ timeout = None,
+ pexpect_spawn = None,
+ direct_exec = False,
+ env = {}):
desc = self.ts.test_name if cfg.names else self.gm.dpy_data[self.ts.test_name][1]
if extra_desc:
@@ -821,11 +828,13 @@ class TestSuiteRunner(object):
self.end_msg()
- def check_needs_rerun(self,cmd,
+ def check_needs_rerun(
+ self,
+ cmd,
build = False,
root = True,
force_delete = False,
- dpy = False ):
+ dpy = False):
self.ts.test_name = cmd
@@ -842,7 +851,8 @@ class TestSuiteRunner(object):
for ext in ret[1]:
fn = get_file_with_ext(cfgs[ret[0]]['tmpdir'],ext,delete=build)
if fn:
- if force_delete: os.unlink(fn)
+ if force_delete:
+ os.unlink(fn)
else: fns.append(fn)
else: rerun = True
diff --git a/test/test_py_d/ts_autosign.py b/test/test_py_d/ts_autosign.py
index daa8ed46..d4b915f2 100755
--- a/test/test_py_d/ts_autosign.py
+++ b/test/test_py_d/ts_autosign.py
@@ -78,13 +78,17 @@ def check_mountpoint(asi):
def do_mount(mountpoint):
if not os.path.ismount(mountpoint):
- try: run(['mount',mountpoint],check=True)
- except: pass
+ try:
+ run(['mount',mountpoint],check=True)
+ except:
+ pass
def do_umount(mountpoint):
if os.path.ismount(mountpoint):
- try: run(['umount',mountpoint],check=True)
- except: pass
+ try:
+ run(['umount',mountpoint],check=True)
+ except:
+ pass
class TestSuiteAutosignBase(TestSuiteBase):
networks = ('btc',)
@@ -287,8 +291,10 @@ class TestSuiteAutosignBase(TestSuiteBase):
self.bad_tx_count = 2
elif op == 'remove':
for fn in fns:
- try: os.unlink(fn)
- except: pass
+ try:
+ os.unlink(fn)
+ except:
+ pass
self.bad_tx_count = 0
return 'ok'
diff --git a/test/test_py_d/ts_chainsplit.py b/test/test_py_d/ts_chainsplit.py
index 91a8f355..dfc43a7e 100755
--- a/test/test_py_d/ts_chainsplit.py
+++ b/test/test_py_d/ts_chainsplit.py
@@ -74,11 +74,20 @@ class TestSuiteChainsplit(TestSuiteRegtest):
t.expect('done')
t.ok()
- def split_start_btc(self): self.regtest_start(coin='BTC')
- def split_start_b2x(self): self.regtest_start(coin='B2X')
- def split_gen_btc(self): self.regtest_generate(coin='BTC')
- def split_gen_b2x(self): self.regtest_generate(coin='B2X',num_blocks=100)
- def split_gen_b2x2(self): self.regtest_generate(coin='B2X')
+ def split_start_btc(self):
+ self.regtest_start(coin='BTC')
+
+ def split_start_b2x(self):
+ self.regtest_start(coin='B2X')
+
+ def split_gen_btc(self):
+ self.regtest_generate(coin='BTC')
+
+ def split_gen_b2x(self):
+ self.regtest_generate(coin='B2X',num_blocks=100)
+
+ def split_gen_b2x2(self):
+ self.regtest_generate(coin='B2X')
def split_do_split(self):
self.coin = 'B2X'
@@ -92,7 +101,8 @@ class TestSuiteChainsplit(TestSuiteRegtest):
t.expect('outputs to spend: ','1\n')
for tx in ('timelocked','split'):
- for q in ('fee','change'): t.expect('OK? (Y/n): ','y')
+ for q in ('fee','change'):
+ t.expect('OK? (Y/n): ','y')
t.do_comment(False)
t.view_tx('t')
@@ -126,9 +136,14 @@ class TestSuiteChainsplit(TestSuiteRegtest):
def split_txdo_timelock(self,coin,locktime,bad_locktime):
self.coin = coin
sid = self.regtest_user_sid('bob')
- self.regtest_user_txdo( 'bob','0.0001',[sid+':S:5'],'1',pw=rt_pw,
- extra_args=['--locktime='+str(locktime)],
- bad_locktime=bad_locktime)
+ self.regtest_user_txdo(
+ 'bob',
+ '0.0001',
+ [sid+':S:5'],
+ '1',
+ pw = rt_pw,
+ extra_args = ['--locktime='+str(locktime)],
+ bad_locktime = bad_locktime)
def split_txdo_timelock_bad_btc(self):
self.regtest_txdo_timelock('BTC',locktime=8888,bad_locktime=True)
diff --git a/test/test_py_d/ts_ethdev.py b/test/test_py_d/ts_ethdev.py
index 48622ed7..d548602b 100755
--- a/test/test_py_d/ts_ethdev.py
+++ b/test/test_py_d/ts_ethdev.py
@@ -566,8 +566,10 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared):
t.expect('version')
return t
- def wallet_upgrade1(self): return self.wallet_upgrade('tracking-wallet-v1.json')
- def wallet_upgrade2(self): return self.wallet_upgrade('tracking-wallet-v2.json')
+ def wallet_upgrade1(self):
+ return self.wallet_upgrade('tracking-wallet-v1.json')
+ def wallet_upgrade2(self):
+ return self.wallet_upgrade('tracking-wallet-v2.json')
def addrgen(self,addrs='1-3,11-13,21-23'):
t = self.spawn('mmgen-addrgen', self.eth_args + [dfl_words_file,addrs])
@@ -595,7 +597,8 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared):
def addrimport_burn_addr(self):
return self.addrimport_one_addr(addr=burn_addr)
- def txcreate(self,
+ def txcreate(
+ self,
args = [],
menu = [],
acct = '1',
@@ -603,23 +606,24 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared):
interactive_fee = '50G',
fee_info_data = ('0.00105','50'),
no_read = False,
- tweaks = [] ):
+ tweaks = []):
fee_info_pat = r'\D{}\D.*{c} .*\D{}\D.*gas price in Gwei'.format( *fee_info_data, c=self.proto.coin )
t = self.spawn('mmgen-'+caller, self.eth_args + ['-B'] + args)
t.expect(r'add \[l\]abel, .*?:.','p', regex=True)
t.written_to_file('Account balances listing')
- t = self.txcreate_ui_common(t,
- menu = menu,
- caller = caller,
- input_sels_prompt = 'to spend from',
- inputs = acct,
- file_desc = 'transaction',
- bad_input_sels = True,
- interactive_fee = interactive_fee,
- fee_info_pat = fee_info_pat,
- fee_desc = 'transaction fee or gas price',
- add_comment = tx_comment_jp,
- tweaks = tweaks )
+ t = self.txcreate_ui_common(
+ t,
+ menu = menu,
+ caller = caller,
+ input_sels_prompt = 'to spend from',
+ inputs = acct,
+ file_desc = 'transaction',
+ bad_input_sels = True,
+ interactive_fee = interactive_fee,
+ fee_info_pat = fee_info_pat,
+ fee_desc = 'transaction fee or gas price',
+ add_comment = tx_comment_jp,
+ tweaks = tweaks)
if not no_read:
t.read()
return t
@@ -628,25 +632,27 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared):
ext = ext.format('-α' if cfg.debug_utf8 else '')
keyfile = joinpath(self.tmpdir,parity_devkey_fn)
txfile = self.get_file_with_ext(ext,no_dot=True)
- t = self.spawn('mmgen-txsign',
- [f'--outdir={self.tmpdir}']
- + [f'--coin={self.proto.coin}']
- + ['--quiet']
- + ['--rpc-host=bad_host'] # ETH signing must work without RPC
- + add_args
- + ([],['--yes'])[ni]
- + ([f'--keys-from-file={keyfile}'] if dev_send else [])
- + [txfile, dfl_words_file] )
+ t = self.spawn(
+ 'mmgen-txsign',
+ [f'--outdir={self.tmpdir}']
+ + [f'--coin={self.proto.coin}']
+ + ['--quiet']
+ + ['--rpc-host=bad_host'] # ETH signing must work without RPC
+ + add_args
+ + ([],['--yes'])[ni]
+ + ([f'--keys-from-file={keyfile}'] if dev_send else [])
+ + [txfile, dfl_words_file])
return self.txsign_ui_common(t,ni=ni,has_label=True)
def txsend(self,ni=False,ext='{}.regtest.sigtx',add_args=[]):
ext = ext.format('-α' if cfg.debug_utf8 else '')
txfile = self.get_file_with_ext(ext,no_dot=True)
t = self.spawn('mmgen-txsend', self.eth_args + add_args + [txfile])
- txid = self.txsend_ui_common(t,
- quiet = not cfg.debug,
- bogus_send = False,
- has_label = True )
+ self.txsend_ui_common(
+ t,
+ quiet = not cfg.debug,
+ bogus_send = False,
+ has_label = True)
return t
def txview(self,ext_fs):
@@ -682,28 +688,38 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared):
return self.txcreate(args=args,menu=menu,acct='1',tweaks=['confirm_non_mmgen'])
def txview1_raw(self):
return self.txview(ext_fs='{}.regtest.rawtx')
- def txsign1(self): return self.txsign(add_args=['--use-internal-keccak-module'],dev_send=True)
+ def txsign1(self):
+ return self.txsign(add_args=['--use-internal-keccak-module'],dev_send=True)
def tx_status0_bad(self):
return self.tx_status(ext='{}.regtest.sigtx',expect_str='neither in mempool nor blockchain',exit_val=1)
- def txsign1_ni(self): return self.txsign(ni=True,dev_send=True)
- def txsend1(self): return self.txsend()
+ def txsign1_ni(self):
+ return self.txsign(ni=True,dev_send=True)
+ def txsend1(self):
+ return self.txsend()
def txview1_sig(self): # do after send so that TxID is displayed
return self.txview(ext_fs='{}.regtest.sigtx')
- def bal1(self): return self.bal(n='1')
+ def bal1(self):
+ return self.bal(n='1')
def txcreate2(self):
args = ['98831F3A:E:11,1.234']
return self.txcreate(args=args,acct='10',tweaks=['confirm_non_mmgen'])
- def txsign2(self): return self.txsign(ni=True,ext='1.234,50000]{}.regtest.rawtx',dev_send=True)
- def txsend2(self): return self.txsend(ext='1.234,50000]{}.regtest.sigtx')
- def bal2(self): return self.bal(n='2')
+ def txsign2(self):
+ return self.txsign(ni=True,ext='1.234,50000]{}.regtest.rawtx',dev_send=True)
+ def txsend2(self):
+ return self.txsend(ext='1.234,50000]{}.regtest.sigtx')
+ def bal2(self):
+ return self.bal(n='2')
def txcreate3(self):
args = ['98831F3A:E:21,2.345']
return self.txcreate(args=args,acct='10',tweaks=['confirm_non_mmgen'])
- def txsign3(self): return self.txsign(ni=True,ext='2.345,50000]{}.regtest.rawtx',dev_send=True)
- def txsend3(self): return self.txsend(ext='2.345,50000]{}.regtest.sigtx')
- def bal3(self): return self.bal(n='3')
+ def txsign3(self):
+ return self.txsign(ni=True,ext='2.345,50000]{}.regtest.rawtx',dev_send=True)
+ def txsend3(self):
+ return self.txsend(ext='2.345,50000]{}.regtest.sigtx')
+ def bal3(self):
+ return self.bal(n='3')
def tx_status(self,ext,expect_str,expect_str2='',add_args=[],exit_val=0):
ext = ext.format('-α' if cfg.debug_utf8 else '')
@@ -816,16 +832,22 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared):
t.expect('or gas price: ',fee+'\n')
return t
- def txsign4(self): return self.txsign(ni=True,ext='.45495,50000]{}.regtest.rawtx',dev_send=True)
- def txsend4(self): return self.txsend(ext='.45495,50000]{}.regtest.sigtx')
- def bal4(self): return self.bal(n='4')
+ def txsign4(self):
+ return self.txsign(ni=True,ext='.45495,50000]{}.regtest.rawtx',dev_send=True)
+ def txsend4(self):
+ return self.txsend(ext='.45495,50000]{}.regtest.sigtx')
+ def bal4(self):
+ return self.bal(n='4')
def txcreate5(self):
args = [burn_addr + ','+amt1]
return self.txcreate(args=args,acct='10',tweaks=['confirm_non_mmgen'])
- def txsign5(self): return self.txsign(ni=True,ext=amt1+',50000]{}.regtest.rawtx',dev_send=True)
- def txsend5(self): return self.txsend(ext=amt1+',50000]{}.regtest.sigtx')
- def bal5(self): return self.bal(n='5')
+ def txsign5(self):
+ return self.txsign(ni=True,ext=amt1+',50000]{}.regtest.rawtx',dev_send=True)
+ def txsend5(self):
+ return self.txsend(ext=amt1+',50000]{}.regtest.sigtx')
+ def bal5(self):
+ return self.bal(n='5')
#bal_corr = Decimal('0.0000032') # gas use for token sends varies between ETH and ETC!
bal_corr = Decimal('0.0000000') # update: OpenEthereum team seems to have corrected this
@@ -879,10 +901,14 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared):
t.expect(fr'{addr}\b.*{comment_pat}',regex=True)
return t
- def add_comment1(self): return self.add_comment(comment=tw_comment_zh)
- def chk_comment1(self): return self.chk_comment(comment_pat=tw_comment_zh[:3])
- def add_comment2(self): return self.add_comment(comment=tw_comment_lat_cyr_gr)
- def chk_comment2(self): return self.chk_comment(comment_pat=tw_comment_lat_cyr_gr[:3])
+ def add_comment1(self):
+ return self.add_comment(comment=tw_comment_zh)
+ def chk_comment1(self):
+ return self.chk_comment(comment_pat=tw_comment_zh[:3])
+ def add_comment2(self):
+ return self.add_comment(comment=tw_comment_lat_cyr_gr)
+ def chk_comment2(self):
+ return self.chk_comment(comment_pat=tw_comment_lat_cyr_gr[:3])
def remove_comment(self,addr='98831F3A:E:3'):
t = self.spawn('mmgen-tool', self.eth_args + ['remove_label',addr])
@@ -897,8 +923,10 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared):
self.spawn('',msg_only=True)
cmd_args = [f'--{k}={v}' for k,v in list(token_data.items())]
imsg("Compiling solidity token contract '{}' with 'solc'".format( token_data['symbol'] ))
- try: os.mkdir(odir)
- except: pass
+ try:
+ os.mkdir(odir)
+ except:
+ pass
cmd = [
'python3',
'scripts/exec_wrapper.py',
@@ -969,18 +997,27 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared):
imsg(f'\nToken MM{num} deployed!')
return t
- async def token_deploy1a(self): return await self.token_deploy(num=1,key='SafeMath',gas=500_000)
- async def token_deploy1b(self): return await self.token_deploy(num=1,key='Owned', gas=1_000_000)
- async def token_deploy1c(self): return await self.token_deploy(num=1,key='Token', gas=4_000_000,tx_fee='7G')
+ async def token_deploy1a(self):
+ return await self.token_deploy(num=1,key='SafeMath',gas=500_000)
+ async def token_deploy1b(self):
+ return await self.token_deploy(num=1,key='Owned', gas=1_000_000)
+ async def token_deploy1c(self):
+ return await self.token_deploy(num=1,key='Token', gas=4_000_000,tx_fee='7G')
def tx_status2(self):
- return self.tx_status(ext=self.proto.coin+'[0,7000]{}.regtest.sigtx',expect_str='successfully executed')
+ return self.tx_status(
+ ext = self.proto.coin+'[0,7000]{}.regtest.sigtx',
+ expect_str = 'successfully executed')
- def bal6(self): return self.bal5()
+ def bal6(self):
+ return self.bal5()
- async def token_deploy2a(self): return await self.token_deploy(num=2,key='SafeMath',gas=500_000)
- async def token_deploy2b(self): return await self.token_deploy(num=2,key='Owned', gas=1_000_000)
- async def token_deploy2c(self): return await self.token_deploy(num=2,key='Token', gas=4_000_000)
+ async def token_deploy2a(self):
+ return await self.token_deploy(num=2,key='SafeMath',gas=500_000)
+ async def token_deploy2b(self):
+ return await self.token_deploy(num=2,key='Owned', gas=1_000_000)
+ async def token_deploy2c(self):
+ return await self.token_deploy(num=2,key='Token', gas=4_000_000)
async def contract_deploy(self): # test create,sign,send
return await self.token_deploy(num=2,key='SafeMath',gas=500_000,mmgen_cmd='txcreate')
@@ -1085,8 +1122,10 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared):
expect = '3/3',
add_args = ['--token=MM2'] )
- def bal7(self): return self.bal5()
- def token_bal1(self): return self.token_bal(n='1')
+ def bal7(self):
+ return self.bal5()
+ def token_bal1(self):
+ return self.token_bal(n='1')
def token_txcreate(self,args=[],token='',inputs='1',fee='50G'):
return self.txcreate_ui_common(
@@ -1163,8 +1202,10 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared):
def txsend_noamt(self):
return self.txsend(ext='99.99895,50000]{}.regtest.sigtx')
- def bal8(self): return self.bal(n='8')
- def token_bal5(self): return self.token_bal(n='5')
+ def bal8(self):
+ return self.bal(n='8')
+ def token_bal5(self):
+ return self.token_bal(n='5')
def token_txcreate_noamt(self):
return self.token_txcreate(args=['98831F3A:E:13'],token='mm1',inputs='2',fee='51G')
@@ -1173,8 +1214,10 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared):
def token_txsend_noamt(self):
return self.token_txsend(ext='1.23456,51000]{}.regtest.sigtx',token='mm1')
- def bal9(self): return self.bal(n='9')
- def token_bal6(self): return self.token_bal(n='6')
+ def bal9(self):
+ return self.bal(n='9')
+ def token_bal6(self):
+ return self.token_bal(n='6')
def listaddresses(self,args=[],tool_args=['all_labels=1']):
return self.spawn('mmgen-tool', self.eth_args + args + ['listaddresses'] + tool_args)
@@ -1209,25 +1252,27 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared):
args=['--cached-balances','--fee=12G','98831F3A:E:12,1.2789']
return self.token_txcreate(args=args,token='mm1')
- def txdo_cached_balances(self,
+ def txdo_cached_balances(
+ self,
acct = '2',
fee_info_data = ('0.00105','50'),
- add_args = ['98831F3A:E:3,0.4321'] ):
+ add_args = ['98831F3A:E:3,0.4321']):
t = self.txcreate(
- args = ['--fee=20G','--cached-balances'] + add_args + [dfl_words_file],
- acct = acct,
- caller = 'txdo',
- fee_info_data = fee_info_data,
- no_read = True )
+ args = ['--fee=20G','--cached-balances'] + add_args + [dfl_words_file],
+ acct = acct,
+ caller = 'txdo',
+ fee_info_data = fee_info_data,
+ no_read = True)
self._do_confirm_send(t,quiet=not cfg.debug,sure=False)
return t
- def txcreate_refresh_balances(self,
+ def txcreate_refresh_balances(
+ self,
bals = ['2','3'],
args = ['-B','--cached-balances','-i'],
total = vbal5,
adj_total = True,
- total_coin = None ):
+ total_coin = None):
if total_coin is None:
total_coin = self.proto.coin
@@ -1243,7 +1288,8 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared):
t.expect(rf'Total unspent:.*\D{total}\D.*{total_coin}',regex=True)
return t
- def bal10(self): return self.bal(n='10')
+ def bal10(self):
+ return self.bal(n='10')
def token_txdo_cached_balances(self):
return self.txdo_cached_balances(
@@ -1259,7 +1305,8 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared):
adj_total = False,
total_coin = 'MM1' )
- def token_bal7(self): return self.token_bal(n='7')
+ def token_bal7(self):
+ return self.token_bal(n='7')
def twview1(self):
return self.twview()
@@ -1287,7 +1334,14 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared):
def token_twview3(self):
return self.twview(args=['--token=mm1'],tool_args=['wide=1','sort=age'])
- def edit_comment(self,out_num,args=[],action='l',comment_text=None,changed=False,pexpect_spawn=None):
+ def edit_comment(
+ self,
+ out_num,
+ args = [],
+ action = 'l',
+ comment_text = None,
+ changed = False,
+ pexpect_spawn = None):
t = self.spawn('mmgen-txcreate', self.eth_args + args + ['-B','-i'],pexpect_spawn=pexpect_spawn)
menu_prompt = 'efresh balance:\b'
@@ -1321,7 +1375,11 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared):
return self.edit_comment(out_num=del_addrs[0],comment_text=tw_comment_zh[:3])
def edit_comment2(self):
spawn = False if gc.platform == 'win' else True
- return self.edit_comment(out_num=del_addrs[0],comment_text=tw_comment_zh[3:],changed=True,pexpect_spawn=spawn)
+ return self.edit_comment(
+ out_num = del_addrs[0],
+ comment_text = tw_comment_zh[3:],
+ changed = True,
+ pexpect_spawn = spawn)
def edit_comment3(self):
return self.edit_comment(out_num=del_addrs[1],comment_text=tw_comment_lat_cyr_gr)
def edit_comment4(self):
diff --git a/test/test_py_d/ts_input.py b/test/test_py_d/ts_input.py
index 9bae3c27..59c5ccf6 100755
--- a/test/test_py_d/ts_input.py
+++ b/test/test_py_d/ts_input.py
@@ -444,17 +444,29 @@ class TestSuiteInput(TestSuiteBase):
'wd',
'busy')
return self._user_seed_entry('words',entry_mode='minimal',mn=mn)
- def mnemonic_entry_mmgen(self): return self._user_seed_entry('words',entry_mode='full')
- def mnemonic_entry_bip39(self): return self._user_seed_entry('bip39',entry_mode='full')
- def mnemonic_entry_bip39_short(self): return self._user_seed_entry('bip39',entry_mode='short')
+ def mnemonic_entry_mmgen(self):
+ return self._user_seed_entry('words',entry_mode='full')
+ def mnemonic_entry_bip39(self):
+ return self._user_seed_entry('bip39',entry_mode='full')
+ def mnemonic_entry_bip39_short(self):
+ return self._user_seed_entry('bip39',entry_mode='short')
- def mn2hex_interactive_mmgen(self): return self._mn2hex('mmgen',entry_mode='full')
- def mn2hex_interactive_mmgen_fixed(self): return self._mn2hex('mmgen',entry_mode='fixed')
- def mn2hex_interactive_bip39(self): return self._mn2hex('bip39',entry_mode='full')
- def mn2hex_interactive_bip39_short(self): return self._mn2hex('bip39',entry_mode='short',pad_entry=True)
- def mn2hex_interactive_bip39_fixed(self): return self._mn2hex('bip39',entry_mode='fixed',enter_for_dfl=True)
- def mn2hex_interactive_xmr(self): return self._mn2hex('xmrseed',entry_mode='full')
- def mn2hex_interactive_xmr_short(self): return self._mn2hex('xmrseed',entry_mode='short')
+ def mn2hex_interactive_mmgen(self):
+ return self._mn2hex('mmgen',entry_mode='full')
+ def mn2hex_interactive_mmgen_fixed(self):
+ return self._mn2hex('mmgen',entry_mode='fixed')
+ def mn2hex_interactive_bip39(self):
+ return self._mn2hex('bip39',entry_mode='full')
+ def mn2hex_interactive_bip39_short(self):
+ return self._mn2hex('bip39',entry_mode='short',pad_entry=True)
+ def mn2hex_interactive_bip39_fixed(self):
+ return self._mn2hex('bip39',entry_mode='fixed',enter_for_dfl=True)
+ def mn2hex_interactive_xmr(self):
+ return self._mn2hex('xmrseed',entry_mode='full')
+ def mn2hex_interactive_xmr_short(self):
+ return self._mn2hex('xmrseed',entry_mode='short')
- def dieroll_entry(self): return self._user_seed_entry('dieroll')
- def dieroll_entry_usrrand(self): return self._user_seed_entry('dieroll',usr_rand=True,out_fmt='bip39')
+ def dieroll_entry(self):
+ return self._user_seed_entry('dieroll')
+ def dieroll_entry_usrrand(self):
+ return self._user_seed_entry('dieroll',usr_rand=True,out_fmt='bip39')
diff --git a/test/test_py_d/ts_main.py b/test/test_py_d/ts_main.py
index 5e68ca6a..16098fbf 100755
--- a/test/test_py_d/ts_main.py
+++ b/test/test_py_d/ts_main.py
@@ -99,79 +99,169 @@ class TestSuiteMain(TestSuiteBase,TestSuiteShared):
color = True
need_daemon = True
cmd_group = (
- ('walletgen_dfl_wallet', (15,'wallet generation (default wallet)',[[[],15]])),
- ('subwalletgen_dfl_wallet', (15,'subwallet generation (default wallet)',[[[pwfile],15]])),
- ('export_seed_dfl_wallet',(15,'seed export to mmseed format (default wallet)',[[[pwfile],15]])),
- ('addrgen_dfl_wallet',(15,'address generation (default wallet)',[[[pwfile],15]])),
- ('txcreate_dfl_wallet',(15,'transaction creation (default wallet)',[[['addrs'],15]])),
- ('txsign_dfl_wallet',(15,'transaction signing (default wallet)',[[['rawtx',pwfile],15]])),
- ('passchg_dfl_wallet',(16,'password, label and hash preset change (default wallet)',[[[pwfile],15]])),
- ('walletchk_newpass_dfl_wallet',(16,'wallet check with new pw, label and hash preset',[[[pwfile],16]])),
- ('delete_dfl_wallet',(15,'delete default wallet',[[[pwfile],15]])),
+ ('walletgen_dfl_wallet', (15,'wallet generation (default wallet)', [[[],15]])),
+ ('subwalletgen_dfl_wallet', (15,'subwallet generation (default wallet)', [[[pwfile],15]])),
+ ('export_seed_dfl_wallet', (15,'seed export to mmseed format (default wallet)', [[[pwfile],15]])),
+ ('addrgen_dfl_wallet', (15,'address generation (default wallet)', [[[pwfile],15]])),
+ ('txcreate_dfl_wallet', (15,'transaction creation (default wallet)', [[['addrs'],15]])),
+ ('txsign_dfl_wallet', (15,'transaction signing (default wallet)', [[['rawtx',pwfile],15]])),
+ ('passchg_dfl_wallet', (16,'password, label and hash preset change (default wallet)',[[[pwfile],15]])),
+ ('walletchk_newpass_dfl_wallet', (16,'wallet check with new pw, label and hash preset', [[[pwfile],16]])),
+ ('delete_dfl_wallet', (15,'delete default wallet', [[[pwfile],15]])),
- ('walletgen', (1,'wallet generation', [[['del_dw_run'],15]])),
- ('subwalletgen', (1,'subwallet generation', [[['mmdat'],1]])),
- ('subwalletgen_mnemonic',(1,'subwallet generation (to mnemonic format)',[[['mmdat'],1]])),
-# ('walletchk', (1,'wallet check', [[['mmdat'],1]])),
- ('passchg', (5,'password, label and hash preset change',[[['mmdat',pwfile],1]])),
- ('passchg_keeplabel',(5,'password, label and hash preset change (keep label)',[[['mmdat',pwfile],1]])),
- ('passchg_usrlabel',(5,'password, label and hash preset change (interactive label)',[[['mmdat',pwfile],1]])),
- ('walletchk_newpass',(5,'wallet check with new pw, label and hash preset',[[['mmdat',pwfile],5]])),
- ('addrgen', (1,'address generation', [[['mmdat',pwfile],1]])),
- ('txcreate', (1,'transaction creation', [[['addrs'],1]])),
- ('txbump', (1,'transaction fee bumping (no send)',[[['rawtx'],1]])),
- ('txsign', (1,'transaction signing', [[['mmdat','rawtx',pwfile,'txbump'],1]])),
- ('txsend', (1,'transaction sending', [[['sigtx'],1]])),
+ ('walletgen', (1,'wallet generation', [[['del_dw_run'],15]])),
+ ('subwalletgen', (1,'subwallet generation', [[['mmdat'],1]])),
+ ('subwalletgen_mnemonic', (1,'subwallet generation (to mnemonic format)', [[['mmdat'],1]])),
+ # ('walletchk', (1,'wallet check', [[['mmdat'],1]])),
+ ('passchg', (5,'password, label and hash preset change', [[['mmdat',pwfile],1]])),
+ ('passchg_keeplabel',(5,'password, label and hash preset change (keep label)', [[['mmdat',pwfile],1]])),
+ ('passchg_usrlabel', (
+ 5,
+ 'password, label and hash preset change (interactive label)',
+ [
+ [['mmdat',pwfile],1]
+ ]
+ )
+ ),
+ ('walletchk_newpass',(5,'wallet check with new pw, label and hash preset', [[['mmdat',pwfile],5]])),
+ ('addrgen', (1,'address generation', [[['mmdat',pwfile],1]])),
+ ('txcreate', (1,'transaction creation', [[['addrs'],1]])),
+ ('txbump', (1,'transaction fee bumping (no send)', [[['rawtx'],1]])),
+ ('txsign', (1,'transaction signing', [[['mmdat','rawtx',pwfile,'txbump'],1]])),
+ ('txsend', (1,'transaction sending', [[['sigtx'],1]])),
# txdo must go after txsign
- ('txdo', (1,'online transaction', [[['sigtx','mmdat'],1]])),
+ ('txdo', (1,'online transaction', [[['sigtx','mmdat'],1]])),
- ('export_seed', (1,'seed export to mmseed format', [[['mmdat'],1]])),
- ('export_hex', (1,'seed export to hexadecimal format', [[['mmdat'],1]])),
- ('export_mnemonic', (1,'seed export to mmwords format', [[['mmdat'],1]])),
- ('export_bip39', (1,'seed export to bip39 format', [[['mmdat'],1]])),
- ('export_incog', (1,'seed export to mmincog format', [[['mmdat'],1]])),
- ('export_incog_hex',(1,'seed export to mmincog hex format', [[['mmdat'],1]])),
+ ('export_seed', (1,'seed export to mmseed format', [[['mmdat'],1]])),
+ ('export_hex', (1,'seed export to hexadecimal format', [[['mmdat'],1]])),
+ ('export_mnemonic', (1,'seed export to mmwords format', [[['mmdat'],1]])),
+ ('export_bip39', (1,'seed export to bip39 format', [[['mmdat'],1]])),
+ ('export_incog', (1,'seed export to mmincog format', [[['mmdat'],1]])),
+ ('export_incog_hex',(1,'seed export to mmincog hex format', [[['mmdat'],1]])),
('export_incog_hidden',(1,'seed export to hidden mmincog format', [[['mmdat'],1]])),
- ('addrgen_seed', (1,'address generation from mmseed file', [[['mmseed','addrs'],1]])),
- ('addrgen_hex', (1,'address generation from mmhex file', [[['mmhex','addrs'],1]])),
- ('addrgen_mnemonic',(1,'address generation from mmwords file',[[['mmwords','addrs'],1]])),
- ('addrgen_incog', (1,'address generation from mmincog file',[[['mmincog','addrs'],1]])),
- ('addrgen_incog_hex',(1,'address generation from mmincog hex file',[[['mmincox','addrs'],1]])),
+ ('addrgen_seed', (1,'address generation from mmseed file', [[['mmseed','addrs'],1]])),
+ ('addrgen_hex', (1,'address generation from mmhex file', [[['mmhex','addrs'],1]])),
+ ('addrgen_mnemonic',(1,'address generation from mmwords file', [[['mmwords','addrs'],1]])),
+ ('addrgen_incog', (1,'address generation from mmincog file', [[['mmincog','addrs'],1]])),
+ ('addrgen_incog_hex',(1,'address generation from mmincog hex file', [[['mmincox','addrs'],1]])),
('addrgen_incog_hidden',(1,'address generation from hidden mmincog file', [[[hincog_fn,'addrs'],1]])),
- ('keyaddrgen', (1,'key-address file generation', [[['mmdat',pwfile],1]])),
+ ('keyaddrgen', (1,'key-address file generation', [[['mmdat',pwfile],1]])),
('txsign_keyaddr',(1,'transaction signing with key-address file', [[['akeys.mmenc','rawtx'],1]])),
- ('txcreate_ni', (1,'transaction creation (non-interactive)', [[['addrs'],1]])),
+ ('txcreate_ni', (1,'transaction creation (non-interactive)', [[['addrs'],1]])),
- ('walletgen2',(2,'wallet generation (2), 128-bit seed', [[['del_dw_run'],15]])),
- ('addrgen2', (2,'address generation (2)', [[['mmdat'],2]])),
- ('txcreate2', (2,'transaction creation (2)', [[['addrs'],2]])),
- ('txsign2', (2,'transaction signing, two transactions',[[['mmdat','rawtx'],1],[['mmdat','rawtx'],2]])),
- ('export_mnemonic2', (2,'seed export to mmwords format (2)',[[['mmdat'],2]])),
-
- ('walletgen3',(3,'wallet generation (3)', [[['del_dw_run'],15]])),
- ('addrgen3', (3,'address generation (3)', [[['mmdat'],3]])),
- ('txcreate3', (3,'tx creation with inputs and outputs from two wallets', [[['addrs'],1],[['addrs'],3]])),
- ('txsign3', (3,'tx signing with inputs and outputs from two wallets',[[['mmdat'],1],[['mmdat','rawtx'],3]])),
-
- ('walletgen14', (14,'wallet generation (14)', [[['del_dw_run'],15]],14)),
- ('addrgen14', (14,'address generation (14)', [[['mmdat'],14]])),
+ ('walletgen2',(2,'wallet generation (2), 128-bit seed', [[['del_dw_run'],15]])),
+ ('addrgen2', (2,'address generation (2)', [[['mmdat'],2]])),
+ ('txcreate2', (2,'transaction creation (2)', [[['addrs'],2]])),
+ ('txsign2', (
+ 2,
+ 'transaction signing, two transactions',
+ [
+ [['mmdat','rawtx'],1],
+ [['mmdat','rawtx'],2]
+ ]
+ )
+ ),
+ ('export_mnemonic2', (
+ 2,
+ 'seed export to mmwords format (2)',
+ [
+ [['mmdat'],2]
+ ]
+ )
+ ),
+ ('walletgen3',(3,'wallet generation (3)', [[['del_dw_run'],15]])),
+ ('addrgen3', (3,'address generation (3)', [[['mmdat'],3]])),
+ ('txcreate3', (
+ 3,
+ 'tx creation with inputs and outputs from two wallets',
+ [
+ [['addrs'],1],
+ [['addrs'],3]
+ ]
+ )
+ ),
+ ('txsign3', (
+ 3,
+ 'tx signing with inputs and outputs from two wallets',
+ [
+ [['mmdat'],1],
+ [['mmdat','rawtx'],3]
+ ]
+ )
+ ),
+ ('walletgen14', (14,'wallet generation (14)', [[['del_dw_run'],15]],14)),
+ ('addrgen14', (14,'address generation (14)', [[['mmdat'],14]])),
('keyaddrgen14',(14,'key-address file generation (14)', [[['mmdat'],14]],14)),
- ('walletgen4',(4,'wallet generation (4) (brainwallet)', [[['del_dw_run'],15]])),
- ('addrgen4', (4,'address generation (4)', [[['mmdat'],4]])),
- ('txcreate4', (4,'tx creation with inputs and outputs from four seed sources, key-address file and non-MMGen inputs and outputs', [[['addrs'],1],[['addrs'],2],[['addrs'],3],[['addrs'],4],[['addrs','akeys.mmenc'],14]])),
- ('txsign4', (4,'tx signing with inputs and outputs from incog file, mnemonic file, wallet, brainwallet, key-address file and non-MMGen inputs and outputs', [[['mmincog'],1],[['mmwords'],2],[['mmdat'],3],[['mmbrain','rawtx'],4],[['akeys.mmenc'],14]])),
- ('txdo4', (4,'tx creation,signing and sending with inputs and outputs from four seed sources, key-address file and non-MMGen inputs and outputs', [[['addrs'],1],[['addrs'],2],[['addrs'],3],[['addrs'],4],[['addrs','akeys.mmenc'],14],[['mmincog'],1],[['mmwords'],2],[['mmdat'],3],[['mmbrain','rawtx'],4],[['akeys.mmenc'],14]])), # must go after txsign4
- ('txbump4', (4,'tx fee bump + send with inputs and outputs from four seed sources, key-address file and non-MMGen inputs and outputs', [[['akeys.mmenc'],14],[['mmincog'],1],[['mmwords'],2],[['mmdat'],3],[['akeys.mmenc'],14],[['mmbrain','sigtx','mmdat','txdo'],4]])), # must go after txsign4
+ ('walletgen4',(4,'wallet generation (4) (brainwallet)', [[['del_dw_run'],15]])),
+ ('addrgen4', (4,'address generation (4)', [[['mmdat'],4]])),
+ ('txcreate4', (
+ 4,
+ 'tx creation with inputs and outputs from four seed sources, key-address file '
+ 'and non-MMGen inputs and outputs',
+ [
+ [['addrs'],1],
+ [['addrs'],2],
+ [['addrs'],3],
+ [['addrs'],4],
+ [['addrs','akeys.mmenc'],14]
+ ]
+ )
+ ),
+ ('txsign4', (
+ 4,
+ 'tx signing with inputs and outputs from incog file, mnemonic file, wallet, '
+ 'brainwallet, key-address file and non-MMGen inputs and outputs',
+ [
+ [['mmincog'],1],
+ [['mmwords'],2],
+ [['mmdat'],3],
+ [['mmbrain','rawtx'],4],
+ [['akeys.mmenc'],14]
+ ]
+ )
+ ),
+ ('txdo4', (
+ 4,
+ 'tx creation,signing and sending with inputs and outputs from four seed sources, '
+ 'key-address file and non-MMGen inputs and outputs',
+ [
+ [['addrs'],1],
+ [['addrs'],2],
+ [['addrs'],3],
+ [['addrs'],4],
+ [['addrs','akeys.mmenc'],14],
+ [['mmincog'],1],
+ [['mmwords'],2],
+ [['mmdat'],3],
+ [['mmbrain','rawtx'],4],
+ [['akeys.mmenc'],14]
+ ]
+ )
+ ), # must go after txsign4
+ ('txbump4', (
+ 4,
+ 'tx fee bump + send with inputs and outputs from four seed sources, key-address file '
+ 'and non-MMGen inputs and outputs',
+ [
+ [['akeys.mmenc'],14],
+ [['mmincog'],1],
+ [['mmwords'],2],
+ [['mmdat'],3],
+ [['akeys.mmenc'],14],
+ [['mmbrain','sigtx','mmdat','txdo'],4]
+ ]
+ )
+ ), # must go after txsign4
- ('walletgen5',(20,'wallet generation (5)', [[['del_dw_run'],15]],20)),
- ('addrgen5', (20,'address generation (5)', [[['mmdat'],20]])),
- ('txcreate5', (20,'transaction creation with bad vsize (5)', [[['addrs'],20]])),
- ('txsign5', (20,'transaction signing with bad vsize', [[['mmdat','rawtx'],20]])),
- ('walletgen6',(21,'wallet generation (6)', [[['del_dw_run'],15]],21)),
- ('addrgen6', (21,'address generation (6)', [[['mmdat'],21]])),
+ ('walletgen5',(20,'wallet generation (5)', [[['del_dw_run'],15]],20)),
+ ('addrgen5', (20,'address generation (5)', [[['mmdat'],20]])),
+ ('txcreate5', (20,'transaction creation with bad vsize (5)', [[['addrs'],20]])),
+ ('txsign5', (20,'transaction signing with bad vsize', [[['mmdat','rawtx'],20]])),
+ ('walletgen6',(21,'wallet generation (6)', [[['del_dw_run'],15]],21)),
+ ('addrgen6', (21,'address generation (6)', [[['mmdat'],21]])),
('txcreate6', (21,'transaction creation with corrected vsize (6)', [[['addrs'],21]])),
('txsign6', (21,'transaction signing with corrected vsize', [[['mmdat','rawtx'],21]])),
)
@@ -275,8 +365,10 @@ class TestSuiteMain(TestSuiteBase,TestSuiteShared):
def walletgen(self,del_dw_run='dummy',seed_len=None,gen_dfl_wallet=False):
self.write_to_tmpfile(pwfile,self.wpasswd+'\n')
args = ['-p1']
- if not gen_dfl_wallet: args += ['-d',self.tmpdir]
- if seed_len: args += ['-l',str(seed_len)]
+ if not gen_dfl_wallet:
+ args += ['-d',self.tmpdir]
+ if seed_len:
+ args += ['-l',str(seed_len)]
t = self.spawn('mmgen-walletgen', args + [self.usr_rand_arg])
t.license()
t.usr_rand(self.usr_rand_chars)
@@ -291,7 +383,8 @@ class TestSuiteMain(TestSuiteBase,TestSuiteShared):
def subwalletgen(self,wf):
args = [self.usr_rand_arg,'-p1','-d',self.tr.trash_dir,'-L','Label']
- if wf != 'default': args += [wf]
+ if wf != 'default':
+ args += [wf]
t = self.spawn('mmgen-subwalletgen', args + ['10s'])
t.license()
wcls = MMGenWallet
@@ -321,10 +414,11 @@ class TestSuiteMain(TestSuiteBase,TestSuiteShared):
silence()
self.write_to_tmpfile( pwfile, get_data_from_file(cfg,pf) )
end_silence()
- add_args = {'cmdline': ['-d',self.tmpdir,'-L','Changed label (UTF-8) α'],
- 'keep': ['-d',self.tr.trash_dir,'--keep-label'],
- 'user': ['-d',self.tr.trash_dir]
- }[label_action]
+ add_args = {
+ 'cmdline': ['-d',self.tmpdir,'-L','Changed label (UTF-8) α'],
+ 'keep': ['-d',self.tr.trash_dir,'--keep-label'],
+ 'user': ['-d',self.tr.trash_dir]
+ }[label_action]
t = self.spawn('mmgen-passchg', add_args + [self.usr_rand_arg, '-p2'] + ([wf] if wf else []))
t.license()
wcls = MMGenWallet
@@ -371,7 +465,8 @@ class TestSuiteMain(TestSuiteBase,TestSuiteShared):
if comment:
comment = ' ' + comment
k = coinaddr.addr_fmt
- if not segwit and k == 'p2sh': k = 'p2pkh'
+ if not segwit and k == 'p2sh':
+ k = 'p2pkh'
s_beg,s_end = { 'p2pkh': ('76a914','88ac'),
'p2sh': ('a914','87'),
'bech32': (self.proto.witness_vernum_hex + '14','') }[k]
@@ -487,17 +582,18 @@ class TestSuiteMain(TestSuiteBase,TestSuiteShared):
return cmd_args + [tx_data[num]['addrfile'] for num in tx_data]
- def txcreate_common(self,
- sources = ['1'],
- non_mmgen_input = '',
- do_label = False,
- txdo_args = [],
- add_args = [],
- view = 'n',
- addrs_per_wallet = addrs_per_wallet,
- non_mmgen_input_compressed = True,
- cmdline_inputs = False,
- tweaks = [] ):
+ def txcreate_common(
+ self,
+ sources = ['1'],
+ non_mmgen_input = '',
+ do_label = False,
+ txdo_args = [],
+ add_args = [],
+ view = 'n',
+ addrs_per_wallet = addrs_per_wallet,
+ non_mmgen_input_compressed = True,
+ cmdline_inputs = False,
+ tweaks = []):
if cfg.verbose or cfg.exact_output:
sys.stderr.write(green('Generating fake tracking wallet info\n'))
@@ -514,9 +610,9 @@ class TestSuiteMain(TestSuiteBase,TestSuiteShared):
from mmgen.tw.shared import TwLabel
cmd_args = [
'--inputs={},{},{},{},{},{}'.format(
- TwLabel(self.proto,dfake[0][self.lbl_id]).mmid,dfake[1]['address'],
- TwLabel(self.proto,dfake[2][self.lbl_id]).mmid,dfake[3]['address'],
- TwLabel(self.proto,dfake[4][self.lbl_id]).mmid,dfake[5]['address']
+ TwLabel(self.proto,dfake[0][self.lbl_id]).mmid, dfake[1]['address'],
+ TwLabel(self.proto,dfake[2][self.lbl_id]).mmid, dfake[3]['address'],
+ TwLabel(self.proto,dfake[4][self.lbl_id]).mmid, dfake[5]['address']
),
f'--outdir={self.tr.trash_dir}'
] + cmd_args[1:]
@@ -570,7 +666,8 @@ class TestSuiteMain(TestSuiteBase,TestSuiteShared):
def txbump(self,txfile,prepend_args=[],seed_args=[]):
if not self.proto.cap('rbf'):
- msg('Skipping RBF'); return 'skip'
+ msg('Skipping RBF')
+ return 'skip'
args = prepend_args + ['--quiet','--outdir='+self.tmpdir,txfile] + seed_args
t = self.spawn('mmgen-txbump',args)
if seed_args:
diff --git a/test/test_py_d/ts_misc.py b/test/test_py_d/ts_misc.py
index d90e8c41..d0e6fe6e 100755
--- a/test/test_py_d/ts_misc.py
+++ b/test/test_py_d/ts_misc.py
@@ -289,10 +289,14 @@ class TestSuiteOutput(TestSuiteBase):
def screen_output(self,lang):
return self.spawn('test/misc/utf8_output.py',[lang],cmd_dir='.')
- def output_gr(self): return self.screen_output('gr')
- def output_ru(self): return self.screen_output('ru')
- def output_zh(self): return self.screen_output('zh')
- def output_jp(self): return self.screen_output('jp')
+ def output_gr(self):
+ return self.screen_output('gr')
+ def output_ru(self):
+ return self.screen_output('ru')
+ def output_zh(self):
+ return self.screen_output('zh')
+ def output_jp(self):
+ return self.screen_output('jp')
def oneshot_warning(self,pexpect_spawn=None):
t = self.spawn('test/misc/oneshot_warning.py',cmd_dir='.',pexpect_spawn=pexpect_spawn)
@@ -352,17 +356,23 @@ class TestSuiteRefTX(TestSuiteMain,TestSuiteBase):
return
return self.spawn('mmgen-addrgen',['--outdir='+self.tmpdir,'--type='+atype,dfl_words_file,'1-2'])
- def ref_tx_addrgen1(self): return self.ref_tx_addrgen(atype='L')
- def ref_tx_addrgen2(self): return self.ref_tx_addrgen(atype='C')
- def ref_tx_addrgen3(self): return self.ref_tx_addrgen(atype='S')
- def ref_tx_addrgen4(self): return self.ref_tx_addrgen(atype='B')
+ def ref_tx_addrgen1(self):
+ return self.ref_tx_addrgen(atype='L')
+ def ref_tx_addrgen2(self):
+ return self.ref_tx_addrgen(atype='C')
+ def ref_tx_addrgen3(self):
+ return self.ref_tx_addrgen(atype='S')
+ def ref_tx_addrgen4(self):
+ return self.ref_tx_addrgen(atype='B')
def ref_tx_txcreate(self,f1,f2,f3,f4):
sources = ['31','32']
- if 'S' in self.proto.mmtypes: sources += ['33']
- if 'B' in self.proto.mmtypes: sources += ['34']
+ if 'S' in self.proto.mmtypes:
+ sources += ['33']
+ if 'B' in self.proto.mmtypes:
+ sources += ['34']
return self.txcreate_common(
- addrs_per_wallet = 2,
- sources = sources,
- add_args = ['--locktime=1320969600'],
- do_label = True )
+ addrs_per_wallet = 2,
+ sources = sources,
+ add_args = ['--locktime=1320969600'],
+ do_label = True)
diff --git a/test/test_py_d/ts_ref.py b/test/test_py_d/ts_ref.py
index 09c94872..73ae166e 100755
--- a/test/test_py_d/ts_ref.py
+++ b/test/test_py_d/ts_ref.py
@@ -229,13 +229,13 @@ class TestSuiteRef(TestSuiteBase,TestSuiteShared):
def ref_addrfile_chk(
self,
- ftype = 'addr',
- coin = None,
- subdir = None,
- pfx = None,
- mmtype = None,
- id_key = None,
- pat = None ):
+ ftype = 'addr',
+ coin = None,
+ subdir = None,
+ pfx = None,
+ mmtype = None,
+ id_key = None,
+ pat = None):
pat = pat or f'{self.nw_desc}.*Legacy'
af_key = f'ref_{ftype}file' + ('_' + id_key if id_key else '')
@@ -272,22 +272,35 @@ class TestSuiteRef(TestSuiteBase,TestSuiteShared):
def ref_passwdfile_chk(self,key,pat):
return self.ref_addrfile_chk(ftype='passwd',id_key=key,pat=pat)
- def ref_passwdfile_chk_b58_20(self): return self.ref_passwdfile_chk(key='b58_20',pat=r'Base58.*len.* 20\b')
- def ref_passwdfile_chk_b58_10(self): return self.ref_passwdfile_chk(key='b58_10',pat=r'Base58.*len.* 10\b')
- def ref_passwdfile_chk_b32_24(self): return self.ref_passwdfile_chk(key='b32_24',pat=r'Base32.*len.* 24\b')
- def ref_passwdfile_chk_b32_12(self): return self.ref_passwdfile_chk(key='b32_12',pat=r'Base32.*len.* 12\b')
- def ref_passwdfile_chk_hex_32(self): return self.ref_passwdfile_chk(key='hex_32',pat=r'Hexadec.*len.* 32\b')
- def ref_passwdfile_chk_hex_48(self): return self.ref_passwdfile_chk(key='hex_48',pat=r'Hexadec.*len.* 48\b')
- def ref_passwdfile_chk_hex_64(self): return self.ref_passwdfile_chk(key='hex_64',pat=r'Hexadec.*len.* 64\b')
- def ref_passwdfile_chk_bip39_12(self): return self.ref_passwdfile_chk(key='bip39_12',pat=r'BIP39.*len.* 12\b')
- def ref_passwdfile_chk_bip39_18(self): return self.ref_passwdfile_chk(key='bip39_18',pat=r'BIP39.*len.* 18\b')
- def ref_passwdfile_chk_bip39_24(self): return self.ref_passwdfile_chk(key='bip39_24',pat=r'BIP39.*len.* 24\b')
- def ref_passwdfile_chk_xmrseed_25(self): return self.ref_passwdfile_chk(key='xmrseed_25',pat=r'Mon.*len.* 25\b')
- def ref_passwdfile_chk_hex2bip39_12(self): return self.ref_passwdfile_chk(key='hex2bip39_12',pat=r'BIP39.*len.* 12\b')
+ def ref_passwdfile_chk_b58_20(self):
+ return self.ref_passwdfile_chk(key='b58_20',pat=r'Base58.*len.* 20\b')
+ def ref_passwdfile_chk_b58_10(self):
+ return self.ref_passwdfile_chk(key='b58_10',pat=r'Base58.*len.* 10\b')
+ def ref_passwdfile_chk_b32_24(self):
+ return self.ref_passwdfile_chk(key='b32_24',pat=r'Base32.*len.* 24\b')
+ def ref_passwdfile_chk_b32_12(self):
+ return self.ref_passwdfile_chk(key='b32_12',pat=r'Base32.*len.* 12\b')
+ def ref_passwdfile_chk_hex_32(self):
+ return self.ref_passwdfile_chk(key='hex_32',pat=r'Hexadec.*len.* 32\b')
+ def ref_passwdfile_chk_hex_48(self):
+ return self.ref_passwdfile_chk(key='hex_48',pat=r'Hexadec.*len.* 48\b')
+ def ref_passwdfile_chk_hex_64(self):
+ return self.ref_passwdfile_chk(key='hex_64',pat=r'Hexadec.*len.* 64\b')
+ def ref_passwdfile_chk_bip39_12(self):
+ return self.ref_passwdfile_chk(key='bip39_12',pat=r'BIP39.*len.* 12\b')
+ def ref_passwdfile_chk_bip39_18(self):
+ return self.ref_passwdfile_chk(key='bip39_18',pat=r'BIP39.*len.* 18\b')
+ def ref_passwdfile_chk_bip39_24(self):
+ return self.ref_passwdfile_chk(key='bip39_24',pat=r'BIP39.*len.* 24\b')
+ def ref_passwdfile_chk_xmrseed_25(self):
+ return self.ref_passwdfile_chk(key='xmrseed_25',pat=r'Mon.*len.* 25\b')
+ def ref_passwdfile_chk_hex2bip39_12(self):
+ return self.ref_passwdfile_chk(key='hex2bip39_12',pat=r'BIP39.*len.* 12\b')
def ref_tx_chk(self):
fn = self.sources['ref_tx_file'][self.proto.coin.lower()][bool(self.tn_ext)]
- if not fn: return
+ if not fn:
+ return
tf = joinpath(ref_dir,self.ref_subdir,fn)
wf = dfl_words_file
self.write_to_tmpfile(pwfile,wpasswd)
diff --git a/test/test_py_d/ts_ref_3seed.py b/test/test_py_d/ts_ref_3seed.py
index 95330033..6cc52cfa 100755
--- a/test/test_py_d/ts_ref_3seed.py
+++ b/test/test_py_d/ts_ref_3seed.py
@@ -192,12 +192,18 @@ class TestSuiteRef3Seed(TestSuiteBase,TestSuiteShared):
fn )
return t
- def ref_walletconv_words(self): return self.ref_walletconv(ofmt='mn')
- def ref_walletconv_bip39(self): return self.ref_walletconv(ofmt='bip39')
- def ref_walletconv_seed(self): return self.ref_walletconv(ofmt='mmseed')
- def ref_walletconv_hexseed(self): return self.ref_walletconv(ofmt='mmhex')
- def ref_walletconv_plainhexseed(self): return self.ref_walletconv(ofmt='hex')
- def ref_walletconv_dieroll(self): return self.ref_walletconv(ofmt='dieroll')
+ def ref_walletconv_words(self):
+ return self.ref_walletconv(ofmt='mn')
+ def ref_walletconv_bip39(self):
+ return self.ref_walletconv(ofmt='bip39')
+ def ref_walletconv_seed(self):
+ return self.ref_walletconv(ofmt='mmseed')
+ def ref_walletconv_hexseed(self):
+ return self.ref_walletconv(ofmt='mmhex')
+ def ref_walletconv_plainhexseed(self):
+ return self.ref_walletconv(ofmt='hex')
+ def ref_walletconv_dieroll(self):
+ return self.ref_walletconv(ofmt='dieroll')
def ref_walletconv_incog(self,ofmt='incog',ext='mmincog'):
args = ['-r0','-p1']
@@ -370,31 +376,44 @@ class TestSuiteRef3Addr(TestSuiteRef3Seed):
pf = joinpath(self.tmpdir,pwfile)
return getattr(self,pfx+'gen')(wf,pf=pf,check_ref=True,mmtype=mmtype)
- def refaddrgen_legacy(self): return self.call_addrgen('legacy')
- def refaddrgen_compressed(self): return self.call_addrgen('compressed')
- def refaddrgen_segwit(self): return self.call_addrgen('segwit')
- def refaddrgen_bech32(self): return self.call_addrgen('bech32')
+ def refaddrgen_legacy(self):
+ return self.call_addrgen('legacy')
+ def refaddrgen_compressed(self):
+ return self.call_addrgen('compressed')
+ def refaddrgen_segwit(self):
+ return self.call_addrgen('segwit')
+ def refaddrgen_bech32(self):
+ return self.call_addrgen('bech32')
- def refkeyaddrgen_legacy(self): return self.call_addrgen('legacy','keyaddr')
- def refkeyaddrgen_compressed(self): return self.call_addrgen('compressed','keyaddr')
- def refkeyaddrgen_segwit(self): return self.call_addrgen('segwit','keyaddr')
- def refkeyaddrgen_bech32(self): return self.call_addrgen('bech32','keyaddr')
+ def refkeyaddrgen_legacy(self):
+ return self.call_addrgen('legacy','keyaddr')
+ def refkeyaddrgen_compressed(self):
+ return self.call_addrgen('compressed','keyaddr')
+ def refkeyaddrgen_segwit(self):
+ return self.call_addrgen('segwit','keyaddr')
+ def refkeyaddrgen_bech32(self):
+ return self.call_addrgen('bech32','keyaddr')
def pwgen(self,ftype,id_str,pwfmt=None,pwlen=None,extra_args=[],stdout=False):
wf = self.get_file_with_ext('mmdat')
pf = joinpath(self.tmpdir,pwfile)
pwfmt = (['--passwd-fmt='+pwfmt] if pwfmt else [])
pwlen = (['--passwd-len='+str(pwlen)] if pwlen else [])
- return self.addrgen(wf, pf,
- check_ref = True,
- ftype = ftype,
- id_str = id_str,
- extra_args = pwfmt + pwlen + extra_args,
- stdout = stdout )
+ return self.addrgen(
+ wf,
+ pf,
+ check_ref = True,
+ ftype = ftype,
+ id_str = id_str,
+ extra_args = pwfmt + pwlen + extra_args,
+ stdout = stdout)
- def refpasswdgen(self): return self.pwgen('pass','alice@crypto.org')
- def refpasswdgen_half(self): return self.pwgen('pass','alice@crypto.org',pwlen='h')
- def ref_b32passwdgen(self): return self.pwgen('pass32','фубар@crypto.org','b32',17)
+ def refpasswdgen(self):
+ return self.pwgen('pass','alice@crypto.org')
+ def refpasswdgen_half(self):
+ return self.pwgen('pass','alice@crypto.org',pwlen='h')
+ def ref_b32passwdgen(self):
+ return self.pwgen('pass32','фубар@crypto.org','b32',17)
def ref_hexpasswdgen(self):
pwlen = {'1':32,'2':48,'3':64}[self.test_name[-1]]
@@ -411,8 +430,13 @@ class TestSuiteRef3Addr(TestSuiteRef3Seed):
ea = ['--accept-defaults']
return self.pwgen(ftype,'фубар@crypto.org',pwfmt,pwlen,ea,stdout=stdout)
- def ref_bip39_12_passwdgen(self): return self.mn_pwgen(12,'bip39',stdout=True)
- def ref_bip39_18_passwdgen(self): return self.mn_pwgen(18,'bip39',stdout=True)
- def ref_bip39_24_passwdgen(self): return self.mn_pwgen(24,'bip39')
- def ref_hex2bip39_24_passwdgen(self): return self.mn_pwgen(24,'hex2bip39')
- def ref_xmrseed_25_passwdgen(self): return self.mn_pwgen(24,'xmrseed',ftype='passxmrseed')
+ def ref_bip39_12_passwdgen(self):
+ return self.mn_pwgen(12,'bip39',stdout=True)
+ def ref_bip39_18_passwdgen(self):
+ return self.mn_pwgen(18,'bip39',stdout=True)
+ def ref_bip39_24_passwdgen(self):
+ return self.mn_pwgen(24,'bip39')
+ def ref_hex2bip39_24_passwdgen(self):
+ return self.mn_pwgen(24,'hex2bip39')
+ def ref_xmrseed_25_passwdgen(self):
+ return self.mn_pwgen(24,'xmrseed',ftype='passxmrseed')
diff --git a/test/test_py_d/ts_regtest.py b/test/test_py_d/ts_regtest.py
index f16c1ea0..265b172c 100755
--- a/test/test_py_d/ts_regtest.py
+++ b/test/test_py_d/ts_regtest.py
@@ -410,14 +410,17 @@ class TestSuiteRegtest(TestSuiteBase,TestSuiteShared):
('bob_auto_chg_addrtype4', 'creating an automatic change address transaction by addrtype (single address)'),
('bob_add_comment_uua1', 'adding a comment for unused address in tracking wallet (C)'),
('bob_auto_chg5', 'creating an auto-chg-address TX, skipping unused address with label (C)'),
- ('bob_auto_chg_addrtype5', 'creating an auto-chg-address TX by addrtype, skipping unused address with label (C)'),
+ ('bob_auto_chg_addrtype5', 'creating an auto-chg-address TX by addrtype, skipping unused address '
+ 'with label (C)'),
('bob_auto_chg6', 'creating an auto-chg-address TX, using unused address with label (C)'),
- ('bob_auto_chg_addrtype6', 'creating an auto-chg-address TX by addrtype, using unused address with label (C)'),
+ ('bob_auto_chg_addrtype6', 'creating an auto-chg-address TX by addrtype, using unused address with '
+ 'label (C)'),
('bob_remove_comment_uua1', 'removing a comment for unused address in tracking wallet (C)'),
- ('bob_auto_chg_bad1', 'error handling for auto change address transaction (bad ID FFFFFFFF:C)'),
- ('bob_auto_chg_bad2', 'error handling for auto change address transaction (bad ID 00000000:C)'),
- ('bob_auto_chg_bad3', 'error handling for auto change address transaction (no unused addresses)'),
- ('bob_auto_chg_bad4', 'error handling for auto change address transaction by addrtype (no unused addresses)'),
+ ('bob_auto_chg_bad1', 'error handling for auto change address transaction (bad ID FFFFFFFF:C)'),
+ ('bob_auto_chg_bad2', 'error handling for auto change address transaction (bad ID 00000000:C)'),
+ ('bob_auto_chg_bad3', 'error handling for auto change address transaction (no unused addresses)'),
+ ('bob_auto_chg_bad4', 'error handling for auto change address transaction by addrtype '
+ '(no unused addresses)'),
('carol_twimport2', 'recreating Carol’s tracking wallet from JSON dump'),
('carol_rescan_blockchain', 'rescanning the blockchain (full rescan)'),
('carol_auto_chg1', 'creating an automatic change address transaction (C)'),
@@ -427,7 +430,8 @@ class TestSuiteRegtest(TestSuiteBase,TestSuiteShared):
('carol_auto_chg_addrtype2', 'creating an automatic change address transaction by addrtype (B)'),
('carol_auto_chg_addrtype3', 'creating an automatic change address transaction by addrtype (S)'),
('carol_auto_chg_bad1', 'error handling for auto change address transaction (no unused addresses)'),
- ('carol_auto_chg_bad2', 'error handling for auto change address transaction by addrtype (no unused addresses)'),
+ ('carol_auto_chg_bad2', 'error handling for auto change address transaction by addrtype '
+ '(no unused addresses)'),
('carol_delete_wallet', 'unloading and deleting Carol’s tracking wallet'),
),
}
@@ -467,7 +471,8 @@ class TestSuiteRegtest(TestSuiteBase,TestSuiteShared):
if use_comments:
a.set_comment(idx,get_comment())
else:
- if n % 2: a.set_comment(idx,f'Test address {n}')
+ if n % 2:
+ a.set_comment(idx,f'Test address {n}')
a.file.format(add_comments=True)
from mmgen.fileutil import write_data_to_file
write_data_to_file(
@@ -482,8 +487,10 @@ class TestSuiteRegtest(TestSuiteBase,TestSuiteShared):
def setup(self):
stop_test_daemons(self.proto.network_id,force=True,remove_datadir=True)
from shutil import rmtree
- try: rmtree(joinpath(self.tr.data_dir,'regtest'))
- except: pass
+ try:
+ rmtree(joinpath(self.tr.data_dir,'regtest'))
+ except:
+ pass
t = self.spawn('mmgen-regtest',['-n','setup'])
for s in ('Starting','Creating','Creating','Creating','Mined','Setup complete'):
t.expect(s)
@@ -507,8 +514,10 @@ class TestSuiteRegtest(TestSuiteBase,TestSuiteShared):
t.written_to_file(capfirst(dfl_wcls.desc))
return t
- def walletgen_bob(self): return self.walletgen('bob')
- def walletgen_alice(self): return self.walletgen('alice')
+ def walletgen_bob(self):
+ return self.walletgen('bob')
+ def walletgen_alice(self):
+ return self.walletgen('alice')
def _user_dir(self,user,coin=None):
return joinpath(self.tr.data_dir,'regtest',coin or self.proto.coin.lower(),user)
@@ -527,27 +536,45 @@ class TestSuiteRegtest(TestSuiteBase,TestSuiteShared):
end_silence()
return w.seed.subseed(subseed_idx).sid
- def addrgen(self,user,wf=None,addr_range='1-5',subseed_idx=None,mmtypes=[]):
+ def addrgen(
+ self,
+ user,
+ wf = None,
+ addr_range = '1-5',
+ subseed_idx = None,
+ mmtypes = []):
from mmgen.addr import MMGenAddrType
for mmtype in mmtypes or self.proto.mmtypes:
- t = self.spawn('mmgen-addrgen',
+ t = self.spawn(
+ 'mmgen-addrgen',
['--quiet','--'+user,'--type='+mmtype,f'--outdir={self._user_dir(user)}'] +
([wf] if wf else []) +
(['--subwallet='+subseed_idx] if subseed_idx else []) +
[addr_range],
- extra_desc='({})'.format( MMGenAddrType.mmtypes[mmtype].name ))
+ extra_desc = '({})'.format( MMGenAddrType.mmtypes[mmtype].name ))
t.passphrase(dfl_wcls.desc,rt_pw)
t.written_to_file('Addresses')
ok_msg()
t.skip_ok = True
return t
- def addrgen_bob(self): return self.addrgen('bob')
- def addrgen_alice(self): return self.addrgen('alice')
+ def addrgen_bob(self):
+ return self.addrgen('bob')
+ def addrgen_alice(self):
+ return self.addrgen('alice')
- def addrimport(self,user,sid=None,addr_range='1-5',num_addrs=5,mmtypes=[],batch=True,quiet=True):
+ def addrimport(
+ self,
+ user,
+ sid = None,
+ addr_range = '1-5',
+ num_addrs = 5,
+ mmtypes = [],
+ batch = True,
+ quiet = True):
id_strs = { 'legacy':'', 'compressed':'-C', 'segwit':'-S', 'bech32':'-B' }
- if not sid: sid = self._user_sid(user)
+ if not sid:
+ sid = self._user_sid(user)
from mmgen.addr import MMGenAddrType
for mmtype in mmtypes or self.proto.mmtypes:
desc = MMGenAddrType.mmtypes[mmtype].name
@@ -577,8 +604,10 @@ class TestSuiteRegtest(TestSuiteBase,TestSuiteShared):
t.skip_ok = True
return t
- def addrimport_bob(self): return self.addrimport('bob')
- def addrimport_alice(self): return self.addrimport('alice',batch=False,quiet=False)
+ def addrimport_bob(self):
+ return self.addrimport('bob')
+ def addrimport_alice(self):
+ return self.addrimport('alice',batch=False,quiet=False)
def bob_import_miner_addr(self):
if not self.deterministic:
@@ -663,7 +692,8 @@ class TestSuiteRegtest(TestSuiteBase,TestSuiteShared):
t.expect(r'{}\b.*\D{}\b'.format(*chk),regex=True)
return t
- def bob_twview1(self): return self.user_twview('bob', chk = ('1',rtAmts[0]) )
+ def bob_twview1(self):
+ return self.user_twview('bob', chk = ('1',rtAmts[0]) )
def user_bal(self,user,bal,args=['showempty=1'],skip_check=False):
t = self.spawn('mmgen-tool',['--'+user,'listaddresses'] + args)
@@ -723,8 +753,10 @@ class TestSuiteRegtest(TestSuiteBase,TestSuiteShared):
sid = self._get_user_subsid(user,subseed_idx)
return self.addrimport(user,sid=sid,mmtypes=['C'])
- def bob_subwallet_addrimport1(self): return self.subwallet_addrimport('bob','29L')
- def bob_subwallet_addrimport2(self): return self.subwallet_addrimport('bob','127S')
+ def bob_subwallet_addrimport1(self):
+ return self.subwallet_addrimport('bob','29L')
+ def bob_subwallet_addrimport2(self):
+ return self.subwallet_addrimport('bob','127S')
def bob_subwallet_fund(self):
sid1 = self._get_user_subsid('bob','29L')
@@ -840,10 +872,14 @@ class TestSuiteRegtest(TestSuiteBase,TestSuiteShared):
)
return t
- def bob_0conf0_getbalance(self): return self.bob_getbalance(rtBals_gb['0conf0'],confs=0)
- def bob_0conf1_getbalance(self): return self.bob_getbalance(rtBals_gb['0conf1'],confs=1)
- def bob_1conf1_getbalance(self): return self.bob_getbalance(rtBals_gb['1conf1'],confs=1)
- def bob_1conf2_getbalance(self): return self.bob_getbalance(rtBals_gb['1conf2'],confs=2)
+ def bob_0conf0_getbalance(self):
+ return self.bob_getbalance(rtBals_gb['0conf0'],confs=0)
+ def bob_0conf1_getbalance(self):
+ return self.bob_getbalance(rtBals_gb['0conf1'],confs=1)
+ def bob_1conf1_getbalance(self):
+ return self.bob_getbalance(rtBals_gb['1conf1'],confs=1)
+ def bob_1conf2_getbalance(self):
+ return self.bob_getbalance(rtBals_gb['1conf2'],confs=2)
def bob_nochg_burn(self):
return self.user_txdo('bob',
@@ -863,35 +899,42 @@ class TestSuiteRegtest(TestSuiteBase,TestSuiteShared):
def user_txsend_status(self,user,tx_file,exp1='',exp2='',extra_args=[]):
t = self.spawn('mmgen-txsend',['-d',self.tmpdir,'--'+user,'--status'] + extra_args + [tx_file])
- if exp1: t.expect(exp1,regex=True)
- if exp2: t.expect(exp2,regex=True)
+ if exp1:
+ t.expect(exp1,regex=True)
+ if exp2:
+ t.expect(exp2,regex=True)
return t
- def user_txdo( self, user, fee, outputs_cl, outputs_list,
- extra_args = [],
- wf = None,
- do_label = False,
- bad_locktime = False,
- full_tx_view = False,
- menu = ['M'],
- skip_passphrase = False,
- used_chg_addr_resp = None ):
+ def user_txdo(
+ self,
+ user,
+ fee,
+ outputs_cl,
+ outputs_list,
+ extra_args = [],
+ wf = None,
+ bad_locktime = False,
+ full_tx_view = False,
+ menu = ['M'],
+ skip_passphrase = False,
+ used_chg_addr_resp = None):
t = self.spawn('mmgen-txdo',
['-d',self.tmpdir,'-B','--'+user] +
(['--fee='+fee] if fee else []) +
extra_args + ([],[wf])[bool(wf)] + outputs_cl)
- self.txcreate_ui_common(t,
- caller = 'txdo',
- menu = menu,
- inputs = outputs_list,
- file_desc = 'Signed transaction',
- interactive_fee = (tx_fee,'')[bool(fee)],
- add_comment = tx_comment_jp,
- view = 't',
- save = True,
- used_chg_addr_resp = used_chg_addr_resp )
+ self.txcreate_ui_common(
+ t,
+ caller = 'txdo',
+ menu = menu,
+ inputs = outputs_list,
+ file_desc = 'Signed transaction',
+ interactive_fee = (tx_fee,'')[bool(fee)],
+ add_comment = tx_comment_jp,
+ view = 't',
+ save = True,
+ used_chg_addr_resp = used_chg_addr_resp)
if not skip_passphrase:
t.passphrase(dfl_wcls.desc,rt_pw)
@@ -962,7 +1005,16 @@ class TestSuiteRegtest(TestSuiteBase,TestSuiteShared):
outputs_cl = self._create_tx_outputs('bob',(('L',1,''),)) # bob_sid:L:1
return self.user_txdo('alice',None,outputs_cl,'1') # fee=None
- def user_txbump(self,user,outdir,txfile,fee,add_args=[],has_label=True,signed_tx=True,one_output=False):
+ def user_txbump(
+ self,
+ user,
+ outdir,
+ txfile,
+ fee,
+ add_args = [],
+ has_label = True,
+ signed_tx = True,
+ one_output = False):
if not self.proto.cap('rbf'):
return 'skip'
t = self.spawn('mmgen-txbump',
@@ -1163,7 +1215,7 @@ class TestSuiteRegtest(TestSuiteBase,TestSuiteShared):
expect = (),
expect2 = (),
warn_used = False,
- non_segwit_ok = False ):
+ non_segwit_ok = False):
if not (non_segwit_ok or self.proto.cap('segwit')):
return 'skip'
@@ -1301,7 +1353,12 @@ class TestSuiteRegtest(TestSuiteBase,TestSuiteShared):
self.write_to_tmpfile( fn, json.dumps(text,indent=4) )
return 'ok'
- def carol_twimport(self,rpc_backend='http',add_parms=[],expect_str=None,expect_str2='Found 1 unspent output'):
+ def carol_twimport(
+ self,
+ rpc_backend = 'http',
+ add_parms = [],
+ expect_str = None,
+ expect_str2 = 'Found 1 unspent output'):
from mmgen.tw.json import TwJSON
fn = joinpath( self.tmpdir, TwJSON.Base(cfg,self.proto).dump_fn )
t = self.spawn(
@@ -1433,8 +1490,10 @@ class TestSuiteRegtest(TestSuiteBase,TestSuiteShared):
sid = self._user_sid('alice')
return self._user_chk_comment('alice',sid+':C:1','Replacement Label',extra_args=['age_fmt=block'])
- def alice_edit_comment1(self): return self.user_edit_comment('alice','4',tw_comment_lat_cyr_gr)
- def alice_edit_comment2(self): return self.user_edit_comment('alice','3',tw_comment_zh)
+ def alice_edit_comment1(self):
+ return self.user_edit_comment('alice','4',tw_comment_lat_cyr_gr)
+ def alice_edit_comment2(self):
+ return self.user_edit_comment('alice','3',tw_comment_zh)
def alice_chk_comment3(self):
sid = self._user_sid('alice')
@@ -1706,7 +1765,15 @@ class TestSuiteRegtest(TestSuiteBase,TestSuiteShared):
return 'skip'
return self.generate()
- def _usr_auto_chg(self,user,mmtype,idx,by_mmtype=False,include_dest=True,by_addrtype=False,ignore_labels=False):
+ def _usr_auto_chg(
+ self,
+ user,
+ mmtype,
+ idx,
+ by_mmtype = False,
+ include_dest = True,
+ by_addrtype = False,
+ ignore_labels = False):
if mmtype in ('S','B') and not self.proto.cap('segwit'):
return 'skip'
sid = self._user_sid('bob')
diff --git a/test/test_py_d/ts_seedsplit.py b/test/test_py_d/ts_seedsplit.py
index 58d80e3c..fad9a12d 100755
--- a/test/test_py_d/ts_seedsplit.py
+++ b/test/test_py_d/ts_seedsplit.py
@@ -96,8 +96,10 @@ class TestSuiteSeedSplit(TestSuiteBase):
return t
def ss_splt(self,tdir,ofmt,spec,add_args=[],wf=None,master=None):
- try: os.mkdir(self.get_tmp_subdir(tdir))
- except: pass
+ try:
+ os.mkdir(self.get_tmp_subdir(tdir))
+ except:
+ pass
t = self.spawn('mmgen-seedsplit',
['-q','-d',self.get_tmp_subdir(tdir),'-r0','-o',ofmt]
+ (['-L',(spec or 'label')] if ofmt == 'w' else [])
@@ -123,7 +125,16 @@ class TestSuiteSeedSplit(TestSuiteBase):
t.written_to_file(capfirst(ocls.desc))
return t
- def ss_join(self,tdir,ofmt,in_exts,add_args=[],sid=None,bad_invocation=False,master=None,id_str=None):
+ def ss_join(
+ self,
+ tdir,
+ ofmt,
+ in_exts,
+ add_args = [],
+ sid = None,
+ bad_invocation = False,
+ master = None,
+ id_str = None):
td = self.get_tmp_subdir(tdir)
shares = [get_file_with_ext(td,f) for f in in_exts]
if not sid:
@@ -166,30 +177,46 @@ class TestSuiteSeedSplit(TestSuiteBase):
sid = self.read_from_tmpfile('dfl.sid')
return os.path.join(self.tmpdir,tdir,sid+suf+'.hincog') + ',123'
- def ss_2way_A_dfl1(self): return self.ss_splt('2way_dfl1','w','1:2')
- def ss_2way_B_dfl1(self): return self.ss_splt('2way_dfl1','bip39','2:2')
- def ss_2way_join_dfl1(self): return self.ss_join('2way_dfl1','w',['mmdat','bip39'])
+ def ss_2way_A_dfl1(self):
+ return self.ss_splt('2way_dfl1','w','1:2')
+ def ss_2way_B_dfl1(self):
+ return self.ss_splt('2way_dfl1','bip39','2:2')
+ def ss_2way_join_dfl1(self):
+ return self.ss_join('2way_dfl1','w',['mmdat','bip39'])
- def ss_2way_A_dfl2(self): return self.ss_splt('2way_dfl2','seed','default:1:2')
+ def ss_2way_A_dfl2(self):
+ return self.ss_splt('2way_dfl2','seed','default:1:2')
def ss_2way_B_dfl2(self):
return self.ss_splt('2way_dfl2','hincog','default:2:2',['-J',self.get_hincog_arg('2way_dfl2')])
def ss_2way_join_dfl2(self):
return self.ss_join('2way_dfl2','mmhex',['mmseed'],['-H',self.get_hincog_arg('2way_dfl2')])
- def ss_2way_A_alice(self): return self.ss_splt('2way_alice','w','alice:1:2')
- def ss_2way_B_alice(self): return self.ss_splt('2way_alice','mmhex','alice:2:2')
- def ss_2way_join_alice(self): return self.ss_join('2way_alice','seed',['mmdat','mmhex'])
- def ss_2way_join_alice_mix(self): return self.ss_join('2way_alice','seed',['mmhex','mmdat'])
+ def ss_2way_A_alice(self):
+ return self.ss_splt('2way_alice','w','alice:1:2')
+ def ss_2way_B_alice(self):
+ return self.ss_splt('2way_alice','mmhex','alice:2:2')
+ def ss_2way_join_alice(self):
+ return self.ss_join('2way_alice','seed',['mmdat','mmhex'])
+ def ss_2way_join_alice_mix(self):
+ return self.ss_join('2way_alice','seed',['mmhex','mmdat'])
- def ss_2way_A_dfl_usw(self): return self.ss_splt('2way_dfl_usw','words','1:2',[],wf=ref_wf)
- def ss_2way_B_dfl_usw(self): return self.ss_splt('2way_dfl_usw','incog','2:2',[],wf=ref_wf)
- def ss_2way_join_dfl_usw(self): return self.ss_join('2way_dfl_usw','mmhex',['mmwords','mmincog'],sid=ref_sid)
+ def ss_2way_A_dfl_usw(self):
+ return self.ss_splt('2way_dfl_usw','words','1:2',[],wf=ref_wf)
+ def ss_2way_B_dfl_usw(self):
+ return self.ss_splt('2way_dfl_usw','incog','2:2',[],wf=ref_wf)
+ def ss_2way_join_dfl_usw(self):
+ return self.ss_join('2way_dfl_usw','mmhex',['mmwords','mmincog'],sid=ref_sid)
- def ss_3way_A_dfl(self): return self.ss_splt('3way_dfl','words','1:3')
- def ss_3way_B_dfl(self): return self.ss_splt('3way_dfl','incog_hex','2:3')
- def ss_3way_C_dfl(self): return self.ss_splt('3way_dfl','bip39','3:3')
- def ss_3way_join_dfl(self): return self.ss_join('3way_dfl','mmhex',['mmwords','mmincox','bip39'])
- def ss_3way_join_dfl_mix(self): return self.ss_join('3way_dfl','mmhex',['bip39','mmwords','mmincox'])
+ def ss_3way_A_dfl(self):
+ return self.ss_splt('3way_dfl','words','1:3')
+ def ss_3way_B_dfl(self):
+ return self.ss_splt('3way_dfl','incog_hex','2:3')
+ def ss_3way_C_dfl(self):
+ return self.ss_splt('3way_dfl','bip39','3:3')
+ def ss_3way_join_dfl(self):
+ return self.ss_join('3way_dfl','mmhex',['mmwords','mmincox','bip39'])
+ def ss_3way_join_dfl_mix(self):
+ return self.ss_join('3way_dfl','mmhex',['bip39','mmwords','mmincox'])
def ss_2way_A_dfl_master3(self):
return self.ss_splt('2way_dfl_master3','w','',master=3)
diff --git a/test/test_py_d/ts_shared.py b/test/test_py_d/ts_shared.py
index 61a07452..c5a44d90 100755
--- a/test/test_py_d/ts_shared.py
+++ b/test/test_py_d/ts_shared.py
@@ -31,22 +31,24 @@ from .common import ref_bw_file,ref_bw_hash_preset,ref_dir
class TestSuiteShared(object):
'shared methods for the test.py test suite'
- def txcreate_ui_common(self,t,
- caller = None,
- menu = [],
- inputs = '1',
- file_desc = 'Unsigned transaction',
- input_sels_prompt = 'to spend',
- bad_input_sels = False,
- interactive_fee = '',
- fee_desc = 'transaction fee',
- fee_info_pat = None,
- add_comment = '',
- view = 't',
- save = True,
- tweaks = [],
+ def txcreate_ui_common(
+ self,
+ t,
+ caller = None,
+ menu = [],
+ inputs = '1',
+ file_desc = 'Unsigned transaction',
+ input_sels_prompt = 'to spend',
+ bad_input_sels = False,
+ interactive_fee = '',
+ fee_desc = 'transaction fee',
+ fee_info_pat = None,
+ add_comment = '',
+ view = 't',
+ save = True,
+ tweaks = [],
used_chg_addr_resp = None,
- auto_chg_addr = None ):
+ auto_chg_addr = None):
txdo = (caller or self.test_name)[:4] == 'txdo'
@@ -106,7 +108,9 @@ class TestSuiteShared(object):
return t
- def txsign_ui_common(self,t,
+ def txsign_ui_common(
+ self,
+ t,
caller = None,
view = 't',
add_comment = '',
@@ -114,7 +118,7 @@ class TestSuiteShared(object):
ni = False,
save = True,
do_passwd = False,
- has_label = False ):
+ has_label = False):
txdo = (caller or self.test_name)[:4] == 'txdo'
@@ -130,7 +134,9 @@ class TestSuiteShared(object):
return t
- def txsend_ui_common(self,t,
+ def txsend_ui_common(
+ self,
+ t,
caller = None,
view = 'n',
add_comment = '',
@@ -138,7 +144,7 @@ class TestSuiteShared(object):
confirm_send = True,
bogus_send = True,
quiet = False,
- has_label = False ):
+ has_label = False):
txdo = (caller or self.test_name)[:4] == 'txdo'
@@ -167,7 +173,10 @@ class TestSuiteShared(object):
t.written_to_file('Signed transaction' + (' #' + tnum if tnum else ''), oo=True)
return t
- def txsign(self,wf,txfile,
+ def txsign(
+ self,
+ wf,
+ txfile,
pf = '',
bumpf = '',
save = True,
@@ -175,7 +184,7 @@ class TestSuiteShared(object):
extra_opts = [],
extra_desc = '',
view = 'n',
- dfl_wallet = False ):
+ dfl_wallet = False):
opts = extra_opts + ['-d',self.tmpdir,txfile] + ([wf] if wf else [])
t = self.spawn('mmgen-txsign', opts, extra_desc)
t.license()
@@ -197,7 +206,15 @@ class TestSuiteShared(object):
add_args = [f'-l{self.seed_len}', f'-p{ref_bw_hash_preset}']
return self.walletchk(wf,pf=None,add_args=add_args,sid=self.ref_bw_seed_id)
- def walletchk(self,wf,pf,wcls=None,add_args=[],sid=None,extra_desc='',dfl_wallet=False):
+ def walletchk(
+ self,
+ wf,
+ pf,
+ wcls = None,
+ add_args = [],
+ sid = None,
+ extra_desc = '',
+ dfl_wallet = False):
hp = self.hash_preset if hasattr(self,'hash_preset') else '1'
wcls = wcls or get_wallet_cls(ext=get_extension(wf))
t = self.spawn('mmgen-walletchk',
@@ -215,20 +232,23 @@ class TestSuiteShared(object):
cmp_or_die(chk,sid)
return t
- def addrgen(self,wf,
- pf = None,
+ def addrgen(
+ self,
+ wf,
+ pf = None,
check_ref = False,
ftype = 'addr',
id_str = None,
extra_args = [],
mmtype = None,
stdout = False,
- dfl_wallet = False ):
+ dfl_wallet = False):
passgen = ftype[:4] == 'pass'
if not mmtype and not passgen:
mmtype = self.segwit_mmtype
cmd_pfx = (ftype,'pass')[passgen]
- t = self.spawn(f'mmgen-{cmd_pfx}gen',
+ t = self.spawn(
+ f'mmgen-{cmd_pfx}gen',
['-d',self.tmpdir] + extra_args +
([],['--type='+str(mmtype)])[bool(mmtype)] +
([],['--stdout'])[stdout] +
@@ -246,8 +266,9 @@ class TestSuiteShared(object):
t.expect('Encrypt password list? (y/N): ','N')
t.read() if stdout else t.written_to_file(('Addresses','Password list')[passgen])
if check_ref:
- chk_ref = (self.chk_data[self.test_name] if passgen else
- self.chk_data[self.test_name][self.fork][self.proto.testnet])
+ chk_ref = (
+ self.chk_data[self.test_name] if passgen else
+ self.chk_data[self.test_name][self.fork][self.proto.testnet])
cmp_or_die(chk,chk_ref,desc=f'{ftype}list data checksum')
return t
diff --git a/test/test_py_d/ts_tool.py b/test/test_py_d/ts_tool.py
index fc36a1be..eb72de06 100755
--- a/test/test_py_d/ts_tool.py
+++ b/test/test_py_d/ts_tool.py
@@ -53,9 +53,7 @@ class TestSuiteTool(TestSuiteMain,TestSuiteBase):
t = self.spawn(
'mmgen-tool',
['-d',self.tmpdir,'-r0','rand2file','rand2file.out',nbytes],
- extra_desc='({} byte{})'.format(
- nbytes,
- suf(parse_bytespec(nbytes)) )
+ extra_desc='({} byte{})'.format( nbytes, suf(parse_bytespec(nbytes)) )
)
t.expect('random data written to file')
t.read()
diff --git a/test/test_py_d/ts_wallet.py b/test/test_py_d/ts_wallet.py
index ff4eda1a..24a34e7c 100755
--- a/test/test_py_d/ts_wallet.py
+++ b/test/test_py_d/ts_wallet.py
@@ -100,13 +100,18 @@ class TestSuiteWalletConv(TestSuiteBase,TestSuiteShared):
def ref_mn_conv(self,ext='mmwords'):
wf = joinpath(ref_dir,self.seed_id+'.'+ext)
- return self.walletconv_in(wf,oo=True)
+ return self.walletconv_in(wf)
- def ref_bip39_conv(self): return self.ref_mn_conv(ext='bip39')
- def ref_seed_conv(self): return self.ref_mn_conv(ext='mmseed')
- def ref_hex_conv(self): return self.ref_mn_conv(ext='mmhex')
- def ref_plainhex_conv(self): return self.ref_mn_conv(ext='hex')
- def ref_dieroll_conv(self): return self.ref_mn_conv(ext='b6d')
+ def ref_bip39_conv(self):
+ return self.ref_mn_conv(ext='bip39')
+ def ref_seed_conv(self):
+ return self.ref_mn_conv(ext='mmseed')
+ def ref_hex_conv(self):
+ return self.ref_mn_conv(ext='mmhex')
+ def ref_plainhex_conv(self):
+ return self.ref_mn_conv(ext='hex')
+ def ref_dieroll_conv(self):
+ return self.ref_mn_conv(ext='b6d')
def ref_brain_conv(self):
uopts = ['-i','bw','-p','1','-l',str(self.seed_len)]
@@ -133,15 +138,24 @@ class TestSuiteWalletConv(TestSuiteBase,TestSuiteShared):
def ref_hincog_conv_old(self):
return self.ref_hincog_conv(wfk='hic_wallet_old',add_uopts=['-O'])
- def ref_wallet_conv_out(self): return self.walletconv_out('w')
- def ref_mn_conv_out(self): return self.walletconv_out('mn')
- def ref_bip39_conv_out(self): return self.walletconv_out('bip39')
- def ref_seed_conv_out(self): return self.walletconv_out('seed')
- def ref_hex_conv_out(self): return self.walletconv_out('hexseed')
- def ref_plainhex_conv_out(self): return self.walletconv_out('hex')
- def ref_dieroll_conv_out(self): return self.walletconv_out('dieroll')
- def ref_incog_conv_out(self): return self.walletconv_out('i')
- def ref_incox_conv_out(self): return self.walletconv_out('xi')
+ def ref_wallet_conv_out(self):
+ return self.walletconv_out('w')
+ def ref_mn_conv_out(self):
+ return self.walletconv_out('mn')
+ def ref_bip39_conv_out(self):
+ return self.walletconv_out('bip39')
+ def ref_seed_conv_out(self):
+ return self.walletconv_out('seed')
+ def ref_hex_conv_out(self):
+ return self.walletconv_out('hexseed')
+ def ref_plainhex_conv_out(self):
+ return self.walletconv_out('hex')
+ def ref_dieroll_conv_out(self):
+ return self.walletconv_out('dieroll')
+ def ref_incog_conv_out(self):
+ return self.walletconv_out('i')
+ def ref_incox_conv_out(self):
+ return self.walletconv_out('xi')
def ref_hincog_conv_out(self,ic_f=None):
if not ic_f:
@@ -196,10 +210,11 @@ class TestSuiteWalletConv(TestSuiteBase,TestSuiteShared):
t.p.wait()
# back check of result
msg('' if cfg.profile else ' OK')
- return self.walletchk( wf,
- pf = None,
- extra_desc = '(check)',
- sid = self.seed_id )
+ return self.walletchk(
+ wf,
+ pf = None,
+ extra_desc = '(check)',
+ sid = self.seed_id)
def walletconv_out(self,out_fmt='w',uopts=[],uopts_chk=[]):
wcls = get_wallet_cls(fmt_code=out_fmt)
@@ -226,9 +241,10 @@ class TestSuiteWalletConv(TestSuiteBase,TestSuiteShared):
add_args += uopts_chk
wf = None
msg('' if cfg.profile else ' OK')
- return self.walletchk( wf,
- pf = pf,
- wcls = wcls,
- extra_desc = '(check)',
- sid = self.seed_id,
- add_args = add_args )
+ return self.walletchk(
+ wf,
+ pf = pf,
+ wcls = wcls,
+ extra_desc = '(check)',
+ sid = self.seed_id,
+ add_args = add_args)
diff --git a/test/test_py_d/ts_xmr_autosign.py b/test/test_py_d/ts_xmr_autosign.py
index dff8cda4..7df716dd 100755
--- a/test/test_py_d/ts_xmr_autosign.py
+++ b/test/test_py_d/ts_xmr_autosign.py
@@ -277,7 +277,15 @@ class TestSuiteXMRAutosign(TestSuiteXMRWallet,TestSuiteAutosignBase):
get_file_with_ext(self.asi.xmr_tx_dir,'sigtx',delete_all=True)
return self._create_transfer_tx('0.257')
- def _xmr_autosign_op(self,op,desc=None,dtype=None,ext=None,wallet_arg=None,add_opts=[],wait_signed=False):
+ def _xmr_autosign_op(
+ self,
+ op,
+ desc = None,
+ dtype = None,
+ ext = None,
+ wallet_arg = None,
+ add_opts = [],
+ wait_signed = False):
if wait_signed:
oqmsg_r(gray(f'→ offline wallet{"s" if dtype.endswith("s") else ""} signing {dtype}'))
while True:
@@ -330,7 +338,10 @@ class TestSuiteXMRAutosign(TestSuiteXMRWallet,TestSuiteAutosignBase):
return self._submit_transfer_tx( ext='sigtx' )
def resubmit_transfer_tx1(self):
- return self._submit_transfer_tx( relay_parm=self.tx_relay_daemon_proxy_parm, op='resubmit', check_bal=False )
+ return self._submit_transfer_tx(
+ relay_parm = self.tx_relay_daemon_proxy_parm,
+ op = 'resubmit',
+ check_bal = False)
def submit_transfer_tx2(self):
return self._submit_transfer_tx( relay_parm=self.tx_relay_daemon_parm )
diff --git a/test/test_py_d/ts_xmrwallet.py b/test/test_py_d/ts_xmrwallet.py
index 6ab7e860..731b2cda 100755
--- a/test/test_py_d/ts_xmrwallet.py
+++ b/test/test_py_d/ts_xmrwallet.py
@@ -160,9 +160,12 @@ class TestSuiteXMRWallet(TestSuiteBase):
def port_in_use(port):
import socket
- try: socket.create_connection(('localhost',port)).close()
- except: return False
- else: return True
+ try:
+ socket.create_connection(('localhost',port)).close()
+ except:
+ return False
+ else:
+ return True
def start_proxy():
if external_call or not cfg.no_daemon_autostart:
@@ -355,8 +358,10 @@ class TestSuiteXMRWallet(TestSuiteBase):
t.skip_ok = True
return t
- def create_wallets_miner(self): return self.create_wallets('miner')
- def create_wallets_alice(self): return self.create_wallets('alice')
+ def create_wallets_miner(self):
+ return self.create_wallets('miner')
+ def create_wallets_alice(self):
+ return self.create_wallets('alice')
def create_wallets(self,user,wallet=None,add_opts=[],op='create'):
assert wallet is None or is_int(wallet), 'wallet arg'
@@ -510,13 +515,17 @@ class TestSuiteXMRWallet(TestSuiteBase):
assert bal_chk_func(n,*amts), f'balance check for wallet {n} failed!'
return t
- def do_op(self, op, user, arg2,
+ def do_op(
+ self,
+ op,
+ user,
+ arg2,
tx_relay_parm = None,
no_relay = False,
return_amt = False,
reuse_acct = False,
add_desc = None,
- do_ret = False ):
+ do_ret = False):
data = self.users[user]
cmd_opts = list_gen(
@@ -635,7 +644,8 @@ class TestSuiteXMRWallet(TestSuiteBase):
min_bal = XMRAmt('0.9')
for i in range(4):
- if i: ok()
+ if i:
+ ok()
get_file_with_ext(self.users['alice'].udir,'sigtx',delete_all=True)
send_amt = self.do_op(
'sweep','alice','2:1,3', # '2:1,3'
@@ -834,7 +844,9 @@ class TestSuiteXMRWallet(TestSuiteBase):
for count in range(max_iterations):
bal_info = await get_balance(dest,count)
- if h > height_threshold and (dest.test(bal_info) is True or ( chk_bal_chg and bal_info.ub != bal_info_start.ub )):
+ if h > height_threshold and (
+ dest.test(bal_info) is True or (chk_bal_chg and bal_info.ub != bal_info_start.ub)
+ ):
imsg('')
oqmsg_r('+')
print_balance(dest,bal_info)
diff --git a/test/tooltest.py b/test/tooltest.py
index 69ac5c83..124f6bbc 100755
--- a/test/tooltest.py
+++ b/test/tooltest.py
@@ -239,7 +239,8 @@ class MMGenToolTestUtils(object):
tool_args +
kwargs.split()
)
- if extra_msg: extra_msg = f'({extra_msg})'
+ if extra_msg:
+ extra_msg = f'({extra_msg})'
full_name = ' '.join([name.lower()]+add_opts+kwargs.split()+extra_msg.split())
if not silent:
if cfg.verbose:
@@ -252,8 +253,11 @@ class MMGenToolTestUtils(object):
out = cp.stdout
err = cp.stderr
if cfg.debug:
- try: dmsg(err.decode())
- except: dmsg(repr(err))
+ from test.include.common import dmsg
+ try:
+ dmsg(err.decode())
+ except:
+ dmsg(repr(err))
if not binary:
out = out.decode()
if cp.returncode != 0:
@@ -272,7 +276,8 @@ class MMGenToolTestUtils(object):
vmsg('Out: ' + repr(ret))
def cmp_equal(a,b):
return (a.lstrip('0') == b.lstrip('0')) if strip_hex else (a == b)
- if cmp_equal(ret,idata): ok()
+ if cmp_equal(ret,idata):
+ ok()
else:
die(4, "Error: values don't match:\nIn: {!r}\nOut: {!r}".format(idata,ret))
return ret
@@ -298,9 +303,11 @@ class MMGenToolTestUtils(object):
if chkdata:
cmp_or_die(ret,chkdata)
return
- if Return: return ret
+ if Return:
+ return ret
else:
- if not hush: ok()
+ if not hush:
+ ok()
else:
die(4,f'Error for command {name!r}')
@@ -317,10 +324,13 @@ class MMGenToolTestUtils(object):
tu = MMGenToolTestUtils()
def ok_or_die(val,chk_func,s,skip_ok=False):
- try: ret = chk_func(val)
- except: ret = False
+ try:
+ ret = chk_func(val)
+ except:
+ ret = False
if ret:
- if not skip_ok: ok()
+ if not skip_ok:
+ ok()
else:
die(4,f'Returned value {val!r} is not a {s}')
@@ -367,22 +377,24 @@ class MMGenToolTestCmds(object):
cmp_or_die(iaddr,ret)
ok()
def hex2wif(self,name,f1,f2,f3,f4):
- for n,fi,fo,k in ((1,f1,f2,''),(2,f3,f4,compressed)):
+ for fi,fo,k in (
+ (f1,f2,''),
+ (f3,f4,compressed)):
ao = ['--type='+k] if k else []
ret = tu.run_cmd_chk(name,fi,fo,add_opts=ao)
def addr2pubhash(self,name,f1,f2,f3,f4):
for n,f,m,ao in (
- (1,f1,'',[]),
- (2,f2,'from {}'.format( compressed or 'uncompressed' ),[]),
- (4,f4,'',type_bech32_arg),
+ (1,f1,'',[]),
+ (2,f2,'from {}'.format( compressed or 'uncompressed' ),[]),
+ (4,f4,'',type_bech32_arg),
):
addr = read_from_file(f).split()[-1]
tu.run_cmd_out(name,addr,fn_idx=n,add_opts=ao,extra_msg=m)
def pubhash2addr(self,name,f1,f2,f3,f4,f5,f6,f7,f8):
for n,fi,fo,m,ao in (
- (1,f1,f2,'',[]),
- (2,f3,f4,'from {}'.format( compressed or 'uncompressed' ),[]),
- (4,f7,f8,'',type_bech32_arg)
+ (1,f1,f2,'',[]),
+ (2,f3,f4,'from {}'.format( compressed or 'uncompressed' ),[]),
+ (4,f7,f8,'',type_bech32_arg)
):
tu.run_cmd_chk(name,fi,fo,add_opts=ao,extra_msg=m)
def privhex2pubhex(self,name,f1,f2,f3): # from Hex2wif
@@ -435,10 +447,14 @@ class MMGenToolTestCmds(object):
def mn2hex(self,name,f1,f2,f3,f4,f5,f6):
for f_i,f_o,m in ((f1,f2,'128-bit'),(f3,f4,'192-bit'),(f5,f6,'256-bit')):
tu.run_cmd_chk(name,f_i,f_o,extra_msg=m,strip_hex=True)
- def mn_rand128(self,name): tu.run_cmd_out(name)
- def mn_rand192(self,name): tu.run_cmd_out(name)
- def mn_rand256(self,name): tu.run_cmd_out(name)
- def mn_stats(self,name): tu.run_cmd_out(name)
+ def mn_rand128(self,name):
+ tu.run_cmd_out(name)
+ def mn_rand192(self,name):
+ tu.run_cmd_out(name)
+ def mn_rand256(self,name):
+ tu.run_cmd_out(name)
+ def mn_stats(self,name):
+ tu.run_cmd_out(name)
def mn_printlist(self,name):
tu.run_cmd(name,[])
ok()
@@ -488,7 +504,8 @@ try:
for cmd in cmd_data:
msg('Running tests for {}:'.format( cmd_data[cmd]['desc'] ))
do_cmds(cmd)
- if cmd is not list(cmd_data.keys())[-1]: msg('')
+ if cmd is not list(cmd_data.keys())[-1]:
+ msg('')
except KeyboardInterrupt:
die(1,green('\nExiting at user request'))
diff --git a/test/tooltest2.py b/test/tooltest2.py
index 8ee59658..264c869c 100755
--- a/test/tooltest2.py
+++ b/test/tooltest2.py
@@ -341,7 +341,10 @@ tests = {
],
'hash256': [
( ['deadbeef'], 'e107944e77a688feae4c2d4db5951923812dd0f72026a11168104ee1b248f8a9' ),
- ( ['000000000000000000000000000000000000000000'], 'fd5181fcd097a334ab340569e5edcd09f702fef7994abab01f4b66e86b32ebbe' ),
+ (
+ ['000000000000000000000000000000000000000000'],
+ 'fd5181fcd097a334ab340569e5edcd09f702fef7994abab01f4b66e86b32ebbe'
+ ),
( [''], '5df6e0e2761359d30a8275058e299fcc0381534545f55cf43e41983f5d4c9456' ),
( ['ffffffffffffffff'], '57b2d2c3455e0f76c61c5237ff04fc9fc0f3fe691e587ea9c951949e1a5e0fed' ),
],
@@ -824,8 +827,10 @@ def check_output(out,chk):
if isinstance(out,str):
out = out.encode()
err_fs = "Output ({!r}) doesn't match expected output ({!r})"
- try: outd = out.decode()
- except: outd = None
+ try:
+ outd = out.decode()
+ except:
+ outd = None
if type(chk).__name__ == 'function':
assert chk(outd), f'{chk.__name__}({outd}) failed!'
diff --git a/test/unit_tests_d/ut_addrlist.py b/test/unit_tests_d/ut_addrlist.py
index de704edc..4ac4b42f 100755
--- a/test/unit_tests_d/ut_addrlist.py
+++ b/test/unit_tests_d/ut_addrlist.py
@@ -14,7 +14,14 @@ from mmgen.passwdlist import PasswordList
from mmgen.protocol import init_proto
from ..include.common import cfg,qmsg,vmsg
-def do_test(list_type,chksum,idx_spec=None,pw_id_str=None,add_kwargs=None,coin=None,addrtype=None):
+def do_test(
+ list_type,
+ chksum,
+ idx_spec = None,
+ pw_id_str = None,
+ add_kwargs = None,
+ coin = None,
+ addrtype = None):
qmsg(blue(f'Testing {list_type.__name__}'))
proto = init_proto( cfg, coin or 'btc' )
diff --git a/test/unit_tests_d/ut_addrparse.py b/test/unit_tests_d/ut_addrparse.py
index 0ce628f7..7276c4d1 100755
--- a/test/unit_tests_d/ut_addrparse.py
+++ b/test/unit_tests_d/ut_addrparse.py
@@ -59,10 +59,7 @@ def test_network(proto,addrs):
return pp_fmt({k:(v.hex() if isinstance(v,bytes) else v) for k,v in addr.parsed._asdict().items()})
def print_info(addr):
- vmsg('\n{}\n{}\n{}'.format(
- yellow(addr.addr_fmt),
- cyan(addr),
- fmt_addr_data(addr)))
+ vmsg('\n{}\n{}\n{}'.format(yellow(addr.addr_fmt), cyan(addr), fmt_addr_data(addr)))
msg_r(f'Testing {proto.coin} address parsing...')
vmsg('')
diff --git a/test/unit_tests_d/ut_indexed_dict.py b/test/unit_tests_d/ut_indexed_dict.py
index 75e6fb01..9a31a739 100755
--- a/test/unit_tests_d/ut_indexed_dict.py
+++ b/test/unit_tests_d/ut_indexed_dict.py
@@ -11,12 +11,13 @@ from ..include.common import vmsg
class unit_test(object):
def run_test(self,name,ut):
- bad_msg = ( 'initializing values via constructor',
- 'reassignment to existing key',
- 'item deletion',
- 'item moving',
- 'clearing',
- 'updating' )
+ bad_msg = (
+ 'initializing values via constructor',
+ 'reassignment to existing key',
+ 'item deletion',
+ 'item moving',
+ 'clearing',
+ 'updating')
def bad0(): IndexedDict(arg)
def bad1(): d['a'] = 2
def bad2(): del d['a']
@@ -41,13 +42,19 @@ class unit_test(object):
dict(arg)
for i in range(6):
- try: locals()['bad'+str(i)]()
- except NotImplementedError as e: omsg(e)
- else: odie(i)
+ try:
+ locals()['bad'+str(i)]()
+ except NotImplementedError as e:
+ omsg(e)
+ else:
+ odie(i)
- try: d.key(2)
- except Exception as e: omsg(e)
- else: odie('list index out of range')
+ try:
+ d.key(2)
+ except Exception as e:
+ omsg(e)
+ else:
+ odie('list index out of range')
d['c'] = 3
diff --git a/test/unit_tests_d/ut_lockable.py b/test/unit_tests_d/ut_lockable.py
index ee530daa..cddbefa0 100755
--- a/test/unit_tests_d/ut_lockable.py
+++ b/test/unit_tests_d/ut_lockable.py
@@ -24,7 +24,9 @@ class unit_test(object):
ac.foo = 'new fooval'
ac.foo = 'new fooval2'
- class MyAttrCtrlAutolock(AttrCtrl): pass
+ class MyAttrCtrlAutolock(AttrCtrl):
+ pass
+
aca = MyAttrCtrlAutolock()
class MyAttrCtrlClsCheck(AttrCtrl):
diff --git a/test/unit_tests_d/ut_tx_deserialize.py b/test/unit_tests_d/ut_tx_deserialize.py
index 5eae4570..450a8822 100755
--- a/test/unit_tests_d/ut_tx_deserialize.py
+++ b/test/unit_tests_d/ut_tx_deserialize.py
@@ -39,7 +39,8 @@ async def test_tx(tx_proto,tx_hex,desc,n):
rpc = await rpc_init( cfg, proto=tx_proto, ignore_wallet=True )
d = await rpc.call('decoderawtransaction',tx_hex)
- if has_nonstandard_outputs(d['vout']): return False
+ if has_nonstandard_outputs(d['vout']):
+ return False
dt = DeserializeTX(tx_proto,tx_hex)