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