public async Task HttpRetryHandler_EnhancedRetryAllowsSettingMoreRetries() { // Arrange var tries = 0; var sent503 = false; Func <HttpRequestMessage, HttpResponseMessage> handler = requestMessage => { tries++; // Return 503 for the first 2 tries if (tries > 10) { return(new HttpResponseMessage(HttpStatusCode.OK)); } else { sent503 = true; return(new HttpResponseMessage(HttpStatusCode.ServiceUnavailable)); } }; TestEnvironmentVariableReader testEnvironmentVariableReader = new TestEnvironmentVariableReader( new Dictionary <string, string>() { [EnhancedHttpRetryHelper.IsEnabledEnvironmentVariableName] = bool.TrueString, [EnhancedHttpRetryHelper.RetryCountEnvironmentVariableName] = "11", [EnhancedHttpRetryHelper.DelayInMillisecondsEnvironmentVariableName] = "3" }); EnhancedHttpRetryHelper helper = new EnhancedHttpRetryHelper(testEnvironmentVariableReader); Assert.Equal(helper.IsEnabled, true); // Enhanced retry mode causes a random 0-199 ms jitter so we can't time it in this test // but we can make sure the setting got through Assert.Equal(helper.DelayInMilliseconds, 3); Assert.Equal(helper.RetryCount, 11); var retryHandler = new HttpRetryHandler(testEnvironmentVariableReader); var testHandler = new HttpRetryTestHandler(handler); var httpClient = new HttpClient(testHandler); var request = new HttpRetryHandlerRequest(httpClient, () => new HttpRequestMessage(HttpMethod.Get, TestUrl)) { MaxTries = helper.RetryCount, RequestTimeout = Timeout.InfiniteTimeSpan, // HttpRetryHandler will override with values from NUGET_ENHANCED_NETWORK_RETRY_DELAY_MILLISECONDS // so set this to a value that will cause test timeout if the correct value is not honored. RetryDelay = TimeSpan.FromMilliseconds(int.MaxValue) // = about 24 days }; var log = new TestLogger(); // Act using (var response = await retryHandler.SendAsync(request, log, CancellationToken.None)) { // Assert Assert.True(sent503); Assert.Equal(11, tries); Assert.Equal(HttpStatusCode.OK, response.StatusCode); } }
public void HttpRetryHandler_EnhancedRetryOnByDefault(string value, bool expectedValue) { // Arrange TestEnvironmentVariableReader testEnvironmentVariableReader = new TestEnvironmentVariableReader( new Dictionary <string, string>() { [EnhancedHttpRetryHelper.IsEnabledEnvironmentVariableName] = value, [EnhancedHttpRetryHelper.RetryCountEnvironmentVariableName] = null, [EnhancedHttpRetryHelper.DelayInMillisecondsEnvironmentVariableName] = null }); // Act EnhancedHttpRetryHelper helper = new EnhancedHttpRetryHelper(testEnvironmentVariableReader); Assert.Equal(helper.IsEnabled, expectedValue); Assert.Equal(helper.RetryCount, EnhancedHttpRetryHelper.DefaultRetryCount); Assert.Equal(helper.DelayInMilliseconds, EnhancedHttpRetryHelper.DefaultDelayMilliseconds); }