From fa63b8232f38e78d3c6413fa7d51809f376de75c Mon Sep 17 00:00:00 2001 From: MarcoFalke <*~=`'#}+{/-|&$^_@721217.xyz> Date: Wed, 25 Dec 2024 04:45:56 +0100 Subject: [PATCH] test: generateblocks called by multiple threads Co-Authored-By: David Gumberg --- test/functional/rpc_generate.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/test/functional/rpc_generate.py b/test/functional/rpc_generate.py index 74f31f4571..618bbb2e00 100755 --- a/test/functional/rpc_generate.py +++ b/test/functional/rpc_generate.py @@ -1,9 +1,11 @@ #!/usr/bin/env python3 -# Copyright (c) 2020-2022 The Bitcoin Core developers +# Copyright (c) 2020-present The Bitcoin Core developers # Distributed under the MIT software license, see the accompanying # file COPYING or http://www.opensource.org/licenses/mit-license.php. """Test generate* RPCs.""" +from concurrent.futures import ThreadPoolExecutor + from test_framework.test_framework import BitcoinTestFramework from test_framework.wallet import MiniWallet from test_framework.util import ( @@ -83,6 +85,13 @@ class RPCGenerateTest(BitcoinTestFramework): txid = block['tx'][1] assert_equal(node.getrawtransaction(txid=txid, verbose=False, blockhash=hash), rawtx) + # Ensure that generateblock can be called concurrently by many threads. + self.log.info('Generate blocks in parallel') + generate_50_blocks = lambda n: [n.generateblock(output=address, transactions=[]) for _ in range(50)] + rpcs = [node.cli for _ in range(6)] + with ThreadPoolExecutor(max_workers=len(rpcs)) as threads: + list(threads.map(generate_50_blocks, rpcs)) + self.log.info('Fail to generate block with out of order txs') txid1 = miniwallet.send_self_transfer(from_node=node)['txid'] utxo1 = miniwallet.get_utxo(txid=txid1)