@@ -1767,4 +1767,37 @@ mod tests {
1767
1767
assert_eq ! ( cfgs[ 1 ] . routing_handler. chan_upds_recvd. load( Ordering :: Acquire ) , 100 ) ;
1768
1768
assert_eq ! ( cfgs[ 1 ] . routing_handler. chan_anns_recvd. load( Ordering :: Acquire ) , 50 ) ;
1769
1769
}
1770
+
1771
+ #[ test]
1772
+ fn test_handshake_timeout ( ) {
1773
+ // Tests that we time out a peer still waiting on handshake completion after a full timer
1774
+ // tick.
1775
+ let cfgs = create_peermgr_cfgs ( 2 ) ;
1776
+ cfgs[ 0 ] . routing_handler . request_full_sync . store ( true , Ordering :: Release ) ;
1777
+ cfgs[ 1 ] . routing_handler . request_full_sync . store ( true , Ordering :: Release ) ;
1778
+ let peers = create_network ( 2 , & cfgs) ;
1779
+
1780
+ let secp_ctx = Secp256k1 :: new ( ) ;
1781
+ let a_id = PublicKey :: from_secret_key ( & secp_ctx, & peers[ 0 ] . our_node_secret ) ;
1782
+ let mut fd_a = FileDescriptor { fd : 1 , outbound_data : Arc :: new ( Mutex :: new ( Vec :: new ( ) ) ) } ;
1783
+ let mut fd_b = FileDescriptor { fd : 1 , outbound_data : Arc :: new ( Mutex :: new ( Vec :: new ( ) ) ) } ;
1784
+ let initial_data = peers[ 1 ] . new_outbound_connection ( a_id, fd_b. clone ( ) ) . unwrap ( ) ;
1785
+ peers[ 0 ] . new_inbound_connection ( fd_a. clone ( ) ) . unwrap ( ) ;
1786
+
1787
+ // If we get a single timer tick before completion, that's fine
1788
+ assert_eq ! ( peers[ 0 ] . peers. lock( ) . unwrap( ) . peers. len( ) , 1 ) ;
1789
+ peers[ 0 ] . timer_tick_occurred ( ) ;
1790
+ assert_eq ! ( peers[ 0 ] . peers. lock( ) . unwrap( ) . peers. len( ) , 1 ) ;
1791
+
1792
+ assert_eq ! ( peers[ 0 ] . read_event( & mut fd_a, & initial_data) . unwrap( ) , false ) ;
1793
+ peers[ 0 ] . process_events ( ) ;
1794
+ assert_eq ! ( peers[ 1 ] . read_event( & mut fd_b, & fd_a. outbound_data. lock( ) . unwrap( ) . split_off( 0 ) ) . unwrap( ) , false ) ;
1795
+ peers[ 1 ] . process_events ( ) ;
1796
+
1797
+ // ...but if we get a second timer tick, we should disconnect the peer
1798
+ peers[ 0 ] . timer_tick_occurred ( ) ;
1799
+ assert_eq ! ( peers[ 0 ] . peers. lock( ) . unwrap( ) . peers. len( ) , 0 ) ;
1800
+
1801
+ assert ! ( peers[ 0 ] . read_event( & mut fd_a, & fd_b. outbound_data. lock( ) . unwrap( ) . split_off( 0 ) ) . is_err( ) ) ;
1802
+ }
1770
1803
}
0 commit comments