public async Task TestControllerWebWarm() { TestServer server = null; var builder = new WebHostBuilder() .Configure(app => { app.UseMvc(); }) .ConfigureServices(services => { services.AddMvcCore().AddFormatterMappings().AddJsonFormatters(); services.AddSingleton <ILogger <HostedWarmWebService> >(sp => new XUnitTestLoggerNamed <HostedWarmWebService>(_outputHelper)); var options = new HostedWarmWebOptions { BaseUri = new Uri("http://localhost/"), WarmupEndpoints = new [] { "testserver/countcalls", "testserver/badendpoint" }, Interval = TimeSpan.FromSeconds(2), InitialDelay = TimeSpan.FromMilliseconds(500) }; services.AddSingleton(options); var client = new HttpClient { BaseAddress = new Uri("http:") }; services.AddSingleton <Func <HttpClient> >(sp => () => server.CreateClient()); services.AddHostedService <HostedWarmWebService>(); }); using (server = new TestServer(builder)) { await Task.Delay(TimeSpan.FromSeconds(5)); } Assert.InRange(TestServerController.Calls, 2, 4); }
/// <summary> /// Constructs warm web service /// </summary> /// <param name="options">The options for the warm web service</param> /// <param name="logger">The logger for the service</param> /// <param name="getClient">A function for getting the httpclient, will use the default if null</param> public HostedWarmWebService(HostedWarmWebOptions options, ILogger <HostedWarmWebService> logger, Func <HttpClient> getClient = null) : base(options, logger) { _options = options; _logger = logger; if (getClient == null) { _client = new HttpClient { BaseAddress = _options.BaseUri }; } _getClient = getClient; }