Esempio n. 1
0
        public async Task WaitsBetweenRetries()
        {
            var policy        = new ExponentialRetryPolicyMock(retriableCodes: new [] { 500 }, delay: TimeSpan.FromSeconds(1), maxDelay: TimeSpan.FromSeconds(10));
            var mockTransport = new MockTransport();
            var task          = SendRequest(mockTransport, policy);

            await mockTransport.RequestGate.Cycle(new MockResponse(500));

            var delay = await policy.DelayGate.Cycle();

            AssertExponentialDelay(TimeSpan.FromSeconds(1), delay);

            await mockTransport.RequestGate.Cycle(new MockResponse(200));

            var response = await task.TimeoutAfterDefault();

            Assert.AreEqual(200, response.Status);
        }
Esempio n. 2
0
        public async Task RespectsMaxDelay()
        {
            var policy                  = new ExponentialRetryPolicyMock(retriableCodes: new [] { 500 }, maxRetries: 6, delay: TimeSpan.FromSeconds(1), maxDelay: TimeSpan.FromSeconds(5));
            var mockTransport           = new MockTransport();
            var task                    = SendRequest(mockTransport, policy);
            var expectedDelaysInSeconds = new int[] { 1, 2, 4, 5, 5, 5 };

            await mockTransport.RequestGate.Cycle(new MockResponse(500));

            for (int i = 0; i < 6; i++)
            {
                var delay = await policy.DelayGate.Cycle();

                AssertExponentialDelay(TimeSpan.FromSeconds(expectedDelaysInSeconds[i]), delay);

                await mockTransport.RequestGate.Cycle(new MockResponse(500));
            }

            var response = await task.TimeoutAfterDefault();

            Assert.AreEqual(500, response.Status);
        }
        public async Task UsesLargerOfDelayAndServerDelay(int delay, int retryAfter, int expected)
        {
            var responseClassifier = new MockResponseClassifier(retriableCodes: new [] { 500 });
            var policy             = new ExponentialRetryPolicyMock(delay: TimeSpan.FromSeconds(delay), maxDelay: TimeSpan.FromSeconds(5));
            var mockTransport      = CreateMockTransport();
            var task = SendGetRequest(mockTransport, policy, responseClassifier);

            MockResponse mockResponse = new MockResponse(500);

            mockResponse.AddHeader(new HttpHeader("Retry-After", retryAfter.ToString()));

            await mockTransport.RequestGate.Cycle(mockResponse);

            var retryDelay = await policy.DelayGate.Cycle();

            await mockTransport.RequestGate.Cycle(new MockResponse(501));

            var response = await task.TimeoutAfterDefault();

            AssertExponentialDelay(TimeSpan.FromSeconds(expected), retryDelay);
            Assert.AreEqual(501, response.Status);
        }
        public async Task WaitsSameAmountEveryTime()
        {
            var responseClassifier = new MockResponseClassifier(retriableCodes: new [] { 500 });
            var policy             = new ExponentialRetryPolicyMock(maxRetries: 4, delay: TimeSpan.FromSeconds(1), maxDelay: TimeSpan.FromSeconds(10));
            var mockTransport      = CreateMockTransport();
            var task = SendGetRequest(mockTransport, policy, responseClassifier);
            var expectedDelaysInSeconds = new int[] { 1, 2, 4, 8 };

            await mockTransport.RequestGate.Cycle(new MockResponse(500));

            for (int i = 0; i < 4; i++)
            {
                var delay = await policy.DelayGate.Cycle();

                AssertExponentialDelay(TimeSpan.FromSeconds(expectedDelaysInSeconds[i]), delay);

                await mockTransport.RequestGate.Cycle(new MockResponse(500));
            }

            var response = await task.TimeoutAfterDefault();

            Assert.AreEqual(500, response.Status);
        }
Esempio n. 5
0
        protected override (HttpPipelinePolicy, AsyncGate <TimeSpan, object>) CreateRetryPolicy(int[] retriableCodes, Func <Exception, bool> exceptionFilter = null, int maxRetries = 3)
        {
            var policy = new ExponentialRetryPolicyMock(retriableCodes, exceptionFilter, maxRetries, TimeSpan.FromSeconds(3), maxDelay: TimeSpan.MaxValue);

            return(policy, policy.DelayGate);
        }
        protected override (HttpPipelinePolicy, AsyncGate <TimeSpan, object>) CreateRetryPolicy(int maxRetries = 3)
        {
            var policy = new ExponentialRetryPolicyMock(maxRetries, TimeSpan.FromSeconds(3), maxDelay: TimeSpan.MaxValue);

            return(policy, policy.DelayGate);
        }