Skip to content

Commit 4115cf9

Browse files
committed
[test] Ignore BIP324 decoy messages
Also allow P2PConnection::send_message() to send decoy messages for writing tests.
1 parent 8c054aa commit 4115cf9

File tree

1 file changed

+10
-6
lines changed
  • test/functional/test_framework

1 file changed

+10
-6
lines changed

test/functional/test_framework/p2p.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,8 @@ def _on_data(self):
315315
return
316316
self.recvbuf = self.recvbuf[msglen:]
317317

318+
if msg is None: # ignore decoy messages
319+
return
318320
assert msg # application layer messages (which aren't decoy messages) are non-empty
319321
shortid = msg[0] # 1-byte short message type ID
320322
if shortid == 0:
@@ -364,13 +366,13 @@ def on_message(self, message):
364366

365367
# Socket write methods
366368

367-
def send_message(self, message):
369+
def send_message(self, message, is_decoy=False):
368370
"""Send a P2P message over the socket.
369371
370372
This method takes a P2P payload, builds the P2P header and adds
371373
the message to the send buffer to be sent over the socket."""
372374
with self._send_lock:
373-
tmsg = self.build_message(message)
375+
tmsg = self.build_message(message, is_decoy)
374376
self._log_message("send", message)
375377
return self.send_raw_message(tmsg)
376378

@@ -388,7 +390,7 @@ def maybe_write():
388390

389391
# Class utility methods
390392

391-
def build_message(self, message):
393+
def build_message(self, message, is_decoy=False):
392394
"""Build a serialized P2P message"""
393395
msgtype = message.msgtype
394396
data = message.serialize()
@@ -400,7 +402,7 @@ def build_message(self, message):
400402
tmsg += msgtype
401403
tmsg += b"\x00" * (12 - len(msgtype))
402404
tmsg += data
403-
return self.v2_state.v2_enc_packet(tmsg)
405+
return self.v2_state.v2_enc_packet(tmsg, ignore=is_decoy)
404406
else:
405407
tmsg = self.magic_bytes
406408
tmsg += msgtype
@@ -825,7 +827,7 @@ def on_getheaders(self, message):
825827
if response is not None:
826828
self.send_message(response)
827829

828-
def send_blocks_and_test(self, blocks, node, *, success=True, force_send=False, reject_reason=None, expect_disconnect=False, timeout=60):
830+
def send_blocks_and_test(self, blocks, node, *, success=True, force_send=False, reject_reason=None, expect_disconnect=False, timeout=60, is_decoy=False):
829831
"""Send blocks to test node and test whether the tip advances.
830832
831833
- add all blocks to our block_store
@@ -844,9 +846,11 @@ def send_blocks_and_test(self, blocks, node, *, success=True, force_send=False,
844846

845847
reject_reason = [reject_reason] if reject_reason else []
846848
with node.assert_debug_log(expected_msgs=reject_reason):
849+
if is_decoy: # since decoy messages are ignored by the recipient - no need to wait for response
850+
force_send = True
847851
if force_send:
848852
for b in blocks:
849-
self.send_message(msg_block(block=b))
853+
self.send_message(msg_block(block=b), is_decoy)
850854
else:
851855
self.send_message(msg_headers([CBlockHeader(block) for block in blocks]))
852856
self.wait_until(

0 commit comments

Comments
 (0)