Skip to content

Commit

Permalink
Merge bitcoin#30066: test: add conflicting topology test case
Browse files Browse the repository at this point in the history
9365baa test: add conflicting topology test case (Greg Sanders)

Pull request description:

  We want to ensure that even if topologies
  that are acceptable are relaxed, like
  removing package-not-child-with-unconfirmed-parents, that we don't end up accepting packages we shouldn't.

ACKs for top commit:
  glozow:
    reACK 9365baa
  rkrux:
    reACK [9365baa](bitcoin@9365baa)

Tree-SHA512: d58661064ca099ac0447c331a5020c74c0cdfe24259aa875592805bbd63de1bf23aa7ced9ff485fef90dc0602fcb997e631aaf1aa2e9805d2cf5f0e5c9b2f0e2
  • Loading branch information
glozow committed May 20, 2024
2 parents 058af75 + 9365baa commit 063bb2f
Showing 1 changed file with 32 additions and 0 deletions.
32 changes: 32 additions & 0 deletions test/functional/rpc_packages.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
assert_raises_rpc_error,
)
from test_framework.wallet import (
COIN,
DEFAULT_FEE,
MiniWallet,
)
Expand Down Expand Up @@ -242,6 +243,37 @@ def test_conflicting(self):
{"txid": tx2["txid"], "wtxid": tx2["wtxid"], "package-error": "conflict-in-package"}
])

# Add a child that spends both at high feerate to submit via submitpackage
tx_child = self.wallet.create_self_transfer_multi(
fee_per_output=int(DEFAULT_FEE * 5 * COIN),
utxos_to_spend=[tx1["new_utxo"], tx2["new_utxo"]],
)

testres = node.testmempoolaccept([tx1["hex"], tx2["hex"], tx_child["hex"]])

assert_equal(testres, [
{"txid": tx1["txid"], "wtxid": tx1["wtxid"], "package-error": "conflict-in-package"},
{"txid": tx2["txid"], "wtxid": tx2["wtxid"], "package-error": "conflict-in-package"},
{"txid": tx_child["txid"], "wtxid": tx_child["wtxid"], "package-error": "conflict-in-package"}
])

submitres = node.submitpackage([tx1["hex"], tx2["hex"], tx_child["hex"]])
assert_equal(submitres, {'package_msg': 'conflict-in-package', 'tx-results': {}, 'replaced-transactions': []})

# Submit tx1 to mempool, then try the same package again
node.sendrawtransaction(tx1["hex"])

submitres = node.submitpackage([tx1["hex"], tx2["hex"], tx_child["hex"]])
assert_equal(submitres, {'package_msg': 'conflict-in-package', 'tx-results': {}, 'replaced-transactions': []})
assert tx_child["txid"] not in node.getrawmempool()

# ... and without the in-mempool ancestor tx1 included in the call
submitres = node.submitpackage([tx2["hex"], tx_child["hex"]])
assert_equal(submitres, {'package_msg': 'package-not-child-with-unconfirmed-parents', 'tx-results': {}, 'replaced-transactions': []})

# Regardless of error type, the child can never enter the mempool
assert tx_child["txid"] not in node.getrawmempool()

def test_rbf(self):
node = self.nodes[0]

Expand Down

0 comments on commit 063bb2f

Please sign in to comment.