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])); }
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); }
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())); }
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}";
public Task <IResponseDetails> Execute(IRequestDetails requestDetails, CancellationToken cancellationToken) { var mockedRequestWithDefinition = _requestHistoryStorage.GetMockedRequestWithDefinition(requestDetails); return(ProcessRequestDefinition(requestDetails, mockedRequestWithDefinition, cancellationToken)); }
public Task <IResponseDetails> Execute(IRequestDetails requestDetails, CancellationToken cancellationToken) { return(Task.FromResult(ProcessGetCommand(requestDetails, cancellationToken))); }