Use port 0 to avoid port collisions during tests

This commit is contained in:
John Luo 2018-09-28 11:59:48 -07:00
parent c88e5147da
commit 67f2c3149e
3 changed files with 82 additions and 74 deletions

View File

@ -0,0 +1,30 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNetCore.Hosting.Server.Features;
namespace Microsoft.AspNetCore.Hosting
{
public static class IWebHostPortExtensions
{
public static int GetPort(this IWebHost host)
{
return host.GetPorts().First();
}
public static IEnumerable<int> GetPorts(this IWebHost host)
{
return host.GetUris()
.Select(u => u.Port);
}
public static IEnumerable<Uri> GetUris(this IWebHost host)
{
return host.ServerFeatures.Get<IServerAddressesFeature>().Addresses
.Select(a => new Uri(a));
}
}
}

View File

@ -14,7 +14,7 @@ namespace Microsoft.AspNetCore.WebSockets.Test
{ {
public class KestrelWebSocketHelpers public class KestrelWebSocketHelpers
{ {
public static IDisposable CreateServer(ILoggerFactory loggerFactory, Func<HttpContext, Task> app, int port) public static IDisposable CreateServer(ILoggerFactory loggerFactory, out int port, Func<HttpContext, Task> app)
{ {
Action<IApplicationBuilder> startup = builder => Action<IApplicationBuilder> startup = builder =>
{ {
@ -45,7 +45,7 @@ namespace Microsoft.AspNetCore.WebSockets.Test
var configBuilder = new ConfigurationBuilder(); var configBuilder = new ConfigurationBuilder();
configBuilder.AddInMemoryCollection(); configBuilder.AddInMemoryCollection();
var config = configBuilder.Build(); var config = configBuilder.Build();
config["server.urls"] = $"http://localhost:{port}"; config["server.urls"] = $"http://127.0.0.1:0";
var host = new WebHostBuilder() var host = new WebHostBuilder()
.ConfigureServices(s => s.AddSingleton(loggerFactory)) .ConfigureServices(s => s.AddSingleton(loggerFactory))
@ -55,6 +55,7 @@ namespace Microsoft.AspNetCore.WebSockets.Test
.Build(); .Build();
host.Start(); host.Start();
port = host.GetPort();
return host; return host;
} }

View File

@ -24,30 +24,22 @@ namespace Microsoft.AspNetCore.WebSockets.Test
#endif #endif
public class WebSocketMiddlewareTests : LoggedTest public class WebSocketMiddlewareTests : LoggedTest
{ {
private readonly int Port; public WebSocketMiddlewareTests(ITestOutputHelper output) : base(output) { }
private readonly string Address;
public WebSocketMiddlewareTests(ITestOutputHelper output) : base(output)
{
Port = TestUriHelper.GetNextPort();
Address = $"ws://localhost:{Port}/";
}
[ConditionalFact] [ConditionalFact]
public async Task Connect_Success() public async Task Connect_Success()
{ {
using (StartLog(out var loggerFactory)) using (StartLog(out var loggerFactory))
{ {
using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, out var port, async context =>
{ {
Assert.True(context.WebSockets.IsWebSocketRequest); Assert.True(context.WebSockets.IsWebSocketRequest);
var webSocket = await context.WebSockets.AcceptWebSocketAsync(); var webSocket = await context.WebSockets.AcceptWebSocketAsync();
}, }))
Port))
{ {
using (var client = new ClientWebSocket()) using (var client = new ClientWebSocket())
{ {
await client.ConnectAsync(new Uri(Address), CancellationToken.None); await client.ConnectAsync(new Uri($"ws://localhost:{port}/"), CancellationToken.None);
} }
} }
} }
@ -58,20 +50,19 @@ namespace Microsoft.AspNetCore.WebSockets.Test
{ {
using (StartLog(out var loggerFactory)) using (StartLog(out var loggerFactory))
{ {
using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, out var port, async context =>
{ {
Assert.True(context.WebSockets.IsWebSocketRequest); Assert.True(context.WebSockets.IsWebSocketRequest);
Assert.Equal("alpha, bravo, charlie", context.Request.Headers["Sec-WebSocket-Protocol"]); Assert.Equal("alpha, bravo, charlie", context.Request.Headers["Sec-WebSocket-Protocol"]);
var webSocket = await context.WebSockets.AcceptWebSocketAsync("Bravo"); var webSocket = await context.WebSockets.AcceptWebSocketAsync("Bravo");
}, }))
Port))
{ {
using (var client = new ClientWebSocket()) using (var client = new ClientWebSocket())
{ {
client.Options.AddSubProtocol("alpha"); client.Options.AddSubProtocol("alpha");
client.Options.AddSubProtocol("bravo"); client.Options.AddSubProtocol("bravo");
client.Options.AddSubProtocol("charlie"); client.Options.AddSubProtocol("charlie");
await client.ConnectAsync(new Uri(Address), CancellationToken.None); await client.ConnectAsync(new Uri($"ws://localhost:{port}/"), CancellationToken.None);
// The Windows version of ClientWebSocket uses the casing from the header (Bravo) // The Windows version of ClientWebSocket uses the casing from the header (Bravo)
// However, the Managed version seems match the header against the list generated by // However, the Managed version seems match the header against the list generated by
@ -90,7 +81,7 @@ namespace Microsoft.AspNetCore.WebSockets.Test
{ {
using (StartLog(out var loggerFactory)) using (StartLog(out var loggerFactory))
{ {
using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, out var port, async context =>
{ {
Assert.True(context.WebSockets.IsWebSocketRequest); Assert.True(context.WebSockets.IsWebSocketRequest);
var webSocket = await context.WebSockets.AcceptWebSocketAsync(); var webSocket = await context.WebSockets.AcceptWebSocketAsync();
@ -100,12 +91,11 @@ namespace Microsoft.AspNetCore.WebSockets.Test
Assert.True(result.EndOfMessage); Assert.True(result.EndOfMessage);
Assert.Equal(0, result.Count); Assert.Equal(0, result.Count);
Assert.Equal(WebSocketMessageType.Binary, result.MessageType); Assert.Equal(WebSocketMessageType.Binary, result.MessageType);
}, }))
Port))
{ {
using (var client = new ClientWebSocket()) using (var client = new ClientWebSocket())
{ {
await client.ConnectAsync(new Uri(Address), CancellationToken.None); await client.ConnectAsync(new Uri($"ws://localhost:{port}/"), CancellationToken.None);
var orriginalData = new byte[0]; var orriginalData = new byte[0];
await client.SendAsync(new ArraySegment<byte>(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None); await client.SendAsync(new ArraySegment<byte>(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None);
} }
@ -119,7 +109,7 @@ namespace Microsoft.AspNetCore.WebSockets.Test
using (StartLog(out var loggerFactory)) using (StartLog(out var loggerFactory))
{ {
var orriginalData = Encoding.UTF8.GetBytes("Hello World"); var orriginalData = Encoding.UTF8.GetBytes("Hello World");
using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, out var port, async context =>
{ {
Assert.True(context.WebSockets.IsWebSocketRequest); Assert.True(context.WebSockets.IsWebSocketRequest);
var webSocket = await context.WebSockets.AcceptWebSocketAsync(); var webSocket = await context.WebSockets.AcceptWebSocketAsync();
@ -130,12 +120,11 @@ namespace Microsoft.AspNetCore.WebSockets.Test
Assert.Equal(orriginalData.Length, result.Count); Assert.Equal(orriginalData.Length, result.Count);
Assert.Equal(WebSocketMessageType.Binary, result.MessageType); Assert.Equal(WebSocketMessageType.Binary, result.MessageType);
Assert.Equal(orriginalData, serverBuffer); Assert.Equal(orriginalData, serverBuffer);
}, }))
Port))
{ {
using (var client = new ClientWebSocket()) using (var client = new ClientWebSocket())
{ {
await client.ConnectAsync(new Uri(Address), CancellationToken.None); await client.ConnectAsync(new Uri($"ws://localhost:{port}/"), CancellationToken.None);
await client.SendAsync(new ArraySegment<byte>(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None); await client.SendAsync(new ArraySegment<byte>(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None);
} }
} }
@ -148,7 +137,7 @@ namespace Microsoft.AspNetCore.WebSockets.Test
using (StartLog(out var loggerFactory)) using (StartLog(out var loggerFactory))
{ {
var orriginalData = Encoding.UTF8.GetBytes(new string('a', 130)); var orriginalData = Encoding.UTF8.GetBytes(new string('a', 130));
using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, out var port, async context =>
{ {
Assert.True(context.WebSockets.IsWebSocketRequest); Assert.True(context.WebSockets.IsWebSocketRequest);
var webSocket = await context.WebSockets.AcceptWebSocketAsync(); var webSocket = await context.WebSockets.AcceptWebSocketAsync();
@ -159,12 +148,11 @@ namespace Microsoft.AspNetCore.WebSockets.Test
Assert.Equal(orriginalData.Length, result.Count); Assert.Equal(orriginalData.Length, result.Count);
Assert.Equal(WebSocketMessageType.Binary, result.MessageType); Assert.Equal(WebSocketMessageType.Binary, result.MessageType);
Assert.Equal(orriginalData, serverBuffer); Assert.Equal(orriginalData, serverBuffer);
}, }))
Port))
{ {
using (var client = new ClientWebSocket()) using (var client = new ClientWebSocket())
{ {
await client.ConnectAsync(new Uri(Address), CancellationToken.None); await client.ConnectAsync(new Uri($"ws://localhost:{port}/"), CancellationToken.None);
await client.SendAsync(new ArraySegment<byte>(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None); await client.SendAsync(new ArraySegment<byte>(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None);
} }
} }
@ -177,7 +165,7 @@ namespace Microsoft.AspNetCore.WebSockets.Test
using (StartLog(out var loggerFactory)) using (StartLog(out var loggerFactory))
{ {
var orriginalData = Encoding.UTF8.GetBytes(new string('a', 0x1FFFF)); var orriginalData = Encoding.UTF8.GetBytes(new string('a', 0x1FFFF));
using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, out var port, async context =>
{ {
Assert.True(context.WebSockets.IsWebSocketRequest); Assert.True(context.WebSockets.IsWebSocketRequest);
var webSocket = await context.WebSockets.AcceptWebSocketAsync(); var webSocket = await context.WebSockets.AcceptWebSocketAsync();
@ -200,12 +188,11 @@ namespace Microsoft.AspNetCore.WebSockets.Test
Assert.Equal(WebSocketMessageType.Text, result.MessageType); Assert.Equal(WebSocketMessageType.Text, result.MessageType);
Assert.Equal(orriginalData, serverBuffer); Assert.Equal(orriginalData, serverBuffer);
}, }))
Port))
{ {
using (var client = new ClientWebSocket()) using (var client = new ClientWebSocket())
{ {
await client.ConnectAsync(new Uri(Address), CancellationToken.None); await client.ConnectAsync(new Uri($"ws://localhost:{port}/"), CancellationToken.None);
await client.SendAsync(new ArraySegment<byte>(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None); await client.SendAsync(new ArraySegment<byte>(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None);
} }
} }
@ -218,7 +205,7 @@ namespace Microsoft.AspNetCore.WebSockets.Test
using (StartLog(out var loggerFactory)) using (StartLog(out var loggerFactory))
{ {
var orriginalData = Encoding.UTF8.GetBytes("Hello World"); var orriginalData = Encoding.UTF8.GetBytes("Hello World");
using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, out var port, async context =>
{ {
Assert.True(context.WebSockets.IsWebSocketRequest); Assert.True(context.WebSockets.IsWebSocketRequest);
var webSocket = await context.WebSockets.AcceptWebSocketAsync(); var webSocket = await context.WebSockets.AcceptWebSocketAsync();
@ -245,12 +232,11 @@ namespace Microsoft.AspNetCore.WebSockets.Test
Assert.Equal(WebSocketMessageType.Binary, result.MessageType); Assert.Equal(WebSocketMessageType.Binary, result.MessageType);
Assert.Equal(orriginalData, serverBuffer); Assert.Equal(orriginalData, serverBuffer);
}, }))
Port))
{ {
using (var client = new ClientWebSocket()) using (var client = new ClientWebSocket())
{ {
await client.ConnectAsync(new Uri(Address), CancellationToken.None); await client.ConnectAsync(new Uri($"ws://localhost:{port}/"), CancellationToken.None);
await client.SendAsync(new ArraySegment<byte>(orriginalData, 0, 2), WebSocketMessageType.Binary, false, CancellationToken.None); await client.SendAsync(new ArraySegment<byte>(orriginalData, 0, 2), WebSocketMessageType.Binary, false, CancellationToken.None);
await client.SendAsync(new ArraySegment<byte>(orriginalData, 2, 2), WebSocketMessageType.Binary, false, CancellationToken.None); await client.SendAsync(new ArraySegment<byte>(orriginalData, 2, 2), WebSocketMessageType.Binary, false, CancellationToken.None);
await client.SendAsync(new ArraySegment<byte>(orriginalData, 4, 7), WebSocketMessageType.Binary, true, CancellationToken.None); await client.SendAsync(new ArraySegment<byte>(orriginalData, 4, 7), WebSocketMessageType.Binary, true, CancellationToken.None);
@ -265,18 +251,17 @@ namespace Microsoft.AspNetCore.WebSockets.Test
using (StartLog(out var loggerFactory)) using (StartLog(out var loggerFactory))
{ {
var orriginalData = Encoding.UTF8.GetBytes("Hello World"); var orriginalData = Encoding.UTF8.GetBytes("Hello World");
using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, out var port, async context =>
{ {
Assert.True(context.WebSockets.IsWebSocketRequest); Assert.True(context.WebSockets.IsWebSocketRequest);
var webSocket = await context.WebSockets.AcceptWebSocketAsync(); var webSocket = await context.WebSockets.AcceptWebSocketAsync();
await webSocket.SendAsync(new ArraySegment<byte>(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None); await webSocket.SendAsync(new ArraySegment<byte>(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None);
}, }))
Port))
{ {
using (var client = new ClientWebSocket()) using (var client = new ClientWebSocket())
{ {
await client.ConnectAsync(new Uri(Address), CancellationToken.None); await client.ConnectAsync(new Uri($"ws://localhost:{port}/"), CancellationToken.None);
var clientBuffer = new byte[orriginalData.Length]; var clientBuffer = new byte[orriginalData.Length];
var result = await client.ReceiveAsync(new ArraySegment<byte>(clientBuffer), CancellationToken.None); var result = await client.ReceiveAsync(new ArraySegment<byte>(clientBuffer), CancellationToken.None);
Assert.True(result.EndOfMessage); Assert.True(result.EndOfMessage);
@ -294,18 +279,17 @@ namespace Microsoft.AspNetCore.WebSockets.Test
using (StartLog(out var loggerFactory)) using (StartLog(out var loggerFactory))
{ {
var orriginalData = Encoding.UTF8.GetBytes(new string('a', 130)); var orriginalData = Encoding.UTF8.GetBytes(new string('a', 130));
using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, out var port, async context =>
{ {
Assert.True(context.WebSockets.IsWebSocketRequest); Assert.True(context.WebSockets.IsWebSocketRequest);
var webSocket = await context.WebSockets.AcceptWebSocketAsync(); var webSocket = await context.WebSockets.AcceptWebSocketAsync();
await webSocket.SendAsync(new ArraySegment<byte>(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None); await webSocket.SendAsync(new ArraySegment<byte>(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None);
}, }))
Port))
{ {
using (var client = new ClientWebSocket()) using (var client = new ClientWebSocket())
{ {
await client.ConnectAsync(new Uri(Address), CancellationToken.None); await client.ConnectAsync(new Uri($"ws://localhost:{port}/"), CancellationToken.None);
var clientBuffer = new byte[orriginalData.Length]; var clientBuffer = new byte[orriginalData.Length];
var result = await client.ReceiveAsync(new ArraySegment<byte>(clientBuffer), CancellationToken.None); var result = await client.ReceiveAsync(new ArraySegment<byte>(clientBuffer), CancellationToken.None);
Assert.True(result.EndOfMessage); Assert.True(result.EndOfMessage);
@ -323,18 +307,17 @@ namespace Microsoft.AspNetCore.WebSockets.Test
using (StartLog(out var loggerFactory)) using (StartLog(out var loggerFactory))
{ {
var orriginalData = Encoding.UTF8.GetBytes(new string('a', 0x1FFFF)); var orriginalData = Encoding.UTF8.GetBytes(new string('a', 0x1FFFF));
using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, out var port, async context =>
{ {
Assert.True(context.WebSockets.IsWebSocketRequest); Assert.True(context.WebSockets.IsWebSocketRequest);
var webSocket = await context.WebSockets.AcceptWebSocketAsync(); var webSocket = await context.WebSockets.AcceptWebSocketAsync();
await webSocket.SendAsync(new ArraySegment<byte>(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None); await webSocket.SendAsync(new ArraySegment<byte>(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None);
}, }))
Port))
{ {
using (var client = new ClientWebSocket()) using (var client = new ClientWebSocket())
{ {
await client.ConnectAsync(new Uri(Address), CancellationToken.None); await client.ConnectAsync(new Uri($"ws://localhost:{port}/"), CancellationToken.None);
var clientBuffer = new byte[orriginalData.Length]; var clientBuffer = new byte[orriginalData.Length];
WebSocketReceiveResult result; WebSocketReceiveResult result;
int receivedCount = 0; int receivedCount = 0;
@ -360,7 +343,7 @@ namespace Microsoft.AspNetCore.WebSockets.Test
using (StartLog(out var loggerFactory)) using (StartLog(out var loggerFactory))
{ {
var orriginalData = Encoding.UTF8.GetBytes("Hello World"); var orriginalData = Encoding.UTF8.GetBytes("Hello World");
using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, out var port, async context =>
{ {
Assert.True(context.WebSockets.IsWebSocketRequest); Assert.True(context.WebSockets.IsWebSocketRequest);
var webSocket = await context.WebSockets.AcceptWebSocketAsync(); var webSocket = await context.WebSockets.AcceptWebSocketAsync();
@ -368,12 +351,11 @@ namespace Microsoft.AspNetCore.WebSockets.Test
await webSocket.SendAsync(new ArraySegment<byte>(orriginalData, 0, 2), WebSocketMessageType.Binary, false, CancellationToken.None); await webSocket.SendAsync(new ArraySegment<byte>(orriginalData, 0, 2), WebSocketMessageType.Binary, false, CancellationToken.None);
await webSocket.SendAsync(new ArraySegment<byte>(orriginalData, 2, 2), WebSocketMessageType.Binary, false, CancellationToken.None); await webSocket.SendAsync(new ArraySegment<byte>(orriginalData, 2, 2), WebSocketMessageType.Binary, false, CancellationToken.None);
await webSocket.SendAsync(new ArraySegment<byte>(orriginalData, 4, 7), WebSocketMessageType.Binary, true, CancellationToken.None); await webSocket.SendAsync(new ArraySegment<byte>(orriginalData, 4, 7), WebSocketMessageType.Binary, true, CancellationToken.None);
}, }))
Port))
{ {
using (var client = new ClientWebSocket()) using (var client = new ClientWebSocket())
{ {
await client.ConnectAsync(new Uri(Address), CancellationToken.None); await client.ConnectAsync(new Uri($"ws://localhost:{port}/"), CancellationToken.None);
var clientBuffer = new byte[orriginalData.Length]; var clientBuffer = new byte[orriginalData.Length];
var result = await client.ReceiveAsync(new ArraySegment<byte>(clientBuffer), CancellationToken.None); var result = await client.ReceiveAsync(new ArraySegment<byte>(clientBuffer), CancellationToken.None);
Assert.False(result.EndOfMessage); Assert.False(result.EndOfMessage);
@ -407,7 +389,7 @@ namespace Microsoft.AspNetCore.WebSockets.Test
using (StartLog(out var loggerFactory)) using (StartLog(out var loggerFactory))
{ {
string closeDescription = "Test Closed"; string closeDescription = "Test Closed";
using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, out var port, async context =>
{ {
Assert.True(context.WebSockets.IsWebSocketRequest); Assert.True(context.WebSockets.IsWebSocketRequest);
var webSocket = await context.WebSockets.AcceptWebSocketAsync(); var webSocket = await context.WebSockets.AcceptWebSocketAsync();
@ -419,12 +401,11 @@ namespace Microsoft.AspNetCore.WebSockets.Test
Assert.Equal(WebSocketMessageType.Close, result.MessageType); Assert.Equal(WebSocketMessageType.Close, result.MessageType);
Assert.Equal(WebSocketCloseStatus.NormalClosure, result.CloseStatus); Assert.Equal(WebSocketCloseStatus.NormalClosure, result.CloseStatus);
Assert.Equal(closeDescription, result.CloseStatusDescription); Assert.Equal(closeDescription, result.CloseStatusDescription);
}, }))
Port))
{ {
using (var client = new ClientWebSocket()) using (var client = new ClientWebSocket())
{ {
await client.ConnectAsync(new Uri(Address), CancellationToken.None); await client.ConnectAsync(new Uri($"ws://localhost:{port}/"), CancellationToken.None);
await client.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, closeDescription, CancellationToken.None); await client.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, closeDescription, CancellationToken.None);
Assert.Equal(WebSocketState.CloseSent, client.State); Assert.Equal(WebSocketState.CloseSent, client.State);
@ -439,18 +420,17 @@ namespace Microsoft.AspNetCore.WebSockets.Test
using (StartLog(out var loggerFactory)) using (StartLog(out var loggerFactory))
{ {
string closeDescription = "Test Closed"; string closeDescription = "Test Closed";
using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, out var port, async context =>
{ {
Assert.True(context.WebSockets.IsWebSocketRequest); Assert.True(context.WebSockets.IsWebSocketRequest);
var webSocket = await context.WebSockets.AcceptWebSocketAsync(); var webSocket = await context.WebSockets.AcceptWebSocketAsync();
await webSocket.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, closeDescription, CancellationToken.None); await webSocket.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, closeDescription, CancellationToken.None);
}, }))
Port))
{ {
using (var client = new ClientWebSocket()) using (var client = new ClientWebSocket())
{ {
await client.ConnectAsync(new Uri(Address), CancellationToken.None); await client.ConnectAsync(new Uri($"ws://localhost:{port}/"), CancellationToken.None);
var clientBuffer = new byte[1024]; var clientBuffer = new byte[1024];
var result = await client.ReceiveAsync(new ArraySegment<byte>(clientBuffer), CancellationToken.None); var result = await client.ReceiveAsync(new ArraySegment<byte>(clientBuffer), CancellationToken.None);
Assert.True(result.EndOfMessage); Assert.True(result.EndOfMessage);
@ -471,7 +451,7 @@ namespace Microsoft.AspNetCore.WebSockets.Test
using (StartLog(out var loggerFactory)) using (StartLog(out var loggerFactory))
{ {
string closeDescription = "Test Closed"; string closeDescription = "Test Closed";
using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, out var port, async context =>
{ {
Assert.True(context.WebSockets.IsWebSocketRequest); Assert.True(context.WebSockets.IsWebSocketRequest);
var webSocket = await context.WebSockets.AcceptWebSocketAsync(); var webSocket = await context.WebSockets.AcceptWebSocketAsync();
@ -485,12 +465,11 @@ namespace Microsoft.AspNetCore.WebSockets.Test
Assert.Equal(closeDescription, result.CloseStatusDescription); Assert.Equal(closeDescription, result.CloseStatusDescription);
await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None); await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None);
}, }))
Port))
{ {
using (var client = new ClientWebSocket()) using (var client = new ClientWebSocket())
{ {
await client.ConnectAsync(new Uri(Address), CancellationToken.None); await client.ConnectAsync(new Uri($"ws://localhost:{port}/"), CancellationToken.None);
await client.CloseAsync(WebSocketCloseStatus.NormalClosure, closeDescription, CancellationToken.None); await client.CloseAsync(WebSocketCloseStatus.NormalClosure, closeDescription, CancellationToken.None);
Assert.Equal(WebSocketState.Closed, client.State); Assert.Equal(WebSocketState.Closed, client.State);
@ -505,7 +484,7 @@ namespace Microsoft.AspNetCore.WebSockets.Test
using (StartLog(out var loggerFactory)) using (StartLog(out var loggerFactory))
{ {
string closeDescription = "Test Closed"; string closeDescription = "Test Closed";
using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, out var port, async context =>
{ {
Assert.True(context.WebSockets.IsWebSocketRequest); Assert.True(context.WebSockets.IsWebSocketRequest);
var webSocket = await context.WebSockets.AcceptWebSocketAsync(); var webSocket = await context.WebSockets.AcceptWebSocketAsync();
@ -519,12 +498,11 @@ namespace Microsoft.AspNetCore.WebSockets.Test
Assert.Equal(closeDescription, result.CloseStatusDescription); Assert.Equal(closeDescription, result.CloseStatusDescription);
await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None); await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None);
}, }))
Port))
{ {
using (var client = new ClientWebSocket()) using (var client = new ClientWebSocket())
{ {
await client.ConnectAsync(new Uri(Address), CancellationToken.None); await client.ConnectAsync(new Uri($"ws://localhost:{port}/"), CancellationToken.None);
await client.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, closeDescription, CancellationToken.None); await client.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, closeDescription, CancellationToken.None);
Assert.Equal(WebSocketState.CloseSent, client.State); Assert.Equal(WebSocketState.CloseSent, client.State);
@ -541,7 +519,7 @@ namespace Microsoft.AspNetCore.WebSockets.Test
using (StartLog(out var loggerFactory)) using (StartLog(out var loggerFactory))
{ {
string closeDescription = "Test Closed"; string closeDescription = "Test Closed";
using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, out var port, async context =>
{ {
Assert.True(context.WebSockets.IsWebSocketRequest); Assert.True(context.WebSockets.IsWebSocketRequest);
var webSocket = await context.WebSockets.AcceptWebSocketAsync(); var webSocket = await context.WebSockets.AcceptWebSocketAsync();
@ -555,12 +533,11 @@ namespace Microsoft.AspNetCore.WebSockets.Test
Assert.Equal(WebSocketMessageType.Close, result.MessageType); Assert.Equal(WebSocketMessageType.Close, result.MessageType);
Assert.Equal(WebSocketCloseStatus.NormalClosure, result.CloseStatus); Assert.Equal(WebSocketCloseStatus.NormalClosure, result.CloseStatus);
Assert.Equal(closeDescription, result.CloseStatusDescription); Assert.Equal(closeDescription, result.CloseStatusDescription);
}, }))
Port))
{ {
using (var client = new ClientWebSocket()) using (var client = new ClientWebSocket())
{ {
await client.ConnectAsync(new Uri(Address), CancellationToken.None); await client.ConnectAsync(new Uri($"ws://localhost:{port}/"), CancellationToken.None);
var clientBuffer = new byte[1024]; var clientBuffer = new byte[1024];
var result = await client.ReceiveAsync(new ArraySegment<byte>(clientBuffer), CancellationToken.None); var result = await client.ReceiveAsync(new ArraySegment<byte>(clientBuffer), CancellationToken.None);
Assert.True(result.EndOfMessage); Assert.True(result.EndOfMessage);