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]