public async Task TooManyRequestsRetryHandler_SendRequestAsync_RetriesOnTooManyRequests() { var mockHandler = new MockMessageHandler(); DateTime timeToStart = DateTime.Now.AddSeconds(1); var requestHandler = new MockResponseHandler() { CanHandleRequest = (request) => request.Method.Method == "GET" && request.RequestUri.ToString() == "http://testsite.com/test", HandleRequest = async(request) => { try { System.Diagnostics.Debug.WriteLine(System.Threading.Interlocked.Increment(ref requestCount)); var timeToWait = timeToStart.Subtract(DateTime.Now); if (timeToWait.TotalMilliseconds > 0) { await Task.Delay(timeToWait).ConfigureAwait(false); } if (requestCount < 4) { return(new System.Net.Http.HttpResponseMessage((System.Net.HttpStatusCode) 429)); } else { return(new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.NoContent)); } } finally { System.Threading.Interlocked.Increment(ref requestCount); } } }; mockHandler.AddDynamicResponse(requestHandler); var handler = new TooManyRequestsRetryHandler(mockHandler, 5, TimeSpan.FromMilliseconds(1000)); using (var client = new System.Net.Http.HttpClient(handler)) { var response = await client.GetAsync("http://testsite.com/test"); Assert.AreNotEqual(429, (int)response.StatusCode); } }
public void TooManyRequestsRetryHandler_Constructor_ConstructsOkWithValidArguments() { using (var handler = new TooManyRequestsRetryHandler(new System.Net.Http.HttpClientHandler(), 5, TimeSpan.FromSeconds(1))) { } }
public void TooManyRequestsRetryHandler_Constructor_ThrowsOnNullInnerHandler() { var handler = new TooManyRequestsRetryHandler(null); }