From 4ed71d578a0cf42293b73873128d4b7b18e9e804 Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Sun, 22 Feb 2026 10:57:17 +0100 Subject: [PATCH] FIX? --- .../WebSockets/WebSocketMessageBuilder.cs | 18 ++++++++++++++++++ .../WebSockets/IWebSocketBuilder.cs | 2 -- .../WebSockets/IWebSocketMessageBuilder.cs | 6 ++++++ .../WebSockets/WebSocketIntegrationTests.cs | 8 +++++--- 4 files changed, 29 insertions(+), 5 deletions(-) diff --git a/src/WireMock.Net.Minimal/WebSockets/WebSocketMessageBuilder.cs b/src/WireMock.Net.Minimal/WebSockets/WebSocketMessageBuilder.cs index 9a2913b2..c14fb400 100644 --- a/src/WireMock.Net.Minimal/WebSockets/WebSocketMessageBuilder.cs +++ b/src/WireMock.Net.Minimal/WebSockets/WebSocketMessageBuilder.cs @@ -7,16 +7,29 @@ namespace WireMock.WebSockets; internal class WebSocketMessageBuilder : IWebSocketMessageBuilder { + /// public string? MessageText { get; private set; } + /// public byte[]? MessageBytes { get; private set; } + /// public TimeSpan? Delay { get; private set; } + /// public WebSocketMessageType Type { get; private set; } + /// public bool ShouldClose { get; private set; } + /// + public IWebSocketMessageBuilder WithEcho() + { + Type = WebSocketMessageType.Close; + return this; + } + + /// public IWebSocketMessageBuilder WithText(string text) { MessageText = Guard.NotNull(text); @@ -24,6 +37,7 @@ internal class WebSocketMessageBuilder : IWebSocketMessageBuilder return this; } + /// public IWebSocketMessageBuilder WithBinary(byte[] bytes) { MessageBytes = Guard.NotNull(bytes); @@ -31,23 +45,27 @@ internal class WebSocketMessageBuilder : IWebSocketMessageBuilder return this; } + /// public IWebSocketMessageBuilder WithDelay(TimeSpan delay) { Delay = delay; return this; } + /// public IWebSocketMessageBuilder WithDelay(int delayInMilliseconds) { Guard.Condition(delayInMilliseconds, d => d >= 0); return WithDelay(TimeSpan.FromMilliseconds(delayInMilliseconds)); } + /// public IWebSocketMessageBuilder Close() { ShouldClose = true; return this; } + /// public IWebSocketMessageBuilder AndClose() => Close(); } \ No newline at end of file diff --git a/src/WireMock.Net.Shared/WebSockets/IWebSocketBuilder.cs b/src/WireMock.Net.Shared/WebSockets/IWebSocketBuilder.cs index b57d14f4..3683c686 100644 --- a/src/WireMock.Net.Shared/WebSockets/IWebSocketBuilder.cs +++ b/src/WireMock.Net.Shared/WebSockets/IWebSocketBuilder.cs @@ -1,10 +1,8 @@ // Copyright © WireMock.Net -using System; using JetBrains.Annotations; using WireMock.Matchers; using WireMock.Settings; -using WireMock.Types; namespace WireMock.WebSockets; diff --git a/src/WireMock.Net.Shared/WebSockets/IWebSocketMessageBuilder.cs b/src/WireMock.Net.Shared/WebSockets/IWebSocketMessageBuilder.cs index 6cd8cfd9..b999d949 100644 --- a/src/WireMock.Net.Shared/WebSockets/IWebSocketMessageBuilder.cs +++ b/src/WireMock.Net.Shared/WebSockets/IWebSocketMessageBuilder.cs @@ -9,6 +9,12 @@ namespace WireMock.WebSockets; /// public interface IWebSocketMessageBuilder { + /// + /// Echo all received messages back to client + /// + [PublicAPI] + IWebSocketMessageBuilder WithEcho(); + /// /// Send a specific text message /// diff --git a/test/WireMock.Net.Tests/WebSockets/WebSocketIntegrationTests.cs b/test/WireMock.Net.Tests/WebSockets/WebSocketIntegrationTests.cs index acc8c580..81a8a5dd 100644 --- a/test/WireMock.Net.Tests/WebSockets/WebSocketIntegrationTests.cs +++ b/test/WireMock.Net.Tests/WebSockets/WebSocketIntegrationTests.cs @@ -676,7 +676,7 @@ public class WebSocketIntegrationTests(ITestOutputHelper output, ITestContextAcc public async Task WithWebSocketProxy_Should_Proxy_Messages_To_Target_Server() { // Arrange - Start target echo server - using var targetServer = WireMockServer.Start(new WireMockServerSettings + var targetServer = WireMockServer.Start(new WireMockServerSettings { Logger = new TestOutputHelperWireMockLogger(output), Urls = ["ws://localhost:0"] @@ -698,14 +698,13 @@ public class WebSocketIntegrationTests(ITestOutputHelper output, ITestContextAcc Urls = ["ws://localhost:0"] }); - var targetUrl = $"{targetServer.Url}/ws/target".Replace("http://", "ws://"); proxyServer .Given(Request.Create() .WithPath("/ws/proxy") .WithWebSocketUpgrade() ) .RespondWith(Response.Create() - .WithWebSocketProxy(targetUrl) + .WithWebSocketProxy(targetServer.Url!) ); using var client = new ClientWebSocket(); @@ -723,6 +722,9 @@ public class WebSocketIntegrationTests(ITestOutputHelper output, ITestContextAcc received.Should().Be(testMessage, "message should be proxied to target echo server and echoed back"); await client.CloseAsync(WebSocketCloseStatus.NormalClosure, "Test complete", _ct); + + targetServer.Stop(); + targetServer.Dispose(); } [Fact]