From 236592c3a68a9d0f5c39a72210f2a69f58c7e8f2 Mon Sep 17 00:00:00 2001 From: The MMGen Project Date: Sun, 10 Oct 2021 20:18:15 +0000 Subject: [PATCH] test.py xmrwallet: fixes and cleanups --- test/test_py_d/ts_xmrwallet.py | 70 ++++++++++++++++++++-------------- 1 file changed, 41 insertions(+), 29 deletions(-) diff --git a/test/test_py_d/ts_xmrwallet.py b/test/test_py_d/ts_xmrwallet.py index f39edb8c..b8505cb5 100755 --- a/test/test_py_d/ts_xmrwallet.py +++ b/test/test_py_d/ts_xmrwallet.py @@ -20,7 +20,7 @@ ts_xmrwallet.py: xmrwallet tests for the test.py test suite """ -import sys,os,atexit,asyncio +import sys,os,atexit,asyncio,shutil from subprocess import run,PIPE from mmgen.globalvars import g @@ -89,11 +89,13 @@ class TestSuiteXMRWallet(TestSuiteBase): if not opt.no_daemon_stop: atexit.register(self.stop_daemons) - atexit.register(self.stop_wallet_daemons) + atexit.register(self.stop_miner_wallet_daemon) if not opt.no_daemon_autostart: + self.stop_daemons() + shutil.rmtree(self.datadir_base,ignore_errors=True) + os.makedirs(self.datadir_base) self.start_daemons() - self.start_wallet_daemons() self.balance = None @@ -113,9 +115,10 @@ class TestSuiteXMRWallet(TestSuiteBase): omsg(f'SSH SOCKS server started, listening at localhost:{self.socks_port}') def kill_proxy(): - omsg(f'Killing SSH SOCKS server at localhost:{self.socks_port}') - cmd = [ 'pkill', '-f', ' '.join(a + b2) ] - run(cmd) + if g.platform == 'linux': + omsg(f'Killing SSH SOCKS server at localhost:{self.socks_port}') + cmd = [ 'pkill', '-f', ' '.join(a + b2) ] + run(cmd) self.use_proxy = False self.socks_port = 9060 @@ -300,10 +303,10 @@ class TestSuiteXMRWallet(TestSuiteBase): return t async def mine_initial_coins(self): + await self.open_wallet_user('miner',1) return await self.mine_chk('miner',1,0,lambda x: x > 20,'unlocked balance > 20') async def fund_alice(self): - await self.open_wallet_user('miner',1) await self.transfer( 'miner', 1234567891234, @@ -403,16 +406,22 @@ class TestSuiteXMRWallet(TestSuiteBase): self.do_op('sweep','alice','2:1',self.tx_relay_daemon_parm) return self.mine_chk('alice',2,1,lambda x: x > 0.9,'unlocked balance > 0.9') - def transfer_to_miner_proxy(self): + async def transfer_to_miner_proxy(self): addr = read_from_file(self.users['miner'].addrfile_fs.format(2)) amt = '0.135' self.do_op('transfer','alice',f'2:1:{addr},{amt}',self.tx_relay_daemon_proxy_parm) - return self.mine_chk('miner',2,0,lambda x: str(x) == amt,f'unlocked balance == {amt}') + await self.stop_wallet_user('miner') + await self.open_wallet_user('miner',2) + await self.mine_chk('miner',2,0,lambda x: str(x) == amt,f'unlocked balance == {amt}') + ok() + return await self.mine_chk('alice',2,1,lambda x: x > 0.9,'unlocked balance > 0.9') - def transfer_to_miner_noproxy(self): + async def transfer_to_miner_noproxy(self): addr = read_from_file(self.users['miner'].addrfile_fs.format(2)) self.do_op('transfer','alice',f'2:1:{addr},0.0995',self.tx_relay_daemon_parm) - return self.mine_chk('miner',2,0,lambda x: str(x) == '0.2345','unlocked balance == 0.2345') + await self.mine_chk('miner',2,0,lambda x: str(x) == '0.2345','unlocked balance == 0.2345') + ok() + return await self.mine_chk('alice',2,1,lambda x: x > 0.9,'unlocked balance > 0.9') def transfer_to_miner_create(self,amt): get_file_with_ext(self.users['alice'].udir,'sigtx',delete_all=True) @@ -440,13 +449,17 @@ class TestSuiteXMRWallet(TestSuiteBase): t.read() t.ok() - def transfer_to_miner_send1(self): + async def transfer_to_miner_send1(self): self.relay_tx(f'--tx-relay-daemon={self.tx_relay_daemon_proxy_parm}',add_desc='via proxy') - return self.mine_chk('miner',2,0,lambda x: str(x) == '0.2456','unlocked balance == 0.2456') + await self.mine_chk('miner',2,0,lambda x: str(x) == '0.2456','unlocked balance == 0.2456') + ok() + return await self.mine_chk('alice',2,1,lambda x: x > 0.9,'unlocked balance > 0.9') - def transfer_to_miner_send2(self): + async def transfer_to_miner_send2(self): self.relay_tx(f'--tx-relay-daemon={self.tx_relay_daemon_parm}',add_desc='no proxy') - return self.mine_chk('miner',2,0,lambda x: str(x) == '0.2468','unlocked balance == 0.2468') + await self.mine_chk('miner',2,0,lambda x: str(x) == '0.2468','unlocked balance == 0.2468') + ok() + return await self.mine_chk('alice',2,1,lambda x: x > 0.9,'unlocked balance > 0.9') async def sweep_create_and_send(self): bal = XMRAmt('0') @@ -463,7 +476,9 @@ class TestSuiteXMRWallet(TestSuiteBase): return_amt = True ) ok() self.relay_tx(f'--tx-relay-daemon={self.tx_relay_daemon_parm}',add_desc=f'send amt: {send_amt} XMR') - bal += await self.mine_chk('alice',3,0,lambda x: 'chk_bal_chg','balance has changed') # 3,0 + await self.mine_chk('alice',2,1,lambda x: 'chk_bal_chg','balance has changed') + ok() + bal += await self.mine_chk('alice',3,0,lambda x,y=bal: x > y, f'bal > {bal}',return_amt=True) if bal >= min_bal: return 'ok' @@ -476,17 +491,14 @@ class TestSuiteXMRWallet(TestSuiteBase): silence() kal = KeyAddrList(self.proto,data.kafile,skip_key_address_validity_check=True) end_silence() - if user != 'miner': - self.users[user].wd.start(silent=not (opt.exact_output or opt.verbose)) + self.users[user].wd.start(silent=not (opt.exact_output or opt.verbose)) return await data.wd_rpc.call( 'open_wallet', filename = os.path.basename(data.walletfile_fs.format(wnum)), password = kal.entry(wnum).wallet_passwd ) - async def close_wallet_user(self,user): - ret = await self.users[user].wd_rpc.call('close_wallet') - if user != 'miner': - self.users[user].wd.stop(silent=not (opt.exact_output or opt.verbose)) + async def stop_wallet_user(self,user): + await self.users[user].wd_rpc.stop_daemon(silent=not (opt.exact_output or opt.verbose)) return 'ok' # mining methods @@ -517,7 +529,7 @@ class TestSuiteXMRWallet(TestSuiteBase): ret = await self.users['miner'].md_rpc.call('stop_mining') return self.get_status(ret) - async def mine_chk(self,user,wnum,account,test,test_desc,random_txs=None): + async def mine_chk(self,user,wnum,account,test,test_desc,random_txs=None,return_amt=False): """ - open destination wallet - optionally create and broadcast random TXs @@ -586,7 +598,8 @@ class TestSuiteXMRWallet(TestSuiteBase): dest = namedtuple( 'dest_info',['user','wnum','account','test','test_desc'])(user,wnum,account,test,test_desc) - await self.open_wallet_user(dest.user,dest.wnum) + if dest.user != 'miner': + await self.open_wallet_user(dest.user,dest.wnum) ub_start = await get_balance(dest,0) chk_bal_chg = dest.test(ub_start) == 'chk_bal_chg' @@ -615,9 +628,10 @@ class TestSuiteXMRWallet(TestSuiteBase): await self.stop_mining() - await self.close_wallet_user(dest.user) + if user != 'miner': + await self.stop_wallet_user(dest.user) - return ub if chk_bal_chg else 'ok' + return ub if return_amt else 'ok' # util methods @@ -639,7 +653,6 @@ class TestSuiteXMRWallet(TestSuiteBase): # daemon start/stop methods def start_daemons(self): - self.stop_daemons() for v in self.users.values(): run(['mkdir','-p',v.datadir]) v.md.start() @@ -648,10 +661,9 @@ class TestSuiteXMRWallet(TestSuiteBase): for v in self.users.values(): if v.md.state != 'stopped': v.md.stop() - run(['rm','-rf',self.datadir_base]) def start_wallet_daemons(self): self.users['miner'].wd.start() - def stop_wallet_daemons(self): + def stop_miner_wallet_daemon(self): self.users['miner'].wd.stop()