@@ -1247,6 +1247,13 @@ mod tests {
1247
1247
( fd_a. clone ( ) , fd_b. clone ( ) )
1248
1248
}
1249
1249
1250
+ fn establish_connection_and_read_events < ' a > ( peer_a : & PeerManager < FileDescriptor , & ' a test_utils:: TestChannelMessageHandler > , peer_b : & PeerManager < FileDescriptor , & ' a test_utils:: TestChannelMessageHandler > ) -> ( FileDescriptor , FileDescriptor ) {
1251
+ let ( mut fd_a, mut fd_b) = establish_connection ( peer_a, peer_b) ;
1252
+ assert_eq ! ( peer_b. read_event( & mut fd_b, & fd_a. outbound_data. lock( ) . unwrap( ) . split_off( 0 ) ) . unwrap( ) , false ) ;
1253
+ assert_eq ! ( peer_a. read_event( & mut fd_a, & fd_b. outbound_data. lock( ) . unwrap( ) . split_off( 0 ) ) . unwrap( ) , false ) ;
1254
+ ( fd_a. clone ( ) , fd_b. clone ( ) )
1255
+ }
1256
+
1250
1257
#[ test]
1251
1258
fn test_disconnect_peer ( ) {
1252
1259
// Simple test which builds a network of PeerManager, connects and brings them to NoiseState::Finished and
@@ -1421,4 +1428,47 @@ mod tests {
1421
1428
assert_eq ! ( routing_handlers_concrete[ 1 ] . clone( ) . chan_upds_recvd. load( Ordering :: Acquire ) , 100 ) ;
1422
1429
assert_eq ! ( routing_handlers_concrete[ 1 ] . clone( ) . chan_anns_recvd. load( Ordering :: Acquire ) , 50 ) ;
1423
1430
}
1431
+
1432
+ #[ test]
1433
+ fn limit_initial_routing_sync_requests ( ) {
1434
+ // Inbound peer 0 requests initial_routing_sync, but outbound peer 1 does not.
1435
+ {
1436
+ let chan_handlers = create_chan_handlers ( 2 ) ;
1437
+ let routing_handlers: Vec < Arc < msgs:: RoutingMessageHandler > > = vec ! [
1438
+ Arc :: new( test_utils:: TestRoutingMessageHandler :: new( ) . set_request_full_sync( ) ) ,
1439
+ Arc :: new( test_utils:: TestRoutingMessageHandler :: new( ) ) ,
1440
+ ] ;
1441
+ let peers = create_network ( 2 , & chan_handlers, Some ( & routing_handlers) ) ;
1442
+ let ( fd_0_to_1, fd_1_to_0) = establish_connection_and_read_events ( & peers[ 0 ] , & peers[ 1 ] ) ;
1443
+
1444
+ let peer_0 = peers[ 0 ] . peers . lock ( ) . unwrap ( ) ;
1445
+ let peer_1 = peers[ 1 ] . peers . lock ( ) . unwrap ( ) ;
1446
+
1447
+ let peer_0_features = peer_1. peers . get ( & fd_1_to_0) . unwrap ( ) . their_features . as_ref ( ) ;
1448
+ let peer_1_features = peer_0. peers . get ( & fd_0_to_1) . unwrap ( ) . their_features . as_ref ( ) ;
1449
+
1450
+ assert ! ( peer_0_features. unwrap( ) . initial_routing_sync( ) ) ;
1451
+ assert ! ( !peer_1_features. unwrap( ) . initial_routing_sync( ) ) ;
1452
+ }
1453
+
1454
+ // Outbound peer 1 requests initial_routing_sync, but inbound peer 0 does not.
1455
+ {
1456
+ let chan_handlers = create_chan_handlers ( 2 ) ;
1457
+ let routing_handlers: Vec < Arc < msgs:: RoutingMessageHandler > > = vec ! [
1458
+ Arc :: new( test_utils:: TestRoutingMessageHandler :: new( ) ) ,
1459
+ Arc :: new( test_utils:: TestRoutingMessageHandler :: new( ) . set_request_full_sync( ) ) ,
1460
+ ] ;
1461
+ let peers = create_network ( 2 , & chan_handlers, Some ( & routing_handlers) ) ;
1462
+ let ( fd_0_to_1, fd_1_to_0) = establish_connection_and_read_events ( & peers[ 0 ] , & peers[ 1 ] ) ;
1463
+
1464
+ let peer_0 = peers[ 0 ] . peers . lock ( ) . unwrap ( ) ;
1465
+ let peer_1 = peers[ 1 ] . peers . lock ( ) . unwrap ( ) ;
1466
+
1467
+ let peer_0_features = peer_1. peers . get ( & fd_1_to_0) . unwrap ( ) . their_features . as_ref ( ) ;
1468
+ let peer_1_features = peer_0. peers . get ( & fd_0_to_1) . unwrap ( ) . their_features . as_ref ( ) ;
1469
+
1470
+ assert ! ( !peer_0_features. unwrap( ) . initial_routing_sync( ) ) ;
1471
+ assert ! ( peer_1_features. unwrap( ) . initial_routing_sync( ) ) ;
1472
+ }
1473
+ }
1424
1474
}
0 commit comments