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