public async Task CompressedRequestHandler_PutAsync_CompressesContent() { var requestUriString = "http://sometestdomain.com/someendpoint"; var mh = new MockMessageHandler(); mh.AddFixedResponse("PUT", new Uri(requestUriString), new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.Created)); var handler = new CompressedRequestHandler(mh); var client = new System.Net.Http.HttpClient(handler); var uncompressedContent = "A compressible string. A compressible string. A compressible string. A compressible string."; var result = await client.PutAsync(requestUriString, new System.Net.Http.StringContent(uncompressedContent)).ConfigureAwait(false); var modifiedContent = await mh.Requests.Last().Content.ReadAsStringAsync().ConfigureAwait(false); Assert.IsTrue(modifiedContent.Length < uncompressedContent.Length); var stream = await mh.Requests.Last().Content.ReadAsStreamAsync().ConfigureAwait(false); var decompressStream = new System.IO.Compression.GZipStream(stream, System.IO.Compression.CompressionMode.Decompress); var reader = new System.IO.StreamReader(decompressStream); var decompressedContent = reader.ReadToEnd(); Assert.AreEqual(uncompressedContent, decompressedContent); }
public async Task MockMessageHandler_ReturnsFixedResponse() { var requestUriString = "http://www.mytestdomain.com/"; var responseContentString = "Hello World!"; var responseMessage = new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.OK) { Content = new System.Net.Http.StringContent(responseContentString) }; var handler = new MockMessageHandler(); handler.AddFixedResponse(new Uri(requestUriString), responseMessage); var client = new System.Net.Http.HttpClient(handler); var result = await client.GetAsync(requestUriString); Assert.AreEqual(System.Net.HttpStatusCode.OK, result.StatusCode); Assert.AreEqual(responseContentString, await result.Content.ReadAsStringAsync()); var lastRequest = handler.Requests.Last(); Assert.AreEqual("GET", lastRequest.Method.Method); Assert.AreEqual(requestUriString, lastRequest.RequestUri.ToString()); }
public async Task CompressedRequestHandler_PostAsync_WorksWithNullContent() { var requestUriString = "http://sometestdomain.com/someendpoint"; var mh = new MockMessageHandler(); mh.AddFixedResponse("POST", new Uri(requestUriString), new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.Created)); var handler = new CompressedRequestHandler(mh); var client = new System.Net.Http.HttpClient(handler); var result = await client.PostAsync(requestUriString, null).ConfigureAwait(false); result.EnsureSuccessStatusCode(); }
public async Task CompressedRequestHandler_PostAsync_SetsContentEncodingHeader() { var requestUriString = "http://sometestdomain.com/someendpoint"; var mh = new MockMessageHandler(); mh.AddFixedResponse("POST", new Uri(requestUriString), new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.Created)); var handler = new CompressedRequestHandler(mh); var client = new System.Net.Http.HttpClient(handler); var uncompressedContent = "A compressible string. A compressible string. A compressible string. A compressible string."; var result = await client.PostAsync(requestUriString, new System.Net.Http.StringContent(uncompressedContent)).ConfigureAwait(false); Assert.AreEqual("gzip", mh.Requests.Last().Content.Headers.ContentEncoding.First()); }
private static MockMessageHandler SetupOAuth2MockHandler() { var mockHandler = new MockMessageHandler(); mockHandler.AddFixedResponse(new Uri("http://testsite.com/Token"), new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.OK) { Content = new System.Net.Http.StringContent(String.Empty, System.Text.UTF8Encoding.UTF8, MediaTypes.ApplicationJson) }); var mockResponse = new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.Redirect) { Content = new System.Net.Http.StringContent("Normally this is a web page the user logs into, but this test is automated and skips that.", System.Text.UTF8Encoding.UTF8, MediaTypes.ApplicationJson) }; mockResponse.Headers.Location = new Uri("http://testsite.com/AuthComplete?code=28770506516186843330"); mockHandler.AddFixedResponse(new Uri("http://testsite.com/Authorize"), mockResponse); var tokenIssuingHandler = new MockResponseHandler(); tokenIssuingHandler.CanHandleRequest = (request) => { return(request.Method.Method == "POST" && request.RequestUri.ToString() == "http://testsite.com/Token"); }; tokenIssuingHandler.HandleRequest = async(request) => { var content = request.Content as System.Net.Http.FormUrlEncodedContent; if (content == null) { return(new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.BadRequest)); } var contentParams = new Dictionary <string, string>(); var contentStr = await content.ReadAsStringAsync().ConfigureAwait(false); foreach (var kvp in contentStr.Split(new char[] { '&' }, StringSplitOptions.RemoveEmptyEntries)) { var parts = kvp.Split(new char[] { '=' }); var key = Uri.UnescapeDataString(parts[0]); string value = null; if (parts.Length > 1) { value = Uri.UnescapeDataString(parts[1]); } contentParams.Add(key, value); } var grantType = (from c in contentParams where c.Key == "grant_type" select c.Value).FirstOrDefault(); if (grantType == OAuth2.OAuth2GrantTypes.AuthorizationCode) { var code = (from c in contentParams where c.Key == "code" select c.Value).FirstOrDefault(); if (code != "28770506516186843330") { return(new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.BadRequest)); } return(new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.OK) { Content = new System.Net.Http.StringContent("{ token_type: \"Bearer\", access_token: \"123\", expires_in: \"3600\", refresh_token: \"456\" }", System.Text.UTF8Encoding.UTF8, MediaTypes.ApplicationJson) }); } else if (grantType == OAuth2GrantTypes.ClientCredentials) { if (request.Headers.Authorization.Scheme == "Basic" && request.Headers.Authorization.Parameter == "OTg3NjU0MzIxOmFiY2RlZmdoaWxtbm9wcXJzdHV2emFiYw==") { return(new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.OK) { Content = new System.Net.Http.StringContent("{ token_type: \"Bearer\", access_token: \"123\", expires_in: \"3600\", refresh_token: \"456\" }", System.Text.UTF8Encoding.UTF8, MediaTypes.ApplicationJson) }); } } return(new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.BadRequest)); }; mockHandler.AddDynamicResponse(tokenIssuingHandler); var authCheckingHandler = new MockResponseHandler(); authCheckingHandler.CanHandleRequest = (request) => { return(request.RequestUri.ToString() == "http://testsite.com/TestEndpoint"); }; authCheckingHandler.HandleRequest = (request) => { if (request.Headers.Authorization == null || request.Headers.Authorization.Scheme != "Bearer" || request.Headers.Authorization.Parameter != "123") { return(Task.FromResult(new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized))); } return(Task.FromResult(new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.OK) { Content = new System.Net.Http.StringContent("Yay! You're authed.") })); }; mockHandler.AddDynamicResponse(authCheckingHandler); return(mockHandler); }