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);
        }