From 54b8c580b74d2db7e1012506e6c08a35165bfa9f Mon Sep 17 00:00:00 2001 From: Conor Scott Date: Tue, 13 Feb 2018 16:54:38 -0500 Subject: [test] Fix nits leftover from 11771 Remove unused variable reassignments in p2p_invalid_tx.py and call send_txs_and_test() with valid transaction. --- test/functional/p2p_invalid_tx.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'test') diff --git a/test/functional/p2p_invalid_tx.py b/test/functional/p2p_invalid_tx.py index 64fada38e2..69ce529ad6 100755 --- a/test/functional/p2p_invalid_tx.py +++ b/test/functional/p2p_invalid_tx.py @@ -33,12 +33,10 @@ class InvalidTxRequestTest(BitcoinTestFramework): self.log.info("Create a new block with an anyone-can-spend coinbase.") height = 1 block = create_block(tip, create_coinbase(height), block_time) - block_time += 1 block.solve() # Save the coinbase for later block1 = block tip = block.sha256 - height += 1 node.p2p.send_blocks_and_test([block], node, success=True) self.log.info("Mature the block.") @@ -49,7 +47,10 @@ class InvalidTxRequestTest(BitcoinTestFramework): tx1 = create_transaction(block1.vtx[0], 0, b'\x64', 50 * COIN - 12000) node.p2p.send_txs_and_test([tx1], node, success=False, reject_code=16, reject_reason=b'mandatory-script-verify-flag-failed (Invalid OP_IF construction)') - # TODO: test further transactions... + # Verify valid transaction + tx1 = create_transaction(block1.vtx[0], 0, b'', 50 * COIN - 12000) + node.p2p.send_txs_and_test([tx1], node, success=True) + if __name__ == '__main__': InvalidTxRequestTest().main() -- cgit v1.2.3 From 2b7064eda7b941c85d23eb77656677df3e7ec140 Mon Sep 17 00:00:00 2001 From: John Newbery Date: Wed, 22 Nov 2017 11:57:06 -0500 Subject: [tests] Fix flake8 warnings in invalidblockrequest --- test/functional/p2p_invalid_block.py | 51 ++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 29 deletions(-) (limited to 'test') diff --git a/test/functional/p2p_invalid_block.py b/test/functional/p2p_invalid_block.py index edcade63c1..f6f060a9ea 100755 --- a/test/functional/p2p_invalid_block.py +++ b/test/functional/p2p_invalid_block.py @@ -10,20 +10,17 @@ In this test we connect to one node over p2p, and test block requests: 3) Invalid block with bad coinbase value should be rejected and not re-requested. """ - -from test_framework.test_framework import ComparisonTestFramework -from test_framework.util import * -from test_framework.comptool import TestManager, TestInstance, RejectResult -from test_framework.blocktools import * -from test_framework.mininode import network_thread_start import copy import time -# Use the ComparisonTestFramework with 1 node: only use --testbinary. -class InvalidBlockRequestTest(ComparisonTestFramework): +from test_framework.blocktools import create_block, create_coinbase, create_transaction +from test_framework.comptool import RejectResult, TestInstance, TestManager +from test_framework.messages import COIN +from test_framework.mininode import network_thread_start +from test_framework.test_framework import ComparisonTestFramework +from test_framework.util import assert_equal - ''' Can either run this test as 1 node with expected answers, or two and compare them. - Change the "outcome" variable from each TestInstance object to only do the comparison. ''' +class InvalidBlockRequestTest(ComparisonTestFramework): def set_test_params(self): self.num_nodes = 1 self.setup_clean_chain = True @@ -39,11 +36,10 @@ class InvalidBlockRequestTest(ComparisonTestFramework): def get_tests(self): if self.tip is None: self.tip = int("0x" + self.nodes[0].getbestblockhash(), 0) - self.block_time = int(time.time())+1 + self.block_time = int(time.time()) + 1 + + self.log.info("Create a new block with an anyone-can-spend coinbase") - ''' - Create a new block with an anyone-can-spend coinbase - ''' height = 1 block = create_block(self.tip, create_coinbase(height), self.block_time) self.block_time += 1 @@ -54,9 +50,8 @@ class InvalidBlockRequestTest(ComparisonTestFramework): height += 1 yield TestInstance([[block, True]]) - ''' - Now we need that block to mature so we can spend the coinbase. - ''' + self.log.info("Mature the block.") + test = TestInstance(sync_every_block=False) for i in range(100): block = create_block(self.tip, create_coinbase(height), self.block_time) @@ -67,13 +62,12 @@ class InvalidBlockRequestTest(ComparisonTestFramework): height += 1 yield test - ''' - Now we use merkle-root malleability to generate an invalid block with - same blockheader. - Manufacture a block with 3 transactions (coinbase, spend of prior - coinbase, spend of that spend). Duplicate the 3rd transaction to - leave merkle root and blockheader unchanged but invalidate the block. - ''' + # Use merkle-root malleability to generate an invalid block with + # same blockheader. + # Manufacture a block with 3 transactions (coinbase, spend of prior + # coinbase, spend of that spend). Duplicate the 3rd transaction to + # leave merkle root and blockheader unchanged but invalidate the block. + self.log.info("Test merkle root malleability.") block2 = create_block(self.tip, create_coinbase(height), self.block_time) self.block_time += 1 @@ -98,13 +92,12 @@ class InvalidBlockRequestTest(ComparisonTestFramework): yield TestInstance([[block2, RejectResult(16, b'bad-txns-duplicate')], [block2_orig, True]]) height += 1 - ''' - Make sure that a totally screwed up block is not valid. - ''' + self.log.info("Test very broken block.") + block3 = create_block(self.tip, create_coinbase(height), self.block_time) self.block_time += 1 - block3.vtx[0].vout[0].nValue = 100 * COIN # Too high! - block3.vtx[0].sha256=None + block3.vtx[0].vout[0].nValue = 100 * COIN # Too high! + block3.vtx[0].sha256 = None block3.vtx[0].calc_sha256() block3.hashMerkleRoot = block3.calc_merkle_root() block3.rehash() -- cgit v1.2.3 From e97b113b049fa1ca7152373d6ea911d56bf7ef4e Mon Sep 17 00:00:00 2001 From: John Newbery Date: Wed, 22 Nov 2017 11:45:35 -0500 Subject: [tests] Change invalidblockrequest to use BitcoinTestFramework [tests] update tests from changes to mininode in #11771 - added by @conscott [tests] trivial update to hex conversion for readability - added by @conscott --- test/functional/p2p_invalid_block.py | 69 ++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 39 deletions(-) (limited to 'test') diff --git a/test/functional/p2p_invalid_block.py b/test/functional/p2p_invalid_block.py index f6f060a9ea..e1f328ba77 100755 --- a/test/functional/p2p_invalid_block.py +++ b/test/functional/p2p_invalid_block.py @@ -11,56 +11,49 @@ In this test we connect to one node over p2p, and test block requests: re-requested. """ import copy -import time from test_framework.blocktools import create_block, create_coinbase, create_transaction -from test_framework.comptool import RejectResult, TestInstance, TestManager from test_framework.messages import COIN -from test_framework.mininode import network_thread_start -from test_framework.test_framework import ComparisonTestFramework +from test_framework.mininode import network_thread_start, P2PDataStore +from test_framework.test_framework import BitcoinTestFramework from test_framework.util import assert_equal -class InvalidBlockRequestTest(ComparisonTestFramework): +class InvalidBlockRequestTest(BitcoinTestFramework): def set_test_params(self): self.num_nodes = 1 self.setup_clean_chain = True + self.extra_args = [["-whitelist=127.0.0.1"]] def run_test(self): - test = TestManager(self, self.options.tmpdir) - test.add_all_connections(self.nodes) - self.tip = None - self.block_time = None + # Add p2p connection to node0 + node = self.nodes[0] # convenience reference to the node + node.add_p2p_connection(P2PDataStore()) + network_thread_start() - test.run() + node.p2p.wait_for_verack() - def get_tests(self): - if self.tip is None: - self.tip = int("0x" + self.nodes[0].getbestblockhash(), 0) - self.block_time = int(time.time()) + 1 + best_block = node.getblock(node.getbestblockhash()) + tip = int(node.getbestblockhash(), 16) + height = best_block["height"] + 1 + block_time = best_block["time"] + 1 self.log.info("Create a new block with an anyone-can-spend coinbase") height = 1 - block = create_block(self.tip, create_coinbase(height), self.block_time) - self.block_time += 1 + block = create_block(tip, create_coinbase(height), block_time) block.solve() # Save the coinbase for later - self.block1 = block - self.tip = block.sha256 - height += 1 - yield TestInstance([[block, True]]) + block1 = block + tip = block.sha256 + node.p2p.send_blocks_and_test([block1], node, True) self.log.info("Mature the block.") + node.generate(100) - test = TestInstance(sync_every_block=False) - for i in range(100): - block = create_block(self.tip, create_coinbase(height), self.block_time) - block.solve() - self.tip = block.sha256 - self.block_time += 1 - test.blocks_and_transactions.append([block, True]) - height += 1 - yield test + best_block = node.getblock(node.getbestblockhash()) + tip = int(node.getbestblockhash(), 16) + height = best_block["height"] + 1 + block_time = best_block["time"] + 1 # Use merkle-root malleability to generate an invalid block with # same blockheader. @@ -68,11 +61,12 @@ class InvalidBlockRequestTest(ComparisonTestFramework): # coinbase, spend of that spend). Duplicate the 3rd transaction to # leave merkle root and blockheader unchanged but invalidate the block. self.log.info("Test merkle root malleability.") - block2 = create_block(self.tip, create_coinbase(height), self.block_time) - self.block_time += 1 + + block2 = create_block(tip, create_coinbase(height), block_time) + block_time += 1 # b'0x51' is OP_TRUE - tx1 = create_transaction(self.block1.vtx[0], 0, b'\x51', 50 * COIN) + tx1 = create_transaction(block1.vtx[0], 0, b'\x51', 50 * COIN) tx2 = create_transaction(tx1, 0, b'\x51', 50 * COIN) block2.vtx.extend([tx1, tx2]) @@ -88,14 +82,12 @@ class InvalidBlockRequestTest(ComparisonTestFramework): assert_equal(orig_hash, block2.rehash()) assert(block2_orig.vtx != block2.vtx) - self.tip = block2.sha256 - yield TestInstance([[block2, RejectResult(16, b'bad-txns-duplicate')], [block2_orig, True]]) - height += 1 + node.p2p.send_blocks_and_test([block2], node, False, False, 16, b'bad-txns-duplicate') self.log.info("Test very broken block.") - block3 = create_block(self.tip, create_coinbase(height), self.block_time) - self.block_time += 1 + block3 = create_block(tip, create_coinbase(height), block_time) + block_time += 1 block3.vtx[0].vout[0].nValue = 100 * COIN # Too high! block3.vtx[0].sha256 = None block3.vtx[0].calc_sha256() @@ -103,8 +95,7 @@ class InvalidBlockRequestTest(ComparisonTestFramework): block3.rehash() block3.solve() - yield TestInstance([[block3, RejectResult(16, b'bad-cb-amount')]]) - + node.p2p.send_blocks_and_test([block3], node, False, False, 16, b'bad-cb-amount') if __name__ == '__main__': InvalidBlockRequestTest().main() -- cgit v1.2.3