From f29a281b5533085ad10da01cc961fd83332446cc Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Mon, 16 Feb 2026 09:22:42 +0100 Subject: [PATCH] goed --- .../Admin/Requests/LogRequestModel.cs | 4 ++-- .../Admin/Requests/LogResponseModel.cs | 11 ++++++++- .../IResponseMessage.cs | 5 ++++ .../Owin/WireMockMiddlewareLogger.cs | 24 +++++++++---------- src/WireMock.Net.Minimal/ResponseMessage.cs | 3 +++ .../WebSocketResponseProvider.cs | 10 +++----- .../Serialization/LogEntryMapper.cs | 2 ++ .../WebSockets/WireMockWebSocketContext.cs | 11 +++------ 8 files changed, 40 insertions(+), 30 deletions(-) diff --git a/src/WireMock.Net.Abstractions/Admin/Requests/LogRequestModel.cs b/src/WireMock.Net.Abstractions/Admin/Requests/LogRequestModel.cs index 22d58b17..4dd95732 100644 --- a/src/WireMock.Net.Abstractions/Admin/Requests/LogRequestModel.cs +++ b/src/WireMock.Net.Abstractions/Admin/Requests/LogRequestModel.cs @@ -18,7 +18,7 @@ public class LogRequestModel /// /// The DateTime. /// - public DateTime DateTime { get; set; } + public required DateTime DateTime { get; set; } /// /// The Path. @@ -58,7 +58,7 @@ public class LogRequestModel /// /// The HTTP Version. /// - public string HttpVersion { get; set; } = null!; + public string? HttpVersion { get; set; } /// /// The Headers. diff --git a/src/WireMock.Net.Abstractions/Admin/Requests/LogResponseModel.cs b/src/WireMock.Net.Abstractions/Admin/Requests/LogResponseModel.cs index 7f2b3b56..168d6318 100644 --- a/src/WireMock.Net.Abstractions/Admin/Requests/LogResponseModel.cs +++ b/src/WireMock.Net.Abstractions/Admin/Requests/LogResponseModel.cs @@ -1,6 +1,5 @@ // Copyright © WireMock.Net -using System.Collections.Generic; using WireMock.Admin.Mappings; using WireMock.Types; @@ -80,4 +79,14 @@ public class LogResponseModel /// Gets or sets the Fault percentage. /// public double? FaultPercentage { get; set; } + + /// + /// The DateTime. + /// + public required DateTime DateTime { get; set; } + + /// + /// The method. + /// + public string? Method { get; set; } } \ No newline at end of file diff --git a/src/WireMock.Net.Abstractions/IResponseMessage.cs b/src/WireMock.Net.Abstractions/IResponseMessage.cs index 232100a6..8abf4114 100644 --- a/src/WireMock.Net.Abstractions/IResponseMessage.cs +++ b/src/WireMock.Net.Abstractions/IResponseMessage.cs @@ -56,6 +56,11 @@ public interface IResponseMessage /// DateTime DateTime { get; } + /// + /// Gets the method. + /// + string? Method { get; } + /// /// Adds the header. /// diff --git a/src/WireMock.Net.Minimal/Owin/WireMockMiddlewareLogger.cs b/src/WireMock.Net.Minimal/Owin/WireMockMiddlewareLogger.cs index a5c9d602..6f03c77d 100644 --- a/src/WireMock.Net.Minimal/Owin/WireMockMiddlewareLogger.cs +++ b/src/WireMock.Net.Minimal/Owin/WireMockMiddlewareLogger.cs @@ -52,23 +52,23 @@ internal class WireMockMiddlewareLogger( public void LogLogEntry(LogEntry entry, bool addRequest) { - if (entry.RequestMessage != null) - { - _options.Logger.DebugRequestResponse(_logEntryMapper.Map(entry), entry.RequestMessage.Path.StartsWith("/__admin/")); + _options.Logger.DebugRequestResponse(_logEntryMapper.Map(entry), entry.RequestMessage?.Path.StartsWith("/__admin/") == true); - // If addRequest is set to true and MaxRequestLogCount is null or does have a value greater than 0, try to add a new request log. - if (addRequest && _options.MaxRequestLogCount is null or > 0) - { - TryAddLogEntry(entry); - } + // If addRequest is set to true and MaxRequestLogCount is null or does have a value greater than 0, try to add a new request log. + if (addRequest && _options.MaxRequestLogCount is null or > 0) + { + TryAddLogEntry(entry); } + // In case MaxRequestLogCount has a value greater than 0, try to delete existing request logs based on the count. if (_options.MaxRequestLogCount is > 0) { - var logEntries = _options.LogEntries.Where(le => le.RequestMessage != null).ToList(); + var logEntries = _options.LogEntries.ToList(); - foreach (var logEntry in logEntries.OrderBy(le => le.RequestMessage!.DateTime).Take(logEntries.Count - _options.MaxRequestLogCount.Value)) + foreach (var logEntry in logEntries + .OrderBy(le => le.RequestMessage?.DateTime ?? le.ResponseMessage?.DateTime) + .Take(logEntries.Count - _options.MaxRequestLogCount.Value)) { TryRemoveLogEntry(logEntry); } @@ -77,10 +77,10 @@ internal class WireMockMiddlewareLogger( // In case RequestLogExpirationDuration has a value greater than 0, try to delete existing request logs based on the date. if (_options.RequestLogExpirationDuration is > 0) { - var logEntries = _options.LogEntries.Where(le => le.RequestMessage != null).ToList(); + var logEntries = _options.LogEntries.ToList(); var checkTime = DateTime.UtcNow.AddHours(-_options.RequestLogExpirationDuration.Value); - foreach (var logEntry in logEntries.Where(le => le.RequestMessage!.DateTime < checkTime)) + foreach (var logEntry in logEntries.Where(le => le.RequestMessage?.DateTime < checkTime || le.ResponseMessage?.DateTime < checkTime)) { TryRemoveLogEntry(logEntry); } diff --git a/src/WireMock.Net.Minimal/ResponseMessage.cs b/src/WireMock.Net.Minimal/ResponseMessage.cs index 524e6575..70ae16c1 100644 --- a/src/WireMock.Net.Minimal/ResponseMessage.cs +++ b/src/WireMock.Net.Minimal/ResponseMessage.cs @@ -41,6 +41,9 @@ public class ResponseMessage : IResponseMessage /// public DateTime DateTime { get; set; } + /// + public string? Method { get; set; } + /// public void AddHeader(string name, string value) { diff --git a/src/WireMock.Net.Minimal/ResponseProviders/WebSocketResponseProvider.cs b/src/WireMock.Net.Minimal/ResponseProviders/WebSocketResponseProvider.cs index 8c1c65ce..1a1c7cff 100644 --- a/src/WireMock.Net.Minimal/ResponseProviders/WebSocketResponseProvider.cs +++ b/src/WireMock.Net.Minimal/ResponseProviders/WebSocketResponseProvider.cs @@ -565,7 +565,7 @@ internal class WebSocketResponseProvider(WebSocketBuilder builder) : IResponsePr bodyData = new BodyData { BodyAsString = messageType.ToString(), - DetectedBodyType = BodyType.Bytes + DetectedBodyType = BodyType.String }; } @@ -595,16 +595,13 @@ internal class WebSocketResponseProvider(WebSocketBuilder builder) : IResponsePr // Sent message - log as response responseMessage = new ResponseMessage { + Method = method, StatusCode = HttpStatusCode.SwitchingProtocols, // WebSocket status BodyData = bodyData, DateTime = DateTime.UtcNow }; } - // Create a perfect match result - var requestMatchResult = new RequestMatchResult(); - requestMatchResult.AddScore(typeof(WebSocketMessageDirection), MatchScores.Perfect, null); - // Create log entry var logEntry = new LogEntry { @@ -612,8 +609,7 @@ internal class WebSocketResponseProvider(WebSocketBuilder builder) : IResponsePr RequestMessage = requestMessage, ResponseMessage = responseMessage, MappingGuid = context.Mapping.Guid, - MappingTitle = context.Mapping.Title, - RequestMatchResult = requestMatchResult + MappingTitle = context.Mapping.Title }; // Enrich activity if present diff --git a/src/WireMock.Net.Minimal/Serialization/LogEntryMapper.cs b/src/WireMock.Net.Minimal/Serialization/LogEntryMapper.cs index db942197..01357526 100644 --- a/src/WireMock.Net.Minimal/Serialization/LogEntryMapper.cs +++ b/src/WireMock.Net.Minimal/Serialization/LogEntryMapper.cs @@ -71,6 +71,8 @@ internal class LogEntryMapper(IWireMockMiddlewareOptions options) { logResponseModel = new LogResponseModel { + DateTime = logEntry.ResponseMessage.DateTime, + Method = logEntry.ResponseMessage.Method, StatusCode = logEntry.ResponseMessage.StatusCode, Headers = logEntry.ResponseMessage.Headers }; diff --git a/src/WireMock.Net.Minimal/WebSockets/WireMockWebSocketContext.cs b/src/WireMock.Net.Minimal/WebSockets/WireMockWebSocketContext.cs index a6fe28e3..3bceae76 100644 --- a/src/WireMock.Net.Minimal/WebSockets/WireMockWebSocketContext.cs +++ b/src/WireMock.Net.Minimal/WebSockets/WireMockWebSocketContext.cs @@ -6,7 +6,6 @@ using System.Net.WebSockets; using System.Text; using Microsoft.AspNetCore.Http; using Stef.Validation; -using WireMock.Extensions; using WireMock.Logging; using WireMock.Matchers; using WireMock.Matchers.Request; @@ -167,7 +166,7 @@ public class WireMockWebSocketContext : IWebSocketContext bodyData = new BodyData { BodyAsString = messageType.ToString(), - DetectedBodyType = BodyType.Bytes + DetectedBodyType = BodyType.String }; } @@ -197,16 +196,13 @@ public class WireMockWebSocketContext : IWebSocketContext // Sent message - log as response responseMessage = new ResponseMessage { + Method = method, StatusCode = HttpStatusCode.SwitchingProtocols, // WebSocket status BodyData = bodyData, DateTime = DateTime.UtcNow }; } - // Create a perfect match result - var requestMatchResult = new RequestMatchResult(); - requestMatchResult.AddScore(typeof(WebSocketMessageDirection), MatchScores.Perfect, null); - // Create log entry var logEntry = new LogEntry { @@ -214,8 +210,7 @@ public class WireMockWebSocketContext : IWebSocketContext RequestMessage = requestMessage, ResponseMessage = responseMessage, MappingGuid = Mapping.Guid, - MappingTitle = Mapping.Title, - RequestMatchResult = requestMatchResult + MappingTitle = Mapping.Title }; // Enrich activity if present