From 547b5673c0d1fc94257f72a0e8781b087af40cd7 Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Wed, 11 Feb 2026 18:26:15 +0100 Subject: [PATCH] . --- .../WebSocketHandledResponse.cs | 17 ++++++++++ .../WebSocketResponseProvider.cs | 31 +++++-------------- .../WebSockets/IWebSocketContext.cs | 3 -- .../WebSockets/IWebSocketMessageBuilder.cs | 2 +- .../IWebSocketMessageConditionBuilder.cs | 2 +- .../WebSockets/IWebSocketMessagesBuilder.cs | 2 +- .../WebSockets/WebSocketMessage.cs | 1 - .../WebSockets/WebSocketIntegrationTests.cs | 1 + 8 files changed, 28 insertions(+), 31 deletions(-) create mode 100644 src/WireMock.Net.Minimal/ResponseProviders/WebSocketHandledResponse.cs diff --git a/src/WireMock.Net.Minimal/ResponseProviders/WebSocketHandledResponse.cs b/src/WireMock.Net.Minimal/ResponseProviders/WebSocketHandledResponse.cs new file mode 100644 index 00000000..6a7bcd0a --- /dev/null +++ b/src/WireMock.Net.Minimal/ResponseProviders/WebSocketHandledResponse.cs @@ -0,0 +1,17 @@ +// Copyright © WireMock.Net + +using System.Net; + +namespace WireMock.ResponseProviders; + +/// +/// Special response marker to indicate WebSocket has been handled +/// +internal class WebSocketHandledResponse : ResponseMessage +{ + public WebSocketHandledResponse() + { + // 101 Switching Protocols + StatusCode = (int)HttpStatusCode.SwitchingProtocols; + } +} \ No newline at end of file diff --git a/src/WireMock.Net.Minimal/ResponseProviders/WebSocketResponseProvider.cs b/src/WireMock.Net.Minimal/ResponseProviders/WebSocketResponseProvider.cs index ef7593c8..18b1d2ec 100644 --- a/src/WireMock.Net.Minimal/ResponseProviders/WebSocketResponseProvider.cs +++ b/src/WireMock.Net.Minimal/ResponseProviders/WebSocketResponseProvider.cs @@ -12,14 +12,9 @@ using WireMock.WebSockets; namespace WireMock.ResponseProviders; -internal class WebSocketResponseProvider : IResponseProvider +internal class WebSocketResponseProvider(WebSocketBuilder builder) : IResponseProvider { - private readonly WebSocketBuilder _builder; - - public WebSocketResponseProvider(WebSocketBuilder builder) - { - _builder = Guard.NotNull(builder); - } + private readonly WebSocketBuilder _builder = Guard.NotNull(builder); public async Task<(IResponseMessage Message, IMapping? Mapping)> ProvideResponseAsync( IMapping mapping, @@ -127,7 +122,7 @@ internal class WebSocketResponseProvider : IResponseProvider } } - private async Task HandleEchoAsync(WireMockWebSocketContext context) + private static async Task HandleEchoAsync(WireMockWebSocketContext context) { var bufferSize = context.Builder.MaxMessageSize ?? WebSocketConstants.DefaultReceiveBufferSize; var buffer = new byte[bufferSize]; @@ -170,7 +165,7 @@ internal class WebSocketResponseProvider : IResponseProvider } } - private async Task HandleCustomAsync( + private static async Task HandleCustomAsync( WireMockWebSocketContext context, Func handler) { @@ -212,7 +207,7 @@ internal class WebSocketResponseProvider : IResponseProvider } } - private async Task HandleProxyAsync(WireMockWebSocketContext context, ProxyAndRecordSettings settings) + private static async Task HandleProxyAsync(WireMockWebSocketContext context, ProxyAndRecordSettings settings) { using var clientWebSocket = new ClientWebSocket(); @@ -236,7 +231,7 @@ internal class WebSocketResponseProvider : IResponseProvider } } - private async Task ForwardMessagesAsync(WebSocket source, WebSocket destination) + private static async Task ForwardMessagesAsync(WebSocket source, WebSocket destination) { var buffer = new byte[WebSocketConstants.ProxyForwardBufferSize]; @@ -263,7 +258,7 @@ internal class WebSocketResponseProvider : IResponseProvider } } - private async Task WaitForCloseAsync(WireMockWebSocketContext context) + private static async Task WaitForCloseAsync(WireMockWebSocketContext context) { var buffer = new byte[WebSocketConstants.MinimumBufferSize]; var timeout = context.Builder.CloseTimeout ?? TimeSpan.FromMinutes(WebSocketConstants.DefaultCloseTimeoutMinutes); @@ -315,16 +310,4 @@ internal class WebSocketResponseProvider : IResponseProvider return message; } -} - -/// -/// Special response marker to indicate WebSocket has been handled -/// -internal class WebSocketHandledResponse : ResponseMessage -{ - public WebSocketHandledResponse() - { - // 101 Switching Protocols - StatusCode = (int)HttpStatusCode.SwitchingProtocols; - } } \ No newline at end of file diff --git a/src/WireMock.Net.Shared/WebSockets/IWebSocketContext.cs b/src/WireMock.Net.Shared/WebSockets/IWebSocketContext.cs index 495bcbad..ca029b2c 100644 --- a/src/WireMock.Net.Shared/WebSockets/IWebSocketContext.cs +++ b/src/WireMock.Net.Shared/WebSockets/IWebSocketContext.cs @@ -1,9 +1,6 @@ // Copyright © WireMock.Net -using System; using System.Net.WebSockets; -using System.Threading; -using System.Threading.Tasks; using Microsoft.AspNetCore.Http; namespace WireMock.WebSockets; diff --git a/src/WireMock.Net.Shared/WebSockets/IWebSocketMessageBuilder.cs b/src/WireMock.Net.Shared/WebSockets/IWebSocketMessageBuilder.cs index d212aef3..ee0b6fa5 100644 --- a/src/WireMock.Net.Shared/WebSockets/IWebSocketMessageBuilder.cs +++ b/src/WireMock.Net.Shared/WebSockets/IWebSocketMessageBuilder.cs @@ -49,4 +49,4 @@ public interface IWebSocketMessageBuilder /// [PublicAPI] IWebSocketMessageBuilder AndClose(); -} +} \ No newline at end of file diff --git a/src/WireMock.Net.Shared/WebSockets/IWebSocketMessageConditionBuilder.cs b/src/WireMock.Net.Shared/WebSockets/IWebSocketMessageConditionBuilder.cs index e06bc17d..ac7bf008 100644 --- a/src/WireMock.Net.Shared/WebSockets/IWebSocketMessageConditionBuilder.cs +++ b/src/WireMock.Net.Shared/WebSockets/IWebSocketMessageConditionBuilder.cs @@ -22,4 +22,4 @@ public interface IWebSocketMessageConditionBuilder /// Action to configure the messages [PublicAPI] IWebSocketBuilder SendMessages(Action configure); -} +} \ No newline at end of file diff --git a/src/WireMock.Net.Shared/WebSockets/IWebSocketMessagesBuilder.cs b/src/WireMock.Net.Shared/WebSockets/IWebSocketMessagesBuilder.cs index b3435d30..5aff8e33 100644 --- a/src/WireMock.Net.Shared/WebSockets/IWebSocketMessagesBuilder.cs +++ b/src/WireMock.Net.Shared/WebSockets/IWebSocketMessagesBuilder.cs @@ -15,4 +15,4 @@ public interface IWebSocketMessagesBuilder /// Action to configure the message [PublicAPI] IWebSocketMessagesBuilder AddMessage(Action configure); -} +} \ No newline at end of file diff --git a/src/WireMock.Net.Shared/WebSockets/WebSocketMessage.cs b/src/WireMock.Net.Shared/WebSockets/WebSocketMessage.cs index 9dd0da98..a4d29ece 100644 --- a/src/WireMock.Net.Shared/WebSockets/WebSocketMessage.cs +++ b/src/WireMock.Net.Shared/WebSockets/WebSocketMessage.cs @@ -1,6 +1,5 @@ // Copyright © WireMock.Net -using System; using System.Net.WebSockets; namespace WireMock.WebSockets; diff --git a/test/WireMock.Net.Tests/WebSockets/WebSocketIntegrationTests.cs b/test/WireMock.Net.Tests/WebSockets/WebSocketIntegrationTests.cs index 045c7907..462166f8 100644 --- a/test/WireMock.Net.Tests/WebSockets/WebSocketIntegrationTests.cs +++ b/test/WireMock.Net.Tests/WebSockets/WebSocketIntegrationTests.cs @@ -570,6 +570,7 @@ public class WebSocketIntegrationTests(ITestOutputHelper output) ) .RespondWith(Response.Create() .WithWebSocket(ws => ws + .WithCloseTimeout(TimeSpan.FromSeconds(3)) .WhenMessage("/help").SendMessage(m => m.WithText("Available commands: /help, /time, /echo ")) .WhenMessage("/time").SendMessage(m => m.WithText($"Server time: {DateTime.UtcNow:yyyy-MM-dd HH:mm:ss} UTC")) .WhenMessage("/echo ").SendMessage(m => m.WithText("echo response"))