@@ -458,7 +458,7 @@ public void StartingServerInitializesHeartbeat()
458
458
}
459
459
460
460
[ Fact ]
461
- public async Task ReloadsOnConfigurationChangeByDefault ( )
461
+ public async Task ReloadsOnConfigurationChangeWhenOptedIn ( )
462
462
{
463
463
var currentConfig = new ConfigurationBuilder ( ) . AddInMemoryCollection ( new [ ]
464
464
{
@@ -501,7 +501,7 @@ public async Task ReloadsOnConfigurationChangeByDefault()
501
501
ApplicationServices = serviceCollection . BuildServiceProvider ( ) ,
502
502
} ;
503
503
504
- options . Configure ( mockConfig . Object ) ;
504
+ options . Configure ( mockConfig . Object , reloadOnChange : true ) ;
505
505
506
506
var mockTransports = new List < Mock < IConnectionListener > > ( ) ;
507
507
var mockTransportFactory = new Mock < IConnectionListenerFactory > ( ) ;
@@ -611,6 +611,65 @@ public async Task ReloadsOnConfigurationChangeByDefault()
611
611
}
612
612
}
613
613
614
+ [ Fact ]
615
+ public async Task DoesNotReloadOnConfigurationChangeByDefault ( )
616
+ {
617
+ var currentConfig = new ConfigurationBuilder ( ) . AddInMemoryCollection ( new [ ]
618
+ {
619
+ new KeyValuePair < string , string > ( "Endpoints:A:Url" , "http://*:5000" ) ,
620
+ new KeyValuePair < string , string > ( "Endpoints:B:Url" , "http://*:5001" ) ,
621
+ } ) . Build ( ) ;
622
+
623
+ var mockConfig = new Mock < IConfiguration > ( ) ;
624
+ mockConfig . Setup ( c => c . GetSection ( It . IsAny < string > ( ) ) ) . Returns < string > ( name => currentConfig . GetSection ( name ) ) ;
625
+ mockConfig . Setup ( c => c . GetChildren ( ) ) . Returns ( ( ) => currentConfig . GetChildren ( ) ) ;
626
+
627
+ var mockLoggerFactory = new Mock < ILoggerFactory > ( ) ;
628
+ mockLoggerFactory . Setup ( m => m . CreateLogger ( It . IsAny < string > ( ) ) ) . Returns ( Mock . Of < ILogger > ( ) ) ;
629
+
630
+ var serviceCollection = new ServiceCollection ( ) ;
631
+ serviceCollection . AddSingleton ( mockLoggerFactory . Object ) ;
632
+ serviceCollection . AddSingleton ( Mock . Of < ILogger < KestrelServer > > ( ) ) ;
633
+
634
+ var options = new KestrelServerOptions
635
+ {
636
+ ApplicationServices = serviceCollection . BuildServiceProvider ( ) ,
637
+ } ;
638
+
639
+ options . Configure ( mockConfig . Object ) ;
640
+
641
+ var mockTransports = new List < Mock < IConnectionListener > > ( ) ;
642
+ var mockTransportFactory = new Mock < IConnectionListenerFactory > ( ) ;
643
+ mockTransportFactory
644
+ . Setup ( transportFactory => transportFactory . BindAsync ( It . IsAny < EndPoint > ( ) , It . IsAny < CancellationToken > ( ) ) )
645
+ . Returns < EndPoint , CancellationToken > ( ( e , token ) =>
646
+ {
647
+ var mockTransport = new Mock < IConnectionListener > ( ) ;
648
+ mockTransport
649
+ . Setup ( transport => transport . AcceptAsync ( It . IsAny < CancellationToken > ( ) ) )
650
+ . Returns ( new ValueTask < ConnectionContext > ( result : null ) ) ;
651
+ mockTransport
652
+ . Setup ( transport => transport . EndPoint )
653
+ . Returns ( e ) ;
654
+
655
+ mockTransports . Add ( mockTransport ) ;
656
+
657
+ return new ValueTask < IConnectionListener > ( mockTransport . Object ) ;
658
+ } ) ;
659
+
660
+ // Don't use "using". Dispose() could hang if test fails.
661
+ var server = new KestrelServer ( Options . Create ( options ) , new List < IConnectionListenerFactory > ( ) { mockTransportFactory . Object } , mockLoggerFactory . Object ) ;
662
+
663
+ await server . StartAsync ( new DummyApplication ( ) , CancellationToken . None ) . DefaultTimeout ( ) ;
664
+
665
+ mockTransportFactory . Verify ( f => f . BindAsync ( new IPEndPoint ( IPAddress . IPv6Any , 5000 ) , It . IsAny < CancellationToken > ( ) ) , Times . Once ) ;
666
+ mockTransportFactory . Verify ( f => f . BindAsync ( new IPEndPoint ( IPAddress . IPv6Any , 5001 ) , It . IsAny < CancellationToken > ( ) ) , Times . Once ) ;
667
+
668
+ mockConfig . Verify ( c => c . GetReloadToken ( ) , Times . Never ) ;
669
+
670
+ await server . StopAsync ( CancellationToken . None ) . DefaultTimeout ( ) ;
671
+ }
672
+
614
673
private static KestrelServer CreateServer ( KestrelServerOptions options , ILogger testLogger )
615
674
{
616
675
return new KestrelServer ( Options . Create ( options ) , new List < IConnectionListenerFactory > ( ) { new MockTransportFactory ( ) } , new LoggerFactory ( new [ ] { new KestrelTestLoggerProvider ( testLogger ) } ) ) ;
0 commit comments