Ejemplo n.º 1
0
        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)));
        }
Ejemplo n.º 2
0
        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>());
        }
Ejemplo n.º 3
0
 public async Task SetUp()
 {
     _server = new WireServer(WireMockServer.Start());
 }
 public HttpClientContextTracingTests()
 {
     _wireServer = WireMockServer.Start();
     _server     = new WireServer(_wireServer);
 }