mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-07-12 20:02:35 +02:00
[tests] use TestNode p2p connection in tests
This commit is contained in:
@ -54,14 +54,12 @@ class BIP66Test(BitcoinTestFramework):
|
||||
self.setup_clean_chain = True
|
||||
|
||||
def run_test(self):
|
||||
node0 = NodeConnCB()
|
||||
connections = []
|
||||
connections.append(NodeConn('127.0.0.1', p2p_port(0), self.nodes[0], node0))
|
||||
node0.add_connection(connections[0])
|
||||
self.nodes[0].add_p2p_connection(NodeConnCB())
|
||||
|
||||
NetworkThread().start() # Start up network handling in another thread
|
||||
|
||||
# wait_for_verack ensures that the P2P connection is fully up.
|
||||
node0.wait_for_verack()
|
||||
self.nodes[0].p2p.wait_for_verack()
|
||||
|
||||
self.log.info("Mining %d blocks", DERSIG_HEIGHT - 2)
|
||||
self.coinbase_blocks = self.nodes[0].generate(DERSIG_HEIGHT - 2)
|
||||
@ -83,7 +81,7 @@ class BIP66Test(BitcoinTestFramework):
|
||||
block.rehash()
|
||||
block.solve()
|
||||
|
||||
node0.send_and_ping(msg_block(block))
|
||||
self.nodes[0].p2p.send_and_ping(msg_block(block))
|
||||
assert_equal(self.nodes[0].getbestblockhash(), block.hash)
|
||||
|
||||
self.log.info("Test that blocks must now be at least version 3")
|
||||
@ -93,15 +91,15 @@ class BIP66Test(BitcoinTestFramework):
|
||||
block.nVersion = 2
|
||||
block.rehash()
|
||||
block.solve()
|
||||
node0.send_and_ping(msg_block(block))
|
||||
self.nodes[0].p2p.send_and_ping(msg_block(block))
|
||||
assert_equal(int(self.nodes[0].getbestblockhash(), 16), tip)
|
||||
|
||||
wait_until(lambda: "reject" in node0.last_message.keys(), lock=mininode_lock)
|
||||
wait_until(lambda: "reject" in self.nodes[0].p2p.last_message.keys(), lock=mininode_lock)
|
||||
with mininode_lock:
|
||||
assert_equal(node0.last_message["reject"].code, REJECT_OBSOLETE)
|
||||
assert_equal(node0.last_message["reject"].reason, b'bad-version(0x00000002)')
|
||||
assert_equal(node0.last_message["reject"].data, block.sha256)
|
||||
del node0.last_message["reject"]
|
||||
assert_equal(self.nodes[0].p2p.last_message["reject"].code, REJECT_OBSOLETE)
|
||||
assert_equal(self.nodes[0].p2p.last_message["reject"].reason, b'bad-version(0x00000002)')
|
||||
assert_equal(self.nodes[0].p2p.last_message["reject"].data, block.sha256)
|
||||
del self.nodes[0].p2p.last_message["reject"]
|
||||
|
||||
self.log.info("Test that transactions with non-DER signatures cannot appear in a block")
|
||||
block.nVersion = 3
|
||||
@ -114,7 +112,7 @@ class BIP66Test(BitcoinTestFramework):
|
||||
# First we show that this tx is valid except for DERSIG by getting it
|
||||
# accepted to the mempool (which we can achieve with
|
||||
# -promiscuousmempoolflags).
|
||||
node0.send_and_ping(msg_tx(spendtx))
|
||||
self.nodes[0].p2p.send_and_ping(msg_tx(spendtx))
|
||||
assert spendtx.hash in self.nodes[0].getrawmempool()
|
||||
|
||||
# Now we verify that a block with this transaction is invalid.
|
||||
@ -123,23 +121,23 @@ class BIP66Test(BitcoinTestFramework):
|
||||
block.rehash()
|
||||
block.solve()
|
||||
|
||||
node0.send_and_ping(msg_block(block))
|
||||
self.nodes[0].p2p.send_and_ping(msg_block(block))
|
||||
assert_equal(int(self.nodes[0].getbestblockhash(), 16), tip)
|
||||
|
||||
wait_until(lambda: "reject" in node0.last_message.keys(), lock=mininode_lock)
|
||||
wait_until(lambda: "reject" in self.nodes[0].p2p.last_message.keys(), lock=mininode_lock)
|
||||
with mininode_lock:
|
||||
# We can receive different reject messages depending on whether
|
||||
# bitcoind is running with multiple script check threads. If script
|
||||
# check threads are not in use, then transaction script validation
|
||||
# happens sequentially, and bitcoind produces more specific reject
|
||||
# reasons.
|
||||
assert node0.last_message["reject"].code in [REJECT_INVALID, REJECT_NONSTANDARD]
|
||||
assert_equal(node0.last_message["reject"].data, block.sha256)
|
||||
if node0.last_message["reject"].code == REJECT_INVALID:
|
||||
assert self.nodes[0].p2p.last_message["reject"].code in [REJECT_INVALID, REJECT_NONSTANDARD]
|
||||
assert_equal(self.nodes[0].p2p.last_message["reject"].data, block.sha256)
|
||||
if self.nodes[0].p2p.last_message["reject"].code == REJECT_INVALID:
|
||||
# Generic rejection when a block is invalid
|
||||
assert_equal(node0.last_message["reject"].reason, b'block-validation-failed')
|
||||
assert_equal(self.nodes[0].p2p.last_message["reject"].reason, b'block-validation-failed')
|
||||
else:
|
||||
assert b'Non-canonical DER signature' in node0.last_message["reject"].reason
|
||||
assert b'Non-canonical DER signature' in self.nodes[0].p2p.last_message["reject"].reason
|
||||
|
||||
self.log.info("Test that a version 3 block with a DERSIG-compliant transaction is accepted")
|
||||
block.vtx[1] = create_transaction(self.nodes[0],
|
||||
@ -148,7 +146,7 @@ class BIP66Test(BitcoinTestFramework):
|
||||
block.rehash()
|
||||
block.solve()
|
||||
|
||||
node0.send_and_ping(msg_block(block))
|
||||
self.nodes[0].p2p.send_and_ping(msg_block(block))
|
||||
assert_equal(int(self.nodes[0].getbestblockhash(), 16), block.sha256)
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
Reference in New Issue
Block a user