예제 #1
0
        public async Task LinearRetryAbortsRetriesAfterMaxRetryCount()
        {
            TimeSpan    interval    = TimeSpan.FromSeconds(5);
            const int   maxRetries  = 5;
            LinearRetry linearRetry = new LinearRetry(interval, maxRetries);

            TimeoutException timeoutException = new TimeoutException();

            OperationContext context = new OperationContext();

            RetryDecision retryDecision = null;
            int           requestCount  = 0;

            while (retryDecision == null || retryDecision.ShouldRetry)
            {
                context.RequestResults.Add(new RequestResult(new RequestInformation(), timeoutException));
                retryDecision = await linearRetry.ShouldRetryAsync(timeoutException, context);

                Assert.NotNull(retryDecision);
                if (retryDecision.ShouldRetry)
                {
                    Assert.Equal(interval, retryDecision.RetryDelay);
                }
                ++requestCount;
            }

            Assert.Equal(maxRetries, requestCount - 1); //request count is retry count + 1
        }
예제 #2
0
        public async Task LinearRetryRetriesOnNonBatchException()
        {
            TimeSpan    interval    = TimeSpan.FromSeconds(5);
            const int   maxRetries  = 10;
            LinearRetry linearRetry = new LinearRetry(interval, maxRetries);

            TimeoutException timeoutException = new TimeoutException();

            RetryDecision retryDecision = await linearRetry.ShouldRetryAsync(timeoutException, new OperationContext());

            Assert.Equal(interval, retryDecision.RetryDelay);
            Assert.Equal(true, retryDecision.ShouldRetry);
        }
예제 #3
0
        public async Task LinearRetryRetriesOnBatchException()
        {
            TimeSpan    interval    = TimeSpan.FromSeconds(5);
            const int   maxRetries  = 10;
            LinearRetry linearRetry = new LinearRetry(interval, maxRetries);

            RequestInformation reqInfo = new RequestInformation()
            {
                HttpStatusCode = HttpStatusCode.InternalServerError
            };
            BatchException batchException = new BatchException(reqInfo, "Message", null);

            RetryDecision retryDecision = await linearRetry.ShouldRetryAsync(batchException, new OperationContext());

            Assert.Equal(interval, retryDecision.RetryDelay);
            Assert.Equal(true, retryDecision.ShouldRetry);
        }
        public async Task LinearRetryHonorsRetryAfter()
        {
            TimeSpan  interval    = TimeSpan.FromSeconds(60);
            TimeSpan  retryAfter  = TimeSpan.FromSeconds(10);
            const int maxRetries  = 10;
            var       linearRetry = new LinearRetry(interval, maxRetries);

            RequestInformation reqInfo = new RequestInformation()
            {
                HttpStatusCode = (HttpStatusCode)429,
                RetryAfter     = retryAfter
            };
            BatchException batchException = new BatchException(reqInfo, "Message", null);

            OperationContext context = new OperationContext();

            context.RequestResults.Add(new RequestResult(new RequestInformation(), batchException));

            RetryDecision retryDecision = await linearRetry.ShouldRetryAsync(batchException, context);

            Assert.Equal(retryAfter, retryDecision.RetryDelay);
            Assert.True(retryDecision.ShouldRetry);
        }