mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-12-03 09:23:01 +01:00
[tests] use TestNode p2p connection in tests
This commit is contained in:
@@ -39,13 +39,12 @@ from test_framework.mininode import (CBlockHeader,
|
||||
CTxIn,
|
||||
CTxOut,
|
||||
NetworkThread,
|
||||
NodeConn,
|
||||
NodeConnCB,
|
||||
msg_block,
|
||||
msg_headers)
|
||||
from test_framework.script import (CScript, OP_TRUE)
|
||||
from test_framework.test_framework import BitcoinTestFramework
|
||||
from test_framework.util import (p2p_port, assert_equal)
|
||||
from test_framework.util import assert_equal
|
||||
|
||||
class BaseNode(NodeConnCB):
|
||||
def send_header_for_blocks(self, new_blocks):
|
||||
@@ -65,13 +64,13 @@ class AssumeValidTest(BitcoinTestFramework):
|
||||
# signature so we can pass in the block hash as assumevalid.
|
||||
self.start_node(0)
|
||||
|
||||
def send_blocks_until_disconnected(self, node):
|
||||
def send_blocks_until_disconnected(self, p2p_conn):
|
||||
"""Keep sending blocks to the node until we're disconnected."""
|
||||
for i in range(len(self.blocks)):
|
||||
if not node.connection:
|
||||
if not p2p_conn.connection:
|
||||
break
|
||||
try:
|
||||
node.send_message(msg_block(self.blocks[i]))
|
||||
p2p_conn.send_message(msg_block(self.blocks[i]))
|
||||
except IOError as e:
|
||||
assert str(e) == 'Not connected, no pushbuf'
|
||||
break
|
||||
@@ -97,13 +96,10 @@ class AssumeValidTest(BitcoinTestFramework):
|
||||
def run_test(self):
|
||||
|
||||
# Connect to node0
|
||||
node0 = BaseNode()
|
||||
connections = []
|
||||
connections.append(NodeConn('127.0.0.1', p2p_port(0), self.nodes[0], node0))
|
||||
node0.add_connection(connections[0])
|
||||
p2p0 = self.nodes[0].add_p2p_connection(BaseNode())
|
||||
|
||||
NetworkThread().start() # Start up network handling in another thread
|
||||
node0.wait_for_verack()
|
||||
self.nodes[0].p2p.wait_for_verack()
|
||||
|
||||
# Build the blockchain
|
||||
self.tip = int(self.nodes[0].getbestblockhash(), 16)
|
||||
@@ -165,37 +161,33 @@ class AssumeValidTest(BitcoinTestFramework):
|
||||
|
||||
# Start node1 and node2 with assumevalid so they accept a block with a bad signature.
|
||||
self.start_node(1, extra_args=["-assumevalid=" + hex(block102.sha256)])
|
||||
node1 = BaseNode() # connects to node1
|
||||
connections.append(NodeConn('127.0.0.1', p2p_port(1), self.nodes[1], node1))
|
||||
node1.add_connection(connections[1])
|
||||
node1.wait_for_verack()
|
||||
p2p1 = self.nodes[1].add_p2p_connection(BaseNode())
|
||||
p2p1.wait_for_verack()
|
||||
|
||||
self.start_node(2, extra_args=["-assumevalid=" + hex(block102.sha256)])
|
||||
node2 = BaseNode() # connects to node2
|
||||
connections.append(NodeConn('127.0.0.1', p2p_port(2), self.nodes[2], node2))
|
||||
node2.add_connection(connections[2])
|
||||
node2.wait_for_verack()
|
||||
p2p2 = self.nodes[2].add_p2p_connection(BaseNode())
|
||||
p2p2.wait_for_verack()
|
||||
|
||||
# send header lists to all three nodes
|
||||
node0.send_header_for_blocks(self.blocks[0:2000])
|
||||
node0.send_header_for_blocks(self.blocks[2000:])
|
||||
node1.send_header_for_blocks(self.blocks[0:2000])
|
||||
node1.send_header_for_blocks(self.blocks[2000:])
|
||||
node2.send_header_for_blocks(self.blocks[0:200])
|
||||
p2p0.send_header_for_blocks(self.blocks[0:2000])
|
||||
p2p0.send_header_for_blocks(self.blocks[2000:])
|
||||
p2p1.send_header_for_blocks(self.blocks[0:2000])
|
||||
p2p1.send_header_for_blocks(self.blocks[2000:])
|
||||
p2p2.send_header_for_blocks(self.blocks[0:200])
|
||||
|
||||
# Send blocks to node0. Block 102 will be rejected.
|
||||
self.send_blocks_until_disconnected(node0)
|
||||
self.send_blocks_until_disconnected(p2p0)
|
||||
self.assert_blockchain_height(self.nodes[0], 101)
|
||||
|
||||
# Send all blocks to node1. All blocks will be accepted.
|
||||
for i in range(2202):
|
||||
node1.send_message(msg_block(self.blocks[i]))
|
||||
p2p1.send_message(msg_block(self.blocks[i]))
|
||||
# Syncing 2200 blocks can take a while on slow systems. Give it plenty of time to sync.
|
||||
node1.sync_with_ping(120)
|
||||
p2p1.sync_with_ping(120)
|
||||
assert_equal(self.nodes[1].getblock(self.nodes[1].getbestblockhash())['height'], 2202)
|
||||
|
||||
# Send blocks to node2. Block 102 will be rejected.
|
||||
self.send_blocks_until_disconnected(node2)
|
||||
self.send_blocks_until_disconnected(p2p2)
|
||||
self.assert_blockchain_height(self.nodes[2], 101)
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
Reference in New Issue
Block a user