2020from test_framework .util import assert_equal
2121
2222I2P_ADDR = "c4gfnttsuwqomiygupdqqqyy5y5emnk5c73hrfvatri67prd7vyq.b32.i2p"
23+ ONION_ADDR = "pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd.onion"
2324
2425ADDRS = []
2526for i in range (10 ):
2627 addr = CAddress ()
2728 addr .time = int (time .time ()) + i
29+ addr .port = 8333 + i
2830 addr .nServices = P2P_SERVICES
29- # Add one I2P address at an arbitrary position.
31+ # Add one I2P and one onion V3 address at an arbitrary position.
3032 if i == 5 :
3133 addr .net = addr .NET_I2P
3234 addr .ip = I2P_ADDR
35+ addr .port = 0
36+ elif i == 8 :
37+ addr .net = addr .NET_TORV3
38+ addr .ip = ONION_ADDR
3339 else :
3440 addr .ip = f"123.123.123.{ i % 256 } "
35- addr .port = 8333 + i
3641 ADDRS .append (addr )
3742
3843
@@ -52,6 +57,17 @@ def wait_for_addrv2(self):
5257 self .wait_until (lambda : "addrv2" in self .last_message )
5358
5459
60+ def calc_addrv2_msg_size (addrs ):
61+ size = 1 # vector length byte
62+ for addr in addrs :
63+ size += 4 # time
64+ size += 1 # services, COMPACTSIZE(P2P_SERVICES)
65+ size += 1 # network id
66+ size += 1 # address length byte
67+ size += addr .ADDRV2_ADDRESS_LENGTH [addr .net ] # address
68+ size += 2 # port
69+ return size
70+
5571class AddrTest (BitcoinTestFramework ):
5672 def set_test_params (self ):
5773 self .setup_clean_chain = True
@@ -71,9 +87,10 @@ def run_test(self):
7187 self .log .info ('Check that addrv2 message content is relayed and added to addrman' )
7288 addr_receiver = self .nodes [0 ].add_p2p_connection (AddrReceiver ())
7389 msg .addrs = ADDRS
90+ msg_size = calc_addrv2_msg_size (ADDRS )
7491 with self .nodes [0 ].assert_debug_log ([
75- 'received: addrv2 (159 bytes) peer=0' ,
76- 'sending addrv2 (159 bytes) peer=1' ,
92+ f 'received: addrv2 ({ msg_size } bytes) peer=0' ,
93+ f 'sending addrv2 ({ msg_size } bytes) peer=1' ,
7794 ]):
7895 addr_source .send_and_ping (msg )
7996 self .nodes [0 ].setmocktime (int (time .time ()) + 30 * 60 )
0 commit comments