Ejemplo n.º 1
0
        public async void WireMockMiddleware_Invoke_Mapping_Has_ProxyAndRecordSettings_And_SaveMapping_Is_False_But_WireMockServerSettings_SaveMapping_Is_True()
        {
            // Assign
            var request = new RequestMessage(new UrlDetails("http://localhost/foo"), "GET", "::1", null, new Dictionary <string, string[]>());

            _requestMapperMock.Setup(m => m.MapAsync(It.IsAny <IRequest>(), It.IsAny <IWireMockMiddlewareOptions>())).ReturnsAsync(request);

            _optionsMock.SetupGet(o => o.AuthorizationMatcher).Returns(new ExactMatcher());

            var fileSystemHandlerMock = new Mock <IFileSystemHandler>();

            fileSystemHandlerMock.Setup(f => f.GetMappingFolder()).Returns("m");

            var logger = new Mock <IWireMockLogger>();

            var proxyAndRecordSettings = new ProxyAndRecordSettings
            {
                SaveMapping       = false,
                SaveMappingToFile = false
            };

            var settings = new WireMockServerSettings
            {
                FileSystemHandler      = fileSystemHandlerMock.Object,
                Logger                 = logger.Object,
                ProxyAndRecordSettings = new ProxyAndRecordSettings
                {
                    SaveMapping       = true,
                    SaveMappingToFile = true
                }
            };

            var responseBuilder = Response.Create().WithProxy(proxyAndRecordSettings);

            _mappingMock.SetupGet(m => m.Provider).Returns(responseBuilder);
            _mappingMock.SetupGet(m => m.Settings).Returns(settings);

            var newMappingFromProxy = new Mapping(Guid.NewGuid(), "", null, settings, Request.Create(), Response.Create(), 0, null, null, null, null, null);

            _mappingMock.Setup(m => m.ProvideResponseAsync(It.IsAny <RequestMessage>())).ReturnsAsync((new ResponseMessage(), newMappingFromProxy));

            var requestBuilder = Request.Create().UsingAnyMethod();

            _mappingMock.SetupGet(m => m.RequestMatcher).Returns(requestBuilder);

            var result = new MappingMatcherResult {
                Mapping = _mappingMock.Object
            };

            _matcherMock.Setup(m => m.FindBestMatch(It.IsAny <RequestMessage>())).Returns((result, result));

            // Act
            await _sut.Invoke(_contextMock.Object);

            // Assert and Verify
            fileSystemHandlerMock.Verify(f => f.WriteMappingFile(It.IsAny <string>(), It.IsAny <string>()), Times.Once);

            _mappings.Count.Should().Be(1);
        }
        public ProxyAsyncResponseProvider([NotNull] Func <RequestMessage, ProxyAndRecordSettings, Task <ResponseMessage> > responseMessageFunc, [NotNull] ProxyAndRecordSettings settings)
        {
            Check.NotNull(responseMessageFunc, nameof(responseMessageFunc));
            Check.NotNull(settings, nameof(settings));

            _responseMessageFunc = responseMessageFunc;
            _settings            = settings;
        }
Ejemplo n.º 3
0
        /// <inheritdoc cref="IProxyResponseBuilder.WithProxy(string, string)"/>
        public IResponseBuilder WithProxy(string proxyUrl, string clientX509Certificate2ThumbprintOrSubjectName = null)
        {
            Check.NotNullOrEmpty(proxyUrl, nameof(proxyUrl));

            var settings = new ProxyAndRecordSettings
            {
                Url = proxyUrl,
                ClientX509Certificate2ThumbprintOrSubjectName = clientX509Certificate2ThumbprintOrSubjectName
            };

            return(WithProxy(settings));
        }
Ejemplo n.º 4
0
        public void Response_WithProxy_WebProxySettings()
        {
            // Assign
            var settings = new ProxyAndRecordSettings
            {
                Url = "http://test.nl",
                WebProxySettings = new WebProxySettings
                {
                    Address  = "http://company",
                    UserName = "******",
                    Password = "******"
                }
            };
            var responseBuilder = Response.Create().WithProxy(settings);

            // Act
            var request = new RequestMessage(new UrlDetails($"{_server.Urls[0]}/{_guid}"), "GET", ClientIp);

            Check.ThatAsyncCode(() => responseBuilder.ProvideResponseAsync(request, _settings)).Throws <HttpRequestException>();
        }
Ejemplo n.º 5
0
        private IResponseBuilder InitResponseBuilder(ResponseModel responseModel)
        {
            IResponseBuilder responseBuilder = Response.Create();

            if (responseModel.Delay > 0)
            {
                responseBuilder = responseBuilder.WithDelay(responseModel.Delay.Value);
            }

            if (responseModel.UseTransformer == true)
            {
                responseBuilder = responseBuilder.WithTransformer(responseModel.UseTransformerForBodyAsFile == true);
            }

            if (!string.IsNullOrEmpty(responseModel.ProxyUrl))
            {
                var proxyAndRecordSettings = new ProxyAndRecordSettings
                {
                    Url = responseModel.ProxyUrl,
                    ClientX509Certificate2ThumbprintOrSubjectName = responseModel.X509Certificate2ThumbprintOrSubjectName,
                    WebProxySettings = responseModel.WebProxy != null ? new WebProxySettings
                    {
                        Address  = responseModel.WebProxy.Address,
                        UserName = responseModel.WebProxy.UserName,
                        Password = responseModel.WebProxy.Password
                    } : null
                };

                return(responseBuilder.WithProxy(proxyAndRecordSettings));
            }

            switch (responseModel.StatusCode)
            {
            case int statusCodeAsInteger:
                responseBuilder = responseBuilder.WithStatusCode(statusCodeAsInteger);
                break;

            case string statusCodeAsString:
                responseBuilder = responseBuilder.WithStatusCode(statusCodeAsString);
                break;
            }

            if (responseModel.Headers != null)
            {
                foreach (var entry in responseModel.Headers)
                {
                    responseBuilder = entry.Value is string value?
                                      responseBuilder.WithHeader(entry.Key, value) :
                                          responseBuilder.WithHeader(entry.Key, JsonUtils.ParseJTokenToObject <string[]>(entry.Value));
                }
            }
            else if (responseModel.HeadersRaw != null)
            {
                foreach (string headerLine in responseModel.HeadersRaw.Split(new[] { "\n", "\r\n" }, StringSplitOptions.RemoveEmptyEntries))
                {
                    int    indexColon = headerLine.IndexOf(":", StringComparison.Ordinal);
                    string key        = headerLine.Substring(0, indexColon).TrimStart(' ', '\t');
                    string value      = headerLine.Substring(indexColon + 1).TrimStart(' ', '\t');
                    responseBuilder = responseBuilder.WithHeader(key, value);
                }
            }

            if (responseModel.BodyAsBytes != null)
            {
                responseBuilder = responseBuilder.WithBody(responseModel.BodyAsBytes, responseModel.BodyDestination, ToEncoding(responseModel.BodyEncoding));
            }
            else if (responseModel.Body != null)
            {
                responseBuilder = responseBuilder.WithBody(responseModel.Body, responseModel.BodyDestination, ToEncoding(responseModel.BodyEncoding));
            }
            else if (responseModel.BodyAsJson != null)
            {
                responseBuilder = responseBuilder.WithBodyAsJson(responseModel.BodyAsJson, ToEncoding(responseModel.BodyEncoding), responseModel.BodyAsJsonIndented == true);
            }
            else if (responseModel.BodyAsFile != null)
            {
                responseBuilder = responseBuilder.WithBodyFromFile(responseModel.BodyAsFile);
            }

            if (responseModel.Fault != null && Enum.TryParse(responseModel.Fault.Type, out FaultType faultType))
            {
                responseBuilder.WithFault(faultType, responseModel.Fault.Percentage);
            }

            return(responseBuilder);
        }
Ejemplo n.º 6
0
        private IResponseBuilder InitResponseBuilder(ResponseModel responseModel)
        {
            IResponseBuilder responseBuilder = Response.Create();

            if (responseModel.Delay > 0)
            {
                responseBuilder = responseBuilder.WithDelay(responseModel.Delay.Value);
            }
            else if (responseModel.MinimumRandomDelay >= 0 || responseModel.MaximumRandomDelay > 0)
            {
                responseBuilder = responseBuilder.WithRandomDelay(responseModel.MinimumRandomDelay ?? 0, responseModel.MaximumRandomDelay ?? 60_000);
            }

            if (responseModel.UseTransformer == true)
            {
                if (!Enum.TryParse <TransformerType>(responseModel.TransformerType, out var transformerType))
                {
                    transformerType = TransformerType.Handlebars;
                }
                responseBuilder = responseBuilder.WithTransformer(transformerType, responseModel.UseTransformerForBodyAsFile == true);
            }

            if (!string.IsNullOrEmpty(responseModel.ProxyUrl))
            {
                var proxyAndRecordSettings = new ProxyAndRecordSettings
                {
                    Url = responseModel.ProxyUrl,
                    ClientX509Certificate2ThumbprintOrSubjectName = responseModel.X509Certificate2ThumbprintOrSubjectName,
                    WebProxySettings = responseModel.WebProxy != null ? new WebProxySettings
                    {
                        Address  = responseModel.WebProxy.Address,
                        UserName = responseModel.WebProxy.UserName,
                        Password = responseModel.WebProxy.Password
                    } : null
                };

                return(responseBuilder.WithProxy(proxyAndRecordSettings));
            }

            if (responseModel.StatusCode is string statusCodeAsString)
            {
                responseBuilder = responseBuilder.WithStatusCode(statusCodeAsString);
            }
            else if (responseModel.StatusCode != null)
            {
                // Convert to Int32 because Newtonsoft deserializes an 'object' with a number value to a long.
                responseBuilder = responseBuilder.WithStatusCode(Convert.ToInt32(responseModel.StatusCode));
            }

            if (responseModel.Headers != null)
            {
                foreach (var entry in responseModel.Headers)
                {
                    responseBuilder = entry.Value is string value?
                                      responseBuilder.WithHeader(entry.Key, value) :
                                          responseBuilder.WithHeader(entry.Key, JsonUtils.ParseJTokenToObject <string[]>(entry.Value));
                }
            }
            else if (responseModel.HeadersRaw != null)
            {
                foreach (string headerLine in responseModel.HeadersRaw.Split(new[] { "\n", "\r\n" }, StringSplitOptions.RemoveEmptyEntries))
                {
                    int    indexColon = headerLine.IndexOf(":", StringComparison.Ordinal);
                    string key        = headerLine.Substring(0, indexColon).TrimStart(' ', '\t');
                    string value      = headerLine.Substring(indexColon + 1).TrimStart(' ', '\t');
                    responseBuilder = responseBuilder.WithHeader(key, value);
                }
            }

            if (responseModel.BodyAsBytes != null)
            {
                responseBuilder = responseBuilder.WithBody(responseModel.BodyAsBytes, responseModel.BodyDestination, ToEncoding(responseModel.BodyEncoding));
            }
            else if (responseModel.Body != null)
            {
                responseBuilder = responseBuilder.WithBody(responseModel.Body, responseModel.BodyDestination, ToEncoding(responseModel.BodyEncoding));
            }
            else if (responseModel.BodyAsJson != null)
            {
                responseBuilder = responseBuilder.WithBodyAsJson(responseModel.BodyAsJson, ToEncoding(responseModel.BodyEncoding), responseModel.BodyAsJsonIndented == true);
            }
            else if (responseModel.BodyAsFile != null)
            {
                responseBuilder = responseBuilder.WithBodyFromFile(responseModel.BodyAsFile);
            }

            if (responseModel.Fault != null && Enum.TryParse(responseModel.Fault.Type, out FaultType faultType))
            {
                responseBuilder.WithFault(faultType, responseModel.Fault.Percentage);
            }

            return(responseBuilder);
        }
Ejemplo n.º 7
0
        private async Task <ResponseMessage> ProxyAndRecordAsync(RequestMessage requestMessage, ProxyAndRecordSettings settings)
        {
            var responseMessage = await HttpClientHelper.SendAsync(requestMessage, settings.Url);

            if (settings.SaveMapping)
            {
                var mapping = ToMapping(requestMessage, responseMessage);
                SaveMappingToFile(mapping);
            }

            return(responseMessage);
        }
Ejemplo n.º 8
0
 private void InitProxyAndRecord(ProxyAndRecordSettings settings)
 {
     Given(Request.Create().WithPath("/*").UsingAnyVerb()).RespondWith(new ProxyAsyncResponseProvider(ProxyAndRecordAsync, settings));
 }
        private async Task <ResponseMessage> ProxyAndRecordAsync(RequestMessage requestMessage, ProxyAndRecordSettings settings)
        {
            var requestUri = new Uri(requestMessage.Url);
            var proxyUri   = new Uri(settings.Url);
            var proxyUriWithRequestPathAndQuery = new Uri(proxyUri, requestUri.PathAndQuery);

            var responseMessage = await HttpClientHelper.SendAsync(_httpClientForProxy, requestMessage, proxyUriWithRequestPathAndQuery.AbsoluteUri);

            if (settings.SaveMapping)
            {
                var mapping = ToMapping(requestMessage, responseMessage);
                _options.Mappings.Add(mapping);

                if (settings.SaveMappingToFile)
                {
                    SaveMappingToFile(mapping);
                }
            }

            return(responseMessage);
        }
 private void InitProxyAndRecord(ProxyAndRecordSettings settings)
 {
     _httpClientForProxy = HttpClientHelper.CreateHttpClient(settings.X509Certificate2ThumbprintOrSubjectName);
     Given(Request.Create().WithPath("/*").UsingAnyVerb()).RespondWith(new ProxyAsyncResponseProvider(ProxyAndRecordAsync, settings));
 }