diff --git a/test/Microsoft.AspNetCore.SignalR.Client.Tests/ConnectionTests.cs b/test/Microsoft.AspNetCore.SignalR.Client.Tests/ConnectionTests.cs
index b5f24ecdd8..c684ba7a91 100644
--- a/test/Microsoft.AspNetCore.SignalR.Client.Tests/ConnectionTests.cs
+++ b/test/Microsoft.AspNetCore.SignalR.Client.Tests/ConnectionTests.cs
@@ -1,4 +1,4 @@
-// Copyright (c) .NET Foundation. All rights reserved.
+// 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;
diff --git a/test/Microsoft.AspNetCore.SignalR.Client.Tests/Microsoft.AspNetCore.SignalR.Client.Tests.csproj b/test/Microsoft.AspNetCore.SignalR.Client.Tests/Microsoft.AspNetCore.SignalR.Client.Tests.csproj
index 57ff233183..9e967081f6 100644
--- a/test/Microsoft.AspNetCore.SignalR.Client.Tests/Microsoft.AspNetCore.SignalR.Client.Tests.csproj
+++ b/test/Microsoft.AspNetCore.SignalR.Client.Tests/Microsoft.AspNetCore.SignalR.Client.Tests.csproj
@@ -19,6 +19,7 @@
+
diff --git a/test/Microsoft.AspNetCore.SignalR.Tests/EndToEndTests.cs b/test/Microsoft.AspNetCore.SignalR.Tests/EndToEndTests.cs
index c08d6a3e60..98d36334e2 100644
--- a/test/Microsoft.AspNetCore.SignalR.Tests/EndToEndTests.cs
+++ b/test/Microsoft.AspNetCore.SignalR.Tests/EndToEndTests.cs
@@ -1,4 +1,4 @@
-// Copyright (c) .NET Foundation. All rights reserved.
+// 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;
@@ -16,6 +16,7 @@ using Xunit;
using ClientConnection = Microsoft.AspNetCore.Sockets.Client.Connection;
using Microsoft.AspNetCore.SignalR.Tests.Common;
using Xunit.Abstractions;
+using Microsoft.Extensions.Logging.Testing;
namespace Microsoft.AspNetCore.SignalR.Tests
{
@@ -26,13 +27,11 @@ namespace Microsoft.AspNetCore.SignalR.Tests
}
[Collection(EndToEndTestsCollection.Name)]
- public class EndToEndTests
+ public class EndToEndTests : LoggedTest
{
- private readonly ITestOutputHelper _output;
-
private readonly ServerFixture _serverFixture;
- public EndToEndTests(ServerFixture serverFixture, ITestOutputHelper output)
+ public EndToEndTests(ServerFixture serverFixture, ITestOutputHelper output) : base(output)
{
if (serverFixture == null)
{
@@ -40,25 +39,39 @@ namespace Microsoft.AspNetCore.SignalR.Tests
}
_serverFixture = serverFixture;
- _output = output;
}
[ConditionalFact]
[OSSkipCondition(OperatingSystems.Windows, WindowsVersions.Win7, WindowsVersions.Win2008R2, SkipReason = "No WebSockets Client for this platform")]
public async Task WebSocketsTest()
{
- const string message = "Hello, World!";
- using (var ws = new ClientWebSocket())
+ using (StartLog(out var loggerFactory))
{
- await ws.ConnectAsync(new Uri(_serverFixture.WebSocketsUrl + "/echo/ws"), CancellationToken.None);
- var bytes = Encoding.UTF8.GetBytes(message);
- await ws.SendAsync(new ArraySegment(bytes), WebSocketMessageType.Binary, true, CancellationToken.None);
- var buffer = new ArraySegment(new byte[1024]);
- var result = await ws.ReceiveAsync(buffer, CancellationToken.None);
+ var logger = loggerFactory.CreateLogger();
- Assert.Equal(bytes, buffer.Array.AsSpan().Slice(0, message.Length).ToArray());
+ const string message = "Hello, World!";
+ using (var ws = new ClientWebSocket())
+ {
+ string socketUrl = _serverFixture.WebSocketsUrl + "/echo/ws";
- await ws.CloseAsync(WebSocketCloseStatus.Empty, "", CancellationToken.None);
+ logger.LogInformation("Connecting WebSocket to {socketUrl}", socketUrl);
+ await ws.ConnectAsync(new Uri(socketUrl), CancellationToken.None).OrTimeout();
+
+ var bytes = Encoding.UTF8.GetBytes(message);
+ logger.LogInformation("Sending {length} byte frame", bytes.Length);
+ await ws.SendAsync(new ArraySegment(bytes), WebSocketMessageType.Binary, true, CancellationToken.None).OrTimeout();
+
+ logger.LogInformation("Receiving frame");
+ var buffer = new ArraySegment(new byte[1024]);
+ var result = await ws.ReceiveAsync(buffer, CancellationToken.None).OrTimeout();
+ logger.LogInformation("Received {length} byte frame", result.Count);
+
+ Assert.Equal(bytes, buffer.Array.AsSpan().Slice(0, result.Count).ToArray());
+
+ logger.LogInformation("Closing socket");
+ await ws.CloseAsync(WebSocketCloseStatus.Empty, "", CancellationToken.None).OrTimeout();
+ logger.LogInformation("Closed socket");
+ }
}
}
@@ -67,39 +80,57 @@ namespace Microsoft.AspNetCore.SignalR.Tests
[MemberData(nameof(TransportTypes))]
public async Task ConnectionCanSendAndReceiveMessages(TransportType transportType)
{
- const string message = "Major Key";
- var baseUrl = _serverFixture.BaseUrl;
- var loggerFactory = new LoggerFactory();
- loggerFactory.AddXunit(_output, LogLevel.Trace);
-
- var connection = new ClientConnection(new Uri(baseUrl + "/echo"), loggerFactory);
- try
+ using (StartLog(out var loggerFactory, testName: $"ConnectionCanSendAndReceiveMessages_{transportType.ToString()}"))
{
- var receiveTcs = new TaskCompletionSource();
- connection.Received += (data, format) => receiveTcs.TrySetResult(Encoding.UTF8.GetString(data));
- connection.Closed += e =>
+ var logger = loggerFactory.CreateLogger();
+
+ const string message = "Major Key";
+ var baseUrl = _serverFixture.BaseUrl;
+
+ string url = baseUrl + "/echo";
+ var connection = new ClientConnection(new Uri(url), loggerFactory);
+ try
{
- if (e != null)
+ var receiveTcs = new TaskCompletionSource();
+ connection.Received += (data, format) =>
{
- receiveTcs.TrySetException(e);
- }
- else
+ logger.LogInformation("Received {length} byte message", data.Length);
+ receiveTcs.TrySetResult(Encoding.UTF8.GetString(data));
+ };
+ connection.Closed += e =>
{
- receiveTcs.TrySetResult(null);
- }
- };
+ logger.LogInformation("Connection closed");
+ if (e != null)
+ {
+ receiveTcs.TrySetException(e);
+ }
+ else
+ {
+ receiveTcs.TrySetResult(null);
+ }
+ };
- await connection.StartAsync(transportType);
+ logger.LogInformation("Starting connection to {url}", url);
+ await connection.StartAsync(transportType).OrTimeout();
+ logger.LogInformation("Started connection to {url}", url);
- await connection.SendAsync(Encoding.UTF8.GetBytes(message), MessageType.Text);
+ var bytes = Encoding.UTF8.GetBytes(message);
+ logger.LogInformation("Sending {length} byte message", bytes.Length);
+ await connection.SendAsync(bytes, MessageType.Text).OrTimeout();
+ logger.LogInformation("Sent message", bytes.Length);
- var receiveData = new ReceiveData();
+ var receiveData = new ReceiveData();
- Assert.Equal(message, await receiveTcs.Task.OrTimeout());
- }
- finally
- {
- await connection.DisposeAsync();
+ logger.LogInformation("Receiving message");
+ Assert.Equal(message, await receiveTcs.Task.OrTimeout());
+ logger.LogInformation("Completed receive");
+ }
+ finally
+ {
+ logger.LogInformation("Disposing Connection");
+ await connection.DisposeAsync().OrTimeout();
+ logger.LogInformation("Disposed Connection");
+ }
}
}
@@ -117,28 +148,45 @@ namespace Microsoft.AspNetCore.SignalR.Tests
[MemberData(nameof(MessageSizesData))]
public async Task ConnectionCanSendAndReceiveDifferentMessageSizesWebSocketsTransport(string message)
{
- var baseUrl = _serverFixture.BaseUrl;
- var loggerFactory = new LoggerFactory();
- loggerFactory.AddXunit(_output, LogLevel.Debug);
-
- var connection = new ClientConnection(new Uri(baseUrl + "/echo"), loggerFactory);
- try
+ using (StartLog(out var loggerFactory, testName: $"ConnectionCanSendAndReceiveDifferentMessageSizesWebSocketsTransport_{message.Length}"))
{
- var receiveTcs = new TaskCompletionSource();
- connection.Received += (data, messageType) => receiveTcs.SetResult(data);
+ var logger = loggerFactory.CreateLogger();
- await connection.StartAsync(TransportType.WebSockets);
+ var baseUrl = _serverFixture.BaseUrl;
- await connection.SendAsync(Encoding.UTF8.GetBytes(message), MessageType.Text);
+ string url = baseUrl + "/echo";
+ var connection = new ClientConnection(new Uri(url), loggerFactory);
+ try
+ {
+ var receiveTcs = new TaskCompletionSource();
+ connection.Received += (data, messageType) =>
+ {
+ logger.LogInformation("Received {length} byte message", data.Length);
+ receiveTcs.TrySetResult(data);
+ };
- var receiveData = new ReceiveData();
+ logger.LogInformation("Starting connection to {url}", url);
+ await connection.StartAsync(TransportType.WebSockets).OrTimeout();
+ logger.LogInformation("Started connection to {url}", url);
- var receivedData = await receiveTcs.Task.OrTimeout();
- Assert.Equal(message, Encoding.UTF8.GetString(receivedData));
- }
- finally
- {
- await connection.DisposeAsync();
+ var bytes = Encoding.UTF8.GetBytes(message);
+ logger.LogInformation("Sending {length} byte message", bytes.Length);
+ await connection.SendAsync(bytes, MessageType.Text).OrTimeout();
+ logger.LogInformation("Sent message", bytes.Length);
+
+ var receiveData = new ReceiveData();
+
+ logger.LogInformation("Receiving message");
+ var receivedData = await receiveTcs.Task.OrTimeout();
+ Assert.Equal(message, Encoding.UTF8.GetString(receivedData));
+ logger.LogInformation("Completed receive");
+ }
+ finally
+ {
+ logger.LogInformation("Disposing Connection");
+ await connection.DisposeAsync().OrTimeout();
+ logger.LogInformation("Disposed Connection");
+ }
}
}
@@ -150,4 +198,4 @@ namespace Microsoft.AspNetCore.SignalR.Tests
new object[] { TransportType.LongPolling }
};
}
-}
\ No newline at end of file
+}
diff --git a/test/Microsoft.AspNetCore.SignalR.Tests/ServerFixture.cs b/test/Microsoft.AspNetCore.SignalR.Tests/ServerFixture.cs
index 0feb0ffc5a..185002d24d 100644
--- a/test/Microsoft.AspNetCore.SignalR.Tests/ServerFixture.cs
+++ b/test/Microsoft.AspNetCore.SignalR.Tests/ServerFixture.cs
@@ -1,4 +1,4 @@
-// Copyright (c) .NET Foundation. All rights reserved.
+// 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;
@@ -9,14 +9,18 @@ using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.AspNetCore.Builder;
+using Microsoft.Extensions.Logging.Testing;
+using Xunit.Abstractions;
namespace Microsoft.AspNetCore.SignalR.Tests
{
public class ServerFixture : IDisposable
{
private ILoggerFactory _loggerFactory;
+ private ILogger _logger;
private IWebHost host;
private IApplicationLifetime lifetime;
+ private readonly IDisposable _logToken;
public string BaseUrl => "http://localhost:3000";
@@ -24,17 +28,10 @@ namespace Microsoft.AspNetCore.SignalR.Tests
public ServerFixture()
{
- _loggerFactory = new LoggerFactory();
+ var testLog = AssemblyTestLog.ForAssembly(typeof(ServerFixture).Assembly);
+ _logToken = testLog.StartTestLog(null, typeof(ServerFixture).FullName, out _loggerFactory, "ServerFixture");
+ _logger = _loggerFactory.CreateLogger();
- var _verbose = string.Equals(Environment.GetEnvironmentVariable("SIGNALR_TESTS_VERBOSE"), "1");
- if (_verbose)
- {
- _loggerFactory.AddConsole(LogLevel.Debug);
- }
- if (Debugger.IsAttached)
- {
- _loggerFactory.AddDebug();
- }
StartServer();
}
@@ -64,7 +61,7 @@ namespace Microsoft.AspNetCore.SignalR.Tests
.Build();
var t = Task.Run(() => host.Start());
- Console.WriteLine("Starting test server...");
+ _logger.LogInformation("Starting test server...");
lifetime = host.Services.GetRequiredService();
if (!lifetime.ApplicationStarted.WaitHandle.WaitOne(TimeSpan.FromSeconds(5)))
{
@@ -75,10 +72,18 @@ namespace Microsoft.AspNetCore.SignalR.Tests
}
throw new TimeoutException("Timed out waiting for application to start.");
}
+ _logger.LogInformation("Test Server started");
+
+ lifetime.ApplicationStopped.Register(() =>
+ {
+ _logger.LogInformation("Test server shut down");
+ _logToken.Dispose();
+ });
}
public void Dispose()
{
+ _logger.LogInformation("Shutting down test server");
host.Dispose();
}
}