@@ -2171,6 +2171,7 @@ fn is_gossip_msg(type_id: u16) -> bool {
21712171#[ cfg( test) ]
21722172mod tests {
21732173 use crate :: chain:: keysinterface:: { NodeSigner , Recipient } ;
2174+ use crate :: ln:: peer_channel_encryptor:: PeerChannelEncryptor ;
21742175 use crate :: ln:: peer_handler:: { PeerManager , MessageHandler , SocketDescriptor , IgnoringMessageHandler , filter_addresses} ;
21752176 use crate :: ln:: { msgs, wire} ;
21762177 use crate :: ln:: msgs:: NetAddress ;
@@ -2279,19 +2280,15 @@ mod tests {
22792280 // Simple test which builds a network of PeerManager, connects and brings them to NoiseState::Finished and
22802281 // push a DisconnectPeer event to remove the node flagged by id
22812282 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) ;
22842284 establish_connection ( & peers[ 0 ] , & peers[ 1 ] ) ;
22852285 assert_eq ! ( peers[ 0 ] . peers. read( ) . unwrap( ) . len( ) , 1 ) ;
22862286
22872287 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 {
22902289 node_id : their_id,
22912290 action : msgs:: ErrorAction :: DisconnectPeer { msg : None } ,
22922291 } ) ;
2293- assert_eq ! ( chan_handler. pending_events. lock( ) . unwrap( ) . len( ) , 1 ) ;
2294- peers[ 0 ] . message_handler . chan_handler = & chan_handler;
22952292
22962293 peers[ 0 ] . process_events ( ) ;
22972294 assert_eq ! ( peers[ 0 ] . peers. read( ) . unwrap( ) . len( ) , 0 ) ;
@@ -2325,6 +2322,35 @@ mod tests {
23252322 assert_eq ! ( peers[ 1 ] . read_event( & mut fd_b, & a_data) . unwrap( ) , false ) ;
23262323 }
23272324
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+
23282354 #[ test]
23292355 fn test_disconnect_all_peer ( ) {
23302356 // Simple test which builds a network of PeerManager, connects and brings them to NoiseState::Finished and
0 commit comments