From c88e5147da35c47902b378eefc6b11bb5f7dd46b Mon Sep 17 00:00:00 2001 From: John Luo Date: Thu, 23 Aug 2018 14:48:28 -0700 Subject: [PATCH 1/2] Use dynamically chosen ports to avoid address binding collisions --- build/setup-wstest.sh | 16 ++-- .../KestrelWebSocketHelpers.cs | 4 +- ...icrosoft.AspNetCore.WebSockets.Test.csproj | 1 + .../WebSocketMiddlewareTests.cs | 86 ++++++++++++------- 4 files changed, 67 insertions(+), 40 deletions(-) diff --git a/build/setup-wstest.sh b/build/setup-wstest.sh index 2fb19c5bf3..11056f927a 100755 --- a/build/setup-wstest.sh +++ b/build/setup-wstest.sh @@ -6,18 +6,24 @@ if [ "$TRAVIS_OS_NAME" == "osx" ]; then brew install python fi -type -p python -python --version +PYTHON_CMD=python +if type -p python2.7 > /dev/null; then + echo "Using 'python2.7' executable because it's available." + PYTHON_CMD=python2.7 +fi + +$PYTHON_CMD --version # Install local virtualenv mkdir .python cd .python -curl -O https://pypi.python.org/packages/d4/0c/9840c08189e030873387a73b90ada981885010dd9aea134d6de30cd24cb8/virtualenv-15.1.0.tar.gz +curl -OL https://pypi.python.org/packages/d4/0c/9840c08189e030873387a73b90ada981885010dd9aea134d6de30cd24cb8/virtualenv-15.1.0.tar.gz + tar xf virtualenv-15.1.0.tar.gz cd .. # Make a virtualenv -python ./.python/virtualenv-15.1.0/virtualenv.py .virtualenv +$PYTHON_CMD ./.python/virtualenv-15.1.0/virtualenv.py .virtualenv .virtualenv/bin/python --version .virtualenv/bin/pip --version @@ -27,4 +33,4 @@ python ./.python/virtualenv-15.1.0/virtualenv.py .virtualenv # We're done. The travis config has already established the path to WSTest should be within the virtualenv. ls -l .virtualenv/bin -.virtualenv/bin/wstest --version \ No newline at end of file +.virtualenv/bin/wstest --version diff --git a/test/Microsoft.AspNetCore.WebSockets.Test/KestrelWebSocketHelpers.cs b/test/Microsoft.AspNetCore.WebSockets.Test/KestrelWebSocketHelpers.cs index 77ec387c10..5a1b988d0a 100644 --- a/test/Microsoft.AspNetCore.WebSockets.Test/KestrelWebSocketHelpers.cs +++ b/test/Microsoft.AspNetCore.WebSockets.Test/KestrelWebSocketHelpers.cs @@ -14,7 +14,7 @@ namespace Microsoft.AspNetCore.WebSockets.Test { public class KestrelWebSocketHelpers { - public static IDisposable CreateServer(ILoggerFactory loggerFactory, Func app) + public static IDisposable CreateServer(ILoggerFactory loggerFactory, Func app, int port) { Action startup = builder => { @@ -45,7 +45,7 @@ namespace Microsoft.AspNetCore.WebSockets.Test var configBuilder = new ConfigurationBuilder(); configBuilder.AddInMemoryCollection(); var config = configBuilder.Build(); - config["server.urls"] = "http://localhost:54321"; + config["server.urls"] = $"http://localhost:{port}"; var host = new WebHostBuilder() .ConfigureServices(s => s.AddSingleton(loggerFactory)) 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 5e7f2eb67e..c906aa0f91 100644 --- a/test/Microsoft.AspNetCore.WebSockets.Test/Microsoft.AspNetCore.WebSockets.Test.csproj +++ b/test/Microsoft.AspNetCore.WebSockets.Test/Microsoft.AspNetCore.WebSockets.Test.csproj @@ -10,6 +10,7 @@ + diff --git a/test/Microsoft.AspNetCore.WebSockets.Test/WebSocketMiddlewareTests.cs b/test/Microsoft.AspNetCore.WebSockets.Test/WebSocketMiddlewareTests.cs index e966aea6b4..c976a69cec 100644 --- a/test/Microsoft.AspNetCore.WebSockets.Test/WebSocketMiddlewareTests.cs +++ b/test/Microsoft.AspNetCore.WebSockets.Test/WebSocketMiddlewareTests.cs @@ -6,6 +6,7 @@ using System.Net.WebSockets; using System.Text; using System.Threading; using System.Threading.Tasks; +using Microsoft.AspNetCore.Server.IntegrationTesting.Common; using Microsoft.AspNetCore.Testing.xunit; using Microsoft.Extensions.Logging.Testing; using Xunit; @@ -23,10 +24,13 @@ namespace Microsoft.AspNetCore.WebSockets.Test #endif public class WebSocketMiddlewareTests : LoggedTest { - private static string ClientAddress = "ws://localhost:54321/"; + private readonly int Port; + private readonly string Address; public WebSocketMiddlewareTests(ITestOutputHelper output) : base(output) { + Port = TestUriHelper.GetNextPort(); + Address = $"ws://localhost:{Port}/"; } [ConditionalFact] @@ -38,11 +42,12 @@ namespace Microsoft.AspNetCore.WebSockets.Test { Assert.True(context.WebSockets.IsWebSocketRequest); var webSocket = await context.WebSockets.AcceptWebSocketAsync(); - })) + }, + Port)) { using (var client = new ClientWebSocket()) { - await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); + await client.ConnectAsync(new Uri(Address), CancellationToken.None); } } } @@ -58,14 +63,15 @@ namespace Microsoft.AspNetCore.WebSockets.Test Assert.True(context.WebSockets.IsWebSocketRequest); Assert.Equal("alpha, bravo, charlie", context.Request.Headers["Sec-WebSocket-Protocol"]); var webSocket = await context.WebSockets.AcceptWebSocketAsync("Bravo"); - })) + }, + Port)) { 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); + await client.ConnectAsync(new Uri(Address), 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 @@ -94,11 +100,12 @@ namespace Microsoft.AspNetCore.WebSockets.Test Assert.True(result.EndOfMessage); Assert.Equal(0, result.Count); Assert.Equal(WebSocketMessageType.Binary, result.MessageType); - })) + }, + Port)) { using (var client = new ClientWebSocket()) { - await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); + await client.ConnectAsync(new Uri(Address), CancellationToken.None); var orriginalData = new byte[0]; await client.SendAsync(new ArraySegment(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None); } @@ -123,11 +130,12 @@ namespace Microsoft.AspNetCore.WebSockets.Test Assert.Equal(orriginalData.Length, result.Count); Assert.Equal(WebSocketMessageType.Binary, result.MessageType); Assert.Equal(orriginalData, serverBuffer); - })) + }, + Port)) { using (var client = new ClientWebSocket()) { - await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); + await client.ConnectAsync(new Uri(Address), CancellationToken.None); await client.SendAsync(new ArraySegment(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None); } } @@ -151,11 +159,12 @@ namespace Microsoft.AspNetCore.WebSockets.Test Assert.Equal(orriginalData.Length, result.Count); Assert.Equal(WebSocketMessageType.Binary, result.MessageType); Assert.Equal(orriginalData, serverBuffer); - })) + }, + Port)) { using (var client = new ClientWebSocket()) { - await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); + await client.ConnectAsync(new Uri(Address), CancellationToken.None); await client.SendAsync(new ArraySegment(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None); } } @@ -191,11 +200,12 @@ namespace Microsoft.AspNetCore.WebSockets.Test Assert.Equal(WebSocketMessageType.Text, result.MessageType); Assert.Equal(orriginalData, serverBuffer); - })) + }, + Port)) { using (var client = new ClientWebSocket()) { - await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); + await client.ConnectAsync(new Uri(Address), CancellationToken.None); await client.SendAsync(new ArraySegment(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None); } } @@ -235,11 +245,12 @@ namespace Microsoft.AspNetCore.WebSockets.Test Assert.Equal(WebSocketMessageType.Binary, result.MessageType); Assert.Equal(orriginalData, serverBuffer); - })) + }, + Port)) { using (var client = new ClientWebSocket()) { - await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); + await client.ConnectAsync(new Uri(Address), 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); @@ -260,11 +271,12 @@ namespace Microsoft.AspNetCore.WebSockets.Test var webSocket = await context.WebSockets.AcceptWebSocketAsync(); await webSocket.SendAsync(new ArraySegment(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None); - })) + }, + Port)) { using (var client = new ClientWebSocket()) { - await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); + await client.ConnectAsync(new Uri(Address), CancellationToken.None); var clientBuffer = new byte[orriginalData.Length]; var result = await client.ReceiveAsync(new ArraySegment(clientBuffer), CancellationToken.None); Assert.True(result.EndOfMessage); @@ -288,11 +300,12 @@ namespace Microsoft.AspNetCore.WebSockets.Test var webSocket = await context.WebSockets.AcceptWebSocketAsync(); await webSocket.SendAsync(new ArraySegment(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None); - })) + }, + Port)) { using (var client = new ClientWebSocket()) { - await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); + await client.ConnectAsync(new Uri(Address), CancellationToken.None); var clientBuffer = new byte[orriginalData.Length]; var result = await client.ReceiveAsync(new ArraySegment(clientBuffer), CancellationToken.None); Assert.True(result.EndOfMessage); @@ -316,11 +329,12 @@ namespace Microsoft.AspNetCore.WebSockets.Test var webSocket = await context.WebSockets.AcceptWebSocketAsync(); await webSocket.SendAsync(new ArraySegment(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None); - })) + }, + Port)) { using (var client = new ClientWebSocket()) { - await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); + await client.ConnectAsync(new Uri(Address), CancellationToken.None); var clientBuffer = new byte[orriginalData.Length]; WebSocketReceiveResult result; int receivedCount = 0; @@ -354,11 +368,12 @@ namespace Microsoft.AspNetCore.WebSockets.Test 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); - })) + }, + Port)) { using (var client = new ClientWebSocket()) { - await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); + await client.ConnectAsync(new Uri(Address), CancellationToken.None); var clientBuffer = new byte[orriginalData.Length]; var result = await client.ReceiveAsync(new ArraySegment(clientBuffer), CancellationToken.None); Assert.False(result.EndOfMessage); @@ -404,11 +419,12 @@ namespace Microsoft.AspNetCore.WebSockets.Test Assert.Equal(WebSocketMessageType.Close, result.MessageType); Assert.Equal(WebSocketCloseStatus.NormalClosure, result.CloseStatus); Assert.Equal(closeDescription, result.CloseStatusDescription); - })) + }, + Port)) { using (var client = new ClientWebSocket()) { - await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); + await client.ConnectAsync(new Uri(Address), CancellationToken.None); await client.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, closeDescription, CancellationToken.None); Assert.Equal(WebSocketState.CloseSent, client.State); @@ -429,11 +445,12 @@ namespace Microsoft.AspNetCore.WebSockets.Test var webSocket = await context.WebSockets.AcceptWebSocketAsync(); await webSocket.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, closeDescription, CancellationToken.None); - })) + }, + Port)) { using (var client = new ClientWebSocket()) { - await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); + await client.ConnectAsync(new Uri(Address), CancellationToken.None); var clientBuffer = new byte[1024]; var result = await client.ReceiveAsync(new ArraySegment(clientBuffer), CancellationToken.None); Assert.True(result.EndOfMessage); @@ -468,11 +485,12 @@ namespace Microsoft.AspNetCore.WebSockets.Test Assert.Equal(closeDescription, result.CloseStatusDescription); await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None); - })) + }, + Port)) { using (var client = new ClientWebSocket()) { - await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); + await client.ConnectAsync(new Uri(Address), CancellationToken.None); await client.CloseAsync(WebSocketCloseStatus.NormalClosure, closeDescription, CancellationToken.None); Assert.Equal(WebSocketState.Closed, client.State); @@ -501,11 +519,12 @@ namespace Microsoft.AspNetCore.WebSockets.Test Assert.Equal(closeDescription, result.CloseStatusDescription); await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None); - })) + }, + Port)) { using (var client = new ClientWebSocket()) { - await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); + await client.ConnectAsync(new Uri(Address), CancellationToken.None); await client.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, closeDescription, CancellationToken.None); Assert.Equal(WebSocketState.CloseSent, client.State); @@ -536,11 +555,12 @@ namespace Microsoft.AspNetCore.WebSockets.Test Assert.Equal(WebSocketMessageType.Close, result.MessageType); Assert.Equal(WebSocketCloseStatus.NormalClosure, result.CloseStatus); Assert.Equal(closeDescription, result.CloseStatusDescription); - })) + }, + Port)) { using (var client = new ClientWebSocket()) { - await client.ConnectAsync(new Uri(ClientAddress), CancellationToken.None); + await client.ConnectAsync(new Uri(Address), CancellationToken.None); var clientBuffer = new byte[1024]; var result = await client.ReceiveAsync(new ArraySegment(clientBuffer), CancellationToken.None); Assert.True(result.EndOfMessage); From 67f2c3149efd03511794ed64726a196ee0b1ab36 Mon Sep 17 00:00:00 2001 From: John Luo Date: Fri, 28 Sep 2018 11:59:48 -0700 Subject: [PATCH 2/2] Use port 0 to avoid port collisions during tests --- .../IWebHostPortExtensions.cs | 30 +++++ .../KestrelWebSocketHelpers.cs | 5 +- .../WebSocketMiddlewareTests.cs | 121 +++++++----------- 3 files changed, 82 insertions(+), 74 deletions(-) create mode 100644 test/Microsoft.AspNetCore.WebSockets.Test/IWebHostPortExtensions.cs diff --git a/test/Microsoft.AspNetCore.WebSockets.Test/IWebHostPortExtensions.cs b/test/Microsoft.AspNetCore.WebSockets.Test/IWebHostPortExtensions.cs new file mode 100644 index 0000000000..d3b53681f4 --- /dev/null +++ b/test/Microsoft.AspNetCore.WebSockets.Test/IWebHostPortExtensions.cs @@ -0,0 +1,30 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using Microsoft.AspNetCore.Hosting.Server.Features; + +namespace Microsoft.AspNetCore.Hosting +{ + public static class IWebHostPortExtensions + { + public static int GetPort(this IWebHost host) + { + return host.GetPorts().First(); + } + + public static IEnumerable GetPorts(this IWebHost host) + { + return host.GetUris() + .Select(u => u.Port); + } + + public static IEnumerable GetUris(this IWebHost host) + { + return host.ServerFeatures.Get().Addresses + .Select(a => new Uri(a)); + } + } +} \ No newline at end of file diff --git a/test/Microsoft.AspNetCore.WebSockets.Test/KestrelWebSocketHelpers.cs b/test/Microsoft.AspNetCore.WebSockets.Test/KestrelWebSocketHelpers.cs index 5a1b988d0a..9b2d31f125 100644 --- a/test/Microsoft.AspNetCore.WebSockets.Test/KestrelWebSocketHelpers.cs +++ b/test/Microsoft.AspNetCore.WebSockets.Test/KestrelWebSocketHelpers.cs @@ -14,7 +14,7 @@ namespace Microsoft.AspNetCore.WebSockets.Test { public class KestrelWebSocketHelpers { - public static IDisposable CreateServer(ILoggerFactory loggerFactory, Func app, int port) + public static IDisposable CreateServer(ILoggerFactory loggerFactory, out int port, Func app) { Action startup = builder => { @@ -45,7 +45,7 @@ namespace Microsoft.AspNetCore.WebSockets.Test var configBuilder = new ConfigurationBuilder(); configBuilder.AddInMemoryCollection(); var config = configBuilder.Build(); - config["server.urls"] = $"http://localhost:{port}"; + config["server.urls"] = $"http://127.0.0.1:0"; var host = new WebHostBuilder() .ConfigureServices(s => s.AddSingleton(loggerFactory)) @@ -55,6 +55,7 @@ namespace Microsoft.AspNetCore.WebSockets.Test .Build(); host.Start(); + port = host.GetPort(); return host; } diff --git a/test/Microsoft.AspNetCore.WebSockets.Test/WebSocketMiddlewareTests.cs b/test/Microsoft.AspNetCore.WebSockets.Test/WebSocketMiddlewareTests.cs index c976a69cec..9cf3445ab6 100644 --- a/test/Microsoft.AspNetCore.WebSockets.Test/WebSocketMiddlewareTests.cs +++ b/test/Microsoft.AspNetCore.WebSockets.Test/WebSocketMiddlewareTests.cs @@ -24,30 +24,22 @@ namespace Microsoft.AspNetCore.WebSockets.Test #endif public class WebSocketMiddlewareTests : LoggedTest { - private readonly int Port; - private readonly string Address; - - public WebSocketMiddlewareTests(ITestOutputHelper output) : base(output) - { - Port = TestUriHelper.GetNextPort(); - Address = $"ws://localhost:{Port}/"; - } + public WebSocketMiddlewareTests(ITestOutputHelper output) : base(output) { } [ConditionalFact] public async Task Connect_Success() { using (StartLog(out var loggerFactory)) { - using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => + using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, out var port, async context => { Assert.True(context.WebSockets.IsWebSocketRequest); var webSocket = await context.WebSockets.AcceptWebSocketAsync(); - }, - Port)) + })) { using (var client = new ClientWebSocket()) { - await client.ConnectAsync(new Uri(Address), CancellationToken.None); + await client.ConnectAsync(new Uri($"ws://localhost:{port}/"), CancellationToken.None); } } } @@ -58,20 +50,19 @@ namespace Microsoft.AspNetCore.WebSockets.Test { using (StartLog(out var loggerFactory)) { - using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => + using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, out var port, async context => { Assert.True(context.WebSockets.IsWebSocketRequest); Assert.Equal("alpha, bravo, charlie", context.Request.Headers["Sec-WebSocket-Protocol"]); var webSocket = await context.WebSockets.AcceptWebSocketAsync("Bravo"); - }, - Port)) + })) { using (var client = new ClientWebSocket()) { client.Options.AddSubProtocol("alpha"); client.Options.AddSubProtocol("bravo"); client.Options.AddSubProtocol("charlie"); - await client.ConnectAsync(new Uri(Address), CancellationToken.None); + await client.ConnectAsync(new Uri($"ws://localhost:{port}/"), CancellationToken.None); // The Windows version of ClientWebSocket uses the casing from the header (Bravo) // However, the Managed version seems match the header against the list generated by @@ -90,7 +81,7 @@ namespace Microsoft.AspNetCore.WebSockets.Test { using (StartLog(out var loggerFactory)) { - using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => + using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, out var port, async context => { Assert.True(context.WebSockets.IsWebSocketRequest); var webSocket = await context.WebSockets.AcceptWebSocketAsync(); @@ -100,12 +91,11 @@ namespace Microsoft.AspNetCore.WebSockets.Test Assert.True(result.EndOfMessage); Assert.Equal(0, result.Count); Assert.Equal(WebSocketMessageType.Binary, result.MessageType); - }, - Port)) + })) { using (var client = new ClientWebSocket()) { - await client.ConnectAsync(new Uri(Address), CancellationToken.None); + await client.ConnectAsync(new Uri($"ws://localhost:{port}/"), CancellationToken.None); var orriginalData = new byte[0]; await client.SendAsync(new ArraySegment(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None); } @@ -119,7 +109,7 @@ namespace Microsoft.AspNetCore.WebSockets.Test using (StartLog(out var loggerFactory)) { var orriginalData = Encoding.UTF8.GetBytes("Hello World"); - using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => + using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, out var port, async context => { Assert.True(context.WebSockets.IsWebSocketRequest); var webSocket = await context.WebSockets.AcceptWebSocketAsync(); @@ -130,12 +120,11 @@ namespace Microsoft.AspNetCore.WebSockets.Test Assert.Equal(orriginalData.Length, result.Count); Assert.Equal(WebSocketMessageType.Binary, result.MessageType); Assert.Equal(orriginalData, serverBuffer); - }, - Port)) + })) { using (var client = new ClientWebSocket()) { - await client.ConnectAsync(new Uri(Address), CancellationToken.None); + await client.ConnectAsync(new Uri($"ws://localhost:{port}/"), CancellationToken.None); await client.SendAsync(new ArraySegment(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None); } } @@ -148,7 +137,7 @@ namespace Microsoft.AspNetCore.WebSockets.Test using (StartLog(out var loggerFactory)) { var orriginalData = Encoding.UTF8.GetBytes(new string('a', 130)); - using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => + using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, out var port, async context => { Assert.True(context.WebSockets.IsWebSocketRequest); var webSocket = await context.WebSockets.AcceptWebSocketAsync(); @@ -159,12 +148,11 @@ namespace Microsoft.AspNetCore.WebSockets.Test Assert.Equal(orriginalData.Length, result.Count); Assert.Equal(WebSocketMessageType.Binary, result.MessageType); Assert.Equal(orriginalData, serverBuffer); - }, - Port)) + })) { using (var client = new ClientWebSocket()) { - await client.ConnectAsync(new Uri(Address), CancellationToken.None); + await client.ConnectAsync(new Uri($"ws://localhost:{port}/"), CancellationToken.None); await client.SendAsync(new ArraySegment(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None); } } @@ -177,7 +165,7 @@ namespace Microsoft.AspNetCore.WebSockets.Test using (StartLog(out var loggerFactory)) { var orriginalData = Encoding.UTF8.GetBytes(new string('a', 0x1FFFF)); - using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => + using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, out var port, async context => { Assert.True(context.WebSockets.IsWebSocketRequest); var webSocket = await context.WebSockets.AcceptWebSocketAsync(); @@ -200,12 +188,11 @@ namespace Microsoft.AspNetCore.WebSockets.Test Assert.Equal(WebSocketMessageType.Text, result.MessageType); Assert.Equal(orriginalData, serverBuffer); - }, - Port)) + })) { using (var client = new ClientWebSocket()) { - await client.ConnectAsync(new Uri(Address), CancellationToken.None); + await client.ConnectAsync(new Uri($"ws://localhost:{port}/"), CancellationToken.None); await client.SendAsync(new ArraySegment(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None); } } @@ -218,7 +205,7 @@ namespace Microsoft.AspNetCore.WebSockets.Test using (StartLog(out var loggerFactory)) { var orriginalData = Encoding.UTF8.GetBytes("Hello World"); - using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => + using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, out var port, async context => { Assert.True(context.WebSockets.IsWebSocketRequest); var webSocket = await context.WebSockets.AcceptWebSocketAsync(); @@ -245,12 +232,11 @@ namespace Microsoft.AspNetCore.WebSockets.Test Assert.Equal(WebSocketMessageType.Binary, result.MessageType); Assert.Equal(orriginalData, serverBuffer); - }, - Port)) + })) { using (var client = new ClientWebSocket()) { - await client.ConnectAsync(new Uri(Address), CancellationToken.None); + await client.ConnectAsync(new Uri($"ws://localhost:{port}/"), CancellationToken.None); await client.SendAsync(new ArraySegment(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); @@ -265,18 +251,17 @@ namespace Microsoft.AspNetCore.WebSockets.Test using (StartLog(out var loggerFactory)) { var orriginalData = Encoding.UTF8.GetBytes("Hello World"); - using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => + using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, out var port, async context => { Assert.True(context.WebSockets.IsWebSocketRequest); var webSocket = await context.WebSockets.AcceptWebSocketAsync(); await webSocket.SendAsync(new ArraySegment(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None); - }, - Port)) + })) { using (var client = new ClientWebSocket()) { - await client.ConnectAsync(new Uri(Address), CancellationToken.None); + await client.ConnectAsync(new Uri($"ws://localhost:{port}/"), CancellationToken.None); var clientBuffer = new byte[orriginalData.Length]; var result = await client.ReceiveAsync(new ArraySegment(clientBuffer), CancellationToken.None); Assert.True(result.EndOfMessage); @@ -294,18 +279,17 @@ namespace Microsoft.AspNetCore.WebSockets.Test using (StartLog(out var loggerFactory)) { var orriginalData = Encoding.UTF8.GetBytes(new string('a', 130)); - using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => + using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, out var port, async context => { Assert.True(context.WebSockets.IsWebSocketRequest); var webSocket = await context.WebSockets.AcceptWebSocketAsync(); await webSocket.SendAsync(new ArraySegment(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None); - }, - Port)) + })) { using (var client = new ClientWebSocket()) { - await client.ConnectAsync(new Uri(Address), CancellationToken.None); + await client.ConnectAsync(new Uri($"ws://localhost:{port}/"), CancellationToken.None); var clientBuffer = new byte[orriginalData.Length]; var result = await client.ReceiveAsync(new ArraySegment(clientBuffer), CancellationToken.None); Assert.True(result.EndOfMessage); @@ -323,18 +307,17 @@ namespace Microsoft.AspNetCore.WebSockets.Test using (StartLog(out var loggerFactory)) { var orriginalData = Encoding.UTF8.GetBytes(new string('a', 0x1FFFF)); - using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => + using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, out var port, async context => { Assert.True(context.WebSockets.IsWebSocketRequest); var webSocket = await context.WebSockets.AcceptWebSocketAsync(); await webSocket.SendAsync(new ArraySegment(orriginalData), WebSocketMessageType.Binary, true, CancellationToken.None); - }, - Port)) + })) { using (var client = new ClientWebSocket()) { - await client.ConnectAsync(new Uri(Address), CancellationToken.None); + await client.ConnectAsync(new Uri($"ws://localhost:{port}/"), CancellationToken.None); var clientBuffer = new byte[orriginalData.Length]; WebSocketReceiveResult result; int receivedCount = 0; @@ -360,7 +343,7 @@ namespace Microsoft.AspNetCore.WebSockets.Test using (StartLog(out var loggerFactory)) { var orriginalData = Encoding.UTF8.GetBytes("Hello World"); - using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => + using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, out var port, async context => { Assert.True(context.WebSockets.IsWebSocketRequest); var webSocket = await context.WebSockets.AcceptWebSocketAsync(); @@ -368,12 +351,11 @@ namespace Microsoft.AspNetCore.WebSockets.Test 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); - }, - Port)) + })) { using (var client = new ClientWebSocket()) { - await client.ConnectAsync(new Uri(Address), CancellationToken.None); + await client.ConnectAsync(new Uri($"ws://localhost:{port}/"), CancellationToken.None); var clientBuffer = new byte[orriginalData.Length]; var result = await client.ReceiveAsync(new ArraySegment(clientBuffer), CancellationToken.None); Assert.False(result.EndOfMessage); @@ -407,7 +389,7 @@ namespace Microsoft.AspNetCore.WebSockets.Test using (StartLog(out var loggerFactory)) { string closeDescription = "Test Closed"; - using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => + using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, out var port, async context => { Assert.True(context.WebSockets.IsWebSocketRequest); var webSocket = await context.WebSockets.AcceptWebSocketAsync(); @@ -419,12 +401,11 @@ namespace Microsoft.AspNetCore.WebSockets.Test Assert.Equal(WebSocketMessageType.Close, result.MessageType); Assert.Equal(WebSocketCloseStatus.NormalClosure, result.CloseStatus); Assert.Equal(closeDescription, result.CloseStatusDescription); - }, - Port)) + })) { using (var client = new ClientWebSocket()) { - await client.ConnectAsync(new Uri(Address), CancellationToken.None); + await client.ConnectAsync(new Uri($"ws://localhost:{port}/"), CancellationToken.None); await client.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, closeDescription, CancellationToken.None); Assert.Equal(WebSocketState.CloseSent, client.State); @@ -439,18 +420,17 @@ namespace Microsoft.AspNetCore.WebSockets.Test using (StartLog(out var loggerFactory)) { string closeDescription = "Test Closed"; - using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => + using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, out var port, async context => { Assert.True(context.WebSockets.IsWebSocketRequest); var webSocket = await context.WebSockets.AcceptWebSocketAsync(); await webSocket.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, closeDescription, CancellationToken.None); - }, - Port)) + })) { using (var client = new ClientWebSocket()) { - await client.ConnectAsync(new Uri(Address), CancellationToken.None); + await client.ConnectAsync(new Uri($"ws://localhost:{port}/"), CancellationToken.None); var clientBuffer = new byte[1024]; var result = await client.ReceiveAsync(new ArraySegment(clientBuffer), CancellationToken.None); Assert.True(result.EndOfMessage); @@ -471,7 +451,7 @@ namespace Microsoft.AspNetCore.WebSockets.Test using (StartLog(out var loggerFactory)) { string closeDescription = "Test Closed"; - using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => + using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, out var port, async context => { Assert.True(context.WebSockets.IsWebSocketRequest); var webSocket = await context.WebSockets.AcceptWebSocketAsync(); @@ -485,12 +465,11 @@ namespace Microsoft.AspNetCore.WebSockets.Test Assert.Equal(closeDescription, result.CloseStatusDescription); await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None); - }, - Port)) + })) { using (var client = new ClientWebSocket()) { - await client.ConnectAsync(new Uri(Address), CancellationToken.None); + await client.ConnectAsync(new Uri($"ws://localhost:{port}/"), CancellationToken.None); await client.CloseAsync(WebSocketCloseStatus.NormalClosure, closeDescription, CancellationToken.None); Assert.Equal(WebSocketState.Closed, client.State); @@ -505,7 +484,7 @@ namespace Microsoft.AspNetCore.WebSockets.Test using (StartLog(out var loggerFactory)) { string closeDescription = "Test Closed"; - using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => + using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, out var port, async context => { Assert.True(context.WebSockets.IsWebSocketRequest); var webSocket = await context.WebSockets.AcceptWebSocketAsync(); @@ -519,12 +498,11 @@ namespace Microsoft.AspNetCore.WebSockets.Test Assert.Equal(closeDescription, result.CloseStatusDescription); await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None); - }, - Port)) + })) { using (var client = new ClientWebSocket()) { - await client.ConnectAsync(new Uri(Address), CancellationToken.None); + await client.ConnectAsync(new Uri($"ws://localhost:{port}/"), CancellationToken.None); await client.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, closeDescription, CancellationToken.None); Assert.Equal(WebSocketState.CloseSent, client.State); @@ -541,7 +519,7 @@ namespace Microsoft.AspNetCore.WebSockets.Test using (StartLog(out var loggerFactory)) { string closeDescription = "Test Closed"; - using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, async context => + using (var server = KestrelWebSocketHelpers.CreateServer(loggerFactory, out var port, async context => { Assert.True(context.WebSockets.IsWebSocketRequest); var webSocket = await context.WebSockets.AcceptWebSocketAsync(); @@ -555,12 +533,11 @@ namespace Microsoft.AspNetCore.WebSockets.Test Assert.Equal(WebSocketMessageType.Close, result.MessageType); Assert.Equal(WebSocketCloseStatus.NormalClosure, result.CloseStatus); Assert.Equal(closeDescription, result.CloseStatusDescription); - }, - Port)) + })) { using (var client = new ClientWebSocket()) { - await client.ConnectAsync(new Uri(Address), CancellationToken.None); + await client.ConnectAsync(new Uri($"ws://localhost:{port}/"), CancellationToken.None); var clientBuffer = new byte[1024]; var result = await client.ReceiveAsync(new ArraySegment(clientBuffer), CancellationToken.None); Assert.True(result.EndOfMessage);