various fixes and cleanups

This commit is contained in:
The MMGen Project 2022-06-13 17:30:20 +00:00
commit 5ef346bf99
Signed by: mmgen
GPG key ID: 3F8B1861E32B7DA2
4 changed files with 30 additions and 34 deletions

View file

@ -44,15 +44,14 @@ class BitcoinTwJSON(TwJSON):
return await self.tw.rpc.check_or_create_daemon_wallet(wallet_create=True)
async def get_entries(self):
d = self.data['data']
e_in = [self.entry_tuple_in(*e) for e in d['entries']]
entries_in = [self.entry_tuple_in(*e) for e in self.data['data']['entries']]
return sorted(
[self.entry_tuple(
TwMMGenID(self.proto,d.mmgen_id),
d.address,
getattr(d,'amount',None),
d.comment)
for d in e_in],
for d in entries_in],
key = lambda x: x.mmgen_id.sort_key )
async def do_import(self,batch):

View file

@ -1,5 +1,5 @@
async def erigon_sleep(self):
from ...globalvars import g
if self.proto.network == 'regtest' and g.daemon_id == 'erigon':
if self.proto.network == 'regtest' and self.rpc.daemon.id == 'erigon':
import asyncio
await asyncio.sleep(5)

View file

@ -223,7 +223,7 @@ def test_daemons_ops(*network_ids,op,remove_datadir=False):
silent = not (opt.verbose or opt.exact_output)
ret = False
for network_id in network_ids:
d = CoinDaemon(network_id,test_suite=True,daemon_id=g.daemon_id)
d = CoinDaemon(network_id,test_suite=True)
if remove_datadir:
d.stop(silent=True)
d.remove_datadir()

View file

@ -20,7 +20,7 @@
ts_ethdev.py: Ethdev tests for the test.py test suite
"""
import sys,os,re,shutil
import sys,os,re,shutil,asyncio
from decimal import Decimal
from collections import namedtuple
from subprocess import run,PIPE,DEVNULL
@ -331,16 +331,16 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared):
from mmgen.protocol import init_proto
self.proto = init_proto(g.coin,network='regtest',need_amt=True)
from mmgen.daemon import CoinDaemon
d = CoinDaemon(proto=self.proto,test_suite=True)
self.rpc_port = d.rpc_port
self.daemon_datadir = d.datadir
self.daemon = CoinDaemon(self.proto.coin+'_rt',test_suite=True)
self.using_solc = check_solc_ver()
if not self.using_solc:
omsg(yellow('Using precompiled contract data'))
self.genesis_fn = joinpath(self.tmpdir,'genesis.json')
self.keystore_dir = os.path.relpath(joinpath(self.daemon_datadir,'keystore'))
self.keystore_dir = os.path.relpath(joinpath(self.daemon.datadir,'keystore'))
write_to_file(
joinpath(self.tmpdir,parity_devkey_fn),
@ -357,7 +357,7 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared):
return [
f'--outdir={self.tmpdir}',
f'--coin={self.proto.coin}',
f'--rpc-port={self.rpc_port}',
f'--rpc-port={self.daemon.rpc_port}',
'--quiet'
]
@ -365,6 +365,13 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared):
def eth_args_noquiet(self):
return self.eth_args[:-1]
@property
async def rpc(self):
if not hasattr(self,'_rpc'):
from mmgen.rpc import rpc_init
self._rpc = await rpc_init(self.proto)
return self._rpc
async def setup(self):
self.spawn('',msg_only=True)
@ -373,10 +380,8 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared):
d = CoinDaemon(
self.proto.coin+'_rt',
test_suite = True,
daemon_id = g.daemon_id,
opts = ['devnet_init_bug'] )
d.start()
import asyncio
await asyncio.sleep(1)
d.stop()
await asyncio.sleep(1)
@ -387,33 +392,28 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared):
for d in ('mm1','mm2'):
copytree(os.path.join(srcdir,d),os.path.join(self.tmpdir,d))
from mmgen.daemon import CoinDaemon
d = CoinDaemon(
self.proto.coin + '_rt',
test_suite = True,
daemon_id = g.daemon_id )
d = self.daemon
if g.daemon_id in ('geth','erigon'):
if d.id in ('geth','erigon'):
self.genesis_setup(d)
set_vt100()
# await geth_devnet_init_bug_workaround() # uncomment to enable testing with v1.10.17
if g.daemon_id == 'erigon':
if d.id == 'erigon':
self.write_to_tmpfile('signer_key',self.keystore_data['key']+'\n')
d.usr_coind_args = [
'--miner.sigfile={}'.format(os.path.join(self.tmpdir,'signer_key')),
'--miner.etherbase={}'.format(self.keystore_data['address']) ]
if g.daemon_id in ('geth','erigon'):
if d.id in ('geth','erigon'):
imsg(' {:19} {}'.format('Cmdline:',' '.join(e for e in d.start_cmd if not 'verbosity' in e)))
if not opt.no_daemon_autostart:
if not g.daemon_id in ('geth','erigon'):
if not d.id in ('geth','erigon'):
d.stop(silent=True)
d.remove_datadir()
d.start( silent = not (opt.verbose or opt.exact_output) )
from mmgen.rpc import rpc_init
rpc = await rpc_init(self.proto)
rpc = await self.rpc
imsg(f'Daemon: {rpc.daemon.coind_name} v{rpc.daemon_version_str}')
return 'ok'
@ -685,16 +685,15 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared):
return ec_sign_message_with_privkey(self.message,bytes.fromhex(key),'eth_sign')
async def create_signature_rpc():
from mmgen.rpc import rpc_init
rpc = await rpc_init(self.proto)
addr = self.read_from_tmpfile('signer_addr').strip()
imsg(f'Address: {addr}')
rpc = await self.rpc
return await rpc.call(
'eth_sign',
'0x' + addr,
'0x' + self.message.encode().hex() )
if not g.daemon_id == 'geth':
if not self.daemon.id == 'geth':
return 'skip'
self.spawn('',msg_only=True)
@ -882,8 +881,7 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared):
async def get_tx_receipt(self,txid):
from mmgen.tx import NewTX
tx = await NewTX(proto=self.proto)
from mmgen.rpc import rpc_init
tx.rpc = await rpc_init(self.proto)
tx.rpc = await self.rpc
res = await tx.get_receipt(txid)
imsg(f'Gas sent: {res.gas_sent.hl():<9} {(res.gas_sent*res.gas_price).hl2(encl="()")}')
imsg(f'Gas used: {res.gas_used.hl():<9} {(res.gas_used*res.gas_price).hl2(encl="()")}')
@ -967,6 +965,8 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared):
dfl_devkey,
start_gas = ETHAmt(60000,'wei'),
gasPrice = ETHAmt(8,'Gwei') )
if self.daemon.id == 'geth': # yet another Geth bug
await asyncio.sleep(0.1)
if (await self.get_tx_receipt(txid)).status == 0:
die(2,'Transfer of token funds failed. Aborting')
@ -983,14 +983,11 @@ class TestSuiteEthdev(TestSuiteBase,TestSuiteShared):
usr_mmaddrs[i],
usr_addrs[i] ))
from mmgen.rpc import rpc_init
rpc = await rpc_init(self.proto)
silence()
if op == 'show_bals':
await show_bals(rpc)
await show_bals(await self.rpc)
elif op == 'do_transfer':
await do_transfer(rpc)
await do_transfer(await self.rpc)
end_silence()
return 'ok'