コード例 #1
0
        public void LimitsRetryCount()
        {
            // Setup to always return 429.
            var fakeHttpHandler = new FakeHttpHandler
            {
                StatusCodeToReturn = (HttpStatusCode)429,
                TweakResponse      = (response) =>
                {
                    response.Headers.Add("Retry-After", "1");
                }
            };

            var retryHandler = new RetryAfterDelegatingHandler(fakeHttpHandler)
            {
                MaxRetries = 3
            };

            var httpClient = new HttpClient(retryHandler, false);

            // Make a request using the HttpClient.
            var fakeClient      = new FakeServiceClient(httpClient);
            var responseMessage = fakeClient.DoStuffSync();

            Assert.NotNull(responseMessage);
            Assert.Equal(3, fakeHttpHandler.NumberOfTimesFailedSoFar);
            Assert.Equal((HttpStatusCode)429, responseMessage.StatusCode);
        }
コード例 #2
0
        public void HttpClientTimeoutReturnsErrorResponse(string content)
        {
            // Setup to always return 429.
            var fakeHttpHandler = new FakeHttpHandler
            {
                StatusCodeToReturn = (HttpStatusCode)429,
                TweakResponse      = (response) =>
                {
                    response.Content = content == null ? null : new StringContent(String.Empty);
                    response.Headers.Add("Retry-After", "1");
                }
            };

            var retryHandler = new RetryAfterDelegatingHandler(fakeHttpHandler);

            // Setup HttpClient to timeout after 5 seconds.
            var httpClient = new HttpClient(retryHandler, false)
            {
                Timeout = TimeSpan.FromSeconds(5)
            };

            // Make a request using the HttpClient.
            var fakeClient      = new FakeServiceClient(httpClient);
            var responseMessage = fakeClient.DoStuffSync();

            Assert.NotNull(responseMessage);
            Assert.True(fakeHttpHandler.NumberOfTimesFailedSoFar > 1);
            Assert.Equal((HttpStatusCode)429, responseMessage.StatusCode);
        }
コード例 #3
0
        public void TaskCanceledCallingBaseSendAsyncCausesErrorResponse()
        {
            // Setup to always return 429.
            var fakeHttpHandler = new FakeHttpHandler();

            fakeHttpHandler.StatusCodeToReturn = (HttpStatusCode)429;

            int callCount = 0;

            fakeHttpHandler.TweakResponse = (response) =>
            {
                // After 3 calls returning 429, cause TaskCanceledException to be thrown.
                if (callCount++ > 3)
                {
                    throw new TaskCanceledException();
                }

                response.Content = new StringContent(String.Empty);
                response.Headers.Add("Retry-After", "1");
            };

            var retryHandler = new RetryAfterDelegatingHandler(fakeHttpHandler);

            // Setup HttpClient to timeout after 5 seconds.
            var httpClient = new HttpClient(retryHandler, false)
            {
                Timeout = TimeSpan.FromSeconds(5)
            };

            // Make a request using the HttpClient.
            var fakeClient      = new FakeServiceClient(httpClient);
            var responseMessage = fakeClient.DoStuffSync();

            Assert.NotNull(responseMessage);
            Assert.True(fakeHttpHandler.NumberOfTimesFailedSoFar > 1);
            Assert.Equal((HttpStatusCode)429, responseMessage.StatusCode);
        }