0
0
Fork 0
mirror of https://github.com/bitcoin/bitcoin.git synced 2025-02-02 09:46:52 -05:00

test: fix intermittent p2p_ibd_txrelay race, add test_framework.py#wait_until

This commit is contained in:
Jon Atack 2020-07-19 08:39:15 +02:00
parent 090d877160
commit 12410b1feb
No known key found for this signature in database
GPG key ID: 4F5721B3D0E3921D
2 changed files with 7 additions and 5 deletions

View file

@ -8,7 +8,6 @@ from decimal import Decimal
from test_framework.messages import COIN from test_framework.messages import COIN
from test_framework.test_framework import BitcoinTestFramework from test_framework.test_framework import BitcoinTestFramework
from test_framework.util import assert_equal
MAX_FEE_FILTER = Decimal(9170997) / COIN MAX_FEE_FILTER = Decimal(9170997) / COIN
NORMAL_FEE_FILTER = Decimal(100) / COIN NORMAL_FEE_FILTER = Decimal(100) / COIN
@ -22,12 +21,12 @@ class P2PIBDTxRelayTest(BitcoinTestFramework):
["-minrelaytxfee={}".format(NORMAL_FEE_FILTER)], ["-minrelaytxfee={}".format(NORMAL_FEE_FILTER)],
["-minrelaytxfee={}".format(NORMAL_FEE_FILTER)], ["-minrelaytxfee={}".format(NORMAL_FEE_FILTER)],
] ]
def run_test(self): def run_test(self):
self.log.info("Check that nodes set minfilter to MAX_MONEY while still in IBD") self.log.info("Check that nodes set minfilter to MAX_MONEY while still in IBD")
for node in self.nodes: for node in self.nodes:
assert node.getblockchaininfo()['initialblockdownload'] assert node.getblockchaininfo()['initialblockdownload']
for conn_info in node.getpeerinfo(): self.wait_until(lambda: all(peer['minfeefilter'] == MAX_FEE_FILTER for peer in node.getpeerinfo()))
assert_equal(conn_info['minfeefilter'], MAX_FEE_FILTER)
# Come out of IBD by generating a block # Come out of IBD by generating a block
self.nodes[0].generate(1) self.nodes[0].generate(1)
@ -36,8 +35,7 @@ class P2PIBDTxRelayTest(BitcoinTestFramework):
self.log.info("Check that nodes reset minfilter after coming out of IBD") self.log.info("Check that nodes reset minfilter after coming out of IBD")
for node in self.nodes: for node in self.nodes:
assert not node.getblockchaininfo()['initialblockdownload'] assert not node.getblockchaininfo()['initialblockdownload']
for conn_info in node.getpeerinfo(): self.wait_until(lambda: all(peer['minfeefilter'] == NORMAL_FEE_FILTER for peer in node.getpeerinfo()))
assert_equal(conn_info['minfeefilter'], NORMAL_FEE_FILTER)
if __name__ == '__main__': if __name__ == '__main__':

View file

@ -31,6 +31,7 @@ from .util import (
disconnect_nodes, disconnect_nodes,
get_datadir_path, get_datadir_path,
initialize_datadir, initialize_datadir,
wait_until,
) )
@ -602,6 +603,9 @@ class BitcoinTestFramework(metaclass=BitcoinTestMetaClass):
self.sync_blocks(nodes) self.sync_blocks(nodes)
self.sync_mempools(nodes) self.sync_mempools(nodes)
def wait_until(self, test_function, timeout=60, lock=None):
return wait_until(test_function, timeout=timeout, lock=lock, timeout_factor=self.options.timeout_factor)
# Private helper methods. These should not be accessed by the subclass test scripts. # Private helper methods. These should not be accessed by the subclass test scripts.
def _start_logging(self): def _start_logging(self):