test.py regtest: whitespace; cleanups in auto_chg test group

This commit is contained in:
The MMGen Project 2023-01-29 16:22:56 +00:00
commit 56a8652620
Signed by: mmgen
GPG key ID: 3F8B1861E32B7DA2
2 changed files with 68 additions and 62 deletions

View file

@ -152,21 +152,22 @@ class TestSuiteRegtest(TestSuiteBase,TestSuiteShared):
deterministic = False
test_rbf = False
cmd_group_in = (
('setup', 'regtest (Bob and Alice) mode setup'),
('subgroup.misc', []),
('subgroup.init_bob', []),
('subgroup.init_alice', []),
('subgroup.fund_users', ['init_bob','init_alice']),
('subgroup.msg', ['init_bob']),
('subgroup.twexport', ['fund_users']),
('subgroup.rescan', ['fund_users']),
('subgroup.main', ['fund_users']),
('subgroup.twprune', ['main']),
('subgroup.txhist', ['main']),
('subgroup.label', ['main']),
('subgroup.view', ['label']),
('subgroup.auto_chg', ['twexport','label']),
('stop', 'stopping regtest daemon'),
('setup', 'regtest (Bob and Alice) mode setup'),
('subgroup.misc', []),
('subgroup.init_bob', []),
('subgroup.init_alice', []),
('subgroup.fund_users', ['init_bob','init_alice']),
('subgroup.msg', ['init_bob']),
('subgroup.twexport', ['fund_users']),
('subgroup.rescan', ['fund_users']),
('subgroup.main', ['fund_users']),
('subgroup.twprune', ['main']),
('subgroup.txhist', ['main']),
('subgroup.label', ['main']),
('subgroup.view', ['label']),
('subgroup._auto_chg_deps', ['twexport','label']),
('subgroup.auto_chg', ['_auto_chg_deps']),
('stop', 'stopping regtest daemon'),
)
cmd_subgroups = {
'misc': (
@ -242,7 +243,7 @@ class TestSuiteRegtest(TestSuiteBase,TestSuiteShared):
),
'main': (
'creating, signing, sending and bumping transactions',
('bob_add_comment', "adding an 80-screen-width label (lat+cyr+gr)"),
('bob_add_comment1', "adding an 80-screen-width label (lat+cyr+gr)"),
('bob_twview1', "viewing Bob's tracking wallet"),
('bob_split1', "splitting Bob's funds"),
('generate', 'mining a block'),
@ -370,10 +371,13 @@ class TestSuiteRegtest(TestSuiteBase,TestSuiteShared):
('generate', 'mining a block'),
('alice_twview_grouped', 'twview (testing ‘grouped’ option for TX and address)'),
),
'_auto_chg_deps': (
'automatic change address selection dependencies',
('bob_auto_chg_split', 'splitting Bob’s funds (auto-chg-addr dependency)'),
('bob_auto_chg_generate', 'mining a block (auto-chg-addr dependency)'),
),
'auto_chg': (
'automatic change address selection',
('bob_split3', 'splitting Bob’s funds'),
('generate', 'mining a block'),
('bob_auto_chg1', 'creating an automatic change address transaction (C)'),
('bob_auto_chg2', 'creating an automatic change address transaction (B)'),
('bob_auto_chg3', 'creating an automatic change address transaction (S)'),
@ -425,6 +429,7 @@ class TestSuiteRegtest(TestSuiteBase,TestSuiteShared):
self.dfl_mmtype = 'C' if self.proto.coin == 'BCH' else 'B'
self.burn_addr = make_burn_addr(self.proto)
self.user_sids = {}
def __del__(self):
os.environ['MMGEN_BOGUS_SEND'] = '1'
@ -479,7 +484,11 @@ class TestSuiteRegtest(TestSuiteBase,TestSuiteShared):
return joinpath(self.tr.data_dir,'regtest',coin or self.proto.coin.lower(),user)
def _user_sid(self,user):
return os.path.basename(get_file_with_ext(self._user_dir(user),'mmdat'))[:8]
if user in self.user_sids:
return self.user_sids[user]
else:
self.user_sids[user] = os.path.basename(get_file_with_ext(self._user_dir(user),'mmdat'))[:8]
return self.user_sids[user]
def _get_user_subsid(self,user,subseed_idx):
fn = get_file_with_ext(self._user_dir(user),dfl_wcls.ext)
@ -1327,7 +1336,7 @@ class TestSuiteRegtest(TestSuiteBase,TestSuiteShared):
t.expect('Removed label.*in tracking wallet',regex=True)
return t
def bob_add_comment(self):
def bob_add_comment1(self):
sid = self._user_sid('bob')
return self.user_add_comment('bob',sid+':C:1',tw_comment_lat_cyr_gr)
@ -1628,7 +1637,7 @@ class TestSuiteRegtest(TestSuiteBase,TestSuiteShared):
msgfile = os.path.join(self.tmpdir,'signatures.json')
)
def bob_split3(self):
def bob_auto_chg_split(self):
if not self.proto.cap('segwit'):
return 'skip'
sid = self._user_sid('bob')
@ -1638,49 +1647,50 @@ class TestSuiteRegtest(TestSuiteBase,TestSuiteShared):
outputs_cl = [sid+':C:5,0.0135', sid+':L:4'],
outputs_list = '1' )
def _usr_auto_chg(self,user,arg,include_dest=True,choices=1):
dest = [self.burn_addr+',0.01'] if include_dest else []
def bob_auto_chg_generate(self):
if not self.proto.cap('segwit'):
return 'skip'
return self.generate()
def _usr_auto_chg(self,user,mmtype,idx,by_mmtype=False,include_dest=True,by_addrtype=False):
if mmtype in ('S','B') and not self.proto.cap('segwit'):
return 'skip'
sid = self._user_sid('bob')
t = self.spawn(
'mmgen-txcreate',
['-d',self.tr.trash_dir,'-B',f'--{user}', arg] + dest)
[f'--outdir={self.tr.trash_dir}', '--no-blank', f'--{user}'] +
[mmtype if by_mmtype else f'{sid}:{mmtype}'] +
([self.burn_addr+',0.01'] if include_dest else [])
)
return self.txcreate_ui_common(t,
menu = [],
inputs = '1',
interactive_fee = '20s',
auto_chg_arg = arg,
auto_chg_choices = choices )
auto_chg_addr = f'{sid}:{mmtype}:{idx}')
def bob_auto_chg1(self):
return self._usr_auto_chg( 'bob', self._user_sid('bob') + ':C' )
return self._usr_auto_chg( 'bob', 'C', '3' )
def bob_auto_chg2(self):
if not self.proto.cap('segwit'):
return 'skip'
return self._usr_auto_chg( 'bob', self._user_sid('bob') + ':B' )
return self._usr_auto_chg( 'bob', 'B', '2' )
def bob_auto_chg3(self):
if not self.proto.cap('segwit'):
return 'skip'
return self._usr_auto_chg( 'bob', self._user_sid('bob') + ':S' )
return self._usr_auto_chg( 'bob', 'S', '1' )
def bob_auto_chg4(self):
return self._usr_auto_chg( 'bob', self._user_sid('bob') + ':C', include_dest=False )
return self._usr_auto_chg( 'bob', 'C', '3', include_dest=False )
def bob_auto_chg_addrtype1(self):
return self._usr_auto_chg( 'bob', 'C', choices=3 )
return self._usr_auto_chg( 'bob', 'C', '3', True )
def bob_auto_chg_addrtype2(self):
if not self.proto.cap('segwit'):
return 'skip'
return self._usr_auto_chg( 'bob', 'B', choices=1 )
return self._usr_auto_chg( 'bob', 'B', '2', True )
def bob_auto_chg_addrtype3(self):
if not self.proto.cap('segwit'):
return 'skip'
return self._usr_auto_chg( 'bob', 'S', choices=1 )
return self._usr_auto_chg( 'bob', 'S', '1', True )
def bob_auto_chg_addrtype4(self):
return self._usr_auto_chg( 'bob', 'C', choices=3, include_dest=False )
return self._usr_auto_chg( 'bob', 'C', '3', True, include_dest=False )
def _usr_auto_chg_bad(self,user,al_id,expect):
t = self.spawn(
@ -1725,30 +1735,22 @@ class TestSuiteRegtest(TestSuiteBase,TestSuiteShared):
return self._usr_rescan_blockchain('carol',[])
def carol_auto_chg1(self):
return self._usr_auto_chg( 'carol', self._user_sid('bob') + ':C' )
return self._usr_auto_chg( 'carol', 'C', '3' )
def carol_auto_chg2(self):
if not self.proto.cap('segwit'):
return 'skip'
return self._usr_auto_chg( 'carol', self._user_sid('bob') + ':B' )
return self._usr_auto_chg( 'carol', 'B', '2' )
def carol_auto_chg3(self):
if not self.proto.cap('segwit'):
return 'skip'
return self._usr_auto_chg( 'carol', self._user_sid('bob') + ':S' )
return self._usr_auto_chg( 'carol', 'S', '1' )
def carol_auto_chg_addrtype1(self):
return self._usr_auto_chg( 'carol', 'C' )
return self._usr_auto_chg( 'carol', 'C', '3', True )
def carol_auto_chg_addrtype2(self):
if not self.proto.cap('segwit'):
return 'skip'
return self._usr_auto_chg( 'carol', 'B' )
return self._usr_auto_chg( 'carol', 'B', '2', True )
def carol_auto_chg_addrtype3(self):
if not self.proto.cap('segwit'):
return 'skip'
return self._usr_auto_chg( 'carol', 'S' )
return self._usr_auto_chg( 'carol', 'S', '1', True )
def carol_auto_chg_bad1(self):
return self._usr_auto_chg_bad(

View file

@ -48,8 +48,7 @@ class TestSuiteShared(object):
save = True,
tweaks = [],
used_chg_addr_resp = None,
auto_chg_arg = None,
auto_chg_choices = 1 ):
auto_chg_addr = None ):
txdo = (caller or self.test_name)[:4] == 'txdo'
@ -60,10 +59,15 @@ class TestSuiteShared(object):
if used_chg_addr_resp is not None:
t.expect('reuse harms your privacy.*:.*',used_chg_addr_resp,regex=True)
if auto_chg_arg is not None:
if auto_chg_choices > 1:
t.expect('Enter a number> ',f'{auto_chg_choices}\n')
t.expect(fr'Using .*{auto_chg_arg}:\d+.* as.*address','y',regex=True)
if auto_chg_addr is not None:
e1 = 'Choose a change address:.*Enter a number> '
e2 = fr'Using .*{auto_chg_addr}.* as.*address'
res = t.expect([e1,e2],regex=True)
if res == 0:
choice = [s.split(')')[0].lstrip() for s in t.p.match[0].split('\n') if auto_chg_addr in s][0]
t.send(f'{choice}\n')
t.expect(e2,regex=True)
t.send('y')
pat = expect_pat
for choice in menu + ['q']: