public async Task HttpConnectionChangesAfterTimeoutChange_RemoveFromCache() { using var server = new WireServer(WireMockServer.Start()); var timeout = new HttpTimeoutOptions() { TimeoutMS = 5000 }; var httpClientCollection = HttpOptionsBuilder.Configure(builder => { builder.Configure(options => { options.AddClient("service", clientOptions => { server.ConfigureWireMockServer(clientOptions); clientOptions.Handler.HandlerLifeTimeMinutes = 0.05; clientOptions.Timeout.Timeout = timeout.Timeout; }); } ); }).Build(); var client = httpClientCollection.CreateClient("service"); await client.GetAsync("/delay/300ms"); timeout.TimeoutMS = 1; httpClientCollection.ServiceProvider().GetRequiredService <IOptionsMonitorCache <HttpClientOptions> >().Clear(); httpClientCollection.ServiceProvider().GetRequiredService <IOptionsMonitorCache <HttpClientCollectionOptions> >().TryRemove(HttpClientCollectionOptions.DefaultName); await Task.Delay(TimeSpan.FromSeconds(10)); var ex = Policy.Handle <AssertionException>().WaitAndRetry(new[] { TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(20), }).Execute(() => Assert.ThrowsAsync <TimeoutException>(() => httpClientCollection.CreateClient("service").GetAsync("/delay/300ms"))); // factory.ServiceProvider().GetRequiredService<IOptionsMonitorCache<HttpClientOptions>>().Clear(); // factory.ServiceProvider().GetRequiredService<IOptionsMonitorCache<HttpClientCollectionOptions>>().Clear(); Assert.That(ex.Data.Keys, Has.One.Items.Contains("timeout")); Assert.That(ex.Data["timeout"], Is.EqualTo(TimeSpan.FromMilliseconds(1))); }
public async Task HttpClient_ErrorCircuitBreakerTest() { using var server = new WireServer(WireMockServer.Start()); var httpClientCollection = HttpOptionsBuilder.Configure(builder => { builder.Configure(options => { options.AddClient("service", clientOptions => { server.ConfigureWireMockServer(clientOptions); clientOptions.Polly.CircuitBreaker.SamplingDuration = 3000; clientOptions.Polly.CircuitBreaker.Enabled = true; }); } ); }).Build(); var factory = httpClientCollection.GetFactory(); var client = factory.CreateClient("service"); await Observable .FromAsync(ct => client .GetAsync("/error/5ms", ct)) .Catch(Observable.Return(new HttpResponseMessage())) .Repeat(50) .RepeatWhen(c => c.DelaySubscription(TimeSpan.FromMilliseconds(10))) .TakeUntil(DateTimeOffset.Now.AddSeconds(5)); Assert.That(async() => await client.GetAsync("/error/5ms"), Throws.InstanceOf <BrokenCircuitException>()); Assert.That(async() => await client.GetAsync("/delay/5ms"), Throws.InstanceOf <BrokenCircuitException>()); Assert.That(async() => await client.GetAsync("/delay/1s"), Throws.InstanceOf <BrokenCircuitException>()); }
public async Task SetUp() { _server = new WireServer(WireMockServer.Start()); }
public HttpClientContextTracingTests() { _wireServer = WireMockServer.Start(); _server = new WireServer(_wireServer); }