Changeset View
Changeset View
Standalone View
Standalone View
test/functional/wallet_multiwallet.py
Show All 11 Lines | |||||
from test_framework.test_framework import BitcoinTestFramework | from test_framework.test_framework import BitcoinTestFramework | ||||
from test_framework.test_node import ErrorMatch | from test_framework.test_node import ErrorMatch | ||||
from test_framework.util import ( | from test_framework.util import ( | ||||
assert_equal, | assert_equal, | ||||
assert_raises_rpc_error, | assert_raises_rpc_error, | ||||
) | ) | ||||
FEATURE_LATEST = 200300 | |||||
class MultiWalletTest(BitcoinTestFramework): | class MultiWalletTest(BitcoinTestFramework): | ||||
def set_test_params(self): | def set_test_params(self): | ||||
self.setup_clean_chain = True | self.setup_clean_chain = True | ||||
self.num_nodes = 2 | self.num_nodes = 2 | ||||
self.supports_cli = True | self.supports_cli = True | ||||
def skip_test_if_missing_module(self): | def skip_test_if_missing_module(self): | ||||
self.skip_if_no_wallet() | self.skip_if_no_wallet() | ||||
def add_options(self, parser): | |||||
parser.add_argument( | |||||
'--data_wallets_dir', | |||||
default=os.path.join( | |||||
os.path.dirname( | |||||
os.path.realpath(__file__)), | |||||
'data/wallets/'), | |||||
help='Test data with wallet directories (default: %(default)s)', | |||||
) | |||||
def run_test(self): | def run_test(self): | ||||
node = self.nodes[0] | node = self.nodes[0] | ||||
def data_dir(*p): return os.path.join(node.datadir, 'regtest', *p) | def data_dir(*p): return os.path.join(node.datadir, 'regtest', *p) | ||||
def wallet_dir(*p): return data_dir('wallets', *p) | def wallet_dir(*p): return data_dir('wallets', *p) | ||||
def wallet(name): return node.get_wallet_rpc(name) | def wallet(name): return node.get_wallet_rpc(name) | ||||
▲ Show 20 Lines • Show All 362 Lines • ▼ Show 20 Lines | def run_test(self): | ||||
self.start_node(1) | self.start_node(1) | ||||
wallet = os.path.join(self.options.tmpdir, 'my_wallet') | wallet = os.path.join(self.options.tmpdir, 'my_wallet') | ||||
self.nodes[0].createwallet(wallet) | self.nodes[0].createwallet(wallet) | ||||
assert_raises_rpc_error(-4, "Error initializing wallet database environment", | assert_raises_rpc_error(-4, "Error initializing wallet database environment", | ||||
self.nodes[1].loadwallet, wallet) | self.nodes[1].loadwallet, wallet) | ||||
self.nodes[0].unloadwallet(wallet) | self.nodes[0].unloadwallet(wallet) | ||||
self.nodes[1].loadwallet(wallet) | self.nodes[1].loadwallet(wallet) | ||||
# Fail to load if wallet is downgraded | |||||
shutil.copytree( | |||||
os.path.join( | |||||
self.options.data_wallets_dir, | |||||
'high_minversion'), | |||||
wallet_dir('high_minversion')) | |||||
self.restart_node( | |||||
0, extra_args=[ | |||||
'-upgradewallet={}'.format(FEATURE_LATEST)]) | |||||
assert {'name': 'high_minversion'} in self.nodes[0].listwalletdir()[ | |||||
'wallets'] | |||||
self.log.info("Fail -upgradewallet that results in downgrade") | |||||
assert_raises_rpc_error( | |||||
-4, | |||||
"Wallet loading failed.", | |||||
lambda: self.nodes[0].loadwallet(filename='high_minversion'), | |||||
) | |||||
self.stop_node( | |||||
i=0, | |||||
expected_stderr='Error: Error loading {}: Wallet requires newer version of Bitcoin ABC'.format( | |||||
wallet_dir('high_minversion', 'wallet.dat')), | |||||
) | |||||
if __name__ == '__main__': | if __name__ == '__main__': | ||||
MultiWalletTest().main() | MultiWalletTest().main() |