Fix flaky test
Use dynamic port assignment to reduce address binding failures due to port collisions
This commit is contained in:
parent
42efbb40c4
commit
752f934a23
|
|
@ -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 =>
|
||||||
|
|
|
||||||
|
|
@ -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)" />
|
||||||
|
|
|
||||||
|
|
@ -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())
|
||||||
{
|
{
|
||||||
|
|
@ -643,4 +612,3 @@ namespace Microsoft.AspNetCore.WebSockets.Test
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue