public void ClientAddHandlerToPipelineAddsHandler() { var fakeClient = new FakeServiceClient(new HttpClientHandler(), new BadResponseDelegatingHandler()); var result2 = fakeClient.DoStuffSync(); Assert.Equal(HttpStatusCode.InternalServerError, result2.StatusCode); }
public void MeasureSvcClientMem() { AddHeaderResponseDelegatingHandler addHeader = new AddHeaderResponseDelegatingHandler("Hello", "World"); var fakeClient = new FakeServiceClient(addHeader); RetryDelegatingHandler retryDelHandler = fakeClient.HttpMessageHandlers.OfType <RetryDelegatingHandler>().FirstOrDefault(); Assert.Equal(0, retryDelHandler.EventCallbackCount); fakeClient.DoStuffSync(); Assert.Equal(0, retryDelHandler.EventCallbackCount); Assert.Equal(0, retryDelHandler.RetryPolicy.EventCallbackCount); fakeClient.DoStuffSync(); Assert.Equal(0, retryDelHandler.RetryPolicy.EventCallbackCount); }
public void AddUserAgentInfoWithVersion() { string defaultProductName = "FxVersion"; string testProductName = "TestProduct"; string testProductVersion = "1.0.0.0"; Version defaultProductVer, testProductVer; FakeServiceClient fakeClient = new FakeServiceClient(new FakeHttpHandler()); fakeClient.SetUserAgent(testProductName, testProductVersion); HttpResponseMessage response = fakeClient.DoStuffSync(); HttpHeaderValueCollection <ProductInfoHeaderValue> userAgentValueCollection = fakeClient.HttpClient.DefaultRequestHeaders.UserAgent; var defaultProduct = userAgentValueCollection.Where <ProductInfoHeaderValue>((p) => p.Product.Name.Equals(defaultProductName)).FirstOrDefault <ProductInfoHeaderValue>(); var testProduct = userAgentValueCollection.Where <ProductInfoHeaderValue>((p) => p.Product.Name.Equals(testProductName)).FirstOrDefault <ProductInfoHeaderValue>(); Version.TryParse(defaultProduct.Product.Version, out defaultProductVer); Version.TryParse(testProduct.Product.Version, out testProductVer); Assert.True(defaultProduct.Product.Name.Equals(defaultProductName)); Assert.NotNull(defaultProductVer); Assert.True(testProduct.Product.Name.Equals(testProductName)); Assert.True(testProduct.Product.Version.Equals(testProductVersion)); }
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); }
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); }
public void CheckIfHttpClientIsDisposed() { FakeServiceClient fakeClient = new FakeServiceClient(new FakeHttpHandler()); fakeClient.DoStuffSync(); fakeClient.Dispose(); try { fakeClient.DoStuffSync(); } catch (NullReferenceException nEx) { Assert.True(true); } }
public async Task HttpClientTimeoutReturnsErrorResponse(string content) { // Setup the RetryDelegatingHandler to retry very quickly. var retryStrategy = new FixedIntervalRetryStrategy(Int32.MaxValue, TimeSpan.FromTicks(1)); var retryPolicy = new RetryPolicy(new HttpStatusCodeErrorDetectionStrategy(), retryStrategy); var fakeHttpHandler = new FakeHttpHandler { TweakResponse = (response) => { response.Content = content == null ? null : new StringContent(String.Empty); } }; var retryHandler = new RetryDelegatingHandler(retryPolicy, fakeHttpHandler); // Setup HttpClient to timeout after 500 milliseconds. var httpClient = new HttpClient(retryHandler, false) { Timeout = TimeSpan.FromMilliseconds(500) }; // 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.InternalServerError, responseMessage.StatusCode); }
public void ClientAddHandlersToPipelineAddSingleHandler() { var fakeClient = new FakeServiceClient(new HttpClientHandler(), new BadResponseDelegatingHandler() ); var result2 = fakeClient.DoStuffSync(); Assert.Equal(HttpStatusCode.InternalServerError, result2.StatusCode); }
public void FakeSvcClientWithHttpClient() { HttpClient hc = new HttpClient(new ContosoMessageHandler()); var fakeClient = new FakeServiceClient(hc); HttpResponseMessage response = fakeClient.DoStuffSync(); string responseContent = response.Content.ReadAsStringAsync().ConfigureAwait(false).GetAwaiter().GetResult(); Assert.Equal("Contoso Rocks", responseContent); }
public void ClientWithoutHandlerWorks() { var fakeClient = new FakeServiceClient(new HttpClientHandler(), new MirrorDelegatingHandler()); var response = fakeClient.DoStuffSync("Text").Content.ReadAsStringAsync().ConfigureAwait(false).GetAwaiter().GetResult(); Assert.Equal("Text", response); }
public void ClientAddHandlersToPipelineAddMultipleHandler() { var fakeClient = new FakeServiceClient(new HttpClientHandler(), new AddHeaderResponseDelegatingHandler("foo", "bar"), new BadResponseDelegatingHandler() ); var result2 = fakeClient.DoStuffSync(); Assert.Equal(result2.Headers.GetValues("foo").FirstOrDefault(), "bar"); Assert.Equal(HttpStatusCode.InternalServerError, result2.StatusCode); }
public void ClientAddHandlersToPipelineAddMultipleHandler() { var fakeClient = new FakeServiceClient(new HttpClientHandler(), new AddHeaderResponseDelegatingHandler("foo", "bar"), new BadResponseDelegatingHandler() ); var result2 = fakeClient.DoStuffSync(); Assert.Equal(result2.Headers.GetValues("foo").FirstOrDefault(), "bar"); Assert.Equal(HttpStatusCode.InternalServerError, result2.StatusCode); }
public void VerifyOsInfoInUserAgent() { string osInfoProductName = "OSName"; FakeServiceClient fakeClient = new FakeServiceClient(new FakeHttpHandler()); HttpResponseMessage response = fakeClient.DoStuffSync(); HttpHeaderValueCollection <ProductInfoHeaderValue> userAgentValueCollection = fakeClient.HttpClient.DefaultRequestHeaders.UserAgent; var osProduct = userAgentValueCollection.Where <ProductInfoHeaderValue>((p) => p.Product.Name.Equals(osInfoProductName)).FirstOrDefault <ProductInfoHeaderValue>(); Assert.NotEmpty(osProduct.Product.Name); Assert.NotEmpty(osProduct.Product.Version); }
public void ClientAddHandlersToPipelineChainsEmptyHandler() { var handlerA = new AppenderDelegatingHandler("A"); var handlerB = new AppenderDelegatingHandler("B"); var handlerC = new AppenderDelegatingHandler("C"); var fakeClient = new FakeServiceClient(new HttpClientHandler(), handlerA, handlerB, handlerC, new MirrorDelegatingHandler()); var response = fakeClient.DoStuffSync("Text").Content.ReadAsStringAsync().ConfigureAwait(false).GetAwaiter().GetResult(); Assert.Equal("Text+A+B+C", response); }
public void ClientAddHandlersToPipelineChainsEmptyHandler() { var handlerA = new AppenderDelegatingHandler("A"); var handlerB = new AppenderDelegatingHandler("B"); var handlerC = new AppenderDelegatingHandler("C"); var fakeClient = new FakeServiceClient(new HttpClientHandler(), handlerA, handlerB, handlerC, new MirrorDelegatingHandler()); var response = fakeClient.DoStuffSync("Text").Content.ReadAsStringAsync().ConfigureAwait(false).GetAwaiter().GetResult(); Assert.Equal("Text+A+B+C", response); }
public void RetryAfterHandleTest() { var http = new FakeHttpHandler(); http.NumberOfTimesToFail = 2; http.StatusCodeToReturn = (HttpStatusCode)429; http.TweakResponse = (response) => { response.Headers.Add("Retry-After", "10"); }; var fakeClient = new FakeServiceClient(http, new RetryAfterDelegatingHandler()); var result = fakeClient.DoStuffSync(); Assert.Equal(HttpStatusCode.OK, result.StatusCode); Assert.Equal(2, http.NumberOfTimesFailedSoFar); }
public void RetryHandlerRetriesWith500Errors() { var fakeClient = new FakeServiceClient(new FakeHttpHandler()); int attemptsFailed = 0; fakeClient.SetRetryPolicy(new RetryPolicy <HttpStatusCodeErrorDetectionStrategy>(2)); var retryHandler = fakeClient.HttpMessageHandlers.OfType <RetryDelegatingHandler>().FirstOrDefault(); retryHandler.Retrying += (sender, args) => { attemptsFailed++; }; var result = fakeClient.DoStuffSync(); Assert.Equal(HttpStatusCode.InternalServerError, result.StatusCode); Assert.Equal(2, attemptsFailed); }
public void RetryHandlerDoesntRetryFor400Errors() { var fakeClient = new FakeServiceClient(new FakeHttpHandler() { StatusCodeToReturn = HttpStatusCode.Conflict }); int attemptsFailed = 0; fakeClient.SetRetryPolicy(new RetryPolicy <HttpStatusCodeErrorDetectionStrategy>(2)); var retryHandler = fakeClient.HttpMessageHandlers.OfType <RetryDelegatingHandler>().FirstOrDefault(); retryHandler.Retrying += (sender, args) => { attemptsFailed++; }; var result = fakeClient.DoStuffSync(); Assert.Equal(HttpStatusCode.Conflict, result.StatusCode); Assert.Equal(0, attemptsFailed); }
public void ClientAddHandlersToPipelineChainsNestedHandler() { var handlerA = new AppenderDelegatingHandler("A"); var handlerB = new AppenderDelegatingHandler("B"); var handlerC = new AppenderDelegatingHandler("C"); handlerA.InnerHandler = handlerB; handlerB.InnerHandler = handlerC; var handlerD = new AppenderDelegatingHandler("D"); var handlerE = new AppenderDelegatingHandler("E"); handlerD.InnerHandler = handlerE; handlerE.InnerHandler = new MirrorMessageHandler("F"); var fakeClient = new FakeServiceClient(new HttpClientHandler(), handlerA, handlerD, new MirrorDelegatingHandler()); var response = fakeClient.DoStuffSync("Text").Content.ReadAsStringAsync().ConfigureAwait(false).GetAwaiter().GetResult(); Assert.Equal("Text+A+B+C+D+E", response); }
public void RetryHandlerRetriesWith500ErrorsAndSucceeds() { var fakeClient = new FakeServiceClient(new FakeHttpHandler() { NumberOfTimesToFail = 1 }); int attemptsFailed = 0; var retryPolicy = new RetryPolicy <HttpStatusCodeErrorDetectionStrategy>(2); fakeClient.SetRetryPolicy(retryPolicy); var retryHandler = fakeClient.HttpMessageHandlers.OfType <RetryDelegatingHandler>().FirstOrDefault(); retryPolicy.Retrying += (sender, args) => { attemptsFailed++; }; var result = fakeClient.DoStuffSync(); Assert.Equal(HttpStatusCode.OK, result.StatusCode); Assert.Equal(1, attemptsFailed); }
public void ClientAddHandlersToPipelineChainsNestedHandler() { var handlerA = new AppenderDelegatingHandler("A"); var handlerB = new AppenderDelegatingHandler("B"); var handlerC = new AppenderDelegatingHandler("C"); handlerA.InnerHandler = handlerB; handlerB.InnerHandler = handlerC; var handlerD = new AppenderDelegatingHandler("D"); var handlerE = new AppenderDelegatingHandler("E"); handlerD.InnerHandler = handlerE; handlerE.InnerHandler = new MirrorMessageHandler("F"); var fakeClient = new FakeServiceClient(new HttpClientHandler(), handlerA, handlerD, new MirrorDelegatingHandler()); var response = fakeClient.DoStuffSync("Text").Content.ReadAsStringAsync().ConfigureAwait(false).GetAwaiter().GetResult(); Assert.Equal("Text+A+B+C+D+E", response); }
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); }
public void RetryHandlerRetriesWith500Errors() { var fakeClient = new FakeServiceClient(new FakeHttpHandler()); int attemptsFailed = 0; fakeClient.SetRetryPolicy(new RetryPolicy<HttpStatusCodeErrorDetectionStrategy>(2)); var retryHandler = fakeClient.HttpMessageHandlers.OfType<RetryDelegatingHandler>().FirstOrDefault(); retryHandler.Retrying += (sender, args) => { attemptsFailed++; }; var result = fakeClient.DoStuffSync(); Assert.Equal(HttpStatusCode.InternalServerError, result.StatusCode); Assert.Equal(2, attemptsFailed); }
public void ClientWithoutHandlerWorks() { var fakeClient = new FakeServiceClient(new HttpClientHandler(), new MirrorDelegatingHandler()); var response = fakeClient.DoStuffSync("Text").Content.ReadAsStringAsync().ConfigureAwait(false).GetAwaiter().GetResult(); Assert.Equal("Text", response); }
public void AddUserAgentInfoWithVersion() { string defaultProductName = "FxVersion"; string testProductName = "TestProduct"; string testProductVersion = "1.0.0.0"; Version defaultProductVer, testProductVer; FakeServiceClient fakeClient = new FakeServiceClient(new FakeHttpHandler()); fakeClient.SetUserAgent(testProductName, testProductVersion); HttpResponseMessage response = fakeClient.DoStuffSync(); HttpHeaderValueCollection<ProductInfoHeaderValue> userAgentValueCollection = fakeClient.HttpClient.DefaultRequestHeaders.UserAgent; var defaultProduct = userAgentValueCollection.Where<ProductInfoHeaderValue>((p) => p.Product.Name.Equals(defaultProductName)).FirstOrDefault<ProductInfoHeaderValue>(); var testProduct = userAgentValueCollection.Where<ProductInfoHeaderValue>((p) => p.Product.Name.Equals(testProductName)).FirstOrDefault<ProductInfoHeaderValue>(); Version.TryParse(defaultProduct.Product.Version, out defaultProductVer); Version.TryParse(testProduct.Product.Version, out testProductVer); Assert.True(defaultProduct.Product.Name.Equals(defaultProductName)); Assert.NotNull(defaultProductVer); Assert.True(testProduct.Product.Name.Equals(testProductName)); Assert.True(testProduct.Product.Version.Equals(testProductVersion)); }
public void VerifyOsInfoInUserAgent() { string osInfoProductName = "OSName"; FakeServiceClient fakeClient = new FakeServiceClient(new FakeHttpHandler()); HttpResponseMessage response = fakeClient.DoStuffSync(); HttpHeaderValueCollection<ProductInfoHeaderValue> userAgentValueCollection = fakeClient.HttpClient.DefaultRequestHeaders.UserAgent; var osProduct = userAgentValueCollection.Where<ProductInfoHeaderValue>((p) => p.Product.Name.Equals(osInfoProductName)).FirstOrDefault<ProductInfoHeaderValue>(); Assert.NotEmpty(osProduct.Product.Name); Assert.NotEmpty(osProduct.Product.Version); }
public void RetryHandlerRetriesWith500ErrorsAndSucceeds() { var fakeClient = new FakeServiceClient(new FakeHttpHandler() {NumberOfTimesToFail = 1}); int attemptsFailed = 0; var retryPolicy = new RetryPolicy<HttpStatusCodeErrorDetectionStrategy>(2); fakeClient.SetRetryPolicy(retryPolicy); var retryHandler = fakeClient.HttpMessageHandlers.OfType<RetryDelegatingHandler>().FirstOrDefault(); retryPolicy.Retrying += (sender, args) => { attemptsFailed++; }; var result = fakeClient.DoStuffSync(); Assert.Equal(HttpStatusCode.OK, result.StatusCode); Assert.Equal(1, attemptsFailed); }
public void RetryHandlerDoesntRetryFor400Errors() { var fakeClient = new FakeServiceClient(new FakeHttpHandler() {StatusCodeToReturn = HttpStatusCode.Conflict}); int attemptsFailed = 0; fakeClient.SetRetryPolicy(new RetryPolicy<HttpStatusCodeErrorDetectionStrategy>(2)); var retryHandler = fakeClient.HttpMessageHandlers.OfType<RetryDelegatingHandler>().FirstOrDefault(); retryHandler.Retrying += (sender, args) => { attemptsFailed++; }; var result = fakeClient.DoStuffSync(); Assert.Equal(HttpStatusCode.Conflict, result.StatusCode); Assert.Equal(0, attemptsFailed); }
public void ClientWithoutHandlerWorks() { var fakeClient = new FakeServiceClient(new WebRequestHandler(), new MirrorDelegatingHandler()); var response = fakeClient.DoStuffSync("Text").Content.ReadAsStringAsync().Result; Assert.Equal("Text", response); }