diff --git a/mmgen/cfg.py b/mmgen/cfg.py index 5781ade2..f2c91704 100755 --- a/mmgen/cfg.py +++ b/mmgen/cfg.py @@ -86,6 +86,7 @@ class GlobalConstants(Lockable): 'walletgen': _cc(False, False, False, None, [], 'lmw'), 'xmrwallet': _cc(True, True, False, '-rx', ['rpc'], 'lmw'), } + altcoin_cmds = ('swaptxcreate', 'swaptxdo', 'xmrwallet') prog_name = os.path.basename(sys.argv[0]) prog_id = prog_name.removeprefix(f'{proj_id}-') diff --git a/mmgen/tx/online.py b/mmgen/tx/online.py index d59b2d0b..ce7c0125 100755 --- a/mmgen/tx/online.py +++ b/mmgen/tx/online.py @@ -125,8 +125,8 @@ class OnlineSigned(Signed): if idx != '': await asyncio.sleep(1) ret = await self.send_with_node(txhex) - assert ret == coin_txid, f'txid mismatch (after sending) ({ret} != {coin_txid})' msg(f'Transaction sent: {coin_txid.hl()}') + assert ret == coin_txid, f'txid mismatch (after sending) ({ret} != {coin_txid})' sent_status = 'no_confirm_post_send' if cfg.wait and sent_status: diff --git a/test/cmdtest_d/cfgfile.py b/test/cmdtest_d/cfgfile.py index f4323846..17fd30e9 100755 --- a/test/cmdtest_d/cfgfile.py +++ b/test/cmdtest_d/cfgfile.py @@ -209,6 +209,10 @@ class CmdTestCfgFile(CmdTestBase): """ ensure that derived classes explicitly set these variables """ + + if self.cfg.no_altcoin: + return 'skip' + d = [ 'btc_max_tx_fee 1.2345', 'eth_max_tx_fee 5.4321', @@ -224,8 +228,6 @@ class CmdTestCfgFile(CmdTestBase): ('ETH', 'True', '5.4321', True), ('ETC', 'None', '5.4321', False) ): - if self.cfg.no_altcoin and coin != 'BTC': - continue t = self.spawn_test( args = [ f'--coin={coin}', diff --git a/test/cmdtest_d/ethdev.py b/test/cmdtest_d/ethdev.py index 027254e7..4280712a 100755 --- a/test/cmdtest_d/ethdev.py +++ b/test/cmdtest_d/ethdev.py @@ -34,6 +34,7 @@ from ..include.common import ( cfg, check_solc_ver, omsg, + omsg_r, imsg, imsg_r, joinpath, @@ -305,7 +306,8 @@ class CmdTestEthdevMethods: caller = mmgen_cmd, quiet = mmgen_cmd == 'txdo' or not self.cfg.debug, contract_addr = contract_addr, - bogus_send = False) + bogus_send = False, + wait = self.name == 'CmdTestEthBump') if key == 'Token': imsg(f'\nToken MM{num} deployed!') @@ -361,11 +363,15 @@ class CmdTestEthdevMethods: gas = 120000, gasPrice = self.proto.coin_amt(8, from_unit='Gwei')) rpc = await self.rpc + imsg_r('Waiting for transaction receipt: ') for n in range(50): # long delay for txbump rx = await rpc.call('eth_getTransactionReceipt', '0x' + txid) # -> null if pending if rx: + imsg('OK') break await asyncio.sleep(0.5) + if n % 2: + omsg_r('+') if not rx: die(1, 'tx receipt timeout exceeded') @@ -1606,7 +1612,7 @@ class CmdTestEthdev(CmdTestEthdevMethods, CmdTestBase, CmdTestShared): def token_txdo_cached_balances(self): return self.txdo_cached_balances( acct = '1', - fee_info_data = ('0.00260265', '50'), + fee_info_data = (0.0025786 if self.daemon.id == 'parity' else '0.00260265', '50'), add_args = ['--token=mm1', '98831F3A:E:12,43.21']) def token_txcreate_refresh_balances(self): diff --git a/test/cmdtest_d/help.py b/test/cmdtest_d/help.py index f8e6db36..27320f4f 100755 --- a/test/cmdtest_d/help.py +++ b/test/cmdtest_d/help.py @@ -118,7 +118,10 @@ class CmdTestHelp(CmdTestBase): scripts = list(scripts or gc.cmd_caps_data) - cmdlist = sorted(set(scripts) - self._gen_skiplist(scripts)) + cmdlist = sorted( + set(scripts) + - self._gen_skiplist(scripts) + - (set(gc.altcoin_cmds if self.cfg.no_altcoin else []))) for cmdname in cmdlist: cmd_caps = gc.cmd_caps_data[cmdname] diff --git a/test/cmdtest_d/opts.py b/test/cmdtest_d/opts.py index 3b07df02..cc80647b 100755 --- a/test/cmdtest_d/opts.py +++ b/test/cmdtest_d/opts.py @@ -293,12 +293,16 @@ class CmdTestOpts(CmdTestBase): return self.check_vals(['--etc-max-tx-fee=0.1'], (('cfg.etc_max_tx_fee', '0.1'),), need_proto=True) def opt_good30(self): + if self.cfg.no_altcoin: + return 'skip' return self.check_vals( ['--coin=eth', '--eth-mainnet-chain-names=foo,bar'], (('cfg.eth_mainnet_chain_names', r"\['foo', 'bar'\]"), ('proto.chain_names', r"\['foo', 'bar'\]")), need_proto = True) def opt_good31(self): + if self.cfg.no_altcoin: + return 'skip' return self.check_vals( ['--coin=xmr', '--xmr-rpc-port=28081'], (('cfg.xmr_rpc_port', '28081'),('proto.rpc_port', '28081'),), diff --git a/test/cmdtest_d/shared.py b/test/cmdtest_d/shared.py index 295e3df6..486f4281 100755 --- a/test/cmdtest_d/shared.py +++ b/test/cmdtest_d/shared.py @@ -166,7 +166,8 @@ class CmdTestShared: test = False, quiet = False, contract_addr = None, - has_label = False): + has_label = False, + wait = False): txdo = (caller or self.test_name)[:4] == 'txdo' @@ -190,6 +191,12 @@ class CmdTestShared: assert len(txid) == 64, f'{txid!r}: Incorrect txid length!' if not test: + if wait: + t.expect('Waiting for first confirmation..') + while True: + if t.expect(['.', 'OK']): + break + if contract_addr: _ = strip_ansi_escapes(t.expect_getend('Contract address: ')) assert _ == contract_addr, f'Contract address mismatch: {_} != {contract_addr}' diff --git a/test/daemontest_d/rpc.py b/test/daemontest_d/rpc.py index 41d1c21a..d8d68a0f 100755 --- a/test/daemontest_d/rpc.py +++ b/test/daemontest_d/rpc.py @@ -169,6 +169,8 @@ class unit_tests: altcoin_deps = ('ltc', 'bch', 'geth', 'reth', 'erigon', 'parity', 'xmrwallet') arm_skip = ('parity',) # no prebuilt binaries for ARM + riscv_skip = ('parity',) # no prebuilt binaries for RISC-V + fast_skip = ('reth', 'erigon') async def btc(self, name, ut): return await run_test( diff --git a/test/include/unit_test.py b/test/include/unit_test.py index e52c031c..ef528a66 100755 --- a/test/include/unit_test.py +++ b/test/include/unit_test.py @@ -211,7 +211,7 @@ def run_test(test, subtest=None): tests_seen.append(test) if cfg.no_altcoin_deps and test in altcoin_tests: - cfg._util.qmsg(gray(f'Skipping {test_type} test {test!r} [--no-altcoin-deps]')) + msg(gray(f'Skipping {test_type} test {test!r} [--no-altcoin-deps]')) return mod = importlib.import_module(f'test.{test_subdir}.{test}') @@ -222,6 +222,8 @@ def run_test(test, subtest=None): win_skip = getattr(t, 'win_skip', ()) mac_skip = getattr(t, 'mac_skip', ()) arm_skip = getattr(t, 'arm_skip', ()) + riscv_skip = getattr(t, 'riscv_skip', ()) + fast_skip = getattr(t, 'fast_skip', ()) subtests = ( [subtest] if subtest else [k for k, v in type(t).__dict__.items() if type(v).__name__ == 'function' and k[0] != '_'] @@ -238,6 +240,9 @@ def run_test(test, subtest=None): if cfg.no_altcoin_deps and _subtest in altcoin_deps: subtest_skip_msg(_subtest, '[--no-altcoin-deps]') continue + if cfg.fast and _subtest in fast_skip: + subtest_skip_msg(_subtest, '[--fast]') + continue if sys.platform == 'win32' and _subtest in win_skip: subtest_skip_msg(_subtest, 'for Windows platform') continue @@ -247,6 +252,9 @@ def run_test(test, subtest=None): if platform.machine() == 'aarch64' and _subtest in arm_skip: subtest_skip_msg(_subtest, 'for ARM platform') continue + if platform.machine() == 'riscv64' and _subtest in riscv_skip: + subtest_skip_msg(_subtest, 'for RISC-V platform') + continue run_subtest(t, _subtest) if hasattr(t, '_post'): t._post() diff --git a/test/modtest_d/__init__.py b/test/modtest_d/__init__.py index bfc4c1d1..bcdcbb5d 100755 --- a/test/modtest_d/__init__.py +++ b/test/modtest_d/__init__.py @@ -4,4 +4,4 @@ test.modtest_d: shared data for unit tests for the MMGen suite """ -altcoin_tests = ['cashaddr', 'rune', 'xmrseed'] +altcoin_tests = ['cashaddr', 'rune', 'xmrseed', 'swap'] diff --git a/test/test-release.d/cfg.sh b/test/test-release.d/cfg.sh index 8ae80642..20b7a479 100755 --- a/test/test-release.d/cfg.sh +++ b/test/test-release.d/cfg.sh @@ -190,7 +190,6 @@ init_tests() { - $cmdtest_py misc - $cmdtest_py opts - $cmdtest_py cfgfile - - $cmdtest_py help - $cmdtest_py main - $cmdtest_py conv - $cmdtest_py ref diff --git a/test/test-release.sh b/test/test-release.sh index d927c5cc..ed558e17 100755 --- a/test/test-release.sh +++ b/test/test-release.sh @@ -380,6 +380,7 @@ do done in_nix_environment && parity --help >/dev/null 2>&1 || SKIP_PARITY=1 +[ "$RISCV64" ] && SKIP_PARITY=1 [ "$MMGEN_DISABLE_COLOR" -o ! -t 1 ] || { GRAY="\e[30;1m"