cmdtest.py autosign_automount: add hooks for multi-user support

This commit is contained in:
The MMGen Project 2025-02-24 11:27:48 +00:00
commit 28cecaec08
Signed by: mmgen
GPG key ID: 3F8B1861E32B7DA2
2 changed files with 79 additions and 61 deletions

View file

@ -86,52 +86,19 @@ class CmdTestAutosignAutomount(CmdTestAutosignThreaded, CmdTestRegtest):
self.opts.append('--alice')
def _alice_txcreate(self, chg_addr, opts=[], exit_val=0, expect_str=None, data_arg=None, need_rbf=False):
if need_rbf and not self.proto.cap('rbf'):
return 'skip'
def do_return():
if expect_str:
t.expect(expect_str)
t.read()
self.remove_device_online()
return t
self.insert_device_online()
sid = self._user_sid('alice')
t = self.spawn(
'mmgen-txcreate',
opts
+ ['--alice', '--autosign']
+ ([data_arg] if data_arg else [])
+ [f'{self.burn_addr},1.23456', f'{sid}:{chg_addr}'],
exit_val = exit_val or None)
if exit_val:
return do_return()
t = self.txcreate_ui_common(
t,
inputs = '1',
interactive_fee = '32s',
file_desc = 'Unsigned automount transaction')
return do_return()
def alice_txcreate1(self):
return self._alice_txcreate(
return self._user_txcreate(
'alice',
chg_addr = 'C:5',
data_arg = 'data:'+gr_uc[:24])
def alice_txcreate2(self):
return self._alice_txcreate(chg_addr='L:5')
return self._user_txcreate('alice', chg_addr='L:5')
alice_txcreate3 = alice_txcreate2
def alice_txcreate4(self):
return self._alice_txcreate(chg_addr='L:4', need_rbf=True)
return self._user_txcreate('alice', chg_addr='L:4', need_rbf=True)
def _alice_txsend_abort(self, err=False, send_resp='y', expect=None, shred_expect=[]):
self.insert_device_online()
@ -167,25 +134,25 @@ class CmdTestAutosignAutomount(CmdTestAutosignThreaded, CmdTestRegtest):
alice_txsend_abort5 = alice_txsend_abort2
def alice_txcreate_bad_have_unsigned(self):
return self._alice_txcreate(chg_addr='C:5', exit_val=2, expect_str='already present')
return self._user_txcreate('alice', chg_addr='C:5', exit_val=2, expect_str='already present')
def alice_txcreate_bad_have_unsent(self):
return self._alice_txcreate(chg_addr='C:5', exit_val=2, expect_str='unsent transaction')
return self._user_txcreate('alice', chg_addr='C:5', exit_val=2, expect_str='unsent transaction')
def alice_run_autosign_setup(self):
return self.run_setup(mn_type='default', use_dfl_wallet=True, passwd=rt_pw)
def alice_txsend1(self):
return self._alice_txsend('This one’s worth a comment', no_wait=True)
return self._user_txsend('alice', 'This one’s worth a comment', no_wait=True)
def alice_txsend2(self):
return self._alice_txsend(need_rbf=True)
return self._user_txsend('alice', need_rbf=True)
def alice_txsend3(self):
return self._alice_txsend(need_rbf=True)
return self._user_txsend('alice', need_rbf=True)
def alice_txsend5(self):
return self._alice_txsend(need_rbf=True)
return self._user_txsend('alice', need_rbf=True)
def _alice_txstatus(self, expect, exit_val=None, need_rbf=False):
@ -218,24 +185,6 @@ class CmdTestAutosignAutomount(CmdTestAutosignThreaded, CmdTestRegtest):
def alice_txstatus5(self):
return self._alice_txstatus('in mempool', need_rbf=True)
def _alice_txsend(self, comment=None, no_wait=False, need_rbf=False):
if need_rbf and not self.proto.cap('rbf'):
return 'skip'
if not no_wait:
self._wait_signed('transaction')
self.insert_device_online()
t = self.spawn('mmgen-txsend', ['--alice', '--quiet', '--autosign'])
t.view_tx('t')
t.do_comment(comment)
self._do_confirm_send(t, quiet=True)
t.written_to_file('Sent automount transaction')
t.read()
self.remove_device_online()
return t
def alice_txsend_bad_no_unsent(self):
self.insert_device_online()
t = self.spawn('mmgen-txsend', ['--quiet', '--autosign'], exit_val=2)

View file

@ -441,6 +441,75 @@ class CmdTestAutosignThreaded(CmdTestAutosignBase):
no_insert_check = False
threaded = True
def _user_txcreate(
self,
user,
progname = 'txcreate',
input_handler = None,
chg_addr = None,
opts = [],
output_args = [],
exit_val = 0,
expect_str = None,
data_arg = None,
need_rbf = False):
if output_args:
assert not chg_addr
if chg_addr:
assert not output_args
if need_rbf and not self.proto.cap('rbf'):
return 'skip'
def do_return():
if expect_str:
t.expect(expect_str)
t.read()
self.remove_device_online()
return t
self.insert_device_online()
sid = self._user_sid(user)
t = self.spawn(
f'mmgen-{progname}',
opts
+ [f'--{user}', '--autosign']
+ ([data_arg] if data_arg else [])
+ (output_args or [f'{self.burn_addr},1.23456', f'{sid}:{chg_addr}']),
exit_val = exit_val or None)
if exit_val:
return do_return()
t = (input_handler or self.txcreate_ui_common)(
t,
inputs = '1',
interactive_fee = '32s',
file_desc = 'Unsigned automount transaction')
return do_return()
def _user_txsend(self, user, comment=None, no_wait=False, need_rbf=False):
if need_rbf and not self.proto.cap('rbf'):
return 'skip'
if not no_wait:
self._wait_signed('transaction')
self.insert_device_online()
t = self.spawn('mmgen-txsend', [f'--{user}', '--quiet', '--autosign'])
t.view_tx('t')
t.do_comment(comment)
self._do_confirm_send(t, quiet=True)
t.written_to_file('Sent automount transaction')
t.read()
self.remove_device_online()
return t
def _wait_loop_start(self, add_opts=[]):
t = self.spawn(
'mmgen-autosign',