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