mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-12 21:02:38 -03:00
8597260872
fa10f193b5
test: Set default in add_wallet_options if only one type can be chosen (MacroFake)555519d082
test: Remove wallet option from non-wallet tests (MacroFake)fac8d59d31
test: Set -disablewallet when no wallet has been compiled (MacroFake)fa68937b89
test: Make requires_wallet private (MacroFake) Pull request description: The tests have several issues: * Some tests that are wallet-type specific offer the option to run the test with the incompatible type For example, `wallet_dump.py` offers `--descriptors` and on current master fails with `JSONRPCException: Invalid public key`. After the changes here, it fails with a clear error: `unrecognized arguments: --descriptors`. * Tests that don't use the wallet at all offer the option to run it with a wallet type. This is confusing and wastes developers time if they are "tricked" into running the test for both wallet types, even though no wallet code is executed at all. For example, `feature_addrman.py` will happily accept and run with `--descriptors` or `--legacy-wallet`. After the changes here, it no longer silently ignores the flag, but reports a clear error: `unrecognized arguments`. ACKs for top commit: achow101: ACKfa10f193b5
Tree-SHA512: a5784da7305f4ec58c0013f433289000d94fc3d434b00fc329ffa37b812e2cd1da0071e34c3462bf79d904808564f2ae6d3d582f6b86b26215f9b07391b58460
63 lines
2.6 KiB
Python
Executable file
63 lines
2.6 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
# Copyright (c) 2020 The Bitcoin Core developers
|
|
# Distributed under the MIT software license, see the accompanying
|
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
import os
|
|
|
|
from test_framework.test_framework import BitcoinTestFramework
|
|
from test_framework.util import assert_raises_rpc_error
|
|
|
|
class WalletCrossChain(BitcoinTestFramework):
|
|
def add_options(self, parser):
|
|
self.add_wallet_options(parser)
|
|
|
|
def set_test_params(self):
|
|
self.num_nodes = 2
|
|
self.setup_clean_chain = True
|
|
|
|
def skip_test_if_missing_module(self):
|
|
self.skip_if_no_wallet()
|
|
|
|
def setup_network(self):
|
|
self.add_nodes(self.num_nodes)
|
|
|
|
# Switch node 1 to testnet before starting it.
|
|
self.nodes[1].chain = 'testnet3'
|
|
self.nodes[1].extra_args = ['-maxconnections=0', '-prune=550'] # disable testnet sync
|
|
with open(self.nodes[1].bitcoinconf, 'r', encoding='utf8') as conf:
|
|
conf_data = conf.read()
|
|
with open (self.nodes[1].bitcoinconf, 'w', encoding='utf8') as conf:
|
|
conf.write(conf_data.replace('regtest=', 'testnet=').replace('[regtest]', '[test]'))
|
|
|
|
self.start_nodes()
|
|
|
|
def run_test(self):
|
|
self.log.info("Creating wallets")
|
|
|
|
node0_wallet = os.path.join(self.nodes[0].datadir, 'node0_wallet')
|
|
self.nodes[0].createwallet(node0_wallet)
|
|
self.nodes[0].unloadwallet(node0_wallet)
|
|
node1_wallet = os.path.join(self.nodes[1].datadir, 'node1_wallet')
|
|
self.nodes[1].createwallet(node1_wallet)
|
|
self.nodes[1].unloadwallet(node1_wallet)
|
|
|
|
self.log.info("Loading wallets into nodes with a different genesis blocks")
|
|
|
|
if self.options.descriptors:
|
|
assert_raises_rpc_error(-18, 'Wallet file verification failed.', self.nodes[0].loadwallet, node1_wallet)
|
|
assert_raises_rpc_error(-18, 'Wallet file verification failed.', self.nodes[1].loadwallet, node0_wallet)
|
|
else:
|
|
assert_raises_rpc_error(-4, 'Wallet files should not be reused across chains.', self.nodes[0].loadwallet, node1_wallet)
|
|
assert_raises_rpc_error(-4, 'Wallet files should not be reused across chains.', self.nodes[1].loadwallet, node0_wallet)
|
|
|
|
if not self.options.descriptors:
|
|
self.log.info("Override cross-chain wallet load protection")
|
|
self.stop_nodes()
|
|
self.start_nodes([['-walletcrosschain', '-prune=550']] * self.num_nodes)
|
|
self.nodes[0].loadwallet(node1_wallet)
|
|
self.nodes[1].loadwallet(node0_wallet)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
WalletCrossChain().main()
|