0
0
Fork 0
mirror of https://github.com/bitcoin/bitcoin.git synced 2025-02-03 09:56:38 -05:00

Merge bitcoin/bitcoin#28485: test: Extends MEMPOOL msg functional test

97c0dfa894 test: Extends MEMPOOL msg functional test (Sergi Delgado Segura)

Pull request description:

  Currently, p2p_filter.py::test_msg_mempool is not testing much. This extends the tests so the interaction between sending `MEMPOOL` messages with a filter that does not include all transactions in the mempool reacts, plus how it interacts with `INV` messages, especially after the changes introduced by #27675

ACKs for top commit:
  instagibbs:
    ACK 97c0dfa894
  theStack:
    re-ACK 97c0dfa894

Tree-SHA512: 746fdc867630f40509e6341f484a238dd855ae6d1be5eca121974491e4ca272dee88af4b90dda55ea9a5a19cbff198fa91ffa0c5bf1ddf0232b2c1b215b05b9a
This commit is contained in:
fanquake 2023-12-08 11:25:20 +00:00
commit 1f352cf2fd
No known key found for this signature in database
GPG key ID: 2EEB9F5CC09526C1

View file

@ -11,6 +11,7 @@ from test_framework.messages import (
COIN, COIN,
MAX_BLOOM_FILTER_SIZE, MAX_BLOOM_FILTER_SIZE,
MAX_BLOOM_HASH_FUNCS, MAX_BLOOM_HASH_FUNCS,
MSG_WTX,
MSG_BLOCK, MSG_BLOCK,
MSG_FILTERED_BLOCK, MSG_FILTERED_BLOCK,
msg_filteradd, msg_filteradd,
@ -135,14 +136,22 @@ class FilterTest(BitcoinTestFramework):
self.log.info("Check that a node with bloom filters enabled services p2p mempool messages") self.log.info("Check that a node with bloom filters enabled services p2p mempool messages")
filter_peer = P2PBloomFilter() filter_peer = P2PBloomFilter()
self.log.debug("Create a tx relevant to the peer before connecting") self.log.info("Create two tx before connecting, one relevant to the node another that is not")
txid = self.wallet.send_to(from_node=self.nodes[0], scriptPubKey=filter_peer.watch_script_pubkey, amount=9 * COIN)["txid"] rel_txid = self.wallet.send_to(from_node=self.nodes[0], scriptPubKey=filter_peer.watch_script_pubkey, amount=1 * COIN)["txid"]
irr_result = self.wallet.send_to(from_node=self.nodes[0], scriptPubKey=getnewdestination()[1], amount=2 * COIN)
irr_txid = irr_result["txid"]
irr_wtxid = irr_result["wtxid"]
self.log.debug("Send a mempool msg after connecting and check that the tx is received") self.log.info("Send a mempool msg after connecting and check that the relevant tx is announced")
self.nodes[0].add_p2p_connection(filter_peer) self.nodes[0].add_p2p_connection(filter_peer)
filter_peer.send_and_ping(filter_peer.watch_filter_init) filter_peer.send_and_ping(filter_peer.watch_filter_init)
filter_peer.send_message(msg_mempool()) filter_peer.send_message(msg_mempool())
filter_peer.wait_for_tx(txid) filter_peer.wait_for_tx(rel_txid)
self.log.info("Request the irrelevant transaction even though it was not announced")
filter_peer.send_message(msg_getdata([CInv(t=MSG_WTX, h=int(irr_wtxid, 16))]))
self.log.info("We should get it anyway because it was in the mempool on connection to peer")
filter_peer.wait_for_tx(irr_txid)
def test_frelay_false(self, filter_peer): def test_frelay_false(self, filter_peer):
self.log.info("Check that a node with fRelay set to false does not receive invs until the filter is set") self.log.info("Check that a node with fRelay set to false does not receive invs until the filter is set")