@@ -65,6 +65,7 @@ def run_test(self):
6565 self .test_service_flags ()
6666 self .test_getnodeaddresses ()
6767 self .test_addpeeraddress ()
68+ self .test_sendmsgtopeer ()
6869
6970 def test_connection_count (self ):
7071 self .log .info ("Test getconnectioncount" )
@@ -328,6 +329,37 @@ def test_addpeeraddress(self):
328329 addrs = node .getnodeaddresses (count = 0 ) # getnodeaddresses re-runs the addrman checks
329330 assert_equal (len (addrs ), 2 )
330331
332+ def test_sendmsgtopeer (self ):
333+ node = self .nodes [0 ]
334+
335+ self .restart_node (0 )
336+ self .connect_nodes (0 , 1 )
337+
338+ self .log .info ("Test sendmsgtopeer" )
339+ self .log .debug ("Send a valid message" )
340+ with self .nodes [1 ].assert_debug_log (expected_msgs = ["received: addr" ]):
341+ node .sendmsgtopeer (peer_id = 0 , msg_type = "addr" , msg = "FFFFFF" )
342+
343+ self .log .debug ("Test error for sending to non-existing peer" )
344+ assert_raises_rpc_error (- 1 , "Error: Could not send message to peer" , node .sendmsgtopeer , peer_id = 100 , msg_type = "addr" , msg = "FF" )
345+
346+ self .log .debug ("Test that zero-length msg_type is allowed" )
347+ node .sendmsgtopeer (peer_id = 0 , msg_type = "addr" , msg = "" )
348+
349+ self .log .debug ("Test error for msg_type that is too long" )
350+ assert_raises_rpc_error (- 8 , "Error: msg_type too long, max length is 12" , node .sendmsgtopeer , peer_id = 0 , msg_type = "long_msg_type" , msg = "FF" )
351+
352+ self .log .debug ("Test that unknown msg_type is allowed" )
353+ node .sendmsgtopeer (peer_id = 0 , msg_type = "unknown" , msg = "FF" )
354+
355+ self .log .debug ("Test that empty msg is allowed" )
356+ node .sendmsgtopeer (peer_id = 0 , msg_type = "addr" , msg = "FF" )
357+
358+ self .log .debug ("Test that oversized messages are allowed, but get us disconnected" )
359+ zero_byte_string = b'\x00 ' * 4000001
360+ node .sendmsgtopeer (peer_id = 0 , msg_type = "addr" , msg = zero_byte_string .hex ())
361+ self .wait_until (lambda : len (self .nodes [0 ].getpeerinfo ()) == 0 , timeout = 10 )
362+
331363
332364if __name__ == '__main__' :
333365 NetTest ().main ()
0 commit comments