@@ -2163,6 +2163,7 @@ fn is_gossip_msg(type_id: u16) -> bool {
2163
2163
#[ cfg( test) ]
2164
2164
mod tests {
2165
2165
use crate :: chain:: keysinterface:: { NodeSigner , Recipient } ;
2166
+ use crate :: ln:: peer_channel_encryptor:: PeerChannelEncryptor ;
2166
2167
use crate :: ln:: peer_handler:: { PeerManager , MessageHandler , SocketDescriptor , IgnoringMessageHandler , filter_addresses} ;
2167
2168
use crate :: ln:: { msgs, wire} ;
2168
2169
use crate :: ln:: msgs:: NetAddress ;
@@ -2271,19 +2272,15 @@ mod tests {
2271
2272
// Simple test which builds a network of PeerManager, connects and brings them to NoiseState::Finished and
2272
2273
// push a DisconnectPeer event to remove the node flagged by id
2273
2274
let cfgs = create_peermgr_cfgs ( 2 ) ;
2274
- let chan_handler = test_utils:: TestChannelMessageHandler :: new ( ) ;
2275
- let mut peers = create_network ( 2 , & cfgs) ;
2275
+ let peers = create_network ( 2 , & cfgs) ;
2276
2276
establish_connection ( & peers[ 0 ] , & peers[ 1 ] ) ;
2277
2277
assert_eq ! ( peers[ 0 ] . peers. read( ) . unwrap( ) . len( ) , 1 ) ;
2278
2278
2279
2279
let their_id = peers[ 1 ] . node_signer . get_node_id ( Recipient :: Node ) . unwrap ( ) ;
2280
-
2281
- chan_handler. pending_events . lock ( ) . unwrap ( ) . push ( events:: MessageSendEvent :: HandleError {
2280
+ cfgs[ 0 ] . chan_handler . pending_events . lock ( ) . unwrap ( ) . push ( events:: MessageSendEvent :: HandleError {
2282
2281
node_id : their_id,
2283
2282
action : msgs:: ErrorAction :: DisconnectPeer { msg : None } ,
2284
2283
} ) ;
2285
- assert_eq ! ( chan_handler. pending_events. lock( ) . unwrap( ) . len( ) , 1 ) ;
2286
- peers[ 0 ] . message_handler . chan_handler = & chan_handler;
2287
2284
2288
2285
peers[ 0 ] . process_events ( ) ;
2289
2286
assert_eq ! ( peers[ 0 ] . peers. read( ) . unwrap( ) . len( ) , 0 ) ;
@@ -2317,6 +2314,35 @@ mod tests {
2317
2314
assert_eq ! ( peers[ 1 ] . read_event( & mut fd_b, & a_data) . unwrap( ) , false ) ;
2318
2315
}
2319
2316
2317
+ #[ test]
2318
+ fn test_non_init_first_mst ( ) {
2319
+ // Simple test of the first message received over a connection being something other than
2320
+ // Init. This results in an immediate disconnection, which previously included a spurious
2321
+ // peer_disconnected event handed to event handlers (which would panic in
2322
+ // `TestChannelMessageHandler` here).
2323
+ let cfgs = create_peermgr_cfgs ( 2 ) ;
2324
+ let peers = create_network ( 2 , & cfgs) ;
2325
+
2326
+ let mut fd_dup = FileDescriptor { fd : 3 , outbound_data : Arc :: new ( Mutex :: new ( Vec :: new ( ) ) ) } ;
2327
+ let addr_dup = NetAddress :: IPv4 { addr : [ 127 , 0 , 0 , 1 ] , port : 1003 } ;
2328
+ let id_a = cfgs[ 0 ] . node_signer . get_node_id ( Recipient :: Node ) . unwrap ( ) ;
2329
+ peers[ 0 ] . new_inbound_connection ( fd_dup. clone ( ) , Some ( addr_dup. clone ( ) ) ) . unwrap ( ) ;
2330
+
2331
+ let mut dup_encryptor = PeerChannelEncryptor :: new_outbound ( id_a, SecretKey :: from_slice ( & [ 42 ; 32 ] ) . unwrap ( ) ) ;
2332
+ let initial_data = dup_encryptor. get_act_one ( & peers[ 1 ] . secp_ctx ) ;
2333
+ assert_eq ! ( peers[ 0 ] . read_event( & mut fd_dup, & initial_data) . unwrap( ) , false ) ;
2334
+ peers[ 0 ] . process_events ( ) ;
2335
+
2336
+ let a_data = fd_dup. outbound_data . lock ( ) . unwrap ( ) . split_off ( 0 ) ;
2337
+ let ( act_three, _) =
2338
+ dup_encryptor. process_act_two ( & a_data[ ..] , & & cfgs[ 1 ] . node_signer ) . unwrap ( ) ;
2339
+ assert_eq ! ( peers[ 0 ] . read_event( & mut fd_dup, & act_three) . unwrap( ) , false ) ;
2340
+
2341
+ let not_init_msg = msgs:: Ping { ponglen : 4 , byteslen : 0 } ;
2342
+ let msg_bytes = dup_encryptor. encrypt_message ( & not_init_msg) ;
2343
+ assert ! ( peers[ 0 ] . read_event( & mut fd_dup, & msg_bytes) . is_err( ) ) ;
2344
+ }
2345
+
2320
2346
#[ test]
2321
2347
fn test_disconnect_all_peer ( ) {
2322
2348
// Simple test which builds a network of PeerManager, connects and brings them to NoiseState::Finished and
0 commit comments