aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorJohn Newbery <john@johnnewbery.com>2017-03-29 14:16:42 -0400
committerJohn Newbery <john@johnnewbery.com>2017-03-30 08:39:12 -0400
commit6426716a9940eea0e4d6e53c55282de5de473784 (patch)
tree5a20532130210807955ce88f71cf6d529f04789c /test
parent8ac80412867118172dc4172494304e19969e9489 (diff)
downloadbitcoin-6426716a9940eea0e4d6e53c55282de5de473784.tar.xz
Add send_await_disconnect() method to p2p-compactblocks.py
p2p-compactblocks was incorrectly using sync_with_ping() when sending in invalid block. The node would disconnect us and never respond to the ping, so the sync_with_ping would just time out after 30 seconds and continue with the test. This commit adds a send_await_disconnect() method that sends the message, and then waits for the node to disconnect us. In this commit I've added the method to p2p-compactblocks.py, but a future commit could move it to mininode since it could be useful more generally. This commit reduces the p2p-compactblock runtime by 30 seconds.
Diffstat (limited to 'test')
-rwxr-xr-xtest/functional/p2p-compactblocks.py23
1 files changed, 21 insertions, 2 deletions
diff --git a/test/functional/p2p-compactblocks.py b/test/functional/p2p-compactblocks.py
index 86b767b98a..bf8d113767 100755
--- a/test/functional/p2p-compactblocks.py
+++ b/test/functional/p2p-compactblocks.py
@@ -32,6 +32,13 @@ class TestNode(NodeConnCB):
# This is for synchronizing the p2p message traffic,
# so we can eg wait until a particular block is announced.
self.set_announced_blockhashes = set()
+ self.connected = False
+
+ def on_open(self, conn):
+ self.connected = True
+
+ def on_close(self, conn):
+ self.connected = False
def on_sendcmpct(self, conn, message):
self.last_sendcmpct.append(message)
@@ -107,6 +114,18 @@ class TestNode(NodeConnCB):
return (block_hash in self.set_announced_blockhashes)
return wait_until(received_hash, timeout=timeout)
+ def send_await_disconnect(self, message, timeout=30):
+ """Sends a message to the node and wait for disconnect.
+
+ This is used when we want to send a message into the node that we expect
+ will get us disconnected, eg an invalid block."""
+ self.send_message(message)
+ success = wait_until(lambda: not self.connected, timeout=timeout)
+ if not success:
+ logger.error("send_await_disconnect failed!")
+ raise AssertionError("send_await_disconnect failed!")
+ return success
+
class CompactBlocksTest(BitcoinTestFramework):
def __init__(self):
super().__init__()
@@ -274,8 +293,8 @@ class CompactBlocksTest(BitcoinTestFramework):
# This index will be too high
prefilled_txn = PrefilledTransaction(1, block.vtx[0])
cmpct_block.prefilled_txn = [prefilled_txn]
- self.test_node.send_and_ping(msg_cmpctblock(cmpct_block))
- assert(int(self.nodes[0].getbestblockhash(), 16) == block.hashPrevBlock)
+ self.test_node.send_await_disconnect(msg_cmpctblock(cmpct_block))
+ assert_equal(int(self.nodes[0].getbestblockhash(), 16), block.hashPrevBlock)
# Compare the generated shortids to what we expect based on BIP 152, given
# bitcoind's choice of nonce.