Esempio n. 1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Response"/> class.
        /// </summary>
        /// <param name="responseMessage">
        /// The response.
        /// </param>
        private Response(ResponseMessage responseMessage)
        {
            ResponseMessage = responseMessage;

            _fileSystemHandler          = new LocalFileSystemHandler();
            _responseMessageTransformer = new ResponseMessageTransformer(_fileSystemHandler);
        }
Esempio n. 2
0
        /// <summary>
        /// The provide response.
        /// </summary>
        /// <param name="requestMessage">The request.</param>
        /// <returns>The <see cref="ResponseMessage"/>.</returns>
        public async Task <ResponseMessage> ProvideResponseAsync(RequestMessage requestMessage)
        {
            Check.NotNull(requestMessage, nameof(requestMessage));

            if (Delay != null)
            {
                await Task.Delay(Delay.Value);
            }

            if (ProxyUrl != null && _httpClientForProxy != null)
            {
                var requestUri = new Uri(requestMessage.Url);
                var proxyUri   = new Uri(ProxyUrl);
                var proxyUriWithRequestPathAndQuery = new Uri(proxyUri, requestUri.PathAndQuery);

                return(await HttpClientHelper.SendAsync(_httpClientForProxy, requestMessage, proxyUriWithRequestPathAndQuery.AbsoluteUri));
            }

            if (UseTransformer)
            {
                return(ResponseMessageTransformer.Transform(requestMessage, ResponseMessage));
            }

            return(ResponseMessage);
        }
Esempio n. 3
0
        /// <inheritdoc cref="IResponseProvider.ProvideResponseAsync(RequestMessage, IWireMockServerSettings)"/>
        public async Task <ResponseMessage> ProvideResponseAsync(RequestMessage requestMessage, IWireMockServerSettings settings)
        {
            Check.NotNull(requestMessage, nameof(requestMessage));
            Check.NotNull(settings, nameof(settings));

            if (Delay != null)
            {
                await Task.Delay(Delay.Value);
            }

            if (ProxyUrl != null && _httpClientForProxy != null)
            {
                var requestUri = new Uri(requestMessage.Url);
                var proxyUri   = new Uri(ProxyUrl);
                var proxyUriWithRequestPathAndQuery = new Uri(proxyUri, requestUri.PathAndQuery);

                return(await HttpClientHelper.SendAsync(_httpClientForProxy, requestMessage, proxyUriWithRequestPathAndQuery.AbsoluteUri, !settings.DisableJsonBodyParsing.GetValueOrDefault(false)));
            }

            ResponseMessage responseMessage;

            if (Callback == null)
            {
                responseMessage = ResponseMessage;
            }
            else
            {
                responseMessage = Callback(requestMessage);

                if (!WithCallbackUsed)
                {
                    // Copy StatusCode from ResponseMessage
                    responseMessage.StatusCode = ResponseMessage.StatusCode;

                    // Copy Headers from ResponseMessage (if defined)
                    if (ResponseMessage.Headers != null)
                    {
                        responseMessage.Headers = ResponseMessage.Headers;
                    }
                }
            }

            if (UseTransformer)
            {
                var factory = new HandlebarsContextFactory(settings.FileSystemHandler, settings.HandlebarsRegistrationCallback);
                var responseMessageTransformer = new ResponseMessageTransformer(factory);
                return(responseMessageTransformer.Transform(requestMessage, responseMessage, UseTransformerForBodyAsFile));
            }

            if (!UseTransformer && ResponseMessage.BodyData?.BodyAsFileIsCached == true)
            {
                ResponseMessage.BodyData.BodyAsBytes = settings.FileSystemHandler.ReadResponseBodyAsFile(responseMessage.BodyData.BodyAsFile);
            }

            return(responseMessage);
        }
Esempio n. 4
0
        public async Task <ResponseMessage> ProvideResponseAsync(RequestMessage requestMessage, IFileSystemHandler fileSystemHandler)
        {
            Check.NotNull(requestMessage, nameof(requestMessage));

            if (Delay != null)
            {
                await Task.Delay(Delay.Value);
            }

            if (Callback != null)
            {
                var callbackResponseMessage = Callback(requestMessage);

                if (!WithCallbackUsed)
                {
                    // Copy StatusCode from ResponseMessage
                    callbackResponseMessage.StatusCode = ResponseMessage.StatusCode;

                    // Copy Headers from ResponseMessage (if defined)
                    if (ResponseMessage.Headers != null)
                    {
                        callbackResponseMessage.Headers = ResponseMessage.Headers;
                    }
                }

                return(callbackResponseMessage);
            }

            if (ProxyUrl != null && _httpClientForProxy != null)
            {
                var requestUri = new Uri(requestMessage.Url);
                var proxyUri   = new Uri(ProxyUrl);
                var proxyUriWithRequestPathAndQuery = new Uri(proxyUri, requestUri.PathAndQuery);

                return(await HttpClientHelper.SendAsync(_httpClientForProxy, requestMessage, proxyUriWithRequestPathAndQuery.AbsoluteUri));
            }

            if (UseTransformer)
            {
                var responseMessageTransformer = new ResponseMessageTransformer(fileSystemHandler);
                return(responseMessageTransformer.Transform(requestMessage, ResponseMessage));
            }

            if (!UseTransformer && ResponseMessage.BodyData?.BodyAsFileIsCached == true)
            {
                ResponseMessage.BodyData.BodyAsBytes = fileSystemHandler.ReadResponseBodyAsFile(ResponseMessage.BodyData.BodyAsFile);
                ResponseMessage.BodyData.BodyAsFile  = null;
            }

            return(ResponseMessage);
        }
Esempio n. 5
0
        /// <summary>
        /// The provide response.
        /// </summary>
        /// <param name="requestMessage">The request.</param>
        /// <returns>The <see cref="ResponseMessage"/>.</returns>
        public async Task <ResponseMessage> ProvideResponseAsync(RequestMessage requestMessage)
        {
            Check.NotNull(requestMessage, nameof(requestMessage));

            if (Delay != null)
            {
                await Task.Delay(Delay.Value);
            }

            if (Callback != null)
            {
                var callbackResponseMessage = Callback(requestMessage);

                if (!WithCallbackUsed)
                {
                    // Copy StatusCode from ResponseMessage
                    callbackResponseMessage.StatusCode = ResponseMessage.StatusCode;

                    // Copy Headers from ResponseMessage (if defined)
                    if (ResponseMessage.Headers != null)
                    {
                        callbackResponseMessage.Headers = ResponseMessage.Headers;
                    }
                }

                return(callbackResponseMessage);
            }

            if (ProxyUrl != null && _httpClientForProxy != null)
            {
                var requestUri = new Uri(requestMessage.Url);
                var proxyUri   = new Uri(ProxyUrl);
                var proxyUriWithRequestPathAndQuery = new Uri(proxyUri, requestUri.PathAndQuery);

                return(await HttpClientHelper.SendAsync(_httpClientForProxy, requestMessage, proxyUriWithRequestPathAndQuery.AbsoluteUri));
            }

            if (UseTransformer)
            {
                return(ResponseMessageTransformer.Transform(requestMessage, ResponseMessage));
            }

            // Just return normal defined ResponseMessage
            return(ResponseMessage);
        }
Esempio n. 6
0
        /// <summary>
        /// The provide response.
        /// </summary>
        /// <param name="requestMessage">The request.</param>
        /// <returns>The <see cref="ResponseMessage"/>.</returns>
        public async Task <ResponseMessage> ProvideResponseAsync(RequestMessage requestMessage)
        {
            Check.NotNull(requestMessage, nameof(requestMessage));

            if (Delay != null)
            {
                await Task.Delay(Delay.Value);
            }

            if (ProxyUrl != null)
            {
                return(await HttpClientHelper.SendAsync(requestMessage, ProxyUrl));
            }
            else if (UseTransformer)
            {
                return(ResponseMessageTransformer.Transform(requestMessage, ResponseMessage));
            }

            return(ResponseMessage);
        }
Esempio n. 7
0
        /// <inheritdoc cref="IResponseProvider.ProvideResponseAsync(RequestMessage, IWireMockServerSettings)"/>
        public async Task <ResponseMessage> ProvideResponseAsync(RequestMessage requestMessage, IWireMockServerSettings settings)
        {
            Check.NotNull(requestMessage, nameof(requestMessage));
            Check.NotNull(settings, nameof(settings));

            if (Delay != null)
            {
                await Task.Delay(Delay.Value);
            }

            if (ProxyUrl != null && _httpClientForProxy != null)
            {
                string RemoveFirstOccurrence(string source, string find)
                {
                    int place = source.IndexOf(find, StringComparison.OrdinalIgnoreCase);

                    return(place >= 0 ? source.Remove(place, find.Length) : source);
                }

                var requestUri = new Uri(requestMessage.Url);

                // Build the proxy url and skip duplicates
                string extra = RemoveFirstOccurrence(requestUri.LocalPath.TrimEnd('/'), new Uri(ProxyUrl).LocalPath.TrimEnd('/'));
                requestMessage.ProxyUrl = ProxyUrl + extra + requestUri.Query;

                return(await HttpClientHelper.SendAsync(
                           _httpClientForProxy,
                           requestMessage,
                           requestMessage.ProxyUrl,
                           !settings.DisableJsonBodyParsing.GetValueOrDefault(false),
                           !settings.DisableRequestBodyDecompressing.GetValueOrDefault(false)
                           ));
            }

            ResponseMessage responseMessage;

            if (Callback == null && CallbackAsync == null)
            {
                responseMessage = ResponseMessage;
            }
            else
            {
                if (Callback != null)
                {
                    responseMessage = Callback(requestMessage);
                }
                else
                {
                    responseMessage = await CallbackAsync(requestMessage);
                }

                if (!WithCallbackUsed)
                {
                    // Copy StatusCode from ResponseMessage
                    responseMessage.StatusCode = ResponseMessage.StatusCode;

                    // Copy Headers from ResponseMessage (if defined)
                    if (ResponseMessage.Headers != null)
                    {
                        responseMessage.Headers = ResponseMessage.Headers;
                    }
                }
            }

            if (UseTransformer)
            {
                var factory = new HandlebarsContextFactory(settings.FileSystemHandler, settings.HandlebarsRegistrationCallback);
                var responseMessageTransformer = new ResponseMessageTransformer(factory);
                return(responseMessageTransformer.Transform(requestMessage, responseMessage, UseTransformerForBodyAsFile));
            }

            if (!UseTransformer && ResponseMessage.BodyData?.BodyAsFileIsCached == true)
            {
                ResponseMessage.BodyData.BodyAsBytes = settings.FileSystemHandler.ReadResponseBodyAsFile(responseMessage.BodyData.BodyAsFile);
            }

            return(responseMessage);
        }