Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #4
0
 public void parser_throws_on_invalid_pattern(string pattern)
 {
     Assert.Throws <ArgumentException>(() => HttpStatusRangeParser.IsMatch(pattern, 100));
 }
Beispiel #5
0
 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);
 }