diff --git a/test/functional/data/invalid_txs.py b/test/functional/data/invalid_txs.py index a5147dd62ab..99c01abb2f1 100644 --- a/test/functional/data/invalid_txs.py +++ b/test/functional/data/invalid_txs.py @@ -138,6 +138,8 @@ class BadInputOutpointIndex(BadTxTemplate): # Won't be rejected - nonexistent outpoint index is treated as an orphan since the coins # database can't distinguish between spent outpoints and outpoints which never existed. reject_reason = None + # But fails in block + block_reject_reason = "bad-txns-inputs-missingorspent" expect_disconnect = False def get_tx(self): @@ -180,6 +182,8 @@ class PrevoutNullInput(BadTxTemplate): class NonexistentInput(BadTxTemplate): reject_reason = None # Added as an orphan tx. expect_disconnect = False + # But fails in block + block_reject_reason = "bad-txns-inputs-missingorspent" def get_tx(self): tx = CTransaction() @@ -229,7 +233,6 @@ class CreateSumTooLarge(BadTxTemplate): class InvalidOPIFConstruction(BadTxTemplate): reject_reason = "mandatory-script-verify-flag-failed (Invalid OP_IF construction)" expect_disconnect = True - valid_in_block = True def get_tx(self): return create_tx_with_script( @@ -278,7 +281,7 @@ def getDisabledOpcodeTemplate(opcode): 'reject_reason': "disabled opcode", 'expect_disconnect': True, 'get_tx': get_tx, - 'valid_in_block' : True + 'valid_in_block' : False }) class NonStandardAndInvalid(BadTxTemplate): diff --git a/test/functional/feature_block.py b/test/functional/feature_block.py index f4f15d293ec..b5767217f44 100755 --- a/test/functional/feature_block.py +++ b/test/functional/feature_block.py @@ -153,9 +153,16 @@ class FullBlockTest(BitcoinTestFramework): for TxTemplate in invalid_txs.iter_all_templates(): template = TxTemplate(spend_tx=attempt_spend_tx) + # belt-and-suspenders checking we won't pass up validating something + # we expect a disconnect from + if template.expect_disconnect: + assert not template.valid_in_block + if template.valid_in_block: continue + assert template.block_reject_reason or template.reject_reason + self.log.info(f"Reject block with invalid tx: {TxTemplate.__name__}") blockname = f"for_invalid.{TxTemplate.__name__}" self.next_block(blockname)