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; }
/// <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)); }
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>(); }
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); }
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); }
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); }
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)); }