Changeset View
Changeset View
Standalone View
Standalone View
test/functional/abc-invalid-message.py
#!/usr/bin/env python3 | #!/usr/bin/env python3 | ||||
# Copyright (c) 2019 The Bitcoin developers | # Copyright (c) 2019 The Bitcoin developers | ||||
# 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. | ||||
"""ABC Invalid Message Test | """ABC Invalid Message Test | ||||
Test that invalid messages get rejected and/or ban the sender as expected for | Test that invalid messages get rejected and/or ban the sender as expected for | ||||
each case. | each case. | ||||
""" | """ | ||||
import struct | import struct | ||||
from test_framework.messages import NODE_NETWORK, msg_version | from test_framework.messages import NODE_NETWORK, msg_version | ||||
from test_framework.mininode import ( | from test_framework.mininode import ( | ||||
mininode_lock, | p2p_lock, | ||||
msg_ping, | msg_ping, | ||||
P2PInterface, | P2PInterface, | ||||
) | ) | ||||
from test_framework.test_framework import BitcoinTestFramework | from test_framework.test_framework import BitcoinTestFramework | ||||
from test_framework.util import wait_until | from test_framework.util import wait_until | ||||
def msg_bad_checksum(connection, original_message): | def msg_bad_checksum(connection, original_message): | ||||
▲ Show 20 Lines • Show All 53 Lines • ▼ Show 20 Lines | def run_test(self): | ||||
# Create a valid message | # Create a valid message | ||||
valid_message = msg_ping(interface.ping_counter) | valid_message = msg_ping(interface.ping_counter) | ||||
def wait_for_ping(): | def wait_for_ping(): | ||||
def check_ping(): | def check_ping(): | ||||
if not interface.last_message.get("pong"): | if not interface.last_message.get("pong"): | ||||
return False | return False | ||||
return interface.last_message["pong"].nonce == interface.ping_counter | return interface.last_message["pong"].nonce == interface.ping_counter | ||||
wait_until(check_ping, lock=mininode_lock) | wait_until(check_ping, lock=p2p_lock) | ||||
interface.ping_counter += 1 | interface.ping_counter += 1 | ||||
# The valid message is accepted | # The valid message is accepted | ||||
connection.send_message(valid_message) | connection.send_message(valid_message) | ||||
wait_for_ping() | wait_for_ping() | ||||
# Make an invalid copy of the valid message with an invalid checksum | # Make an invalid copy of the valid message with an invalid checksum | ||||
invalid_message = msg_bad_checksum(connection, valid_message) | invalid_message = msg_bad_checksum(connection, valid_message) | ||||
Show All 9 Lines |