aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorFabian Jahr <fjahr@protonmail.com>2024-03-31 23:50:42 +0200
committerFabian Jahr <fjahr@protonmail.com>2024-08-06 01:38:10 +0200
commit74a04f9e7ad6a16988149cc3438b9ce13c91cdb9 (patch)
treeb9db7fb3b361d76c8f60a0af1b13239d4b1aabbd /test
parent902dd14382256c9d33bce667795a64079f3bee6b (diff)
testnet: Introduce Testnet4
Diffstat (limited to 'test')
-rwxr-xr-xtest/functional/feature_config_args.py36
-rwxr-xr-xtest/functional/wallet_crosschain.py29
2 files changed, 63 insertions, 2 deletions
diff --git a/test/functional/feature_config_args.py b/test/functional/feature_config_args.py
index dc812d224f..bb20e2baa8 100755
--- a/test/functional/feature_config_args.py
+++ b/test/functional/feature_config_args.py
@@ -371,11 +371,44 @@ class ConfArgsTest(BitcoinTestFramework):
def test_acceptstalefeeestimates_arg_support(self):
self.log.info("Test -acceptstalefeeestimates option support")
conf_file = self.nodes[0].datadir_path / "bitcoin.conf"
- for chain, chain_name in {("main", ""), ("test", "testnet3"), ("signet", "signet")}:
+ for chain, chain_name in {("main", ""), ("test", "testnet3"), ("signet", "signet"), ("testnet4", "testnet4")}:
util.write_config(conf_file, n=0, chain=chain_name, extra_config='acceptstalefeeestimates=1\n')
self.nodes[0].assert_start_raises_init_error(expected_msg=f'Error: acceptstalefeeestimates is not supported on {chain} chain.')
util.write_config(conf_file, n=0, chain="regtest") # Reset to regtest
+ def test_testnet3_deprecation_msg(self):
+ self.log.info("Test testnet3 deprecation warning")
+ t3_warning_log = "Warning: Support for testnet3 is deprecated and will be removed in an upcoming release. Consider switching to testnet4."
+
+ def warning_msg(node, approx_size):
+ return f'Warning: Disk space for "{node.datadir_path / node.chain / "blocks" }" may not accommodate the block files. Approximately {approx_size} GB of data will be stored in this directory.'
+
+ # Testnet3 node will log the warning
+ self.nodes[0].chain = 'testnet3'
+ self.nodes[0].replace_in_config([('regtest=', 'testnet='), ('[regtest]', '[test]')])
+ with self.nodes[0].assert_debug_log([t3_warning_log]):
+ self.start_node(0)
+ # Some CI environments will have limited space and some others won't
+ # so we need to handle both cases as a valid result.
+ self.nodes[0].stderr.seek(0)
+ err = self.nodes[0].stdout.read()
+ self.nodes[0].stderr.seek(0)
+ self.nodes[0].stderr.truncate()
+ if err != b'' and err != warning_msg(self.nodes[0], 42):
+ raise AssertionError("Unexpected stderr after shutdown of Testnet3 node")
+ self.stop_node(0)
+
+ # Testnet4 node will not log the warning
+ self.nodes[0].chain = 'testnet4'
+ self.nodes[0].replace_in_config([('testnet=', 'testnet4='), ('[test]', '[testnet4]')])
+ with self.nodes[0].assert_debug_log([], unexpected_msgs=[t3_warning_log]):
+ self.start_node(0)
+ self.stop_node(0)
+
+ # Reset to regtest
+ self.nodes[0].chain = 'regtest'
+ self.nodes[0].replace_in_config([('testnet4=', 'regtest='), ('[testnet4]', '[regtest]')])
+
def run_test(self):
self.test_log_buffer()
self.test_args_log()
@@ -389,6 +422,7 @@ class ConfArgsTest(BitcoinTestFramework):
self.test_ignored_conf()
self.test_ignored_default_conf()
self.test_acceptstalefeeestimates_arg_support()
+ self.test_testnet3_deprecation_msg()
# Remove the -datadir argument so it doesn't override the config file
self.nodes[0].args = [arg for arg in self.nodes[0].args if not arg.startswith("-datadir")]
diff --git a/test/functional/wallet_crosschain.py b/test/functional/wallet_crosschain.py
index 3505d33e51..97db84c3e4 100755
--- a/test/functional/wallet_crosschain.py
+++ b/test/functional/wallet_crosschain.py
@@ -11,7 +11,7 @@ class WalletCrossChain(BitcoinTestFramework):
self.add_wallet_options(parser)
def set_test_params(self):
- self.num_nodes = 2
+ self.num_nodes = 3
self.setup_clean_chain = True
def skip_test_if_missing_module(self):
@@ -24,6 +24,12 @@ class WalletCrossChain(BitcoinTestFramework):
self.nodes[1].chain = 'testnet3'
self.nodes[1].extra_args = ['-maxconnections=0', '-prune=550'] # disable testnet sync
self.nodes[1].replace_in_config([('regtest=', 'testnet='), ('[regtest]', '[test]')])
+
+ # Switch node 2 to testnet4 before starting it.
+ self.nodes[2].chain = 'testnet4'
+ self.nodes[2].extra_args = ['-maxconnections=0', '-prune=550'] # disable testnet4 sync
+ self.nodes[2].replace_in_config([('regtest=', 'testnet4='), ('[regtest]', '[testnet4]')])
+
self.start_nodes()
def run_test(self):
@@ -39,19 +45,40 @@ class WalletCrossChain(BitcoinTestFramework):
self.nodes[1].createwallet(node1_wallet)
self.nodes[1].backupwallet(node1_wallet_backup)
self.nodes[1].unloadwallet(node1_wallet)
+ node2_wallet = self.nodes[2].datadir_path / 'node2_wallet'
+ node2_wallet_backup = self.nodes[0].datadir_path / 'node2_wallet.bak'
+ self.nodes[2].createwallet(node2_wallet)
+ self.nodes[2].backupwallet(node2_wallet_backup)
+ self.nodes[2].unloadwallet(node2_wallet)
self.log.info("Loading/restoring wallets into nodes with a different genesis block")
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[0].loadwallet, node2_wallet)
assert_raises_rpc_error(-18, 'Wallet file verification failed.', self.nodes[1].loadwallet, node0_wallet)
+ assert_raises_rpc_error(-18, 'Wallet file verification failed.', self.nodes[2].loadwallet, node0_wallet)
+ assert_raises_rpc_error(-18, 'Wallet file verification failed.', self.nodes[1].loadwallet, node2_wallet)
+ assert_raises_rpc_error(-18, 'Wallet file verification failed.', self.nodes[2].loadwallet, node1_wallet)
assert_raises_rpc_error(-18, 'Wallet file verification failed.', self.nodes[0].restorewallet, 'w', node1_wallet_backup)
+ assert_raises_rpc_error(-18, 'Wallet file verification failed.', self.nodes[0].restorewallet, 'w', node2_wallet_backup)
assert_raises_rpc_error(-18, 'Wallet file verification failed.', self.nodes[1].restorewallet, 'w', node0_wallet_backup)
+ assert_raises_rpc_error(-18, 'Wallet file verification failed.', self.nodes[2].restorewallet, 'w', node0_wallet_backup)
+ assert_raises_rpc_error(-18, 'Wallet file verification failed.', self.nodes[1].restorewallet, 'w', node2_wallet_backup)
+ assert_raises_rpc_error(-18, 'Wallet file verification failed.', self.nodes[2].restorewallet, 'w', node1_wallet_backup)
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[0].loadwallet, node2_wallet)
assert_raises_rpc_error(-4, 'Wallet files should not be reused across chains.', self.nodes[1].loadwallet, node0_wallet)
+ assert_raises_rpc_error(-4, 'Wallet files should not be reused across chains.', self.nodes[2].loadwallet, node0_wallet)
+ assert_raises_rpc_error(-4, 'Wallet files should not be reused across chains.', self.nodes[1].loadwallet, node2_wallet)
+ assert_raises_rpc_error(-4, 'Wallet files should not be reused across chains.', self.nodes[2].loadwallet, node1_wallet)
assert_raises_rpc_error(-4, 'Wallet files should not be reused across chains.', self.nodes[0].restorewallet, 'w', node1_wallet_backup)
+ assert_raises_rpc_error(-4, 'Wallet files should not be reused across chains.', self.nodes[0].restorewallet, 'w', node2_wallet_backup)
assert_raises_rpc_error(-4, 'Wallet files should not be reused across chains.', self.nodes[1].restorewallet, 'w', node0_wallet_backup)
+ assert_raises_rpc_error(-4, 'Wallet files should not be reused across chains.', self.nodes[2].restorewallet, 'w', node0_wallet_backup)
+ assert_raises_rpc_error(-4, 'Wallet files should not be reused across chains.', self.nodes[1].restorewallet, 'w', node2_wallet_backup)
+ assert_raises_rpc_error(-4, 'Wallet files should not be reused across chains.', self.nodes[2].restorewallet, 'w', node1_wallet_backup)
if not self.options.descriptors:
self.log.info("Override cross-chain wallet load protection")