示例#1
0
        private bool FillPayload(IRequestDetails requestDetails, RequestDefinitionItem requestDefinition, Models.ResponseDetails response)
        {
            var payload = requestDefinition.Then.Payload;

            if (string.IsNullOrWhiteSpace(payload))
            {
                return(false);
            }

            payload = ReplaceGuids(payload);

            if (requestDefinition.When.UrlRegexExpression != null)
            {
                foreach (var urlVariable in requestDefinition.When.UrlVariables)
                {
                    while (payload.Contains($"@{urlVariable}"))
                    {
                        var match = Regex.Match(requestDetails.Uri, requestDefinition.When.UrlRegexExpression, RegexOptions.IgnoreCase | RegexOptions.Singleline);

                        payload = payload.Replace($"@{urlVariable}", match.Groups[urlVariable]?.Value);
                    }
                }
            }

            response.ContentType = requestDefinition.Then.ContentType;
            response.Content     = payload;
            return(true);
        }
        public MockedRequestDefinition GetMockedRequestWithDefinition(IRequestDetails requestDetails)
        {
            var requestContext = _requestHistory.AddOrUpdate(
                GetHistoryItemCacheKey(requestDetails),
                new RequestContext(requestDetails),
                (k, existingRequestData) => existingRequestData);

            requestContext.IncrementCounter();

            var foundItems = _requestDefinitionProvider.FindItems(requestContext).ToArray();

            if (!foundItems.Any())
            {
                return(new MockedRequestDefinition(requestContext, null));
            }

            var index = requestContext.Counter <= 0 ? 0 : requestContext.Counter - 1;

            if (index >= foundItems.Length)
            {
                index %= foundItems.Length;
            }

            return(new MockedRequestDefinition(requestContext, foundItems[index]));
        }
示例#3
0
        private async Task <IResponseDetails> ProcessRequestDefinition(IRequestDetails requestDetails, MockedRequestDefinition mockedRequestWithDefinition, CancellationToken cancellationToken)
        {
            var requestDefinition = mockedRequestWithDefinition.RequestDefinition;

            if (requestDefinition == null)
            {
                return new Models.ResponseDetails {
                           StatusCode = StatusCodes.Status200OK
                }
            }
            ;

            var handled = false;

            var response = new Models.ResponseDetails();

            handled |= FillContentType(requestDefinition, response);

            handled |= FillStatusCode(requestDefinition, response);

            handled |= await FillDelay(requestDefinition, cancellationToken);

            handled |= FillPayload(requestDetails, requestDefinition, response);

            handled |= FillHeaders(requestDefinition, response);

            if (handled)
            {
                _logger.LogInformation($"Handler description={requestDefinition.Description ?? "N/A"}, Request counter={mockedRequestWithDefinition.MockedRequest.Counter}");
            }

            return(response);
        }
示例#4
0
        private IResponseDetails ProcessGetCommand(IRequestDetails requestDetails, CancellationToken cancellationToken)
        {
            _logger.LogInformation("Get configuration");

            var requestDefinitionWriter = _requestDefinitionWriteProvider.GetWriter();

            var definitionSets   = _requestDefinitionProvider.GetDefinitionSets();
            var fisrstDefinition = definitionSets.FirstOrDefault();

            if (fisrstDefinition == null)
            {
                return(ResponseDetailsFactory.Status404NotFound());
            }

            var configurationDefinition = ConfigurationDefinitionConverter.ToConfigurationDefinition(fisrstDefinition);

            if (!ConfigurationDefinitionExtensions.HasData(ref configurationDefinition))
            {
                return(ResponseDetailsFactory.Status400BadRequest());
            }

            var content = requestDefinitionWriter.Write(ref configurationDefinition);

            if (content == null)
            {
                return(ResponseDetailsFactory.Status400BadRequest());
            }

            return(ResponseDetailsFactory.Status200OK(content));
        }
        public Task <IResponseDetails> Execute(IRequestDetails requestDetails, CancellationToken cancellationToken)
        {
            _logger.LogInformation($"Reset counters. Current number of history items {_requestHistoryStorage.CurrentItemsCount}");

            _requestHistoryStorage.Clear();

            return(Task.FromResult((IResponseDetails)ResponseDetailsFactory.Status200OK()));
        }
        public Task <IResponseDetails> Execute(IRequestDetails requestDetails, CancellationToken cancellationToken)
        {
            _logger.LogInformation($"Reset configuration. Current number of definition items {_requestDefinitionProvider.GetCount()}");

            _requestDefinitionProvider.Clear();
            _requestHistoryStorage.Clear();

            return(Task.FromResult((IResponseDetails)ResponseDetailsFactory.Status200OK()));
        }
示例#7
0
        public async Task <IResponseDetails> Execute(IRequestDetails requestDetails, CancellationToken cancellationToken)
        {
            _logger.LogInformation("Set configuration");

            cancellationToken.ThrowIfCancellationRequested();

            if (_httpContextAccessor.HttpContext == null)
            {
                return(ResponseDetailsFactory.Status400BadRequest());
            }

            var requestDefinitionReader = _requestDefinitionReaderProvider.GetReader();

            var configurationDefinition = await requestDefinitionReader.Read(_httpContextAccessor.HttpContext.Request.Body);

            if (!ConfigurationDefinitionExtensions.HasData(ref configurationDefinition))
            {
                return(ResponseDetailsFactory.Status404NotFound());
            }

            var requestDefinitions = ConfigurationDefinitionConverter.ToDefinitionSet(ref configurationDefinition);

            if (requestDefinitions == null)
            {
                return(ResponseDetailsFactory.Status404NotFound());
            }

            cancellationToken.ThrowIfCancellationRequested();

            _logger.LogInformation($"Setup configuration: {requestDefinitions.DefinitionItems.Count()} items");

            _requestDefinitionStorage.AddSet(requestDefinitions);

            _requestHistoryStorage.Clear();

            return(ResponseDetailsFactory.Status202Accepted());
        }
 public RequestContext(IRequestDetails requestDetails, int counter = 0)
 {
     RequestDetails    = requestDetails ?? throw new ArgumentNullException(nameof(requestDetails));
     Counter           = counter;
     RequestDefinition = null;
 }
 public static string GetHistoryItemCacheKey(IRequestDetails requestDetails) => $"{requestDetails.HttpMethod}_{requestDetails.Uri}";
示例#10
0
        public Task <IResponseDetails> Execute(IRequestDetails requestDetails, CancellationToken cancellationToken)
        {
            var mockedRequestWithDefinition = _requestHistoryStorage.GetMockedRequestWithDefinition(requestDetails);

            return(ProcessRequestDefinition(requestDetails, mockedRequestWithDefinition, cancellationToken));
        }
示例#11
0
 public Task <IResponseDetails> Execute(IRequestDetails requestDetails, CancellationToken cancellationToken)
 {
     return(Task.FromResult(ProcessGetCommand(requestDetails, cancellationToken)));
 }