public async Task <(ResponseMessage ResponseMessage, IMapping Mapping)> SendAsync( [NotNull] IProxyAndRecordSettings proxyAndRecordSettings, [NotNull] HttpClient client, [NotNull] RequestMessage requestMessage, [NotNull] string url) { Check.NotNull(client, nameof(client)); Check.NotNull(requestMessage, nameof(requestMessage)); Check.NotNull(url, nameof(url)); var originalUri = new Uri(requestMessage.Url); var requiredUri = new Uri(url); // Create HttpRequestMessage var httpRequestMessage = HttpRequestMessageHelper.Create(requestMessage, url); // Call the URL var httpResponseMessage = await client.SendAsync(httpRequestMessage, HttpCompletionOption.ResponseContentRead); // Create ResponseMessage bool deserializeJson = !_settings.DisableJsonBodyParsing.GetValueOrDefault(false); bool decompressGzipAndDeflate = !_settings.DisableRequestBodyDecompressing.GetValueOrDefault(false); var responseMessage = await HttpResponseMessageHelper.CreateAsync(httpResponseMessage, requiredUri, originalUri, deserializeJson, decompressGzipAndDeflate); IMapping mapping = null; if (HttpStatusRangeParser.IsMatch(proxyAndRecordSettings.SaveMappingForStatusCodePattern, responseMessage.StatusCode) && (proxyAndRecordSettings.SaveMapping || proxyAndRecordSettings.SaveMappingToFile)) { mapping = ToMapping(proxyAndRecordSettings, requestMessage, responseMessage); } return(responseMessage, mapping); }
private async Task <ResponseMessage> ProxyAndRecordAsync(RequestMessage requestMessage, IWireMockServerSettings settings) { var requestUri = new Uri(requestMessage.Url); var proxyUri = new Uri(settings.ProxyAndRecordSettings.Url); var proxyUriWithRequestPathAndQuery = new Uri(proxyUri, requestUri.PathAndQuery); var responseMessage = await HttpClientHelper.SendAsync(_httpClientForProxy, requestMessage, proxyUriWithRequestPathAndQuery.AbsoluteUri); if (HttpStatusRangeParser.IsMatch(settings.ProxyAndRecordSettings.SaveMappingForStatusCodePattern, responseMessage.StatusCode) && (settings.ProxyAndRecordSettings.SaveMapping || settings.ProxyAndRecordSettings.SaveMappingToFile)) { var mapping = ToMapping(requestMessage, responseMessage, settings.ProxyAndRecordSettings.BlackListedHeaders ?? new string[] { }, settings.ProxyAndRecordSettings.BlackListedCookies ?? new string[] { }); if (settings.ProxyAndRecordSettings.SaveMapping) { _options.Mappings.TryAdd(mapping.Guid, mapping); } if (settings.ProxyAndRecordSettings.SaveMappingToFile) { SaveMappingToFile(mapping); } } return(responseMessage); }
private async Task <ResponseMessage> ProxyAndRecordAsyncWithHttpClient(RequestMessage requestMessage, IWireMockServerSettings settings, HttpClient p_httpClientForProxy) { Uri requestUri; Uri proxyUriWithRequestPathAndQuery; var proxyUri = new Uri(settings.ProxyAndRecordSettings.Url); if (string.IsNullOrEmpty(settings.ProxyAndRecordSettings.PrefixURL)) { requestUri = new Uri(requestMessage.Url); proxyUriWithRequestPathAndQuery = new Uri(proxyUri, requestUri.PathAndQuery); } else { int idx; idx = requestMessage.Url.IndexOf(settings.ProxyAndRecordSettings.PrefixURL, StringComparison.Ordinal); requestUri = new Uri(idx < 0 ? requestMessage.Url : requestMessage.Url.Remove(idx, settings.ProxyAndRecordSettings.PrefixURL.Length)); idx = requestUri.PathAndQuery.IndexOf(settings.ProxyAndRecordSettings.PrefixURL, StringComparison.Ordinal); proxyUriWithRequestPathAndQuery = new Uri(proxyUri, idx < 0 ? requestUri.PathAndQuery : requestUri.PathAndQuery.Remove(idx, settings.ProxyAndRecordSettings.PrefixURL.Length)); } var responseMessage = await HttpClientHelper.SendAsync(p_httpClientForProxy, requestMessage, proxyUriWithRequestPathAndQuery.AbsoluteUri, !settings.DisableJsonBodyParsing.GetValueOrDefault(false), !settings.DisableRequestBodyDecompressing.GetValueOrDefault(false)); if (HttpStatusRangeParser.IsMatch(settings.ProxyAndRecordSettings.SaveMappingForStatusCodePattern, responseMessage.StatusCode) && (settings.ProxyAndRecordSettings.SaveMapping || settings.ProxyAndRecordSettings.SaveMappingToFile)) { var mapping = ToMapping(requestMessage, responseMessage, settings.ProxyAndRecordSettings.BlackListedHeaders ?? new string[] { }, settings.ProxyAndRecordSettings.BlackListedCookies ?? new string[] { }); if (settings.ProxyAndRecordSettings.SaveMapping) { _options.Mappings.TryAdd(mapping.Guid, mapping); } if (settings.ProxyAndRecordSettings.SaveMappingToFile) { SaveMappingToFile(mapping); } } return(responseMessage); }
public void parser_throws_on_invalid_pattern(string pattern) { Assert.Throws <ArgumentException>(() => HttpStatusRangeParser.IsMatch(pattern, 100)); }
public bool parser_works(string pattern, int value) { return(HttpStatusRangeParser.IsMatch(pattern, value)); }
public void HttpStatusRangeParser_InvalidPattern_ThrowsException(string pattern) { Assert.Throws <ArgumentException>(() => HttpStatusRangeParser.IsMatch(pattern, 100)); }
public void HttpStatusRangeParser_ValidPattern_HttpStatusCode_IsMatch() { HttpStatusRangeParser.IsMatch("4xx", HttpStatusCode.BadRequest).Should().BeTrue(); }
public void HttpStatusRangeParser_ValidPattern_IsMatch(string pattern, int value, bool expectedResult) { HttpStatusRangeParser.IsMatch(pattern, value).Should().Be(expectedResult); }
public void parser_throws_on_invalid_pattern(string pattern) { var x = HttpStatusRangeParser.IsMatch(pattern, 100); }