From d33dd31032b554e15d87d93bb588a6e6bedadac6 Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" Date: Thu, 2 Aug 2018 14:31:47 +0200 Subject: [PATCH] Merge #13837: qa: Extract rpc_timewait as test param fa5b440971a0dfdd64c1b86748a573fcd7dc65d3 qa: Extract rpc_timewait as test param (MarcoFalke) Pull request description: Also increase it for wallet_dump and wallet_groups Tree-SHA512: 7367bc584228bda3010c453713a1505c54a8ef3d116be47dab9934d30594089dfeb27ffa862f7517fd0ec8b5dc07f4904d67ef2a53dd284cbe2a58982e410e2b --- test/functional/feature_block.py | 8 ++++---- test/functional/feature_dbcrash.py | 5 +++-- test/functional/feature_pruning.py | 3 ++- test/functional/test_framework/test_framework.py | 7 ++++--- test/functional/test_framework/test_node.py | 8 ++------ test/functional/wallet_dump.py | 9 +++------ test/functional/wallet_groups.py | 1 + 7 files changed, 19 insertions(+), 22 deletions(-) diff --git a/test/functional/feature_block.py b/test/functional/feature_block.py index 9a4f993b44..ddf395dc3b 100755 --- a/test/functional/feature_block.py +++ b/test/functional/feature_block.py @@ -74,14 +74,14 @@ class FullBlockTest(BitcoinTestFramework): def set_test_params(self): self.num_nodes = 1 self.setup_clean_chain = True + # Very large reorgs cause cs_main to be held for a very long time in ActivateBestChainStep, + # which causes RPC to hang, so we need to increase RPC timeouts + self.rpc_timeout = 180 # Must set '-dip3params=2000:2000' to create pre-dip3 blocks only self.extra_args = [['-dip3params=2000:2000']] def setup_nodes(self): - # Very large reorgs cause cs_main to be held for a very long time in ActivateBestChainStep, - # which causes RPC to hang, so we need to increase RPC timeouts - # TODO remove this when bitcoin#13837 gets backported and change it to use self.rpc_timeout - self.add_nodes(self.num_nodes, self.extra_args, timewait=180) + self.add_nodes(self.num_nodes, self.extra_args) self.start_nodes() def run_test(self): diff --git a/test/functional/feature_dbcrash.py b/test/functional/feature_dbcrash.py index 8333611c83..b37177fd6e 100755 --- a/test/functional/feature_dbcrash.py +++ b/test/functional/feature_dbcrash.py @@ -45,6 +45,8 @@ class ChainstateWriteCrashTest(BitcoinTestFramework): def set_test_params(self): self.num_nodes = 4 self.setup_clean_chain = False + # Need a bit of extra time for the nodes to start up for this test + self.rpc_timewait = 90 # Set -maxmempool=0 to turn off mempool memory sharing with dbcache # Set -rpcservertimeout=900 to reduce socket disconnects in this @@ -66,8 +68,7 @@ class ChainstateWriteCrashTest(BitcoinTestFramework): self.crashed_on_restart = 0 # Track count of crashes during recovery def setup_network(self): - # Need a bit of extra time for the nodes to start up for this test - self.add_nodes(self.num_nodes, extra_args=self.extra_args, timewait=90) + self.add_nodes(self.num_nodes, extra_args=self.extra_args) self.start_nodes() # Leave them unconnected, we'll use submitblock directly in this test diff --git a/test/functional/feature_pruning.py b/test/functional/feature_pruning.py index 4aed419d0a..eef32c2d74 100755 --- a/test/functional/feature_pruning.py +++ b/test/functional/feature_pruning.py @@ -28,6 +28,7 @@ class PruneTest(BitcoinTestFramework): def set_test_params(self): self.setup_clean_chain = True self.num_nodes = 6 + self.rpc_timewait = 900 # Create nodes 0 and 1 to mine. # Create node 2 to test pruning. @@ -54,7 +55,7 @@ class PruneTest(BitcoinTestFramework): self.sync_blocks(self.nodes[0:5]) def setup_nodes(self): - self.add_nodes(self.num_nodes, self.extra_args, timewait=900) + self.add_nodes(self.num_nodes, self.extra_args) self.start_nodes() def create_big_chain(self): diff --git a/test/functional/test_framework/test_framework.py b/test/functional/test_framework/test_framework.py index e458713b00..7e84457bd2 100755 --- a/test/functional/test_framework/test_framework.py +++ b/test/functional/test_framework/test_framework.py @@ -107,6 +107,7 @@ class BitcoinTestFramework(metaclass=BitcoinTestMetaClass): self.nodes = [] self.network_thread = None self.mocktime = 0 + self.rpc_timewait = 60 # Wait for up to 60 seconds for the RPC server to respond self.supports_cli = False self.bind_to_localhost_only = True self.extra_args_from_options = [] @@ -291,7 +292,7 @@ class BitcoinTestFramework(metaclass=BitcoinTestMetaClass): # Public helper methods. These can be accessed by the subclass test scripts. - def add_nodes(self, num_nodes, extra_args=None, rpchost=None, timewait=None, binary=None): + def add_nodes(self, num_nodes, extra_args=None, *, rpchost=None, binary=None): """Instantiate TestNode objects""" if self.bind_to_localhost_only: extra_confs = [["bind=127.0.0.1"]] * num_nodes @@ -306,7 +307,7 @@ class BitcoinTestFramework(metaclass=BitcoinTestMetaClass): assert_equal(len(binary), num_nodes) old_num_nodes = len(self.nodes) for i in range(num_nodes): - self.nodes.append(TestNode(old_num_nodes + i, get_datadir_path(self.options.tmpdir, old_num_nodes + i), self.extra_args_from_options, chain=self.chain, rpchost=rpchost, timewait=timewait, bitcoind=binary[i], bitcoin_cli=self.options.bitcoincli, mocktime=self.mocktime, coverage_dir=self.options.coveragedir, extra_conf=extra_confs[i], extra_args=extra_args[i], use_cli=self.options.usecli)) + self.nodes.append(TestNode(old_num_nodes + i, get_datadir_path(self.options.tmpdir, old_num_nodes + i), self.extra_args_from_options, chain=self.chain, rpchost=rpchost, timewait=self.rpc_timewait, bitcoind=binary[i], bitcoin_cli=self.options.bitcoincli, mocktime=self.mocktime, coverage_dir=self.options.coveragedir, extra_conf=extra_confs[i], extra_args=extra_args[i], use_cli=self.options.usecli)) def start_node(self, i, *args, **kwargs): """Start a dashd""" @@ -477,7 +478,7 @@ class BitcoinTestFramework(metaclass=BitcoinTestMetaClass): args.append("-connect=127.0.0.1:" + str(p2p_port(0))) if extra_args is not None: args.extend(extra_args) - self.nodes.append(TestNode(i, get_datadir_path(self.options.cachedir, i), chain=self.chain, extra_conf=["bind=127.0.0.1"], extra_args=[], extra_args_from_options=self.extra_args_from_options, rpchost=None, timewait=None, bitcoind=self.options.bitcoind, bitcoin_cli=self.options.bitcoincli, mocktime=self.mocktime, coverage_dir=None)) + self.nodes.append(TestNode(i, get_datadir_path(self.options.cachedir, i), chain=self.chain, extra_conf=["bind=127.0.0.1"], extra_args=[], extra_args_from_options=self.extra_args_from_options, rpchost=None, timewait=self.rpc_timewait, bitcoind=self.options.bitcoind, bitcoin_cli=self.options.bitcoincli, mocktime=self.mocktime, coverage_dir=None)) self.nodes[i].args = args self.start_node(i) diff --git a/test/functional/test_framework/test_node.py b/test/functional/test_framework/test_node.py index d69330e465..76a5d55854 100755 --- a/test/functional/test_framework/test_node.py +++ b/test/functional/test_framework/test_node.py @@ -60,18 +60,14 @@ class TestNode(): To make things easier for the test writer, any unrecognised messages will be dispatched to the RPC connection.""" - def __init__(self, i, datadir, extra_args_from_options, chain, rpchost, timewait, bitcoind, bitcoin_cli, mocktime, coverage_dir, extra_conf=None, extra_args=None, use_cli=False): + def __init__(self, i, datadir, extra_args_from_options, *, chain, rpchost, timewait, bitcoind, bitcoin_cli, mocktime, coverage_dir, extra_conf=None, extra_args=None, use_cli=False): self.index = i self.datadir = datadir self.chain = chain self.stdout_dir = os.path.join(self.datadir, "stdout") self.stderr_dir = os.path.join(self.datadir, "stderr") self.rpchost = rpchost - if timewait: - self.rpc_timeout = timewait - else: - # Wait for up to 60 seconds for the RPC server to respond - self.rpc_timeout = 60 + self.rpc_timeout = timewait self.rpc_timeout *= Options.timeout_scale self.binary = bitcoind self.coverage_dir = coverage_dir diff --git a/test/functional/wallet_dump.py b/test/functional/wallet_dump.py index 6ab1efde73..dae03fec46 100755 --- a/test/functional/wallet_dump.py +++ b/test/functional/wallet_dump.py @@ -73,6 +73,7 @@ class WalletDumpTest(BitcoinTestFramework): self.setup_clean_chain = True self.num_nodes = 1 self.extra_args = [["-keypool=90", "-usehd=1"]] + self.rpc_timeout = 120 def setup_network(self): # TODO remove this when usehd=1 becomes the default @@ -81,14 +82,10 @@ class WalletDumpTest(BitcoinTestFramework): self.options.cachedir = os.path.join(self.options.cachedir, 'hd') self._initialize_chain(extra_args=self.extra_args[0]) self.set_cache_mocktime() - # Use 1 minute timeout because the initial getnewaddress RPC can take - # longer than the default 30 seconds due to an expensive - # CWallet::TopUpKeyPool call, and the encryptwallet RPC made later in - # the test often takes even longer. - self.add_nodes(self.num_nodes, extra_args=self.extra_args, timewait=60) + self.add_nodes(self.num_nodes, extra_args=self.extra_args) self.start_nodes() - def run_test (self): + def run_test(self): wallet_unenc_dump = os.path.join(self.nodes[0].datadir, "wallet.unencrypted.dump") wallet_enc_dump = os.path.join(self.nodes[0].datadir, "wallet.encrypted.dump") diff --git a/test/functional/wallet_groups.py b/test/functional/wallet_groups.py index 408e9dfef0..9fa7eaf07e 100755 --- a/test/functional/wallet_groups.py +++ b/test/functional/wallet_groups.py @@ -22,6 +22,7 @@ class WalletGroupTest(BitcoinTestFramework): self.setup_clean_chain = True self.num_nodes = 3 self.extra_args = [[], [], ['-avoidpartialspends']] + self.rpc_timewait = 120 def run_test (self): # Mine some coins