public void TestGetWithUrlTooLongByUserSpecified() { uint maxUrlLength = 1000; var query = "q=" + new String('x', 900) + "&x=" + new String('y', 72); var uri = "http://www.example.com/"; var requestUri = uri + "?" + query; var request = new HttpRequestMessage(HttpMethod.Get, requestUri); var mockHandler = new MockMessageHandler(); var handler = new ConfigurableMessageHandler(mockHandler); handler.AddExecuteInterceptor(new MaxUrlLengthInterceptor(maxUrlLength)); using (var httpClient = new HttpClient(handler)) { httpClient.SendAsync(request); // Confirm the test URI is one character too long. Assert.That(requestUri.Length, Is.EqualTo(maxUrlLength + 1)); // Confirm the request was modified correctly: Assert.That(request.Method, Is.EqualTo(HttpMethod.Post)); Assert.That(request.Headers.GetValues("X-HTTP-Method-Override").Single(), Is.EqualTo("GET")); Assert.That(request.Content.Headers.ContentType, Is.EqualTo(new MediaTypeHeaderValue("application/x-www-form-urlencoded"))); Assert.That(request.RequestUri, Is.EqualTo(new Uri(uri))); Assert.That(mockHandler.RequestContent, Is.EqualTo(query)); } }
/// <summary> /// Helper for regression tests that URLs less than or equal to 2048 characters, or requests that are not GET, /// are not modified. If you are testing with GET, the length should be less than 2048. /// </summary> private void SubtestGetWithUrlOkayLengthByDefault(uint length, HttpMethod method) { var requestUri = "http://www.example.com/?q=" + new String('x', (int)length - 26); var request = new HttpRequestMessage(method, requestUri); var mockHandler = new MockMessageHandler(); var handler = new ConfigurableMessageHandler(mockHandler); handler.AddExecuteInterceptor(new MaxUrlLengthInterceptor(DefaultMaxUrlLength)); using (var httpClient = new HttpClient(handler)) { httpClient.SendAsync(request); Assert.That(request.RequestUri.ToString().Length, Is.EqualTo(length)); Assert.That(request.Method, Is.EqualTo(method)); Assert.That(request.Headers.Contains("X-HTTP-Method-Override"), Is.False); Assert.That(request.Content, Is.Null); Assert.That(request.RequestUri, Is.EqualTo(new Uri(requestUri))); } }
public void TestGetPathQueryWithUrlOkayLengthByDefault() { uint maxUrlLength = 1000; var query = "q=" + new String('x', 1000); var uri = "http://www.googleapis.com/language/translate/v2"; var requestUri = uri + "?" + query; var request = new HttpRequestMessage(HttpMethod.Get, requestUri); var mockHandler = new MockMessageHandler(); var handler = new ConfigurableMessageHandler(mockHandler); handler.AddExecuteInterceptor(new MaxUrlLengthInterceptor(maxUrlLength)); using (var httpClient = new HttpClient(handler)) { httpClient.SendAsync(request); // Confirm the request was modified correctly, and the uri was set correctly. Assert.That(request.RequestUri, Is.EqualTo(new Uri(uri))); Assert.That(mockHandler.RequestContent, Is.EqualTo(query)); } }
/// <summary>Tests that execute interceptor is called.</summary> private void SubtestSendAsyncExecuteInterceptor(HttpStatusCode code) { var handler = new InterceptorMessageHandler(); handler.InjectedResponseMessage = new HttpResponseMessage() { StatusCode = code }; var configurableHanlder = new ConfigurableMessageHandler(handler); var interceptor = new InterceptorMessageHandler.Interceptor(); configurableHanlder.AddExecuteInterceptor(interceptor); using (var client = new HttpClient(configurableHanlder)) { var request = new HttpRequestMessage(HttpMethod.Get, "https://test-execute-interceptor"); HttpResponseMessage response = client.SendAsync(request).Result; Assert.That(interceptor.Calls, Is.EqualTo(1)); Assert.That(handler.Calls, Is.EqualTo(1)); } }
public void SendAsync_ExecuteInterceptor_AbnormalResponse_UnsuccessfulResponseHandler() { var handler = new InterceptorMessageHandler(); handler.InjectedResponseMessage = new HttpResponseMessage() { StatusCode = HttpStatusCode.ServiceUnavailable }; var configurableHanlder = new ConfigurableMessageHandler(handler); var interceptor = new InterceptorMessageHandler.Interceptor(); configurableHanlder.AddExecuteInterceptor(interceptor); configurableHanlder.AddUnsuccessfulResponseHandler(new TrueUnsuccessfulResponseHandler()); using (var client = new HttpClient(configurableHanlder)) { var request = new HttpRequestMessage(HttpMethod.Get, "https://test-execute-interceptor"); HttpResponseMessage response = client.SendAsync(request).Result; Assert.That(interceptor.Calls, Is.EqualTo(configurableHanlder.NumTries)); Assert.That(handler.Calls, Is.EqualTo(configurableHanlder.NumTries)); } }