Improvements

This commit is contained in:
James Newton-King 2018-04-17 16:57:55 +12:00
parent a17320221e
commit 818497de64
No known key found for this signature in database
GPG Key ID: 0A66B2F456BF5526
4 changed files with 22 additions and 11 deletions

View File

@ -22,10 +22,11 @@ using Xunit.Abstractions;
namespace Microsoft.AspNetCore.SignalR.Client.FunctionalTests namespace Microsoft.AspNetCore.SignalR.Client.FunctionalTests
{ {
[CollectionDefinition(Name)] // Disable running server tests in parallel so server logs can accurately be captured per test
[CollectionDefinition(Name, DisableParallelization = true)]
public class HubConnectionTestsCollection : ICollectionFixture<ServerFixture<Startup>> public class HubConnectionTestsCollection : ICollectionFixture<ServerFixture<Startup>>
{ {
public const string Name = "EndToEndTests"; public const string Name = nameof(HubConnectionTestsCollection);
} }
[Collection(HubConnectionTestsCollection.Name)] [Collection(HubConnectionTestsCollection.Name)]

View File

@ -17,13 +17,14 @@ using Xunit.Abstractions;
namespace Microsoft.AspNetCore.SignalR.Redis.Tests namespace Microsoft.AspNetCore.SignalR.Redis.Tests
{ {
[CollectionDefinition(Name)] // Disable running server tests in parallel so server logs can accurately be captured per test
public class EndToEndTestsCollection : ICollectionFixture<RedisServerFixture<Startup>> [CollectionDefinition(Name, DisableParallelization = true)]
public class RedisEndToEndTestsCollection : ICollectionFixture<RedisServerFixture<Startup>>
{ {
public const string Name = "RedisEndToEndTests"; public const string Name = nameof(RedisEndToEndTestsCollection);
} }
[Collection(EndToEndTestsCollection.Name)] [Collection(RedisEndToEndTestsCollection.Name)]
public class RedisEndToEndTests : VerifiableLoggedTest public class RedisEndToEndTests : VerifiableLoggedTest
{ {
private readonly RedisServerFixture<Startup> _serverFixture; private readonly RedisServerFixture<Startup> _serverFixture;

View File

@ -3,6 +3,7 @@
using System; using System;
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
namespace Microsoft.AspNetCore.SignalR.Tests namespace Microsoft.AspNetCore.SignalR.Tests
@ -12,26 +13,33 @@ namespace Microsoft.AspNetCore.SignalR.Tests
private readonly ServerFixture _serverFixture; private readonly ServerFixture _serverFixture;
private readonly ILoggerFactory _loggerFactory; private readonly ILoggerFactory _loggerFactory;
private readonly IDisposable _wrappedDisposable; private readonly IDisposable _wrappedDisposable;
private readonly ConcurrentDictionary<string, ILogger> _loggers; private readonly ConcurrentDictionary<string, ILogger> _serverLoggers;
private readonly ILogger _scopeLogger;
public ServerLogScope(ServerFixture serverFixture, ILoggerFactory loggerFactory, IDisposable wrappedDisposable) public ServerLogScope(ServerFixture serverFixture, ILoggerFactory loggerFactory, IDisposable wrappedDisposable)
{ {
_serverFixture = serverFixture; _serverFixture = serverFixture;
_loggerFactory = loggerFactory; _loggerFactory = loggerFactory;
_wrappedDisposable = wrappedDisposable; _wrappedDisposable = wrappedDisposable;
_loggers = new ConcurrentDictionary<string, ILogger>(StringComparer.Ordinal); _scopeLogger = loggerFactory.CreateLogger(typeof(ServerLogScope));
_serverLoggers = new ConcurrentDictionary<string, ILogger>(StringComparer.Ordinal);
_serverFixture.ServerLogged += ServerFixtureOnServerLogged; _serverFixture.ServerLogged += ServerFixtureOnServerLogged;
_scopeLogger.LogInformation("Server log scope started.");
} }
private void ServerFixtureOnServerLogged(LogRecord logRecord) private void ServerFixtureOnServerLogged(LogRecord logRecord)
{ {
var logger = _loggers.GetOrAdd(logRecord.Write.LoggerName, loggerName => _loggerFactory.CreateLogger(loggerName)); // Create (or get) a logger with the same name as the server logger
var logger = _serverLoggers.GetOrAdd(logRecord.Write.LoggerName, loggerName => _loggerFactory.CreateLogger(loggerName));
logger.Log(logRecord.Write.LogLevel, logRecord.Write.EventId, logRecord.Write.State, logRecord.Write.Exception, logRecord.Write.Formatter); logger.Log(logRecord.Write.LogLevel, logRecord.Write.EventId, logRecord.Write.State, logRecord.Write.Exception, logRecord.Write.Formatter);
} }
public void Dispose() public void Dispose()
{ {
_scopeLogger.LogInformation("Server log scope disposing.");
_serverFixture.ServerLogged -= ServerFixtureOnServerLogged; _serverFixture.ServerLogged -= ServerFixtureOnServerLogged;
_wrappedDisposable?.Dispose(); _wrappedDisposable?.Dispose();

View File

@ -27,10 +27,11 @@ using HttpConnectionOptions = Microsoft.AspNetCore.Http.Connections.Client.HttpC
namespace Microsoft.AspNetCore.SignalR.Tests namespace Microsoft.AspNetCore.SignalR.Tests
{ {
[CollectionDefinition(Name)] // Disable running server tests in parallel so server logs can accurately be captured per test
[CollectionDefinition(Name, DisableParallelization = true)]
public class EndToEndTestsCollection : ICollectionFixture<ServerFixture<Startup>> public class EndToEndTestsCollection : ICollectionFixture<ServerFixture<Startup>>
{ {
public const string Name = "EndToEndTests"; public const string Name = nameof(EndToEndTestsCollection);
} }
[Collection(EndToEndTestsCollection.Name)] [Collection(EndToEndTestsCollection.Name)]