public void MappingMatcher_Match_NoMappingsDefined() { // Assign var request = new RequestMessage(new UrlDetails("http://localhost/foo"), "GET", "::1"); // Act var result = _sut.Match(request); // Assert and Verify Check.That(result.Mapping).IsNull(); Check.That(result.RequestMatchResult).IsNull(); }
private async Task InvokeInternal(IContext ctx) { var request = await _requestMapper.MapAsync(ctx.Request); bool logRequest = false; ResponseMessage response = null; (IMapping TargetMapping, RequestMatchResult RequestMatchResult)result = (null, null); try { foreach (var mapping in _options.Mappings.Values.Where(m => m?.Scenario != null)) { // Set start if (!_options.Scenarios.ContainsKey(mapping.Scenario) && mapping.IsStartState) { _options.Scenarios.TryAdd(mapping.Scenario, new ScenarioState { Name = mapping.Scenario }); } } result = _mappingMatcher.Match(request); var targetMapping = result.TargetMapping; if (targetMapping == null) { logRequest = true; _options.Logger.Warn("HttpStatusCode set to 404 : No matching mapping found"); response = ResponseMessageBuilder.Create("No matching mapping found", 404); return; } logRequest = !targetMapping.IsAdminInterface; if (targetMapping.IsAdminInterface && _options.AuthorizationMatcher != null) { bool present = request.Headers.TryGetValue(HttpKnownHeaderNames.Authorization, out WireMockList <string> authorization); if (!present || _options.AuthorizationMatcher.IsMatch(authorization.ToString()) < MatchScores.Perfect) { _options.Logger.Error("HttpStatusCode set to 401"); response = ResponseMessageBuilder.Create(null, 401); return; } } if (!targetMapping.IsAdminInterface && _options.RequestProcessingDelay > TimeSpan.Zero) { await Task.Delay(_options.RequestProcessingDelay.Value); } response = await targetMapping.ProvideResponseAsync(request); if (targetMapping.Scenario != null) { _options.Scenarios[targetMapping.Scenario].NextState = targetMapping.NextState; _options.Scenarios[targetMapping.Scenario].Started = true; _options.Scenarios[targetMapping.Scenario].Finished = targetMapping.NextState == null; } } catch (Exception ex) { _options.Logger.Error($"Providing a Response for Mapping '{result.TargetMapping.Guid}' failed. HttpStatusCode set to 500. Exception: {ex}"); response = ResponseMessageBuilder.Create(JsonConvert.SerializeObject(ex), 500); } finally { var log = new LogEntry { Guid = Guid.NewGuid(), RequestMessage = request, ResponseMessage = response, MappingGuid = result.TargetMapping?.Guid, MappingTitle = result.TargetMapping?.Title, RequestMatchResult = result.RequestMatchResult }; LogRequest(log, logRequest); await _responseMapper.MapAsync(response, ctx.Response); } await CompletedTask; }