mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-01-31 10:41:08 +00:00
Merge bitcoin/bitcoin#32591: test: fix and augment block tests of invalid_txs
8fcd6845052354fad80ae7e5feda3f6a2e441e12 test: ensure reason is checked for invalid blocks rejection (Greg Sanders) 1a689a2c88715c583da6d88cac3f77bdbaeaf551 test: fix block tests of invalid_txs (Greg Sanders) Pull request description: We are not actually testing some cases accidentally, for block inclusion. Issue discovered while reviewing https://github.com/bitcoin/bitcoin/pull/32533 ACKs for top commit: maflcko: review ACK 8fcd6845052354fad80ae7e5feda3f6a2e441e12 🔶 theStack: ACK 8fcd6845052354fad80ae7e5feda3f6a2e441e12 BrandonOdiwuor: Code Review ACK 8fcd6845052354fad80ae7e5feda3f6a2e441e12 TheCharlatan: ACK 8fcd6845052354fad80ae7e5feda3f6a2e441e12 Tree-SHA512: 7e79ea35b64f56b29811b29df5752945cb10ec62465b385be5e4e2d295c3237b15d5dacf9e99661346967e84899da6fc82e3d2bd0ef6e5c51da85247da31e26a
This commit is contained in:
commit
f7cc7f6468
@ -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):
|
||||
|
||||
@ -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)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user