diff --git a/build/dependencies.props b/build/dependencies.props index 9037161b08..831c3b89e8 100644 --- a/build/dependencies.props +++ b/build/dependencies.props @@ -3,23 +3,24 @@ $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - 2.1.0-preview1-15651 - 2.1.0-preview1-27965 - 2.1.0-preview1-27965 - 2.1.0-preview1-27965 - 2.1.0-preview1-27965 - 2.1.0-preview1-27965 - 0.5.0-preview1-27965 - 2.1.0-preview1-27965 - 2.1.0-preview1-27965 - 2.1.0-preview1-27965 - 2.1.0-preview1-27965 - 2.1.0-preview1-27965 - 2.1.0-preview1-27965 - 2.1.0-preview1-27965 - 2.1.0-preview1-27965 + 2.1.0-preview2-15684 + 2.1.0-preview2-28183 + 2.1.0-preview2-28183 + 2.1.0-preview2-28183 + 2.1.0-preview2-28183 + 2.1.0-preview2-28183 + 0.5.0-preview2-28183 + 2.1.0-preview2-28183 + 2.1.0-preview2-28183 + 2.1.0-preview2-28183 + 2.1.0-preview2-28183 + 2.1.0-preview2-28183 + 2.1.0-preview2-28183 + 2.1.0-preview2-28183 + 2.1.0-preview2-28183 + 2.1.0-preview2-28183 2.0.0 - 2.1.0-preview1-26016-05 + 2.1.0-preview1-26122-01 15.3.0 4.5.0-preview1-26119-06 2.3.1 diff --git a/korebuild-lock.txt b/korebuild-lock.txt index 2146d006d7..1ae5d69845 100644 --- a/korebuild-lock.txt +++ b/korebuild-lock.txt @@ -1,2 +1,2 @@ -version:2.1.0-preview1-15661 -commithash:c9349d4c8a495d3085d9b879214d80f2f45e2193 +version:2.1.0-preview2-15684 +commithash:308af8e3279892aad7f189ffbddd3ff9a60970d3 diff --git a/samples/EchoApp/Properties/launchSettings.json b/samples/EchoApp/Properties/launchSettings.json index a9b371ff56..fba441af3d 100644 --- a/samples/EchoApp/Properties/launchSettings.json +++ b/samples/EchoApp/Properties/launchSettings.json @@ -3,7 +3,7 @@ "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { - "applicationUrl": "http://localhost:3159/", + "applicationUrl": "http://localhost:62225/", "sslPort": 0 } }, diff --git a/src/Microsoft.AspNetCore.WebSockets/WebSocketMiddleware.cs b/src/Microsoft.AspNetCore.WebSockets/WebSocketMiddleware.cs index d9653c1051..eba9597cd5 100644 --- a/src/Microsoft.AspNetCore.WebSockets/WebSocketMiddleware.cs +++ b/src/Microsoft.AspNetCore.WebSockets/WebSocketMiddleware.cs @@ -116,6 +116,7 @@ namespace Microsoft.AspNetCore.WebSockets { _context.Response.Headers[headerPair.Key] = headerPair.Value; } + Stream opaqueTransport = await _upgradeFeature.UpgradeAsync(); // Sets status code to 101 return WebSocketProtocol.CreateFromStream(opaqueTransport, isServer: true, subProtocol: subProtocol, keepAliveInterval: keepAliveInterval); diff --git a/test/Microsoft.AspNetCore.WebSockets.Test/KestrelWebSocketHelpers.cs b/test/Microsoft.AspNetCore.WebSockets.Test/KestrelWebSocketHelpers.cs index 646286183a..77ec387c10 100644 --- a/test/Microsoft.AspNetCore.WebSockets.Test/KestrelWebSocketHelpers.cs +++ b/test/Microsoft.AspNetCore.WebSockets.Test/KestrelWebSocketHelpers.cs @@ -7,12 +7,14 @@ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.DependencyInjection; namespace Microsoft.AspNetCore.WebSockets.Test { public class KestrelWebSocketHelpers { - public static IDisposable CreateServer(Func app) + public static IDisposable CreateServer(ILoggerFactory loggerFactory, Func app) { Action startup = builder => { @@ -46,6 +48,7 @@ namespace Microsoft.AspNetCore.WebSockets.Test config["server.urls"] = "http://localhost:54321"; var host = new WebHostBuilder() + .ConfigureServices(s => s.AddSingleton(loggerFactory)) .UseConfiguration(config) .UseKestrel() .Configure(startup) diff --git a/test/Microsoft.AspNetCore.WebSockets.Test/Microsoft.AspNetCore.WebSockets.Test.csproj b/test/Microsoft.AspNetCore.WebSockets.Test/Microsoft.AspNetCore.WebSockets.Test.csproj index c85c41eb0e..5e7f2eb67e 100644 --- a/test/Microsoft.AspNetCore.WebSockets.Test/Microsoft.AspNetCore.WebSockets.Test.csproj +++ b/test/Microsoft.AspNetCore.WebSockets.Test/Microsoft.AspNetCore.WebSockets.Test.csproj @@ -9,6 +9,7 @@ + diff --git a/test/Microsoft.AspNetCore.WebSockets.Test/WebSocketMiddlewareTests.cs b/test/Microsoft.AspNetCore.WebSockets.Test/WebSocketMiddlewareTests.cs index cb0d8ec052..0f60b1d90d 100644 --- a/test/Microsoft.AspNetCore.WebSockets.Test/WebSocketMiddlewareTests.cs +++ b/test/Microsoft.AspNetCore.WebSockets.Test/WebSocketMiddlewareTests.cs @@ -7,27 +7,36 @@ using System.Text; using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Testing.xunit; +using Microsoft.Extensions.Logging.Testing; using Xunit; +using Xunit.Abstractions; namespace Microsoft.AspNetCore.WebSockets.Test { - public class WebSocketMiddlewareTests + public class WebSocketMiddlewareTests : LoggedTest { private static string ClientAddress = "ws://localhost:54321/"; + public WebSocketMiddlewareTests(ITestOutputHelper output) : base(output) + { + } + [ConditionalFact] [OSSkipCondition(OperatingSystems.Windows, WindowsVersions.Win7, SkipReason = "No WebSockets Client for this platform")] public async Task Connect_Success() { - using (var server = KestrelWebSocketHelpers.CreateServer(async context => + using (StartLog(out var loggerFactory)) { - Assert.True(context.WebSockets.IsWebSocketRequest); - var webSocket = await context.WebSockets.AcceptWebSocketAsync(); - })) - { - using (var client = new ClientWebSocket()) + using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => { - await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); + Assert.True(context.WebSockets.IsWebSocketRequest); + var webSocket = await context.WebSockets.AcceptWebSocketAsync(); + })) + { + using (var client = new ClientWebSocket()) + { + await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); + } } } } @@ -36,27 +45,30 @@ namespace Microsoft.AspNetCore.WebSockets.Test [OSSkipCondition(OperatingSystems.Windows, WindowsVersions.Win7, SkipReason = "No WebSockets Client for this platform")] public async Task NegotiateSubProtocol_Success() { - using (var server = KestrelWebSocketHelpers.CreateServer(async context => + using (StartLog(out var loggerFactory)) { - Assert.True(context.WebSockets.IsWebSocketRequest); - Assert.Equal("alpha, bravo, charlie", context.Request.Headers["Sec-WebSocket-Protocol"]); - var webSocket = await context.WebSockets.AcceptWebSocketAsync("Bravo"); - })) - { - using (var client = new ClientWebSocket()) + using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => { - client.Options.AddSubProtocol("alpha"); - client.Options.AddSubProtocol("bravo"); - client.Options.AddSubProtocol("charlie"); - await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); - - // 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 - // the AddSubProtocol calls (case-insensitively) and then use the version from - // that list as the value for SubProtocol. This is fine, but means we need to ignore case here. - // We could update our AddSubProtocols above to the same case but I think it's better to - // ensure this behavior is codified by this test. - Assert.Equal("Bravo", client.SubProtocol, ignoreCase: true); + Assert.True(context.WebSockets.IsWebSocketRequest); + Assert.Equal("alpha, bravo, charlie", context.Request.Headers["Sec-WebSocket-Protocol"]); + var webSocket = await context.WebSockets.AcceptWebSocketAsync("Bravo"); + })) + { + using (var client = new ClientWebSocket()) + { + client.Options.AddSubProtocol("alpha"); + client.Options.AddSubProtocol("bravo"); + client.Options.AddSubProtocol("charlie"); + await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); + + // 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 + // the AddSubProtocol calls (case-insensitively) and then use the version from + // that list as the value for SubProtocol. This is fine, but means we need to ignore case here. + // We could update our AddSubProtocols above to the same case but I think it's better to + // ensure this behavior is codified by this test. + Assert.Equal("Bravo", client.SubProtocol, ignoreCase: true); + } } } } @@ -65,23 +77,26 @@ namespace Microsoft.AspNetCore.WebSockets.Test [OSSkipCondition(OperatingSystems.Windows, WindowsVersions.Win7, SkipReason = "No WebSockets Client for this platform")] public async Task SendEmptyData_Success() { - using (var server = KestrelWebSocketHelpers.CreateServer(async context => + using (StartLog(out var loggerFactory)) { - Assert.True(context.WebSockets.IsWebSocketRequest); - var webSocket = await context.WebSockets.AcceptWebSocketAsync(); - - var serverBuffer = new byte[0]; - var result = await webSocket.ReceiveAsync(new ArraySegment(serverBuffer), CancellationToken.None); - Assert.True(result.EndOfMessage); - Assert.Equal(0, result.Count); - Assert.Equal(WebSocketMessageType.Binary, result.MessageType); - })) - { - using (var client = new ClientWebSocket()) + using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => { - await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); - var orriginalData = new byte[0]; - await client.SendAsync(new ArraySegment(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None); + Assert.True(context.WebSockets.IsWebSocketRequest); + var webSocket = await context.WebSockets.AcceptWebSocketAsync(); + + var serverBuffer = new byte[0]; + var result = await webSocket.ReceiveAsync(new ArraySegment(serverBuffer), CancellationToken.None); + Assert.True(result.EndOfMessage); + Assert.Equal(0, result.Count); + Assert.Equal(WebSocketMessageType.Binary, result.MessageType); + })) + { + using (var client = new ClientWebSocket()) + { + await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); + var orriginalData = new byte[0]; + await client.SendAsync(new ArraySegment(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None); + } } } } @@ -90,24 +105,27 @@ namespace Microsoft.AspNetCore.WebSockets.Test [OSSkipCondition(OperatingSystems.Windows, WindowsVersions.Win7, SkipReason = "No WebSockets Client for this platform")] public async Task SendShortData_Success() { - var orriginalData = Encoding.UTF8.GetBytes("Hello World"); - using (var server = KestrelWebSocketHelpers.CreateServer(async context => + using (StartLog(out var loggerFactory)) { - Assert.True(context.WebSockets.IsWebSocketRequest); - var webSocket = await context.WebSockets.AcceptWebSocketAsync(); - - var serverBuffer = new byte[orriginalData.Length]; - var result = await webSocket.ReceiveAsync(new ArraySegment(serverBuffer), CancellationToken.None); - Assert.True(result.EndOfMessage); - Assert.Equal(orriginalData.Length, result.Count); - Assert.Equal(WebSocketMessageType.Binary, result.MessageType); - Assert.Equal(orriginalData, serverBuffer); - })) - { - using (var client = new ClientWebSocket()) + var orriginalData = Encoding.UTF8.GetBytes("Hello World"); + using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => { - await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); - await client.SendAsync(new ArraySegment(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None); + Assert.True(context.WebSockets.IsWebSocketRequest); + var webSocket = await context.WebSockets.AcceptWebSocketAsync(); + + var serverBuffer = new byte[orriginalData.Length]; + var result = await webSocket.ReceiveAsync(new ArraySegment(serverBuffer), CancellationToken.None); + Assert.True(result.EndOfMessage); + Assert.Equal(orriginalData.Length, result.Count); + Assert.Equal(WebSocketMessageType.Binary, result.MessageType); + Assert.Equal(orriginalData, serverBuffer); + })) + { + using (var client = new ClientWebSocket()) + { + await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); + await client.SendAsync(new ArraySegment(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None); + } } } } @@ -116,24 +134,27 @@ namespace Microsoft.AspNetCore.WebSockets.Test [OSSkipCondition(OperatingSystems.Windows, WindowsVersions.Win7, SkipReason = "No WebSockets Client for this platform")] public async Task SendMediumData_Success() { - var orriginalData = Encoding.UTF8.GetBytes(new string('a', 130)); - using (var server = KestrelWebSocketHelpers.CreateServer(async context => + using (StartLog(out var loggerFactory)) { - Assert.True(context.WebSockets.IsWebSocketRequest); - var webSocket = await context.WebSockets.AcceptWebSocketAsync(); - - var serverBuffer = new byte[orriginalData.Length]; - var result = await webSocket.ReceiveAsync(new ArraySegment(serverBuffer), CancellationToken.None); - Assert.True(result.EndOfMessage); - Assert.Equal(orriginalData.Length, result.Count); - Assert.Equal(WebSocketMessageType.Binary, result.MessageType); - Assert.Equal(orriginalData, serverBuffer); - })) - { - using (var client = new ClientWebSocket()) + var orriginalData = Encoding.UTF8.GetBytes(new string('a', 130)); + using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => { - await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); - await client.SendAsync(new ArraySegment(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None); + Assert.True(context.WebSockets.IsWebSocketRequest); + var webSocket = await context.WebSockets.AcceptWebSocketAsync(); + + var serverBuffer = new byte[orriginalData.Length]; + var result = await webSocket.ReceiveAsync(new ArraySegment(serverBuffer), CancellationToken.None); + Assert.True(result.EndOfMessage); + Assert.Equal(orriginalData.Length, result.Count); + Assert.Equal(WebSocketMessageType.Binary, result.MessageType); + Assert.Equal(orriginalData, serverBuffer); + })) + { + using (var client = new ClientWebSocket()) + { + await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); + await client.SendAsync(new ArraySegment(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None); + } } } } @@ -142,36 +163,39 @@ namespace Microsoft.AspNetCore.WebSockets.Test [OSSkipCondition(OperatingSystems.Windows, WindowsVersions.Win7, SkipReason = "No WebSockets Client for this platform")] public async Task SendLongData_Success() { - var orriginalData = Encoding.UTF8.GetBytes(new string('a', 0x1FFFF)); - using (var server = KestrelWebSocketHelpers.CreateServer(async context => + using (StartLog(out var loggerFactory)) { - Assert.True(context.WebSockets.IsWebSocketRequest); - var webSocket = await context.WebSockets.AcceptWebSocketAsync(); - - var serverBuffer = new byte[orriginalData.Length]; - var result = await webSocket.ReceiveAsync(new ArraySegment(serverBuffer), CancellationToken.None); - int intermediateCount = result.Count; - Assert.False(result.EndOfMessage); - Assert.Equal(WebSocketMessageType.Text, result.MessageType); - - result = await webSocket.ReceiveAsync(new ArraySegment(serverBuffer, intermediateCount, orriginalData.Length - intermediateCount), CancellationToken.None); - intermediateCount += result.Count; - Assert.False(result.EndOfMessage); - Assert.Equal(WebSocketMessageType.Text, result.MessageType); - - result = await webSocket.ReceiveAsync(new ArraySegment(serverBuffer, intermediateCount, orriginalData.Length - intermediateCount), CancellationToken.None); - intermediateCount += result.Count; - Assert.True(result.EndOfMessage); - Assert.Equal(orriginalData.Length, intermediateCount); - Assert.Equal(WebSocketMessageType.Text, result.MessageType); - - Assert.Equal(orriginalData, serverBuffer); - })) - { - using (var client = new ClientWebSocket()) + var orriginalData = Encoding.UTF8.GetBytes(new string('a', 0x1FFFF)); + using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => { - await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); - await client.SendAsync(new ArraySegment(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None); + Assert.True(context.WebSockets.IsWebSocketRequest); + var webSocket = await context.WebSockets.AcceptWebSocketAsync(); + + var serverBuffer = new byte[orriginalData.Length]; + var result = await webSocket.ReceiveAsync(new ArraySegment(serverBuffer), CancellationToken.None); + int intermediateCount = result.Count; + Assert.False(result.EndOfMessage); + Assert.Equal(WebSocketMessageType.Text, result.MessageType); + + result = await webSocket.ReceiveAsync(new ArraySegment(serverBuffer, intermediateCount, orriginalData.Length - intermediateCount), CancellationToken.None); + intermediateCount += result.Count; + Assert.False(result.EndOfMessage); + Assert.Equal(WebSocketMessageType.Text, result.MessageType); + + result = await webSocket.ReceiveAsync(new ArraySegment(serverBuffer, intermediateCount, orriginalData.Length - intermediateCount), CancellationToken.None); + intermediateCount += result.Count; + Assert.True(result.EndOfMessage); + Assert.Equal(orriginalData.Length, intermediateCount); + Assert.Equal(WebSocketMessageType.Text, result.MessageType); + + Assert.Equal(orriginalData, serverBuffer); + })) + { + using (var client = new ClientWebSocket()) + { + await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); + await client.SendAsync(new ArraySegment(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None); + } } } } @@ -180,42 +204,45 @@ namespace Microsoft.AspNetCore.WebSockets.Test [OSSkipCondition(OperatingSystems.Windows, WindowsVersions.Win7, SkipReason = "No WebSockets Client for this platform")] public async Task SendFragmentedData_Success() { - var orriginalData = Encoding.UTF8.GetBytes("Hello World"); - using (var server = KestrelWebSocketHelpers.CreateServer(async context => + using (StartLog(out var loggerFactory)) { - Assert.True(context.WebSockets.IsWebSocketRequest); - var webSocket = await context.WebSockets.AcceptWebSocketAsync(); - - var serverBuffer = new byte[orriginalData.Length]; - var result = await webSocket.ReceiveAsync(new ArraySegment(serverBuffer), CancellationToken.None); - Assert.False(result.EndOfMessage); - Assert.Equal(2, result.Count); - int totalReceived = result.Count; - Assert.Equal(WebSocketMessageType.Binary, result.MessageType); - - result = await webSocket.ReceiveAsync( - new ArraySegment(serverBuffer, totalReceived, serverBuffer.Length - totalReceived), CancellationToken.None); - Assert.False(result.EndOfMessage); - Assert.Equal(2, result.Count); - totalReceived += result.Count; - Assert.Equal(WebSocketMessageType.Binary, result.MessageType); - - result = await webSocket.ReceiveAsync( - new ArraySegment(serverBuffer, totalReceived, serverBuffer.Length - totalReceived), CancellationToken.None); - Assert.True(result.EndOfMessage); - Assert.Equal(7, result.Count); - totalReceived += result.Count; - Assert.Equal(WebSocketMessageType.Binary, result.MessageType); - - Assert.Equal(orriginalData, serverBuffer); - })) - { - using (var client = new ClientWebSocket()) + var orriginalData = Encoding.UTF8.GetBytes("Hello World"); + using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => { - await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); - await client.SendAsync(new ArraySegment(orriginalData, 0, 2), WebSocketMessageType.Binary, false, CancellationToken.None); - await client.SendAsync(new ArraySegment(orriginalData, 2, 2), WebSocketMessageType.Binary, false, CancellationToken.None); - await client.SendAsync(new ArraySegment(orriginalData, 4, 7), WebSocketMessageType.Binary, true, CancellationToken.None); + Assert.True(context.WebSockets.IsWebSocketRequest); + var webSocket = await context.WebSockets.AcceptWebSocketAsync(); + + var serverBuffer = new byte[orriginalData.Length]; + var result = await webSocket.ReceiveAsync(new ArraySegment(serverBuffer), CancellationToken.None); + Assert.False(result.EndOfMessage); + Assert.Equal(2, result.Count); + int totalReceived = result.Count; + Assert.Equal(WebSocketMessageType.Binary, result.MessageType); + + result = await webSocket.ReceiveAsync( + new ArraySegment(serverBuffer, totalReceived, serverBuffer.Length - totalReceived), CancellationToken.None); + Assert.False(result.EndOfMessage); + Assert.Equal(2, result.Count); + totalReceived += result.Count; + Assert.Equal(WebSocketMessageType.Binary, result.MessageType); + + result = await webSocket.ReceiveAsync( + new ArraySegment(serverBuffer, totalReceived, serverBuffer.Length - totalReceived), CancellationToken.None); + Assert.True(result.EndOfMessage); + Assert.Equal(7, result.Count); + totalReceived += result.Count; + Assert.Equal(WebSocketMessageType.Binary, result.MessageType); + + Assert.Equal(orriginalData, serverBuffer); + })) + { + using (var client = new ClientWebSocket()) + { + await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); + await client.SendAsync(new ArraySegment(orriginalData, 0, 2), WebSocketMessageType.Binary, false, CancellationToken.None); + await client.SendAsync(new ArraySegment(orriginalData, 2, 2), WebSocketMessageType.Binary, false, CancellationToken.None); + await client.SendAsync(new ArraySegment(orriginalData, 4, 7), WebSocketMessageType.Binary, true, CancellationToken.None); + } } } } @@ -224,24 +251,27 @@ namespace Microsoft.AspNetCore.WebSockets.Test [OSSkipCondition(OperatingSystems.Windows, WindowsVersions.Win7, SkipReason = "No WebSockets Client for this platform")] public async Task ReceiveShortData_Success() { - var orriginalData = Encoding.UTF8.GetBytes("Hello World"); - using (var server = KestrelWebSocketHelpers.CreateServer(async context => + using (StartLog(out var loggerFactory)) { - Assert.True(context.WebSockets.IsWebSocketRequest); - var webSocket = await context.WebSockets.AcceptWebSocketAsync(); - - await webSocket.SendAsync(new ArraySegment(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None); - })) - { - using (var client = new ClientWebSocket()) + var orriginalData = Encoding.UTF8.GetBytes("Hello World"); + using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => { - await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); - var clientBuffer = new byte[orriginalData.Length]; - var result = await client.ReceiveAsync(new ArraySegment(clientBuffer), CancellationToken.None); - Assert.True(result.EndOfMessage); - Assert.Equal(orriginalData.Length, result.Count); - Assert.Equal(WebSocketMessageType.Binary, result.MessageType); - Assert.Equal(orriginalData, clientBuffer); + Assert.True(context.WebSockets.IsWebSocketRequest); + var webSocket = await context.WebSockets.AcceptWebSocketAsync(); + + await webSocket.SendAsync(new ArraySegment(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None); + })) + { + using (var client = new ClientWebSocket()) + { + await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); + var clientBuffer = new byte[orriginalData.Length]; + var result = await client.ReceiveAsync(new ArraySegment(clientBuffer), CancellationToken.None); + Assert.True(result.EndOfMessage); + Assert.Equal(orriginalData.Length, result.Count); + Assert.Equal(WebSocketMessageType.Binary, result.MessageType); + Assert.Equal(orriginalData, clientBuffer); + } } } } @@ -250,24 +280,27 @@ namespace Microsoft.AspNetCore.WebSockets.Test [OSSkipCondition(OperatingSystems.Windows, WindowsVersions.Win7, SkipReason = "No WebSockets Client for this platform")] public async Task ReceiveMediumData_Success() { - var orriginalData = Encoding.UTF8.GetBytes(new string('a', 130)); - using (var server = KestrelWebSocketHelpers.CreateServer(async context => + using (StartLog(out var loggerFactory)) { - Assert.True(context.WebSockets.IsWebSocketRequest); - var webSocket = await context.WebSockets.AcceptWebSocketAsync(); - - await webSocket.SendAsync(new ArraySegment(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None); - })) - { - using (var client = new ClientWebSocket()) + var orriginalData = Encoding.UTF8.GetBytes(new string('a', 130)); + using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => { - await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); - var clientBuffer = new byte[orriginalData.Length]; - var result = await client.ReceiveAsync(new ArraySegment(clientBuffer), CancellationToken.None); - Assert.True(result.EndOfMessage); - Assert.Equal(orriginalData.Length, result.Count); - Assert.Equal(WebSocketMessageType.Binary, result.MessageType); - Assert.Equal(orriginalData, clientBuffer); + Assert.True(context.WebSockets.IsWebSocketRequest); + var webSocket = await context.WebSockets.AcceptWebSocketAsync(); + + await webSocket.SendAsync(new ArraySegment(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None); + })) + { + using (var client = new ClientWebSocket()) + { + await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); + var clientBuffer = new byte[orriginalData.Length]; + var result = await client.ReceiveAsync(new ArraySegment(clientBuffer), CancellationToken.None); + Assert.True(result.EndOfMessage); + Assert.Equal(orriginalData.Length, result.Count); + Assert.Equal(WebSocketMessageType.Binary, result.MessageType); + Assert.Equal(orriginalData, clientBuffer); + } } } } @@ -276,32 +309,35 @@ namespace Microsoft.AspNetCore.WebSockets.Test [OSSkipCondition(OperatingSystems.Windows, WindowsVersions.Win7, SkipReason = "No WebSockets Client for this platform")] public async Task ReceiveLongData() { - var orriginalData = Encoding.UTF8.GetBytes(new string('a', 0x1FFFF)); - using (var server = KestrelWebSocketHelpers.CreateServer(async context => + using (StartLog(out var loggerFactory)) { - Assert.True(context.WebSockets.IsWebSocketRequest); - var webSocket = await context.WebSockets.AcceptWebSocketAsync(); - - await webSocket.SendAsync(new ArraySegment(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None); - })) - { - using (var client = new ClientWebSocket()) + var orriginalData = Encoding.UTF8.GetBytes(new string('a', 0x1FFFF)); + using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => { - await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); - var clientBuffer = new byte[orriginalData.Length]; - WebSocketReceiveResult result; - int receivedCount = 0; - do - { - result = await client.ReceiveAsync(new ArraySegment(clientBuffer, receivedCount, clientBuffer.Length - receivedCount), CancellationToken.None); - receivedCount += result.Count; - Assert.Equal(WebSocketMessageType.Binary, result.MessageType); - } - while (!result.EndOfMessage); + Assert.True(context.WebSockets.IsWebSocketRequest); + var webSocket = await context.WebSockets.AcceptWebSocketAsync(); - Assert.Equal(orriginalData.Length, receivedCount); - Assert.Equal(WebSocketMessageType.Binary, result.MessageType); - Assert.Equal(orriginalData, clientBuffer); + await webSocket.SendAsync(new ArraySegment(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None); + })) + { + using (var client = new ClientWebSocket()) + { + await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); + var clientBuffer = new byte[orriginalData.Length]; + WebSocketReceiveResult result; + int receivedCount = 0; + do + { + result = await client.ReceiveAsync(new ArraySegment(clientBuffer, receivedCount, clientBuffer.Length - receivedCount), CancellationToken.None); + receivedCount += result.Count; + Assert.Equal(WebSocketMessageType.Binary, result.MessageType); + } + while (!result.EndOfMessage); + + Assert.Equal(orriginalData.Length, receivedCount); + Assert.Equal(WebSocketMessageType.Binary, result.MessageType); + Assert.Equal(orriginalData, clientBuffer); + } } } } @@ -310,42 +346,45 @@ namespace Microsoft.AspNetCore.WebSockets.Test [OSSkipCondition(OperatingSystems.Windows, WindowsVersions.Win7, SkipReason = "No WebSockets Client for this platform")] public async Task ReceiveFragmentedData_Success() { - var orriginalData = Encoding.UTF8.GetBytes("Hello World"); - using (var server = KestrelWebSocketHelpers.CreateServer(async context => + using (StartLog(out var loggerFactory)) { - Assert.True(context.WebSockets.IsWebSocketRequest); - var webSocket = await context.WebSockets.AcceptWebSocketAsync(); - - await webSocket.SendAsync(new ArraySegment(orriginalData, 0, 2), WebSocketMessageType.Binary, false, CancellationToken.None); - await webSocket.SendAsync(new ArraySegment(orriginalData, 2, 2), WebSocketMessageType.Binary, false, CancellationToken.None); - await webSocket.SendAsync(new ArraySegment(orriginalData, 4, 7), WebSocketMessageType.Binary, true, CancellationToken.None); - })) - { - using (var client = new ClientWebSocket()) + var orriginalData = Encoding.UTF8.GetBytes("Hello World"); + using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => { - await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); - var clientBuffer = new byte[orriginalData.Length]; - var result = await client.ReceiveAsync(new ArraySegment(clientBuffer), CancellationToken.None); - Assert.False(result.EndOfMessage); - Assert.Equal(2, result.Count); - int totalReceived = result.Count; - Assert.Equal(WebSocketMessageType.Binary, result.MessageType); + Assert.True(context.WebSockets.IsWebSocketRequest); + var webSocket = await context.WebSockets.AcceptWebSocketAsync(); - result = await client.ReceiveAsync( - new ArraySegment(clientBuffer, totalReceived, clientBuffer.Length - totalReceived), CancellationToken.None); - Assert.False(result.EndOfMessage); - Assert.Equal(2, result.Count); - totalReceived += result.Count; - Assert.Equal(WebSocketMessageType.Binary, result.MessageType); + await webSocket.SendAsync(new ArraySegment(orriginalData, 0, 2), WebSocketMessageType.Binary, false, CancellationToken.None); + await webSocket.SendAsync(new ArraySegment(orriginalData, 2, 2), WebSocketMessageType.Binary, false, CancellationToken.None); + await webSocket.SendAsync(new ArraySegment(orriginalData, 4, 7), WebSocketMessageType.Binary, true, CancellationToken.None); + })) + { + using (var client = new ClientWebSocket()) + { + await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); + var clientBuffer = new byte[orriginalData.Length]; + var result = await client.ReceiveAsync(new ArraySegment(clientBuffer), CancellationToken.None); + Assert.False(result.EndOfMessage); + Assert.Equal(2, result.Count); + int totalReceived = result.Count; + Assert.Equal(WebSocketMessageType.Binary, result.MessageType); - result = await client.ReceiveAsync( - new ArraySegment(clientBuffer, totalReceived, clientBuffer.Length - totalReceived), CancellationToken.None); - Assert.True(result.EndOfMessage); - Assert.Equal(7, result.Count); - totalReceived += result.Count; - Assert.Equal(WebSocketMessageType.Binary, result.MessageType); + result = await client.ReceiveAsync( + new ArraySegment(clientBuffer, totalReceived, clientBuffer.Length - totalReceived), CancellationToken.None); + Assert.False(result.EndOfMessage); + Assert.Equal(2, result.Count); + totalReceived += result.Count; + Assert.Equal(WebSocketMessageType.Binary, result.MessageType); - Assert.Equal(orriginalData, clientBuffer); + result = await client.ReceiveAsync( + new ArraySegment(clientBuffer, totalReceived, clientBuffer.Length - totalReceived), CancellationToken.None); + Assert.True(result.EndOfMessage); + Assert.Equal(7, result.Count); + totalReceived += result.Count; + Assert.Equal(WebSocketMessageType.Binary, result.MessageType); + + Assert.Equal(orriginalData, clientBuffer); + } } } } @@ -354,27 +393,30 @@ namespace Microsoft.AspNetCore.WebSockets.Test [OSSkipCondition(OperatingSystems.Windows, WindowsVersions.Win7, SkipReason = "No WebSockets Client for this platform")] public async Task SendClose_Success() { - string closeDescription = "Test Closed"; - using (var server = KestrelWebSocketHelpers.CreateServer(async context => + using (StartLog(out var loggerFactory)) { - Assert.True(context.WebSockets.IsWebSocketRequest); - var webSocket = await context.WebSockets.AcceptWebSocketAsync(); - - var serverBuffer = new byte[1024]; - var result = await webSocket.ReceiveAsync(new ArraySegment(serverBuffer), CancellationToken.None); - Assert.True(result.EndOfMessage); - Assert.Equal(0, result.Count); - Assert.Equal(WebSocketMessageType.Close, result.MessageType); - Assert.Equal(WebSocketCloseStatus.NormalClosure, result.CloseStatus); - Assert.Equal(closeDescription, result.CloseStatusDescription); - })) - { - using (var client = new ClientWebSocket()) + string closeDescription = "Test Closed"; + using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => { - await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); - await client.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, closeDescription, CancellationToken.None); + Assert.True(context.WebSockets.IsWebSocketRequest); + var webSocket = await context.WebSockets.AcceptWebSocketAsync(); - Assert.Equal(WebSocketState.CloseSent, client.State); + var serverBuffer = new byte[1024]; + var result = await webSocket.ReceiveAsync(new ArraySegment(serverBuffer), CancellationToken.None); + Assert.True(result.EndOfMessage); + Assert.Equal(0, result.Count); + Assert.Equal(WebSocketMessageType.Close, result.MessageType); + Assert.Equal(WebSocketCloseStatus.NormalClosure, result.CloseStatus); + Assert.Equal(closeDescription, result.CloseStatusDescription); + })) + { + using (var client = new ClientWebSocket()) + { + await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); + await client.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, closeDescription, CancellationToken.None); + + Assert.Equal(WebSocketState.CloseSent, client.State); + } } } } @@ -383,27 +425,30 @@ namespace Microsoft.AspNetCore.WebSockets.Test [OSSkipCondition(OperatingSystems.Windows, WindowsVersions.Win7, SkipReason = "No WebSockets Client for this platform")] public async Task ReceiveClose_Success() { - string closeDescription = "Test Closed"; - using (var server = KestrelWebSocketHelpers.CreateServer(async context => + using (StartLog(out var loggerFactory)) { - Assert.True(context.WebSockets.IsWebSocketRequest); - var webSocket = await context.WebSockets.AcceptWebSocketAsync(); - - await webSocket.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, closeDescription, CancellationToken.None); - })) - { - using (var client = new ClientWebSocket()) + string closeDescription = "Test Closed"; + using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => { - await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); - var clientBuffer = new byte[1024]; - var result = await client.ReceiveAsync(new ArraySegment(clientBuffer), CancellationToken.None); - Assert.True(result.EndOfMessage); - Assert.Equal(0, result.Count); - Assert.Equal(WebSocketMessageType.Close, result.MessageType); - Assert.Equal(WebSocketCloseStatus.NormalClosure, result.CloseStatus); - Assert.Equal(closeDescription, result.CloseStatusDescription); + Assert.True(context.WebSockets.IsWebSocketRequest); + var webSocket = await context.WebSockets.AcceptWebSocketAsync(); - Assert.Equal(WebSocketState.CloseReceived, client.State); + await webSocket.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, closeDescription, CancellationToken.None); + })) + { + using (var client = new ClientWebSocket()) + { + await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); + var clientBuffer = new byte[1024]; + var result = await client.ReceiveAsync(new ArraySegment(clientBuffer), CancellationToken.None); + Assert.True(result.EndOfMessage); + Assert.Equal(0, result.Count); + Assert.Equal(WebSocketMessageType.Close, result.MessageType); + Assert.Equal(WebSocketCloseStatus.NormalClosure, result.CloseStatus); + Assert.Equal(closeDescription, result.CloseStatusDescription); + + Assert.Equal(WebSocketState.CloseReceived, client.State); + } } } } @@ -412,29 +457,32 @@ namespace Microsoft.AspNetCore.WebSockets.Test [OSSkipCondition(OperatingSystems.Windows, WindowsVersions.Win7, SkipReason = "No WebSockets Client for this platform")] public async Task CloseFromOpen_Success() { - string closeDescription = "Test Closed"; - using (var server = KestrelWebSocketHelpers.CreateServer(async context => + using (StartLog(out var loggerFactory)) { - Assert.True(context.WebSockets.IsWebSocketRequest); - var webSocket = await context.WebSockets.AcceptWebSocketAsync(); - - var serverBuffer = new byte[1024]; - var result = await webSocket.ReceiveAsync(new ArraySegment(serverBuffer), CancellationToken.None); - Assert.True(result.EndOfMessage); - Assert.Equal(0, result.Count); - Assert.Equal(WebSocketMessageType.Close, result.MessageType); - Assert.Equal(WebSocketCloseStatus.NormalClosure, result.CloseStatus); - Assert.Equal(closeDescription, result.CloseStatusDescription); - - await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None); - })) - { - using (var client = new ClientWebSocket()) + string closeDescription = "Test Closed"; + using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => { - await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); - await client.CloseAsync(WebSocketCloseStatus.NormalClosure, closeDescription, CancellationToken.None); + Assert.True(context.WebSockets.IsWebSocketRequest); + var webSocket = await context.WebSockets.AcceptWebSocketAsync(); - Assert.Equal(WebSocketState.Closed, client.State); + var serverBuffer = new byte[1024]; + var result = await webSocket.ReceiveAsync(new ArraySegment(serverBuffer), CancellationToken.None); + Assert.True(result.EndOfMessage); + Assert.Equal(0, result.Count); + Assert.Equal(WebSocketMessageType.Close, result.MessageType); + Assert.Equal(WebSocketCloseStatus.NormalClosure, result.CloseStatus); + Assert.Equal(closeDescription, result.CloseStatusDescription); + + await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None); + })) + { + using (var client = new ClientWebSocket()) + { + await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); + await client.CloseAsync(WebSocketCloseStatus.NormalClosure, closeDescription, CancellationToken.None); + + Assert.Equal(WebSocketState.Closed, client.State); + } } } } @@ -443,31 +491,34 @@ namespace Microsoft.AspNetCore.WebSockets.Test [OSSkipCondition(OperatingSystems.Windows, WindowsVersions.Win7, SkipReason = "No WebSockets Client for this platform")] public async Task CloseFromCloseSent_Success() { - string closeDescription = "Test Closed"; - using (var server = KestrelWebSocketHelpers.CreateServer(async context => + using (StartLog(out var loggerFactory)) { - Assert.True(context.WebSockets.IsWebSocketRequest); - var webSocket = await context.WebSockets.AcceptWebSocketAsync(); - - var serverBuffer = new byte[1024]; - var result = await webSocket.ReceiveAsync(new ArraySegment(serverBuffer), CancellationToken.None); - Assert.True(result.EndOfMessage); - Assert.Equal(0, result.Count); - Assert.Equal(WebSocketMessageType.Close, result.MessageType); - Assert.Equal(WebSocketCloseStatus.NormalClosure, result.CloseStatus); - Assert.Equal(closeDescription, result.CloseStatusDescription); - - await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None); - })) - { - using (var client = new ClientWebSocket()) + string closeDescription = "Test Closed"; + using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => { - await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); - await client.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, closeDescription, CancellationToken.None); - Assert.Equal(WebSocketState.CloseSent, client.State); + Assert.True(context.WebSockets.IsWebSocketRequest); + var webSocket = await context.WebSockets.AcceptWebSocketAsync(); - await client.CloseAsync(WebSocketCloseStatus.NormalClosure, closeDescription, CancellationToken.None); - Assert.Equal(WebSocketState.Closed, client.State); + var serverBuffer = new byte[1024]; + var result = await webSocket.ReceiveAsync(new ArraySegment(serverBuffer), CancellationToken.None); + Assert.True(result.EndOfMessage); + Assert.Equal(0, result.Count); + Assert.Equal(WebSocketMessageType.Close, result.MessageType); + Assert.Equal(WebSocketCloseStatus.NormalClosure, result.CloseStatus); + Assert.Equal(closeDescription, result.CloseStatusDescription); + + await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None); + })) + { + using (var client = new ClientWebSocket()) + { + await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); + await client.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, closeDescription, CancellationToken.None); + Assert.Equal(WebSocketState.CloseSent, client.State); + + await client.CloseAsync(WebSocketCloseStatus.NormalClosure, closeDescription, CancellationToken.None); + Assert.Equal(WebSocketState.Closed, client.State); + } } } } @@ -476,39 +527,42 @@ namespace Microsoft.AspNetCore.WebSockets.Test [OSSkipCondition(OperatingSystems.Windows, WindowsVersions.Win7, SkipReason = "No WebSockets Client for this platform")] public async Task CloseFromCloseReceived_Success() { - string closeDescription = "Test Closed"; - using (var server = KestrelWebSocketHelpers.CreateServer(async context => + using (StartLog(out var loggerFactory)) { - Assert.True(context.WebSockets.IsWebSocketRequest); - var webSocket = await context.WebSockets.AcceptWebSocketAsync(); - - await webSocket.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, closeDescription, CancellationToken.None); - - var serverBuffer = new byte[1024]; - var result = await webSocket.ReceiveAsync(new ArraySegment(serverBuffer), CancellationToken.None); - Assert.True(result.EndOfMessage); - Assert.Equal(0, result.Count); - Assert.Equal(WebSocketMessageType.Close, result.MessageType); - Assert.Equal(WebSocketCloseStatus.NormalClosure, result.CloseStatus); - Assert.Equal(closeDescription, result.CloseStatusDescription); - })) - { - using (var client = new ClientWebSocket()) + string closeDescription = "Test Closed"; + using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => { - await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); - var clientBuffer = new byte[1024]; - var result = await client.ReceiveAsync(new ArraySegment(clientBuffer), CancellationToken.None); + Assert.True(context.WebSockets.IsWebSocketRequest); + var webSocket = await context.WebSockets.AcceptWebSocketAsync(); + + await webSocket.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, closeDescription, CancellationToken.None); + + var serverBuffer = new byte[1024]; + var result = await webSocket.ReceiveAsync(new ArraySegment(serverBuffer), CancellationToken.None); Assert.True(result.EndOfMessage); Assert.Equal(0, result.Count); Assert.Equal(WebSocketMessageType.Close, result.MessageType); Assert.Equal(WebSocketCloseStatus.NormalClosure, result.CloseStatus); Assert.Equal(closeDescription, result.CloseStatusDescription); + })) + { + using (var client = new ClientWebSocket()) + { + await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); + var clientBuffer = new byte[1024]; + var result = await client.ReceiveAsync(new ArraySegment(clientBuffer), CancellationToken.None); + Assert.True(result.EndOfMessage); + Assert.Equal(0, result.Count); + Assert.Equal(WebSocketMessageType.Close, result.MessageType); + Assert.Equal(WebSocketCloseStatus.NormalClosure, result.CloseStatus); + Assert.Equal(closeDescription, result.CloseStatusDescription); - Assert.Equal(WebSocketState.CloseReceived, client.State); + Assert.Equal(WebSocketState.CloseReceived, client.State); - await client.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None); + await client.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None); - Assert.Equal(WebSocketState.Closed, client.State); + Assert.Equal(WebSocketState.Closed, client.State); + } } } }