Fix flaky test

Use dynamic port assignment to reduce address binding failures due to port collisions
This commit is contained in:
John Luo 2018-08-23 14:48:28 -07:00
parent 42efbb40c4
commit 752f934a23
3 changed files with 379 additions and 410 deletions

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, Action<WebSocketOptions> configure = null) public static IDisposable CreateServer(ILoggerFactory loggerFactory, Func<HttpContext, Task> app, int clientPort, Action<WebSocketOptions> configure = null)
{ {
configure = configure ?? (o => { }); configure = configure ?? (o => { });
Action<IApplicationBuilder> startup = builder => Action<IApplicationBuilder> startup = builder =>
@ -46,7 +46,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:54321"; config["server.urls"] = $"http://localhost:{clientPort}";
var host = new WebHostBuilder() var host = new WebHostBuilder()
.ConfigureServices(s => .ConfigureServices(s =>

View File

@ -10,6 +10,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.Extensions.Logging.Testing" Version="$(MicrosoftExtensionsLoggingTestingPackageVersion)" /> <PackageReference Include="Microsoft.Extensions.Logging.Testing" Version="$(MicrosoftExtensionsLoggingTestingPackageVersion)" />
<PackageReference Include="Microsoft.AspNetCore.Server.IntegrationTesting" Version="$(MicrosoftAspNetCoreServerIntegrationTestingPackageVersion)" />
<PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="$(MicrosoftAspNetCoreServerKestrelPackageVersion)" /> <PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="$(MicrosoftAspNetCoreServerKestrelPackageVersion)" />
<PackageReference Include="Microsoft.AspNetCore.Testing" Version="$(MicrosoftAspNetCoreTestingPackageVersion)" /> <PackageReference Include="Microsoft.AspNetCore.Testing" Version="$(MicrosoftAspNetCoreTestingPackageVersion)" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(MicrosoftNETTestSdkPackageVersion)" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(MicrosoftNETTestSdkPackageVersion)" />

View File

@ -8,12 +8,11 @@ using System.Net.WebSockets;
using System.Text; using System.Text;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Server.IntegrationTesting.Common;
using Microsoft.AspNetCore.Testing.xunit; using Microsoft.AspNetCore.Testing.xunit;
using Microsoft.AspNetCore.WebSockets.Internal; using Microsoft.AspNetCore.WebSockets.Internal;
using Microsoft.Extensions.Logging.Testing; using Microsoft.Extensions.Logging.Testing;
using Xunit; using Xunit;
using Xunit.Abstractions;
namespace Microsoft.AspNetCore.WebSockets.Test namespace Microsoft.AspNetCore.WebSockets.Test
{ {
@ -27,22 +26,24 @@ namespace Microsoft.AspNetCore.WebSockets.Test
#endif #endif
public class WebSocketMiddlewareTests : LoggedTest public class WebSocketMiddlewareTests : LoggedTest
{ {
private static string ClientAddress = "ws://localhost:54321/"; private readonly int ClientPort;
private readonly string ClientAddress;
public WebSocketMiddlewareTests(ITestOutputHelper output) : base(output) public WebSocketMiddlewareTests()
{ {
ClientPort = TestPortHelper.GetNextPort();
ClientAddress = $"ws://localhost:{ClientPort}/";
} }
[ConditionalFact] [ConditionalFact]
public async Task Connect_Success() public async Task Connect_Success()
{ {
using (StartLog(out var loggerFactory)) using (var server = KestrelWebSocketHelpers.CreateServer(LoggerFactory, async context =>
{
using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context =>
{ {
Assert.True(context.WebSockets.IsWebSocketRequest); Assert.True(context.WebSockets.IsWebSocketRequest);
var webSocket = await context.WebSockets.AcceptWebSocketAsync(); var webSocket = await context.WebSockets.AcceptWebSocketAsync();
})) },
ClientPort))
{ {
using (var client = new ClientWebSocket()) using (var client = new ClientWebSocket())
{ {
@ -50,19 +51,17 @@ namespace Microsoft.AspNetCore.WebSockets.Test
} }
} }
} }
}
[ConditionalFact] [ConditionalFact]
public async Task NegotiateSubProtocol_Success() public async Task NegotiateSubProtocol_Success()
{ {
using (StartLog(out var loggerFactory)) using (var server = KestrelWebSocketHelpers.CreateServer(LoggerFactory, async context =>
{
using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, 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");
})) },
ClientPort))
{ {
using (var client = new ClientWebSocket()) using (var client = new ClientWebSocket())
{ {
@ -81,14 +80,11 @@ namespace Microsoft.AspNetCore.WebSockets.Test
} }
} }
} }
}
[ConditionalFact] [ConditionalFact]
public async Task SendEmptyData_Success() public async Task SendEmptyData_Success()
{ {
using (StartLog(out var loggerFactory)) using (var server = KestrelWebSocketHelpers.CreateServer(LoggerFactory, async context =>
{
using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context =>
{ {
Assert.True(context.WebSockets.IsWebSocketRequest); Assert.True(context.WebSockets.IsWebSocketRequest);
var webSocket = await context.WebSockets.AcceptWebSocketAsync(); var webSocket = await context.WebSockets.AcceptWebSocketAsync();
@ -98,7 +94,8 @@ 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);
})) },
ClientPort))
{ {
using (var client = new ClientWebSocket()) using (var client = new ClientWebSocket())
{ {
@ -108,15 +105,12 @@ namespace Microsoft.AspNetCore.WebSockets.Test
} }
} }
} }
}
[ConditionalFact] [ConditionalFact]
public async Task SendShortData_Success() public async Task SendShortData_Success()
{
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, async context =>
{ {
Assert.True(context.WebSockets.IsWebSocketRequest); Assert.True(context.WebSockets.IsWebSocketRequest);
var webSocket = await context.WebSockets.AcceptWebSocketAsync(); var webSocket = await context.WebSockets.AcceptWebSocketAsync();
@ -127,7 +121,8 @@ 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);
})) },
ClientPort))
{ {
using (var client = new ClientWebSocket()) using (var client = new ClientWebSocket())
{ {
@ -136,15 +131,12 @@ namespace Microsoft.AspNetCore.WebSockets.Test
} }
} }
} }
}
[ConditionalFact] [ConditionalFact]
public async Task SendMediumData_Success() public async Task SendMediumData_Success()
{
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, async context =>
{ {
Assert.True(context.WebSockets.IsWebSocketRequest); Assert.True(context.WebSockets.IsWebSocketRequest);
var webSocket = await context.WebSockets.AcceptWebSocketAsync(); var webSocket = await context.WebSockets.AcceptWebSocketAsync();
@ -155,7 +147,8 @@ 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);
})) },
ClientPort))
{ {
using (var client = new ClientWebSocket()) using (var client = new ClientWebSocket())
{ {
@ -164,15 +157,12 @@ namespace Microsoft.AspNetCore.WebSockets.Test
} }
} }
} }
}
[ConditionalFact] [ConditionalFact]
public async Task SendLongData_Success() public async Task SendLongData_Success()
{
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, async context =>
{ {
Assert.True(context.WebSockets.IsWebSocketRequest); Assert.True(context.WebSockets.IsWebSocketRequest);
var webSocket = await context.WebSockets.AcceptWebSocketAsync(); var webSocket = await context.WebSockets.AcceptWebSocketAsync();
@ -195,7 +185,8 @@ 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);
})) },
ClientPort))
{ {
using (var client = new ClientWebSocket()) using (var client = new ClientWebSocket())
{ {
@ -204,15 +195,12 @@ namespace Microsoft.AspNetCore.WebSockets.Test
} }
} }
} }
}
[ConditionalFact] [ConditionalFact]
public async Task SendFragmentedData_Success() public async Task SendFragmentedData_Success()
{
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, async context =>
{ {
Assert.True(context.WebSockets.IsWebSocketRequest); Assert.True(context.WebSockets.IsWebSocketRequest);
var webSocket = await context.WebSockets.AcceptWebSocketAsync(); var webSocket = await context.WebSockets.AcceptWebSocketAsync();
@ -239,7 +227,8 @@ 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);
})) },
ClientPort))
{ {
using (var client = new ClientWebSocket()) using (var client = new ClientWebSocket())
{ {
@ -250,21 +239,19 @@ namespace Microsoft.AspNetCore.WebSockets.Test
} }
} }
} }
}
[ConditionalFact] [ConditionalFact]
public async Task ReceiveShortData_Success() public async Task ReceiveShortData_Success()
{
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, 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);
})) },
ClientPort))
{ {
using (var client = new ClientWebSocket()) using (var client = new ClientWebSocket())
{ {
@ -278,21 +265,19 @@ namespace Microsoft.AspNetCore.WebSockets.Test
} }
} }
} }
}
[ConditionalFact] [ConditionalFact]
public async Task ReceiveMediumData_Success() public async Task ReceiveMediumData_Success()
{
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, 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);
})) },
ClientPort))
{ {
using (var client = new ClientWebSocket()) using (var client = new ClientWebSocket())
{ {
@ -306,21 +291,19 @@ namespace Microsoft.AspNetCore.WebSockets.Test
} }
} }
} }
}
[ConditionalFact] [ConditionalFact]
public async Task ReceiveLongData() public async Task ReceiveLongData()
{
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, 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);
})) },
ClientPort))
{ {
using (var client = new ClientWebSocket()) using (var client = new ClientWebSocket())
{ {
@ -342,15 +325,12 @@ namespace Microsoft.AspNetCore.WebSockets.Test
} }
} }
} }
}
[ConditionalFact] [ConditionalFact]
public async Task ReceiveFragmentedData_Success() public async Task ReceiveFragmentedData_Success()
{
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, async context =>
{ {
Assert.True(context.WebSockets.IsWebSocketRequest); Assert.True(context.WebSockets.IsWebSocketRequest);
var webSocket = await context.WebSockets.AcceptWebSocketAsync(); var webSocket = await context.WebSockets.AcceptWebSocketAsync();
@ -358,7 +338,8 @@ 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);
})) },
ClientPort))
{ {
using (var client = new ClientWebSocket()) using (var client = new ClientWebSocket())
{ {
@ -388,15 +369,12 @@ namespace Microsoft.AspNetCore.WebSockets.Test
} }
} }
} }
}
[ConditionalFact] [ConditionalFact]
public async Task SendClose_Success() public async Task SendClose_Success()
{
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, async context =>
{ {
Assert.True(context.WebSockets.IsWebSocketRequest); Assert.True(context.WebSockets.IsWebSocketRequest);
var webSocket = await context.WebSockets.AcceptWebSocketAsync(); var webSocket = await context.WebSockets.AcceptWebSocketAsync();
@ -408,7 +386,8 @@ 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);
})) },
ClientPort))
{ {
using (var client = new ClientWebSocket()) using (var client = new ClientWebSocket())
{ {
@ -419,21 +398,19 @@ namespace Microsoft.AspNetCore.WebSockets.Test
} }
} }
} }
}
[ConditionalFact] [ConditionalFact]
public async Task ReceiveClose_Success() public async Task ReceiveClose_Success()
{
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, 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);
})) },
ClientPort))
{ {
using (var client = new ClientWebSocket()) using (var client = new ClientWebSocket())
{ {
@ -450,15 +427,12 @@ namespace Microsoft.AspNetCore.WebSockets.Test
} }
} }
} }
}
[ConditionalFact] [ConditionalFact]
public async Task CloseFromOpen_Success() public async Task CloseFromOpen_Success()
{
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, async context =>
{ {
Assert.True(context.WebSockets.IsWebSocketRequest); Assert.True(context.WebSockets.IsWebSocketRequest);
var webSocket = await context.WebSockets.AcceptWebSocketAsync(); var webSocket = await context.WebSockets.AcceptWebSocketAsync();
@ -472,7 +446,8 @@ 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);
})) },
ClientPort))
{ {
using (var client = new ClientWebSocket()) using (var client = new ClientWebSocket())
{ {
@ -483,15 +458,12 @@ namespace Microsoft.AspNetCore.WebSockets.Test
} }
} }
} }
}
[ConditionalFact] [ConditionalFact]
public async Task CloseFromCloseSent_Success() public async Task CloseFromCloseSent_Success()
{
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, async context =>
{ {
Assert.True(context.WebSockets.IsWebSocketRequest); Assert.True(context.WebSockets.IsWebSocketRequest);
var webSocket = await context.WebSockets.AcceptWebSocketAsync(); var webSocket = await context.WebSockets.AcceptWebSocketAsync();
@ -505,7 +477,8 @@ 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);
})) },
ClientPort))
{ {
using (var client = new ClientWebSocket()) using (var client = new ClientWebSocket())
{ {
@ -518,15 +491,12 @@ namespace Microsoft.AspNetCore.WebSockets.Test
} }
} }
} }
}
[ConditionalFact] [ConditionalFact]
public async Task CloseFromCloseReceived_Success() public async Task CloseFromCloseReceived_Success()
{
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, async context =>
{ {
Assert.True(context.WebSockets.IsWebSocketRequest); Assert.True(context.WebSockets.IsWebSocketRequest);
var webSocket = await context.WebSockets.AcceptWebSocketAsync(); var webSocket = await context.WebSockets.AcceptWebSocketAsync();
@ -540,7 +510,8 @@ 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);
})) },
ClientPort))
{ {
using (var client = new ClientWebSocket()) using (var client = new ClientWebSocket())
{ {
@ -561,7 +532,6 @@ namespace Microsoft.AspNetCore.WebSockets.Test
} }
} }
} }
}
[Theory] [Theory]
[InlineData(HttpStatusCode.OK, null)] [InlineData(HttpStatusCode.OK, null)]
@ -573,13 +543,13 @@ namespace Microsoft.AspNetCore.WebSockets.Test
[InlineData(HttpStatusCode.OK, "http://ExAmPLE.cOm")] [InlineData(HttpStatusCode.OK, "http://ExAmPLE.cOm")]
public async Task OriginIsValidatedForWebSocketRequests(HttpStatusCode expectedCode, params string[] origins) public async Task OriginIsValidatedForWebSocketRequests(HttpStatusCode expectedCode, params string[] origins)
{ {
using (StartLog(out var loggerFactory)) using (var server = KestrelWebSocketHelpers.CreateServer(LoggerFactory, context =>
{
using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, context =>
{ {
Assert.True(context.WebSockets.IsWebSocketRequest); Assert.True(context.WebSockets.IsWebSocketRequest);
return Task.CompletedTask; return Task.CompletedTask;
}, o => },
ClientPort,
o =>
{ {
if (origins != null) if (origins != null)
{ {
@ -613,18 +583,17 @@ namespace Microsoft.AspNetCore.WebSockets.Test
} }
} }
} }
}
[Fact] [Fact]
public async Task OriginIsNotValidatedForNonWebSocketRequests() public async Task OriginIsNotValidatedForNonWebSocketRequests()
{ {
using (StartLog(out var loggerFactory)) using (var server = KestrelWebSocketHelpers.CreateServer(LoggerFactory, context =>
{
using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, context =>
{ {
Assert.False(context.WebSockets.IsWebSocketRequest); Assert.False(context.WebSockets.IsWebSocketRequest);
return Task.CompletedTask; return Task.CompletedTask;
}, o => o.AllowedOrigins.Add("http://example.com"))) },
ClientPort,
o => o.AllowedOrigins.Add("http://example.com")))
{ {
using (var client = new HttpClient()) using (var client = new HttpClient())
{ {
@ -642,5 +611,4 @@ namespace Microsoft.AspNetCore.WebSockets.Test
} }
} }
} }
}
} }