Skip to content

Commit fb8d7fd

Browse files
committed
added unit test TestWithAspNetCoreWebSocketServer
1 parent d79011f commit fb8d7fd

2 files changed

Lines changed: 102 additions & 0 deletions

File tree

test/WebSocket4Net.Tests/MainTest.cs

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@
1414
using SuperSocket.WebSocket.Server;
1515
using Xunit;
1616
using Xunit.Abstractions;
17+
using Microsoft.AspNetCore.Hosting;
18+
using Microsoft.AspNetCore.Builder;
19+
using Microsoft.Extensions.Logging;
20+
using Meziantou.Extensions.Logging.Xunit;
1721

1822
namespace WebSocket4Net.Tests
1923
{
@@ -167,6 +171,102 @@ public async Task TestCustomHeaderItems(Type hostConfiguratorType)
167171
}
168172
}
169173

174+
[Fact]
175+
public async Task TestWithAspNetCoreWebSocketServer()
176+
{
177+
// Create a test server with ASP.NET Core WebSocket support
178+
var builder = new WebHostBuilder()
179+
.ConfigureLogging(logging =>
180+
{
181+
logging.AddProvider(new XUnitLoggerProvider(OutputHelper));
182+
logging.SetMinimumLevel(LogLevel.Debug);
183+
})
184+
.UseKestrel()
185+
.Configure(app =>
186+
{
187+
app.UseWebSockets();
188+
app.Use(async (context, next) =>
189+
{
190+
if (context.Request.Path == "/ws")
191+
{
192+
if (context.WebSockets.IsWebSocketRequest)
193+
{
194+
using var webSocket = await context.WebSockets.AcceptWebSocketAsync();
195+
var buffer = new byte[1024 * 4];
196+
197+
while (webSocket.State == System.Net.WebSockets.WebSocketState.Open)
198+
{
199+
var result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
200+
201+
if (result.MessageType == System.Net.WebSockets.WebSocketMessageType.Text)
202+
{
203+
// Echo the message back
204+
await webSocket.SendAsync(
205+
new ArraySegment<byte>(buffer, 0, result.Count),
206+
System.Net.WebSockets.WebSocketMessageType.Text,
207+
result.EndOfMessage,
208+
CancellationToken.None);
209+
}
210+
else if (result.MessageType == System.Net.WebSockets.WebSocketMessageType.Close)
211+
{
212+
await webSocket.CloseAsync(
213+
System.Net.WebSockets.WebSocketCloseStatus.NormalClosure,
214+
"Closing",
215+
CancellationToken.None);
216+
break;
217+
}
218+
}
219+
}
220+
else
221+
{
222+
context.Response.StatusCode = 400;
223+
}
224+
}
225+
else
226+
{
227+
await next();
228+
}
229+
});
230+
});
231+
232+
using var host = builder.Build();
233+
234+
try
235+
{
236+
await host.StartAsync();
237+
238+
// Get the server URL
239+
var serverUrl = $"ws://localhost:5000/ws";
240+
241+
// Create WebSocket client
242+
var websocket = new WebSocket(serverUrl);
243+
244+
// Connect to the server
245+
Assert.True(await websocket.OpenAsync(), "Failed to connect to ASP.NET Core WebSocket server");
246+
Assert.Equal(WebSocketState.Open, websocket.State);
247+
248+
// Test echo functionality
249+
for (var i = 0; i < 10; i++)
250+
{
251+
var text = Guid.NewGuid().ToString();
252+
await websocket.SendAsync(text);
253+
var receivedText = (await websocket.ReceiveAsync()).Message;
254+
Assert.Equal(text, receivedText);
255+
}
256+
257+
await websocket.CloseAsync();
258+
259+
Assert.NotNull(websocket.CloseStatus);
260+
Assert.Equal(CloseReason.NormalClosure, websocket.CloseStatus.Reason);
261+
Assert.Equal(WebSocketState.Closed, websocket.State);
262+
}
263+
finally
264+
{
265+
// Clean up
266+
await host.StopAsync();
267+
}
268+
}
269+
170270

171271
[Theory]
172272
[InlineData(typeof(RegularHostConfigurator), 10)]

test/WebSocket4Net.Tests/WebSocket4Net.Tests.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@
77

88
<ItemGroup>
99
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.9.0" />
10+
<PackageReference Include="Meziantou.Extensions.Logging.Xunit" Version="1.0.11" />
1011
<PackageReference Include="SuperSocket.WebSocket.Server" Version="$(SuperSocketVersion)" />
1112
<PackageReference Include="xunit" Version="2.4.0" />
1213
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.1" />
1314
<PackageReference Include="coverlet.collector" Version="1.2.0" />
15+
<FrameworkReference Include="Microsoft.AspNetCore.App" />
1416
</ItemGroup>
1517

1618
<ItemGroup>

0 commit comments

Comments
 (0)