add waitfornewblock/waitforblock/waitforblockheight rpcs and use them for tests

waitfornewblock waits until a new block is received, or the timeout expires, then
returns the current block height/hash.

waitforblock waits for a specific blockhash, or until the timeout expires, then
returns the current block height/hash. If the target blockhash is the current
tip, it will return immediately.

waitforblockheight waits until the tip has reached a certain height or higher,
then returns the current height and hash.

waitforblockheight is used to avoid polling in the rpc tests.
This commit is contained in:
Cory Fields
2016-09-01 21:55:21 -04:00
parent 5b2ea29cf4
commit d6a5dc4a2e
5 changed files with 168 additions and 2 deletions

View File

@@ -125,12 +125,16 @@ def sync_blocks(rpc_connections, wait=1, timeout=60):
"""
Wait until everybody has the same tip
"""
maxheight = 0
while timeout > 0:
tips = [ x.getbestblockhash() for x in rpc_connections ]
tips = [ x.waitforblockheight(maxheight, int(wait * 1000)) for x in rpc_connections ]
heights = [ x["height"] for x in tips ]
if tips == [ tips[0] ]*len(tips):
return True
time.sleep(wait)
if heights == [ heights[0] ]*len(heights): #heights are the same but hashes are not
raise AssertionError("Block sync failed")
timeout -= wait
maxheight = max(heights)
raise AssertionError("Block sync failed")
def sync_mempools(rpc_connections, wait=1, timeout=60):