mirror of
https://github.com/wiremock/WireMock.Net.git
synced 2026-04-23 16:58:27 +02:00
.
This commit is contained in:
@@ -0,0 +1,17 @@
|
|||||||
|
// Copyright © WireMock.Net
|
||||||
|
|
||||||
|
using System.Net;
|
||||||
|
|
||||||
|
namespace WireMock.ResponseProviders;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Special response marker to indicate WebSocket has been handled
|
||||||
|
/// </summary>
|
||||||
|
internal class WebSocketHandledResponse : ResponseMessage
|
||||||
|
{
|
||||||
|
public WebSocketHandledResponse()
|
||||||
|
{
|
||||||
|
// 101 Switching Protocols
|
||||||
|
StatusCode = (int)HttpStatusCode.SwitchingProtocols;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -12,14 +12,9 @@ using WireMock.WebSockets;
|
|||||||
|
|
||||||
namespace WireMock.ResponseProviders;
|
namespace WireMock.ResponseProviders;
|
||||||
|
|
||||||
internal class WebSocketResponseProvider : IResponseProvider
|
internal class WebSocketResponseProvider(WebSocketBuilder builder) : IResponseProvider
|
||||||
{
|
{
|
||||||
private readonly WebSocketBuilder _builder;
|
private readonly WebSocketBuilder _builder = Guard.NotNull(builder);
|
||||||
|
|
||||||
public WebSocketResponseProvider(WebSocketBuilder builder)
|
|
||||||
{
|
|
||||||
_builder = Guard.NotNull(builder);
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<(IResponseMessage Message, IMapping? Mapping)> ProvideResponseAsync(
|
public async Task<(IResponseMessage Message, IMapping? Mapping)> ProvideResponseAsync(
|
||||||
IMapping mapping,
|
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 bufferSize = context.Builder.MaxMessageSize ?? WebSocketConstants.DefaultReceiveBufferSize;
|
||||||
var buffer = new byte[bufferSize];
|
var buffer = new byte[bufferSize];
|
||||||
@@ -170,7 +165,7 @@ internal class WebSocketResponseProvider : IResponseProvider
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task HandleCustomAsync(
|
private static async Task HandleCustomAsync(
|
||||||
WireMockWebSocketContext context,
|
WireMockWebSocketContext context,
|
||||||
Func<WebSocketMessage, IWebSocketContext, Task> handler)
|
Func<WebSocketMessage, IWebSocketContext, Task> 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();
|
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];
|
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 buffer = new byte[WebSocketConstants.MinimumBufferSize];
|
||||||
var timeout = context.Builder.CloseTimeout ?? TimeSpan.FromMinutes(WebSocketConstants.DefaultCloseTimeoutMinutes);
|
var timeout = context.Builder.CloseTimeout ?? TimeSpan.FromMinutes(WebSocketConstants.DefaultCloseTimeoutMinutes);
|
||||||
@@ -315,16 +310,4 @@ internal class WebSocketResponseProvider : IResponseProvider
|
|||||||
|
|
||||||
return message;
|
return message;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Special response marker to indicate WebSocket has been handled
|
|
||||||
/// </summary>
|
|
||||||
internal class WebSocketHandledResponse : ResponseMessage
|
|
||||||
{
|
|
||||||
public WebSocketHandledResponse()
|
|
||||||
{
|
|
||||||
// 101 Switching Protocols
|
|
||||||
StatusCode = (int)HttpStatusCode.SwitchingProtocols;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -1,9 +1,6 @@
|
|||||||
// Copyright © WireMock.Net
|
// Copyright © WireMock.Net
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Net.WebSockets;
|
using System.Net.WebSockets;
|
||||||
using System.Threading;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
|
|
||||||
namespace WireMock.WebSockets;
|
namespace WireMock.WebSockets;
|
||||||
|
|||||||
@@ -49,4 +49,4 @@ public interface IWebSocketMessageBuilder
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
[PublicAPI]
|
[PublicAPI]
|
||||||
IWebSocketMessageBuilder AndClose();
|
IWebSocketMessageBuilder AndClose();
|
||||||
}
|
}
|
||||||
@@ -22,4 +22,4 @@ public interface IWebSocketMessageConditionBuilder
|
|||||||
/// <param name="configure">Action to configure the messages</param>
|
/// <param name="configure">Action to configure the messages</param>
|
||||||
[PublicAPI]
|
[PublicAPI]
|
||||||
IWebSocketBuilder SendMessages(Action<IWebSocketMessagesBuilder> configure);
|
IWebSocketBuilder SendMessages(Action<IWebSocketMessagesBuilder> configure);
|
||||||
}
|
}
|
||||||
@@ -15,4 +15,4 @@ public interface IWebSocketMessagesBuilder
|
|||||||
/// <param name="configure">Action to configure the message</param>
|
/// <param name="configure">Action to configure the message</param>
|
||||||
[PublicAPI]
|
[PublicAPI]
|
||||||
IWebSocketMessagesBuilder AddMessage(Action<IWebSocketMessageBuilder> configure);
|
IWebSocketMessagesBuilder AddMessage(Action<IWebSocketMessageBuilder> configure);
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
// Copyright © WireMock.Net
|
// Copyright © WireMock.Net
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Net.WebSockets;
|
using System.Net.WebSockets;
|
||||||
|
|
||||||
namespace WireMock.WebSockets;
|
namespace WireMock.WebSockets;
|
||||||
|
|||||||
@@ -570,6 +570,7 @@ public class WebSocketIntegrationTests(ITestOutputHelper output)
|
|||||||
)
|
)
|
||||||
.RespondWith(Response.Create()
|
.RespondWith(Response.Create()
|
||||||
.WithWebSocket(ws => ws
|
.WithWebSocket(ws => ws
|
||||||
|
.WithCloseTimeout(TimeSpan.FromSeconds(3))
|
||||||
.WhenMessage("/help").SendMessage(m => m.WithText("Available commands: /help, /time, /echo <text>"))
|
.WhenMessage("/help").SendMessage(m => m.WithText("Available commands: /help, /time, /echo <text>"))
|
||||||
.WhenMessage("/time").SendMessage(m => m.WithText($"Server time: {DateTime.UtcNow:yyyy-MM-dd HH:mm:ss} UTC"))
|
.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"))
|
.WhenMessage("/echo ").SendMessage(m => m.WithText("echo response"))
|
||||||
|
|||||||
Reference in New Issue
Block a user