mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-06-23 07:13:33 +02:00
[test] Update p2p_addr_relay test to prepare
Use an init param to make clear whether a getaddr message should be sent when the P2PConnection receives a version message. These changes are in preparation for upcoming commits that modify the behavior of a bitcoind node and the test framework.
This commit is contained in:
parent
2fcaec7bbb
commit
6653fa3328
@ -11,7 +11,8 @@ from test_framework.messages import (
|
|||||||
NODE_NETWORK,
|
NODE_NETWORK,
|
||||||
NODE_WITNESS,
|
NODE_WITNESS,
|
||||||
msg_addr,
|
msg_addr,
|
||||||
msg_getaddr
|
msg_getaddr,
|
||||||
|
msg_verack
|
||||||
)
|
)
|
||||||
from test_framework.p2p import (
|
from test_framework.p2p import (
|
||||||
P2PInterface,
|
P2PInterface,
|
||||||
@ -27,10 +28,12 @@ class AddrReceiver(P2PInterface):
|
|||||||
num_ipv4_received = 0
|
num_ipv4_received = 0
|
||||||
test_addr_contents = False
|
test_addr_contents = False
|
||||||
_tokens = 1
|
_tokens = 1
|
||||||
|
send_getaddr = True
|
||||||
|
|
||||||
def __init__(self, test_addr_contents=False):
|
def __init__(self, test_addr_contents=False, send_getaddr=True):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.test_addr_contents = test_addr_contents
|
self.test_addr_contents = test_addr_contents
|
||||||
|
self.send_getaddr = send_getaddr
|
||||||
|
|
||||||
def on_addr(self, message):
|
def on_addr(self, message):
|
||||||
for addr in message.addrs:
|
for addr in message.addrs:
|
||||||
@ -60,6 +63,11 @@ class AddrReceiver(P2PInterface):
|
|||||||
def addr_received(self):
|
def addr_received(self):
|
||||||
return self.num_ipv4_received != 0
|
return self.num_ipv4_received != 0
|
||||||
|
|
||||||
|
def on_version(self, message):
|
||||||
|
self.send_message(msg_verack())
|
||||||
|
if (self.send_getaddr):
|
||||||
|
self.send_message(msg_getaddr())
|
||||||
|
|
||||||
def getaddr_received(self):
|
def getaddr_received(self):
|
||||||
return self.message_count['getaddr'] > 0
|
return self.message_count['getaddr'] > 0
|
||||||
|
|
||||||
@ -156,7 +164,7 @@ class AddrTest(BitcoinTestFramework):
|
|||||||
self.nodes[0].disconnect_p2ps()
|
self.nodes[0].disconnect_p2ps()
|
||||||
|
|
||||||
self.log.info('Check relay of addresses received from outbound peers')
|
self.log.info('Check relay of addresses received from outbound peers')
|
||||||
inbound_peer = self.nodes[0].add_p2p_connection(AddrReceiver(test_addr_contents=True))
|
inbound_peer = self.nodes[0].add_p2p_connection(AddrReceiver(test_addr_contents=True, send_getaddr=False))
|
||||||
full_outbound_peer = self.nodes[0].add_outbound_p2p_connection(AddrReceiver(), p2p_idx=0, connection_type="outbound-full-relay")
|
full_outbound_peer = self.nodes[0].add_outbound_p2p_connection(AddrReceiver(), p2p_idx=0, connection_type="outbound-full-relay")
|
||||||
msg = self.setup_addr_msg(2)
|
msg = self.setup_addr_msg(2)
|
||||||
self.send_addr_msg(full_outbound_peer, msg, [inbound_peer])
|
self.send_addr_msg(full_outbound_peer, msg, [inbound_peer])
|
||||||
@ -185,6 +193,12 @@ class AddrTest(BitcoinTestFramework):
|
|||||||
self.nodes[0].disconnect_p2ps()
|
self.nodes[0].disconnect_p2ps()
|
||||||
|
|
||||||
def getaddr_tests(self):
|
def getaddr_tests(self):
|
||||||
|
# In the previous tests, the node answered GETADDR requests with an
|
||||||
|
# empty addrman. Due to GETADDR response caching (see
|
||||||
|
# CConnman::GetAddresses), the node would continue to provide 0 addrs
|
||||||
|
# in response until enough time has passed or the node is restarted.
|
||||||
|
self.restart_node(0)
|
||||||
|
|
||||||
self.log.info('Test getaddr behavior')
|
self.log.info('Test getaddr behavior')
|
||||||
self.log.info('Check that we send a getaddr message upon connecting to an outbound-full-relay peer')
|
self.log.info('Check that we send a getaddr message upon connecting to an outbound-full-relay peer')
|
||||||
full_outbound_peer = self.nodes[0].add_outbound_p2p_connection(AddrReceiver(), p2p_idx=0, connection_type="outbound-full-relay")
|
full_outbound_peer = self.nodes[0].add_outbound_p2p_connection(AddrReceiver(), p2p_idx=0, connection_type="outbound-full-relay")
|
||||||
@ -197,7 +211,7 @@ class AddrTest(BitcoinTestFramework):
|
|||||||
assert_equal(block_relay_peer.getaddr_received(), False)
|
assert_equal(block_relay_peer.getaddr_received(), False)
|
||||||
|
|
||||||
self.log.info('Check that we answer getaddr messages only from inbound peers')
|
self.log.info('Check that we answer getaddr messages only from inbound peers')
|
||||||
inbound_peer = self.nodes[0].add_p2p_connection(AddrReceiver())
|
inbound_peer = self.nodes[0].add_p2p_connection(AddrReceiver(send_getaddr=False))
|
||||||
inbound_peer.sync_with_ping()
|
inbound_peer.sync_with_ping()
|
||||||
|
|
||||||
# Add some addresses to addrman
|
# Add some addresses to addrman
|
||||||
|
Loading…
x
Reference in New Issue
Block a user