diff options
| author | MarcoFalke <[email protected]> | 2016-11-14 20:27:28 +0100 |
|---|---|---|
| committer | MarcoFalke <[email protected]> | 2016-11-14 20:28:08 +0100 |
| commit | b42291334651fff46dbfe5947a726f65cb9d7dfe (patch) | |
| tree | 6fa3c614fa36960448783218c35fcb7a7efee1a0 | |
| parent | Merge #9145: [qt] Make network disabled icon 50% opaque (diff) | |
| parent | [qa] Avoid 2 list comprehensions in sync_blocks (diff) | |
| download | discoin-b42291334651fff46dbfe5947a726f65cb9d7dfe.tar.xz discoin-b42291334651fff46dbfe5947a726f65cb9d7dfe.zip | |
Merge #9136: sync_blocks cleanup
7943b13 [qa] Avoid 2 list comprehensions in sync_blocks (Russell Yanofsky)
05e57cc [qa] Fix sync_blocks timeout argument (Russell Yanofsky)
fd6bb70 [qa] Improve sync_blocks error messages. (Russell Yanofsky)
| -rw-r--r-- | qa/rpc-tests/test_framework/util.py | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/qa/rpc-tests/test_framework/util.py b/qa/rpc-tests/test_framework/util.py index b5ef0689b..bf13b7fd8 100644 --- a/qa/rpc-tests/test_framework/util.py +++ b/qa/rpc-tests/test_framework/util.py @@ -123,19 +123,26 @@ def str_to_b64str(string): def sync_blocks(rpc_connections, *, wait=1, timeout=60): """ - Wait until everybody has the same tip + Wait until everybody has the same tip. + + sync_blocks needs to be called with an rpc_connections set that has least + one node already synced to the latest, stable tip, otherwise there's a + chance it might return before all nodes are stably synced. """ maxheight = 0 - while timeout > 0: + start_time = cur_time = time.time() + while cur_time <= start_time + timeout: tips = [r.waitforblockheight(maxheight, int(wait * 1000)) for r in rpc_connections] heights = [t["height"] for t in tips] - if tips == [tips[0]] * len(tips): + if all(t == tips[0] for t in tips): return - if heights == [heights[0]] * len(heights): - raise AssertionError("Block sync failed: (Hashes don't match)") - timeout -= wait + if all(h == heights[0] for h in heights): + raise AssertionError("Block sync failed, mismatched block hashes:{}".format( + "".join("\n {!r}".format(tip) for tip in tips))) maxheight = max(heights) - raise AssertionError("Block sync failed with heights: {}".format(heights)) + cur_time = time.time() + raise AssertionError("Block sync to height {} timed out:{}".format( + maxheight, "".join("\n {!r}".format(tip) for tip in tips))) def sync_chain(rpc_connections, *, wait=1, timeout=60): """ |