10
10
//! Onion message testing and test utilities live here.
11
11
12
12
use chain:: keysinterface:: { KeysInterface , Recipient } ;
13
- use ln:: msgs:: OnionMessageHandler ;
13
+ use ln:: features:: InitFeatures ;
14
+ use ln:: msgs:: { self , OnionMessageHandler } ;
14
15
use super :: { BlindedRoute , Destination , OnionMessenger , SendError } ;
15
16
use util:: enforcing_trait_impls:: EnforcingSigner ;
16
17
use util:: test_utils;
17
18
18
19
use bitcoin:: network:: constants:: Network ;
19
- use bitcoin:: secp256k1:: { PublicKey , Secp256k1 , SecretKey } ;
20
+ use bitcoin:: secp256k1:: { PublicKey , Secp256k1 } ;
20
21
21
22
use sync:: Arc ;
22
23
@@ -34,26 +35,33 @@ impl MessengerNode {
34
35
}
35
36
36
37
fn create_nodes ( num_messengers : u8 ) -> Vec < MessengerNode > {
37
- let mut res = Vec :: new ( ) ;
38
+ let mut nodes = Vec :: new ( ) ;
38
39
for i in 0 ..num_messengers {
39
40
let logger = Arc :: new ( test_utils:: TestLogger :: with_id ( format ! ( "node {}" , i) ) ) ;
40
41
let seed = [ i as u8 ; 32 ] ;
41
42
let keys_manager = Arc :: new ( test_utils:: TestKeysInterface :: new ( & seed, Network :: Testnet ) ) ;
42
- res . push ( MessengerNode {
43
+ nodes . push ( MessengerNode {
43
44
keys_manager : keys_manager. clone ( ) ,
44
45
messenger : OnionMessenger :: new ( keys_manager, logger. clone ( ) ) ,
45
46
logger,
46
47
} ) ;
47
48
}
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
49
58
}
50
59
51
60
fn pass_along_path ( path : & Vec < MessengerNode > , expected_path_id : Option < [ u8 ; 32 ] > ) {
52
61
let mut prev_node = & path[ 0 ] ;
53
62
let num_nodes = path. len ( ) ;
54
63
for ( idx, node) in path. into_iter ( ) . skip ( 1 ) . enumerate ( ) {
55
64
let events = prev_node. messenger . release_pending_msgs ( ) ;
56
- assert_eq ! ( events. len( ) , 1 ) ;
57
65
let onion_msg = {
58
66
let msgs = events. get ( & node. get_node_pk ( ) ) . unwrap ( ) ;
59
67
assert_eq ! ( msgs. len( ) , 1 ) ;
@@ -110,12 +118,9 @@ fn three_blinded_hops() {
110
118
#[ test]
111
119
fn too_big_packet_error ( ) {
112
120
// 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 ) ;
118
122
123
+ let hop_node_id = nodes[ 1 ] . get_node_pk ( ) ;
119
124
let hops = [ hop_node_id; 400 ] ;
120
125
let err = nodes[ 0 ] . messenger . send_onion_message ( & hops, Destination :: Node ( hop_node_id) , None ) . unwrap_err ( ) ;
121
126
assert_eq ! ( err, SendError :: TooBigPacket ) ;
@@ -124,7 +129,7 @@ fn too_big_packet_error() {
124
129
#[ test]
125
130
fn invalid_blinded_route_error ( ) {
126
131
// 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 ) ;
128
133
129
134
// 0 hops
130
135
let secp_ctx = Secp256k1 :: new ( ) ;
@@ -143,7 +148,7 @@ fn invalid_blinded_route_error() {
143
148
144
149
#[ test]
145
150
fn reply_path ( ) {
146
- let mut nodes = create_nodes ( 4 ) ;
151
+ let nodes = create_nodes ( 4 ) ;
147
152
let secp_ctx = Secp256k1 :: new ( ) ;
148
153
149
154
// Destination::Node
@@ -165,3 +170,13 @@ fn reply_path() {
165
170
"lightning::onion_message::messenger" . to_string ( ) ,
166
171
format ! ( "Received an onion message with path_id: None and reply_path" ) . to_string ( ) , 2 ) ;
167
172
}
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