public void PolicyWrap_ThrowException() { // Given / Arrange var mockPolicyLogger = new Mock <ILogger <WebApiPolicyFactory> >(); // Setup Policy WebApiFaultHandleConfiguration config = new WebApiFaultHandleConfiguration { MaxRetryAttempts = 3, InitialRetryDelayInSec = 1, DurationOnBreakInSec = 10, ExceptionsAllowedBeforeBreaking = 3, WebApiTimeoutInMs = 3000 }; IOptions <WebApiFaultHandleConfiguration> option = Options.Create(config); var mockPolicyFactory = new WebApiPolicyFactory(mockPolicyLogger.Object, option); var path = "500"; var request = new HttpRequestMessage(HttpMethod.Get, path); request.SetBearerToken("test-token"); var cbPolicy = mockPolicyFactory.CreateCircuitBreakerPolicy(request); var warPolicy = mockPolicyFactory.CreateWaitAndRetryPolicy(); var tPolicy = mockPolicyFactory.CreateTimeoutPolicy(); var policyWrap = Policy.WrapAsync(warPolicy, tPolicy, cbPolicy); // config httpClient var clientName = "TestPolicyWrap"; IServiceCollection services = new ServiceCollection(); services .AddSingleton <IWebApiPolicyFactory, WebApiPolicyFactory>() .AddHttpClient(clientName) .AddPolicyHandler(policyWrap); HttpClient configuredClient = services .BuildServiceProvider() .GetRequiredService <IHttpClientFactory>() .CreateClient(clientName); configuredClient.BaseAddress = new Uri("https://httpstat.us/"); // act Exception exc = Record.ExceptionAsync(() => configuredClient.SendAsync(request)).GetAwaiter().GetResult(); // assert Assert.IsType <BrokenCircuitException>(exc); }
public WebApiPolicyTest() { // Setup logger var mockPolicyLogger = new Mock <ILogger <WebApiPolicyFactory> >(); // Setup httpclient _httpClient = new HttpClient() { BaseAddress = new Uri("https://httpstat.us/") }; // Setup Policy WebApiFaultHandleConfiguration config = new WebApiFaultHandleConfiguration { MaxRetryAttempts = 3, InitialRetryDelayInSec = 1, DurationOnBreakInSec = 10, ExceptionsAllowedBeforeBreaking = 1, WebApiTimeoutInMs = 3000 }; IOptions <WebApiFaultHandleConfiguration> option = Options.Create(config); _mockPolicyFactory = new WebApiPolicyFactory(mockPolicyLogger.Object, option); }