@@ -1743,4 +1743,37 @@ mod tests {
1743
1743
assert_eq ! ( cfgs[ 1 ] . routing_handler. chan_upds_recvd. load( Ordering :: Acquire ) , 100 ) ;
1744
1744
assert_eq ! ( cfgs[ 1 ] . routing_handler. chan_anns_recvd. load( Ordering :: Acquire ) , 50 ) ;
1745
1745
}
1746
+
1747
+ #[ test]
1748
+ fn test_handshake_timeout ( ) {
1749
+ // Tests that we time out a peer still waiting on handshake completion after a full timer
1750
+ // tick.
1751
+ let cfgs = create_peermgr_cfgs ( 2 ) ;
1752
+ cfgs[ 0 ] . routing_handler . request_full_sync . store ( true , Ordering :: Release ) ;
1753
+ cfgs[ 1 ] . routing_handler . request_full_sync . store ( true , Ordering :: Release ) ;
1754
+ let peers = create_network ( 2 , & cfgs) ;
1755
+
1756
+ let secp_ctx = Secp256k1 :: new ( ) ;
1757
+ let a_id = PublicKey :: from_secret_key ( & secp_ctx, & peers[ 0 ] . our_node_secret ) ;
1758
+ let mut fd_a = FileDescriptor { fd : 1 , outbound_data : Arc :: new ( Mutex :: new ( Vec :: new ( ) ) ) } ;
1759
+ let mut fd_b = FileDescriptor { fd : 1 , outbound_data : Arc :: new ( Mutex :: new ( Vec :: new ( ) ) ) } ;
1760
+ let initial_data = peers[ 1 ] . new_outbound_connection ( a_id, fd_b. clone ( ) ) . unwrap ( ) ;
1761
+ peers[ 0 ] . new_inbound_connection ( fd_a. clone ( ) ) . unwrap ( ) ;
1762
+
1763
+ // If we get a single timer tick before completion, that's fine
1764
+ assert_eq ! ( peers[ 0 ] . peers. lock( ) . unwrap( ) . peers. len( ) , 1 ) ;
1765
+ peers[ 0 ] . timer_tick_occurred ( ) ;
1766
+ assert_eq ! ( peers[ 0 ] . peers. lock( ) . unwrap( ) . peers. len( ) , 1 ) ;
1767
+
1768
+ assert_eq ! ( peers[ 0 ] . read_event( & mut fd_a, & initial_data) . unwrap( ) , false ) ;
1769
+ peers[ 0 ] . process_events ( ) ;
1770
+ assert_eq ! ( peers[ 1 ] . read_event( & mut fd_b, & fd_a. outbound_data. lock( ) . unwrap( ) . split_off( 0 ) ) . unwrap( ) , false ) ;
1771
+ peers[ 1 ] . process_events ( ) ;
1772
+
1773
+ // ...but if we get a second timer tick, we should disconnect the peer
1774
+ peers[ 0 ] . timer_tick_occurred ( ) ;
1775
+ assert_eq ! ( peers[ 0 ] . peers. lock( ) . unwrap( ) . peers. len( ) , 0 ) ;
1776
+
1777
+ assert ! ( peers[ 0 ] . read_event( & mut fd_a, & fd_b. outbound_data. lock( ) . unwrap( ) . split_off( 0 ) ) . is_err( ) ) ;
1778
+ }
1746
1779
}
0 commit comments