Skip to content

Commit 08ce33f

Browse files
author
MarcoFalke
committed
qa: Move wait_until to util
1 parent 22e301a commit 08ce33f

11 files changed

+78
-89
lines changed

test/functional/bip65-cltv-p2p.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ def run_test(self):
109109
node0.send_and_ping(msg_block(block))
110110
assert_equal(int(self.nodes[0].getbestblockhash(), 16), tip)
111111

112-
assert wait_until(lambda: "reject" in node0.last_message.keys())
112+
wait_until(lambda: "reject" in node0.last_message.keys(), lock=mininode_lock)
113113
with mininode_lock:
114114
assert_equal(node0.last_message["reject"].code, REJECT_OBSOLETE)
115115
assert_equal(node0.last_message["reject"].reason, b'bad-version(0x00000003)')
@@ -138,7 +138,7 @@ def run_test(self):
138138
node0.send_and_ping(msg_block(block))
139139
assert_equal(int(self.nodes[0].getbestblockhash(), 16), tip)
140140

141-
assert wait_until (lambda: "reject" in node0.last_message.keys())
141+
wait_until(lambda: "reject" in node0.last_message.keys(), lock=mininode_lock)
142142
with mininode_lock:
143143
assert node0.last_message["reject"].code in [REJECT_INVALID, REJECT_NONSTANDARD]
144144
assert_equal(node0.last_message["reject"].data, block.sha256)

test/functional/bipdersig-p2p.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ def run_test(self):
9898
node0.send_and_ping(msg_block(block))
9999
assert_equal(int(self.nodes[0].getbestblockhash(), 16), tip)
100100

101-
assert wait_until(lambda: "reject" in node0.last_message.keys())
101+
wait_until(lambda: "reject" in node0.last_message.keys(), lock=mininode_lock)
102102
with mininode_lock:
103103
assert_equal(node0.last_message["reject"].code, REJECT_OBSOLETE)
104104
assert_equal(node0.last_message["reject"].reason, b'bad-version(0x00000002)')
@@ -128,7 +128,7 @@ def run_test(self):
128128
node0.send_and_ping(msg_block(block))
129129
assert_equal(int(self.nodes[0].getbestblockhash(), 16), tip)
130130

131-
assert wait_until (lambda: "reject" in node0.last_message.keys())
131+
wait_until(lambda: "reject" in node0.last_message.keys(), lock=mininode_lock)
132132
with mininode_lock:
133133
# We can receive different reject messages depending on whether
134134
# bitcoind is running with multiple script check threads. If script

test/functional/disconnect_ban.py

+9-7
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@
55
"""Test node disconnect and ban behavior"""
66
import time
77

8-
from test_framework.mininode import wait_until
98
from test_framework.test_framework import BitcoinTestFramework
10-
from test_framework.util import (assert_equal,
11-
assert_raises_jsonrpc,
12-
connect_nodes_bi)
9+
from test_framework.util import (
10+
assert_equal,
11+
assert_raises_jsonrpc,
12+
connect_nodes_bi,
13+
wait_until,
14+
)
1315

1416
class DisconnectBanTest(BitcoinTestFramework):
1517

@@ -24,7 +26,7 @@ def run_test(self):
2426
self.log.info("setban: successfully ban single IP address")
2527
assert_equal(len(self.nodes[1].getpeerinfo()), 2) # node1 should have 2 connections to node0 at this point
2628
self.nodes[1].setban("127.0.0.1", "add")
27-
assert wait_until(lambda: len(self.nodes[1].getpeerinfo()) == 0, timeout=10)
29+
wait_until(lambda: len(self.nodes[1].getpeerinfo()) == 0, timeout=10)
2830
assert_equal(len(self.nodes[1].getpeerinfo()), 0) # all nodes must be disconnected at this point
2931
assert_equal(len(self.nodes[1].listbanned()), 1)
3032

@@ -90,7 +92,7 @@ def run_test(self):
9092
self.log.info("disconnectnode: successfully disconnect node by address")
9193
address1 = self.nodes[0].getpeerinfo()[0]['addr']
9294
self.nodes[0].disconnectnode(address=address1)
93-
assert wait_until(lambda: len(self.nodes[0].getpeerinfo()) == 1, timeout=10)
95+
wait_until(lambda: len(self.nodes[0].getpeerinfo()) == 1, timeout=10)
9496
assert not [node for node in self.nodes[0].getpeerinfo() if node['addr'] == address1]
9597

9698
self.log.info("disconnectnode: successfully reconnect node")
@@ -101,7 +103,7 @@ def run_test(self):
101103
self.log.info("disconnectnode: successfully disconnect node by node id")
102104
id1 = self.nodes[0].getpeerinfo()[0]['id']
103105
self.nodes[0].disconnectnode(nodeid=id1)
104-
assert wait_until(lambda: len(self.nodes[0].getpeerinfo()) == 1, timeout=10)
106+
wait_until(lambda: len(self.nodes[0].getpeerinfo()) == 1, timeout=10)
105107
assert not [node for node in self.nodes[0].getpeerinfo() if node['id'] == id1]
106108

107109
if __name__ == '__main__':

test/functional/example_test.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,13 @@
2323
mininode_lock,
2424
msg_block,
2525
msg_getdata,
26-
wait_until,
2726
)
2827
from test_framework.test_framework import BitcoinTestFramework
2928
from test_framework.util import (
3029
assert_equal,
3130
connect_nodes,
3231
p2p_port,
32+
wait_until,
3333
)
3434

3535
# NodeConnCB is a class containing callbacks to be executed when a P2P
@@ -209,7 +209,7 @@ def run_test(self):
209209

210210
# wait_until() will loop until a predicate condition is met. Use it to test properties of the
211211
# NodeConnCB objects.
212-
assert wait_until(lambda: sorted(blocks) == sorted(list(node2.block_receive_map.keys())), timeout=5)
212+
wait_until(lambda: sorted(blocks) == sorted(list(node2.block_receive_map.keys())), timeout=5, lock=mininode_lock)
213213

214214
self.log.info("Check that each block was received only once")
215215
# The network thread uses a global lock on data access to the NodeConn objects when sending and receiving

test/functional/mempool_persist.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
"""
3333
import time
3434

35-
from test_framework.mininode import wait_until
3635
from test_framework.test_framework import BitcoinTestFramework
3736
from test_framework.util import *
3837

@@ -69,7 +68,7 @@ def run_test(self):
6968
self.nodes.append(self.start_node(1, self.options.tmpdir))
7069
# Give bitcoind a second to reload the mempool
7170
time.sleep(1)
72-
assert wait_until(lambda: len(self.nodes[0].getrawmempool()) == 5)
71+
wait_until(lambda: len(self.nodes[0].getrawmempool()) == 5)
7372
assert_equal(len(self.nodes[1].getrawmempool()), 0)
7473

7574
self.log.debug("Stop-start node0 with -persistmempool=0. Verify that it doesn't load its mempool.dat file.")
@@ -84,7 +83,7 @@ def run_test(self):
8483
self.stop_nodes()
8584
self.nodes = []
8685
self.nodes.append(self.start_node(0, self.options.tmpdir))
87-
assert wait_until(lambda: len(self.nodes[0].getrawmempool()) == 5)
86+
wait_until(lambda: len(self.nodes[0].getrawmempool()) == 5)
8887

8988
if __name__ == '__main__':
9089
MempoolPersistTest().main()

test/functional/p2p-compactblocks.py

+16-31
Original file line numberDiff line numberDiff line change
@@ -70,27 +70,23 @@ def send_header_for_blocks(self, new_blocks):
7070
def request_headers_and_sync(self, locator, hashstop=0):
7171
self.clear_block_announcement()
7272
self.get_headers(locator, hashstop)
73-
assert wait_until(self.received_block_announcement, timeout=30)
73+
wait_until(self.received_block_announcement, timeout=30, lock=mininode_lock)
7474
self.clear_block_announcement()
7575

7676
# Block until a block announcement for a particular block hash is
7777
# received.
7878
def wait_for_block_announcement(self, block_hash, timeout=30):
7979
def received_hash():
8080
return (block_hash in self.announced_blockhashes)
81-
return wait_until(received_hash, timeout=timeout)
81+
wait_until(received_hash, timeout=timeout, lock=mininode_lock)
8282

8383
def send_await_disconnect(self, message, timeout=30):
8484
"""Sends a message to the node and wait for disconnect.
8585
8686
This is used when we want to send a message into the node that we expect
8787
will get us disconnected, eg an invalid block."""
8888
self.send_message(message)
89-
success = wait_until(lambda: not self.connected, timeout=timeout)
90-
if not success:
91-
logger.error("send_await_disconnect failed!")
92-
raise AssertionError("send_await_disconnect failed!")
93-
return success
89+
wait_until(lambda: not self.connected, timeout=timeout, lock=mininode_lock)
9490

9591
class CompactBlocksTest(BitcoinTestFramework):
9692
def __init__(self):
@@ -150,9 +146,7 @@ def test_sendcmpct(self, node, test_node, preferred_version, old_node=None):
150146
# Make sure we get a SENDCMPCT message from our peer
151147
def received_sendcmpct():
152148
return (len(test_node.last_sendcmpct) > 0)
153-
got_message = wait_until(received_sendcmpct, timeout=30)
154-
assert(received_sendcmpct())
155-
assert(got_message)
149+
wait_until(received_sendcmpct, timeout=30, lock=mininode_lock)
156150
with mininode_lock:
157151
# Check that the first version received is the preferred one
158152
assert_equal(test_node.last_sendcmpct[0].version, preferred_version)
@@ -167,7 +161,6 @@ def check_announcement_of_new_block(node, peer, predicate):
167161
block_hash = int(node.generate(1)[0], 16)
168162
peer.wait_for_block_announcement(block_hash, timeout=30)
169163
assert(peer.block_announced)
170-
assert(got_message)
171164

172165
with mininode_lock:
173166
assert predicate(peer), (
@@ -282,7 +275,7 @@ def test_compactblock_construction(self, node, test_node, version, use_witness_a
282275

283276
# Wait until we've seen the block announcement for the resulting tip
284277
tip = int(node.getbestblockhash(), 16)
285-
assert(test_node.wait_for_block_announcement(tip))
278+
test_node.wait_for_block_announcement(tip)
286279

287280
# Make sure we will receive a fast-announce compact block
288281
self.request_cb_announcements(test_node, node, version)
@@ -297,8 +290,7 @@ def test_compactblock_construction(self, node, test_node, version, use_witness_a
297290
block.rehash()
298291

299292
# Wait until the block was announced (via compact blocks)
300-
wait_until(test_node.received_block_announcement, timeout=30)
301-
assert(test_node.received_block_announcement())
293+
wait_until(test_node.received_block_announcement, timeout=30, lock=mininode_lock)
302294

303295
# Now fetch and check the compact block
304296
header_and_shortids = None
@@ -314,8 +306,7 @@ def test_compactblock_construction(self, node, test_node, version, use_witness_a
314306
inv = CInv(4, block_hash) # 4 == "CompactBlock"
315307
test_node.send_message(msg_getdata([inv]))
316308

317-
wait_until(test_node.received_block_announcement, timeout=30)
318-
assert(test_node.received_block_announcement())
309+
wait_until(test_node.received_block_announcement, timeout=30, lock=mininode_lock)
319310

320311
# Now fetch and check the compact block
321312
header_and_shortids = None
@@ -386,13 +377,11 @@ def test_compactblock_requests(self, node, test_node, version, segwit):
386377

387378
if announce == "inv":
388379
test_node.send_message(msg_inv([CInv(2, block.sha256)]))
389-
success = wait_until(lambda: "getheaders" in test_node.last_message, timeout=30)
390-
assert(success)
380+
wait_until(lambda: "getheaders" in test_node.last_message, timeout=30, lock=mininode_lock)
391381
test_node.send_header_for_blocks([block])
392382
else:
393383
test_node.send_header_for_blocks([block])
394-
success = wait_until(lambda: "getdata" in test_node.last_message, timeout=30)
395-
assert(success)
384+
wait_until(lambda: "getdata" in test_node.last_message, timeout=30, lock=mininode_lock)
396385
assert_equal(len(test_node.last_message["getdata"].inv), 1)
397386
assert_equal(test_node.last_message["getdata"].inv[0].type, 4)
398387
assert_equal(test_node.last_message["getdata"].inv[0].hash, block.sha256)
@@ -571,8 +560,7 @@ def test_incorrect_blocktxn_response(self, node, test_node, version):
571560
assert_equal(int(node.getbestblockhash(), 16), block.hashPrevBlock)
572561

573562
# We should receive a getdata request
574-
success = wait_until(lambda: "getdata" in test_node.last_message, timeout=10)
575-
assert(success)
563+
wait_until(lambda: "getdata" in test_node.last_message, timeout=10, lock=mininode_lock)
576564
assert_equal(len(test_node.last_message["getdata"].inv), 1)
577565
assert(test_node.last_message["getdata"].inv[0].type == 2 or test_node.last_message["getdata"].inv[0].type == 2|MSG_WITNESS_FLAG)
578566
assert_equal(test_node.last_message["getdata"].inv[0].hash, block.sha256)
@@ -599,8 +587,7 @@ def test_getblocktxn_handler(self, node, test_node, version):
599587
num_to_request = random.randint(1, len(block.vtx))
600588
msg.block_txn_request.from_absolute(sorted(random.sample(range(len(block.vtx)), num_to_request)))
601589
test_node.send_message(msg)
602-
success = wait_until(lambda: "blocktxn" in test_node.last_message, timeout=10)
603-
assert(success)
590+
wait_until(lambda: "blocktxn" in test_node.last_message, timeout=10, lock=mininode_lock)
604591

605592
[tx.calc_sha256() for tx in block.vtx]
606593
with mininode_lock:
@@ -639,22 +626,20 @@ def test_compactblocks_not_at_tip(self, node, test_node):
639626
for i in range(MAX_CMPCTBLOCK_DEPTH + 1):
640627
test_node.clear_block_announcement()
641628
new_blocks.append(node.generate(1)[0])
642-
wait_until(test_node.received_block_announcement, timeout=30)
629+
wait_until(test_node.received_block_announcement, timeout=30, lock=mininode_lock)
643630

644631
test_node.clear_block_announcement()
645632
test_node.send_message(msg_getdata([CInv(4, int(new_blocks[0], 16))]))
646-
success = wait_until(lambda: "cmpctblock" in test_node.last_message, timeout=30)
647-
assert(success)
633+
wait_until(lambda: "cmpctblock" in test_node.last_message, timeout=30, lock=mininode_lock)
648634

649635
test_node.clear_block_announcement()
650636
node.generate(1)
651-
wait_until(test_node.received_block_announcement, timeout=30)
637+
wait_until(test_node.received_block_announcement, timeout=30, lock=mininode_lock)
652638
test_node.clear_block_announcement()
653639
with mininode_lock:
654640
test_node.last_message.pop("block", None)
655641
test_node.send_message(msg_getdata([CInv(4, int(new_blocks[0], 16))]))
656-
success = wait_until(lambda: "block" in test_node.last_message, timeout=30)
657-
assert(success)
642+
wait_until(lambda: "block" in test_node.last_message, timeout=30, lock=mininode_lock)
658643
with mininode_lock:
659644
test_node.last_message["block"].block.calc_sha256()
660645
assert_equal(test_node.last_message["block"].block.sha256, int(new_blocks[0], 16))
@@ -705,7 +690,7 @@ def test_end_to_end_block_relay(self, node, listeners):
705690
node.submitblock(ToHex(block))
706691

707692
for l in listeners:
708-
wait_until(lambda: l.received_block_announcement(), timeout=30)
693+
wait_until(lambda: l.received_block_announcement(), timeout=30, lock=mininode_lock)
709694
with mininode_lock:
710695
for l in listeners:
711696
assert "cmpctblock" in l.last_message

test/functional/p2p-leaktests.py

+7-7
Original file line numberDiff line numberDiff line change
@@ -119,11 +119,11 @@ def run_test(self):
119119

120120
NetworkThread().start() # Start up network handling in another thread
121121

122-
assert wait_until(lambda: no_version_bannode.ever_connected, timeout=10)
123-
assert wait_until(lambda: no_version_idlenode.ever_connected, timeout=10)
124-
assert wait_until(lambda: no_verack_idlenode.version_received, timeout=10)
125-
assert wait_until(lambda: unsupported_service_bit5_node.ever_connected, timeout=10)
126-
assert wait_until(lambda: unsupported_service_bit7_node.ever_connected, timeout=10)
122+
wait_until(lambda: no_version_bannode.ever_connected, timeout=10, lock=mininode_lock)
123+
wait_until(lambda: no_version_idlenode.ever_connected, timeout=10, lock=mininode_lock)
124+
wait_until(lambda: no_verack_idlenode.version_received, timeout=10, lock=mininode_lock)
125+
wait_until(lambda: unsupported_service_bit5_node.ever_connected, timeout=10, lock=mininode_lock)
126+
wait_until(lambda: unsupported_service_bit7_node.ever_connected, timeout=10, lock=mininode_lock)
127127

128128
# Mine a block and make sure that it's not sent to the connected nodes
129129
self.nodes[0].generate(1)
@@ -158,8 +158,8 @@ def run_test(self):
158158
allowed_service_bit5_node.add_connection(connections[5])
159159
allowed_service_bit7_node.add_connection(connections[6])
160160

161-
assert wait_until(lambda: allowed_service_bit5_node.message_count["verack"], timeout=10)
162-
assert wait_until(lambda: allowed_service_bit7_node.message_count["verack"], timeout=10)
161+
wait_until(lambda: allowed_service_bit5_node.message_count["verack"], timeout=10, lock=mininode_lock)
162+
wait_until(lambda: allowed_service_bit7_node.message_count["verack"], timeout=10, lock=mininode_lock)
163163

164164
if __name__ == '__main__':
165165
P2PLeakTest().main()

test/functional/sendheaders.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ def check_last_announcement(self, headers=None, inv=None):
128128
expect_headers = headers if headers != None else []
129129
expect_inv = inv if inv != None else []
130130
test_function = lambda: self.block_announced
131-
assert(wait_until(test_function, timeout=60))
131+
wait_until(test_function, timeout=60, lock=mininode_lock)
132132
with mininode_lock:
133133
self.block_announced = False
134134

@@ -155,12 +155,12 @@ def wait_for_getdata(self, hash_list, timeout=60):
155155
return
156156

157157
test_function = lambda: "getdata" in self.last_message and [x.hash for x in self.last_message["getdata"].inv] == hash_list
158-
assert(wait_until(test_function, timeout=timeout))
158+
wait_until(test_function, timeout=timeout, lock=mininode_lock)
159159
return
160160

161161
def wait_for_block_announcement(self, block_hash, timeout=60):
162162
test_function = lambda: self.last_blockhash_announced == block_hash
163-
assert(wait_until(test_function, timeout=timeout))
163+
wait_until(test_function, timeout=timeout, lock=mininode_lock)
164164
return
165165

166166
def send_header_for_blocks(self, new_blocks):

test/functional/test_framework/comptool.py

+5-7
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
from .mininode import *
2121
from .blockstore import BlockStore, TxStore
22-
from .util import p2p_port
22+
from .util import p2p_port, wait_until
2323

2424
import logging
2525

@@ -189,15 +189,15 @@ def clear_all_connections(self):
189189
def wait_for_disconnections(self):
190190
def disconnected():
191191
return all(node.closed for node in self.test_nodes)
192-
return wait_until(disconnected, timeout=10)
192+
wait_until(disconnected, timeout=10, lock=mininode_lock)
193193

194194
def wait_for_verack(self):
195195
return all(node.wait_for_verack() for node in self.test_nodes)
196196

197197
def wait_for_pings(self, counter):
198198
def received_pongs():
199199
return all(node.received_ping_response(counter) for node in self.test_nodes)
200-
return wait_until(received_pongs)
200+
wait_until(received_pongs, lock=mininode_lock)
201201

202202
# sync_blocks: Wait for all connections to request the blockhash given
203203
# then send get_headers to find out the tip of each node, and synchronize
@@ -210,8 +210,7 @@ def blocks_requested():
210210
)
211211

212212
# --> error if not requested
213-
if not wait_until(blocks_requested, attempts=20*num_blocks):
214-
raise AssertionError("Not all nodes requested block")
213+
wait_until(blocks_requested, attempts=20*num_blocks, lock=mininode_lock)
215214

216215
# Send getheaders message
217216
[ c.cb.send_getheaders() for c in self.connections ]
@@ -231,8 +230,7 @@ def transaction_requested():
231230
)
232231

233232
# --> error if not requested
234-
if not wait_until(transaction_requested, attempts=20*num_events):
235-
raise AssertionError("Not all nodes requested transaction")
233+
wait_until(transaction_requested, attempts=20*num_events, lock=mininode_lock)
236234

237235
# Get the mempool
238236
[ c.cb.send_mempool() for c in self.connections ]

0 commit comments

Comments
 (0)