@ -3,11 +3,12 @@
# Distributed under the MIT software license, see the accompanying
# Distributed under the MIT software license, see the accompanying
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
""" Test node responses to invalid network messages. """
""" Test node responses to invalid network messages. """
import asyncio
import os
import os
import struct
import struct
from test_framework import messages
from test_framework import messages
from test_framework . mininode import P2PDataStore
from test_framework . mininode import P2PDataStore , NetworkThread
from test_framework . test_framework import BitcoinTestFramework
from test_framework . test_framework import BitcoinTestFramework
@ -143,8 +144,15 @@ class InvalidMessagesTest(BitcoinTestFramework):
def test_magic_bytes ( self ) :
def test_magic_bytes ( self ) :
conn = self . nodes [ 0 ] . add_p2p_connection ( P2PDataStore ( ) )
conn = self . nodes [ 0 ] . add_p2p_connection ( P2PDataStore ( ) )
conn . _on_data = lambda : None # Need to ignore all incoming messages from now, since they come with "invalid" magic bytes
conn . magic_bytes = b ' \x00 \x11 \x22 \x32 '
def swap_magic_bytes ( ) :
conn . _on_data = lambda : None # Need to ignore all incoming messages from now, since they come with "invalid" magic bytes
conn . magic_bytes = b ' \x00 \x11 \x22 \x32 '
# Call .result() to block until the atomic swap is complete, otherwise
# we might run into races later on
asyncio . run_coroutine_threadsafe ( asyncio . coroutine ( swap_magic_bytes ) ( ) , NetworkThread . network_event_loop ) . result ( )
with self . nodes [ 0 ] . assert_debug_log ( [ ' PROCESSMESSAGE: INVALID MESSAGESTART ping ' ] ) :
with self . nodes [ 0 ] . assert_debug_log ( [ ' PROCESSMESSAGE: INVALID MESSAGESTART ping ' ] ) :
conn . send_message ( messages . msg_ping ( nonce = 0xff ) )
conn . send_message ( messages . msg_ping ( nonce = 0xff ) )
conn . wait_for_disconnect ( timeout = 1 )
conn . wait_for_disconnect ( timeout = 1 )