1010//! Onion message testing and test utilities live here.
1111
1212use chain:: keysinterface:: { KeysInterface , Recipient } ;
13- use ln:: msgs:: OnionMessageHandler ;
13+ use ln:: features:: InitFeatures ;
14+ use ln:: msgs:: { self , OnionMessageHandler } ;
1415use super :: { BlindedRoute , Destination , OnionMessenger , SendError } ;
1516use util:: enforcing_trait_impls:: EnforcingSigner ;
1617use util:: test_utils;
1718
1819use bitcoin:: network:: constants:: Network ;
19- use bitcoin:: secp256k1:: { PublicKey , Secp256k1 , SecretKey } ;
20+ use bitcoin:: secp256k1:: { PublicKey , Secp256k1 } ;
2021
2122use sync:: Arc ;
2223
@@ -34,26 +35,33 @@ impl MessengerNode {
3435}
3536
3637fn create_nodes ( num_messengers : u8 ) -> Vec < MessengerNode > {
37- let mut res = Vec :: new ( ) ;
38+ let mut nodes = Vec :: new ( ) ;
3839 for i in 0 ..num_messengers {
3940 let logger = Arc :: new ( test_utils:: TestLogger :: with_id ( format ! ( "node {}" , i) ) ) ;
4041 let seed = [ i as u8 ; 32 ] ;
4142 let keys_manager = Arc :: new ( test_utils:: TestKeysInterface :: new ( & seed, Network :: Testnet ) ) ;
42- res . push ( MessengerNode {
43+ nodes . push ( MessengerNode {
4344 keys_manager : keys_manager. clone ( ) ,
4445 messenger : OnionMessenger :: new ( keys_manager, logger. clone ( ) ) ,
4546 logger,
4647 } ) ;
4748 }
48- res
49+ for idx in 0 ..num_messengers - 1 {
50+ let i = idx as usize ;
51+ let mut features = InitFeatures :: known ( ) ;
52+ features. set_onion_messages_optional ( ) ;
53+ let init_msg = msgs:: Init { features, remote_network_address : None } ;
54+ nodes[ i] . messenger . peer_connected ( & nodes[ i + 1 ] . get_node_pk ( ) , & init_msg. clone ( ) ) ;
55+ nodes[ i + 1 ] . messenger . peer_connected ( & nodes[ i] . get_node_pk ( ) , & init_msg. clone ( ) ) ;
56+ }
57+ nodes
4958}
5059
5160fn pass_along_path ( path : & Vec < MessengerNode > , expected_path_id : Option < [ u8 ; 32 ] > ) {
5261 let mut prev_node = & path[ 0 ] ;
5362 let num_nodes = path. len ( ) ;
5463 for ( idx, node) in path. into_iter ( ) . skip ( 1 ) . enumerate ( ) {
5564 let events = prev_node. messenger . release_pending_msgs ( ) ;
56- assert_eq ! ( events. len( ) , 1 ) ;
5765 let onion_msg = {
5866 let msgs = events. get ( & node. get_node_pk ( ) ) . unwrap ( ) ;
5967 assert_eq ! ( msgs. len( ) , 1 ) ;
@@ -110,12 +118,9 @@ fn three_blinded_hops() {
110118#[ test]
111119fn too_big_packet_error ( ) {
112120 // Make sure we error as expected if a packet is too big to send.
113- let nodes = create_nodes ( 1 ) ;
114-
115- let hop_secret = SecretKey :: from_slice ( & hex:: decode ( "0101010101010101010101010101010101010101010101010101010101010101" ) . unwrap ( ) [ ..] ) . unwrap ( ) ;
116- let secp_ctx = Secp256k1 :: new ( ) ;
117- let hop_node_id = PublicKey :: from_secret_key ( & secp_ctx, & hop_secret) ;
121+ let nodes = create_nodes ( 2 ) ;
118122
123+ let hop_node_id = nodes[ 1 ] . get_node_pk ( ) ;
119124 let hops = [ hop_node_id; 400 ] ;
120125 let err = nodes[ 0 ] . messenger . send_onion_message ( & hops, Destination :: Node ( hop_node_id) , None ) . unwrap_err ( ) ;
121126 assert_eq ! ( err, SendError :: TooBigPacket ) ;
@@ -124,7 +129,7 @@ fn too_big_packet_error() {
124129#[ test]
125130fn invalid_blinded_route_error ( ) {
126131 // Make sure we error as expected if a provided blinded route has 0 or 1 hops.
127- let mut nodes = create_nodes ( 3 ) ;
132+ let nodes = create_nodes ( 3 ) ;
128133
129134 // 0 hops
130135 let secp_ctx = Secp256k1 :: new ( ) ;
@@ -143,7 +148,7 @@ fn invalid_blinded_route_error() {
143148
144149#[ test]
145150fn reply_path ( ) {
146- let mut nodes = create_nodes ( 4 ) ;
151+ let nodes = create_nodes ( 4 ) ;
147152 let secp_ctx = Secp256k1 :: new ( ) ;
148153
149154 // Destination::Node
@@ -165,3 +170,13 @@ fn reply_path() {
165170 "lightning::onion_message::messenger" . to_string ( ) ,
166171 format ! ( "Received an onion message with path_id: None and reply_path" ) . to_string ( ) , 2 ) ;
167172}
173+
174+ #[ test]
175+ fn peer_buffer_full ( ) {
176+ let nodes = create_nodes ( 2 ) ;
177+ for _ in 0 ..188 { // Based on MAX_PER_PEER_BUFFER_SIZE in OnionMessenger
178+ nodes[ 0 ] . messenger . send_onion_message ( & [ ] , Destination :: Node ( nodes[ 1 ] . get_node_pk ( ) ) , None ) . unwrap ( ) ;
179+ }
180+ let err = nodes[ 0 ] . messenger . send_onion_message ( & [ ] , Destination :: Node ( nodes[ 1 ] . get_node_pk ( ) ) , None ) . unwrap_err ( ) ;
181+ assert_eq ! ( err, SendError :: BufferFull ) ;
182+ }
0 commit comments