11
11
NODE_NETWORK ,
12
12
NODE_WITNESS ,
13
13
msg_addr ,
14
- msg_getaddr
14
+ msg_getaddr ,
15
+ msg_verack
15
16
)
16
17
from test_framework .p2p import (
17
18
P2PInterface ,
@@ -27,10 +28,12 @@ class AddrReceiver(P2PInterface):
27
28
num_ipv4_received = 0
28
29
test_addr_contents = False
29
30
_tokens = 1
31
+ send_getaddr = True
30
32
31
- def __init__ (self , test_addr_contents = False ):
33
+ def __init__ (self , test_addr_contents = False , send_getaddr = True ):
32
34
super ().__init__ ()
33
35
self .test_addr_contents = test_addr_contents
36
+ self .send_getaddr = send_getaddr
34
37
35
38
def on_addr (self , message ):
36
39
for addr in message .addrs :
@@ -60,6 +63,11 @@ def increment_tokens(self, n):
60
63
def addr_received (self ):
61
64
return self .num_ipv4_received != 0
62
65
66
+ def on_version (self , message ):
67
+ self .send_message (msg_verack ())
68
+ if (self .send_getaddr ):
69
+ self .send_message (msg_getaddr ())
70
+
63
71
def getaddr_received (self ):
64
72
return self .message_count ['getaddr' ] > 0
65
73
@@ -156,7 +164,7 @@ def relay_tests(self):
156
164
self .nodes [0 ].disconnect_p2ps ()
157
165
158
166
self .log .info ('Check relay of addresses received from outbound peers' )
159
- inbound_peer = self .nodes [0 ].add_p2p_connection (AddrReceiver (test_addr_contents = True ))
167
+ inbound_peer = self .nodes [0 ].add_p2p_connection (AddrReceiver (test_addr_contents = True , send_getaddr = False ))
160
168
full_outbound_peer = self .nodes [0 ].add_outbound_p2p_connection (AddrReceiver (), p2p_idx = 0 , connection_type = "outbound-full-relay" )
161
169
msg = self .setup_addr_msg (2 )
162
170
self .send_addr_msg (full_outbound_peer , msg , [inbound_peer ])
@@ -185,6 +193,12 @@ def relay_tests(self):
185
193
self .nodes [0 ].disconnect_p2ps ()
186
194
187
195
def getaddr_tests (self ):
196
+ # In the previous tests, the node answered GETADDR requests with an
197
+ # empty addrman. Due to GETADDR response caching (see
198
+ # CConnman::GetAddresses), the node would continue to provide 0 addrs
199
+ # in response until enough time has passed or the node is restarted.
200
+ self .restart_node (0 )
201
+
188
202
self .log .info ('Test getaddr behavior' )
189
203
self .log .info ('Check that we send a getaddr message upon connecting to an outbound-full-relay peer' )
190
204
full_outbound_peer = self .nodes [0 ].add_outbound_p2p_connection (AddrReceiver (), p2p_idx = 0 , connection_type = "outbound-full-relay" )
@@ -197,7 +211,7 @@ def getaddr_tests(self):
197
211
assert_equal (block_relay_peer .getaddr_received (), False )
198
212
199
213
self .log .info ('Check that we answer getaddr messages only from inbound peers' )
200
- inbound_peer = self .nodes [0 ].add_p2p_connection (AddrReceiver ())
214
+ inbound_peer = self .nodes [0 ].add_p2p_connection (AddrReceiver (send_getaddr = False ))
201
215
inbound_peer .sync_with_ping ()
202
216
203
217
# Add some addresses to addrman
0 commit comments