test.py, autosign, xmrwallet: minor fixes and cleanups
This commit is contained in:
parent
6cf89a85e4
commit
1dd08cd80a
4 changed files with 86 additions and 57 deletions
|
|
@ -152,14 +152,15 @@ class MoneroMMGenTX:
|
|||
)
|
||||
|
||||
fs = """
|
||||
Info for transaction {} [Seed ID: {}. Network: {}]:
|
||||
TxID: {}
|
||||
Signed: {} [{}]
|
||||
Type: {}
|
||||
From: Wallet {}, account {}{}
|
||||
Amount: {} XMR
|
||||
Fee: {} XMR
|
||||
Dest: {}
|
||||
Info for transaction {a} [Seed ID: {b}. Network: {c}]:
|
||||
TxID: {d}
|
||||
Created: {e:19} [{f}]
|
||||
Signed: {g:19} [{h}]
|
||||
Type: {i}
|
||||
From: Wallet {j}, account {k}{l}
|
||||
Amount: {m} XMR
|
||||
Fee: {n} XMR
|
||||
Dest: {o}
|
||||
"""
|
||||
|
||||
pmid = d.dest_address.parsed.payment_id
|
||||
|
|
@ -168,19 +169,21 @@ class MoneroMMGenTX:
|
|||
|
||||
from .util2 import format_elapsed_hr
|
||||
return fmt(fs,strip_char='\t',indent=indent).format(
|
||||
orange(self.base_chksum.upper()),
|
||||
d.seed_id.hl(),
|
||||
yellow(d.network.upper()),
|
||||
d.txid.hl(),
|
||||
make_timestr(d.sign_time),
|
||||
format_elapsed_hr(d.sign_time),
|
||||
blue(capfirst(d.op)),
|
||||
d.source.wallet.hl(),
|
||||
red(f'#{d.source.account}'),
|
||||
to_entry if d.dest else '',
|
||||
d.amount.hl(),
|
||||
d.fee.hl(),
|
||||
d.dest_address.hl(),
|
||||
a = orange(self.base_chksum.upper()),
|
||||
b = d.seed_id.hl(),
|
||||
c = yellow(d.network.upper()),
|
||||
d = d.txid.hl(),
|
||||
e = make_timestr(d.create_time),
|
||||
f = format_elapsed_hr(d.create_time),
|
||||
g = make_timestr(d.sign_time),
|
||||
h = format_elapsed_hr(d.sign_time),
|
||||
i = blue(capfirst(d.op)),
|
||||
j = d.source.wallet.hl(),
|
||||
k = red(f'#{d.source.account}'),
|
||||
l = to_entry if d.dest else '',
|
||||
m = d.amount.hl(),
|
||||
n = d.fee.hl(),
|
||||
o = d.dest_address.hl(),
|
||||
pmid = pink(pmid.hex()) if pmid else None
|
||||
)
|
||||
|
||||
|
|
@ -198,22 +201,28 @@ class MoneroMMGenTX:
|
|||
},
|
||||
cls = json_encoder,
|
||||
)
|
||||
fn = '{}{}-XMR[{!s}]{}.sigtx'.format(
|
||||
self.base_chksum.upper(),
|
||||
(lambda s: f'-{s.upper()}' if s else '')(self.full_chksum),
|
||||
self.data.amount,
|
||||
(lambda s: '' if s == 'mainnet' else f'.{s}')(self.data.network),
|
||||
|
||||
fn = '{a}{b}-XMR[{c!s}]{d}.{e}'.format(
|
||||
a = self.base_chksum.upper(),
|
||||
b = (lambda s: f'-{s.upper()}' if s else '')(self.full_chksum),
|
||||
c = self.data.amount,
|
||||
d = (lambda s: '' if s == 'mainnet' else f'.{s}')(self.data.network),
|
||||
e = self.ext
|
||||
)
|
||||
|
||||
from .fileutil import write_data_to_file
|
||||
write_data_to_file(
|
||||
cfg = self.cfg,
|
||||
outfile = fn,
|
||||
data = out,
|
||||
desc = 'MoneroMMGenTX data',
|
||||
desc = self.desc,
|
||||
ask_write = True,
|
||||
ask_write_default_yes = False )
|
||||
|
||||
class NewSigned(Base):
|
||||
signed = True
|
||||
desc = 'signed transaction data'
|
||||
ext = 'sigtx'
|
||||
|
||||
def __init__(self,*args,**kwargs):
|
||||
|
||||
|
|
@ -434,16 +443,16 @@ class MoneroWalletOps:
|
|||
|
||||
def get_wallet_fn(self,d):
|
||||
return os.path.join(
|
||||
self.cfg.wallet_dir or '.','{}-{}-MoneroWallet{}'.format(
|
||||
self.kal.al_id.sid,
|
||||
d.idx,
|
||||
f'.{self.cfg.network}' if self.cfg.network != 'mainnet' else ''))
|
||||
self.cfg.wallet_dir or '.','{a}-{b}-MoneroWallet{c}'.format(
|
||||
a = self.kal.al_id.sid,
|
||||
b = d.idx,
|
||||
c = f'.{self.cfg.network}' if self.cfg.network != 'mainnet' else ''))
|
||||
|
||||
async def main(self):
|
||||
gmsg('\n{}ing {} wallet{}'.format(
|
||||
self.stem.capitalize(),
|
||||
len(self.addr_data),
|
||||
suf(self.addr_data) ))
|
||||
gmsg('\n{a}ing {b} wallet{c}'.format(
|
||||
a = self.stem.capitalize(),
|
||||
b = len(self.addr_data),
|
||||
c = suf(self.addr_data) ))
|
||||
processed = 0
|
||||
for n,d in enumerate(self.addr_data): # [d.sec,d.addr,d.wallet_passwd,d.viewkey]
|
||||
fn = self.get_wallet_fn(d)
|
||||
|
|
@ -763,12 +772,11 @@ class MoneroWalletOps:
|
|||
|
||||
def post_main(self):
|
||||
d = self.accts_data
|
||||
op = type(self).__name__
|
||||
|
||||
for wnum,k in enumerate(d):
|
||||
if op == 'sync':
|
||||
if self.name == 'sync':
|
||||
self.rpc(self,self.addr_data[wnum]).print_accts( d[k]['accts'], d[k]['addrs'], indent='')
|
||||
elif op == 'list':
|
||||
elif self.name == 'list':
|
||||
fs = ' {:2} {} {} {}'
|
||||
msg('\n' + green(f'Wallet {k}:'))
|
||||
for acct_num,acct in enumerate(d[k]['addrs']):
|
||||
|
|
@ -803,7 +811,8 @@ class MoneroWalletOps:
|
|||
msg(fs.format( 'TOTAL:', fmt_amt(tbals[0]), fmt_amt(tbals[1]) ))
|
||||
|
||||
class list(sync):
|
||||
pass
|
||||
name = 'list'
|
||||
stem = 'sync'
|
||||
|
||||
class spec(wallet): # virtual class
|
||||
|
||||
|
|
|
|||
|
|
@ -87,6 +87,9 @@ else:
|
|||
|
||||
from mmgen.common import *
|
||||
|
||||
from mmgen.devinit import init_dev
|
||||
init_dev()
|
||||
|
||||
try:
|
||||
os.unlink(os.path.join(repo_root,'test.py.err'))
|
||||
except:
|
||||
|
|
|
|||
|
|
@ -80,11 +80,15 @@ class TestSuiteAutosignBase(TestSuiteBase):
|
|||
color = True
|
||||
|
||||
def __init__(self,trunner,cfgs,spawn):
|
||||
|
||||
super().__init__(trunner,cfgs,spawn)
|
||||
|
||||
if trunner == None:
|
||||
return
|
||||
|
||||
if gc.platform == 'win':
|
||||
die(1,f'Test {type(self).__name__} not supported for Windows platform')
|
||||
|
||||
self.network_ids = [c+'_tn' for c in self.daemon_coins] + self.daemon_coins
|
||||
|
||||
if self.simulate and not cfg.exact_output:
|
||||
|
|
@ -151,7 +155,7 @@ class TestSuiteAutosignBase(TestSuiteBase):
|
|||
def make_wallet_bip39(self):
|
||||
return self.make_wallet(mn_type='bip39')
|
||||
|
||||
def make_wallet(self,mn_type=None):
|
||||
def make_wallet(self,mn_type=None,mn_file=None):
|
||||
mn_desc = mn_type or 'default'
|
||||
mn_type = mn_type or 'mmgen'
|
||||
|
||||
|
|
@ -161,13 +165,14 @@ class TestSuiteAutosignBase(TestSuiteBase):
|
|||
([] if mn_desc == 'default' else [f'--mnemonic-fmt={mn_type}']) +
|
||||
['setup'] )
|
||||
|
||||
t.expect('words: ','3')
|
||||
t.expect('OK? (Y/n): ','\n')
|
||||
mn_file = { 'mmgen': dfl_words_file, 'bip39': dfl_bip39_file }[mn_type]
|
||||
mn_file = mn_file or { 'mmgen': dfl_words_file, 'bip39': dfl_bip39_file }[mn_type]
|
||||
mn = read_from_file(mn_file).strip().split()
|
||||
from mmgen.mn_entry import mn_entry
|
||||
entry_mode = 'full'
|
||||
mne = mn_entry( cfg, mn_type, entry_mode )
|
||||
|
||||
t.expect('words: ',{ 12:'1', 18:'2', 24:'3' }[len(mn)])
|
||||
t.expect('OK? (Y/n): ','\n')
|
||||
t.expect('Type a number.*: ',str(mne.entry_modes.index(entry_mode)+1),regex=True)
|
||||
stealth_mnemonic_entry(t,mne,mn,entry_mode)
|
||||
wf = t.written_to_file('Autosign wallet')
|
||||
|
|
@ -298,6 +303,7 @@ class TestSuiteAutosignBase(TestSuiteBase):
|
|||
|
||||
if 'wait' in args:
|
||||
t.expect('Waiting')
|
||||
imsg(purple('\nKilling wait loop!'))
|
||||
t.kill(2)
|
||||
t.req_exit_val = 1
|
||||
else:
|
||||
|
|
|
|||
|
|
@ -43,6 +43,11 @@ class TestSuiteXMRWallet(TestSuiteBase):
|
|||
dfl_random_txs = 3
|
||||
color = True
|
||||
socks_port = 49237
|
||||
user_data = (
|
||||
('miner', '98831F3A', 130, '1-2', []),
|
||||
('bob', '1378FC64', 140, None, ['--restricted-rpc']),
|
||||
('alice', 'FE3C6545', 150, '1-4', []),
|
||||
)
|
||||
|
||||
cmd_group = (
|
||||
('daemon_version', 'checking daemon version'),
|
||||
|
|
@ -196,7 +201,7 @@ class TestSuiteXMRWallet(TestSuiteBase):
|
|||
from mmgen.proto.xmr.daemon import MoneroWalletDaemon
|
||||
from mmgen.proto.xmr.rpc import MoneroRPCClient,MoneroWalletRPCClient
|
||||
self.users = {}
|
||||
n = self.tmpdir_nums[0]
|
||||
tmpdir_num = self.tmpdir_nums[0]
|
||||
ud = namedtuple('user_data',[
|
||||
'sid',
|
||||
'mmwords',
|
||||
|
|
@ -213,12 +218,13 @@ class TestSuiteXMRWallet(TestSuiteBase):
|
|||
'add_coind_args',
|
||||
])
|
||||
# kal_range must be None, a single digit, or a single hyphenated range
|
||||
for user,sid,shift,kal_range,add_coind_args in (
|
||||
('miner', '98831F3A', 130, '1-2', []),
|
||||
('bob', '1378FC64', 140, None, ['--restricted-rpc']),
|
||||
('alice', 'FE3C6545', 150, '1-4', []),
|
||||
):
|
||||
udir = os.path.join('test','tmp',str(n),user)
|
||||
for ( user,
|
||||
sid,
|
||||
shift,
|
||||
kal_range,
|
||||
add_coind_args ) in self.user_data:
|
||||
tmpdir = os.path.join('test','tmp',str(tmpdir_num))
|
||||
udir = os.path.join(tmpdir,user)
|
||||
datadir = os.path.join(self.datadir_base,user)
|
||||
md = CoinDaemon(
|
||||
cfg = cfg,
|
||||
|
|
@ -306,7 +312,7 @@ class TestSuiteXMRWallet(TestSuiteBase):
|
|||
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):
|
||||
def create_wallets(self,user,wallet=None,add_opts=[]):
|
||||
assert wallet is None or is_int(wallet), 'wallet arg'
|
||||
data = self.users[user]
|
||||
run(
|
||||
|
|
@ -316,7 +322,7 @@ class TestSuiteXMRWallet(TestSuiteBase):
|
|||
dir_opt = [f'--wallet-dir={data.udir}']
|
||||
t = self.spawn(
|
||||
'mmgen-xmrwallet',
|
||||
self.extra_opts + dir_opt + [ 'create', data.kafile, (wallet or data.kal_range) ] )
|
||||
self.extra_opts + add_opts + dir_opt + [ 'create', data.kafile, (wallet or data.kal_range) ] )
|
||||
for i in MMGenRange(wallet or data.kal_range).items:
|
||||
write_data_to_file(
|
||||
cfg,
|
||||
|
|
@ -413,7 +419,7 @@ class TestSuiteXMRWallet(TestSuiteBase):
|
|||
def list_wallets_all(self):
|
||||
return self.sync_wallets('alice',op='list')
|
||||
|
||||
def sync_wallets(self,user,op='sync',wallets=None,add_opts=None):
|
||||
def sync_wallets(self,user,op='sync',wallets=None,add_opts=[]):
|
||||
data = self.users[user]
|
||||
cmd_opts = list_gen(
|
||||
[f'--wallet-dir={data.udir}'],
|
||||
|
|
@ -421,7 +427,7 @@ class TestSuiteXMRWallet(TestSuiteBase):
|
|||
)
|
||||
t = self.spawn(
|
||||
'mmgen-xmrwallet',
|
||||
self.extra_opts + cmd_opts + (add_opts or []) + [ op, data.kafile ] + ([wallets] if wallets else []) )
|
||||
self.extra_opts + cmd_opts + add_opts + [ op, data.kafile ] + ([wallets] if wallets else []) )
|
||||
wlist = AddrIdxList(wallets) if wallets else MMGenRange(data.kal_range).items
|
||||
for n,wnum in enumerate(wlist):
|
||||
t.expect('Syncing wallet {}/{} ({})'.format(
|
||||
|
|
@ -468,8 +474,9 @@ class TestSuiteXMRWallet(TestSuiteBase):
|
|||
if return_amt:
|
||||
amt = XMRAmt(strip_ansi_escapes(t.expect_getend('Amount: ')).replace('XMR','').strip())
|
||||
|
||||
t.expect('Save MoneroMMGenTX data? (y/N): ','y')
|
||||
t.written_to_file('MoneroMMGenTX data')
|
||||
dtype = 'signed'
|
||||
t.expect(f'Save {dtype} transaction data? (y/N): ','y')
|
||||
t.written_to_file(f'{dtype.capitalize()} transaction data')
|
||||
|
||||
if not no_relay:
|
||||
t.expect(f'Relay {op} transaction? (y/N): ','y')
|
||||
|
|
@ -574,7 +581,11 @@ class TestSuiteXMRWallet(TestSuiteBase):
|
|||
async def open_wallet_user(self,user,wnum):
|
||||
data = self.users[user]
|
||||
silence()
|
||||
kal = KeyAddrList( cfg, self.proto, data.kafile, key_address_validity_check=False )
|
||||
kal = KeyAddrList(
|
||||
cfg = cfg,
|
||||
proto = self.proto,
|
||||
addrfile = data.kafile,
|
||||
key_address_validity_check = False )
|
||||
end_silence()
|
||||
self.users[user].wd.start(silent=not (cfg.exact_output or cfg.verbose))
|
||||
return data.wd_rpc.call(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue