How about this?

This commit is contained in:
James Newton-King 2018-04-15 19:02:56 +12:00
parent 05739820d2
commit 585bcc3ee0
No known key found for this signature in database
GPG Key ID: 0A66B2F456BF5526
6 changed files with 33 additions and 17 deletions

View File

@ -30,7 +30,7 @@ namespace Microsoft.AspNetCore.SignalR.Client.FunctionalTests
} }
[Collection(HubConnectionTestsCollection.Name)] [Collection(HubConnectionTestsCollection.Name)]
public class HubConnectionTests : VerifiableServerLoggedTest<Startup> public class HubConnectionTests : VerifiableServerLoggedTest
{ {
private readonly ServerFixture<Startup> _serverFixture; private readonly ServerFixture<Startup> _serverFixture;
public HubConnectionTests(ServerFixture<Startup> serverFixture, ITestOutputHelper output) : base(serverFixture, output) public HubConnectionTests(ServerFixture<Startup> serverFixture, ITestOutputHelper output) : base(serverFixture, output)

View File

@ -18,7 +18,18 @@ using Microsoft.Extensions.Logging.Testing;
namespace Microsoft.AspNetCore.SignalR.Tests namespace Microsoft.AspNetCore.SignalR.Tests
{ {
public class ServerFixture<TStartup> : IDisposable public abstract class ServerFixture : IDisposable
{
internal abstract event Action<LogRecord> ServerLogged;
public abstract string WebSocketsUrl { get; }
public abstract string Url { get; }
public abstract void Dispose();
}
public class ServerFixture<TStartup> : ServerFixture
where TStartup : class where TStartup : class
{ {
private readonly ILoggerFactory _loggerFactory; private readonly ILoggerFactory _loggerFactory;
@ -28,16 +39,17 @@ namespace Microsoft.AspNetCore.SignalR.Tests
private readonly IDisposable _logToken; private readonly IDisposable _logToken;
private readonly LogSinkProvider _logSinkProvider; private readonly LogSinkProvider _logSinkProvider;
private string _url;
internal event Action<LogRecord> ServerLogged internal override event Action<LogRecord> ServerLogged
{ {
add => _logSinkProvider.RecordLogged += value; add => _logSinkProvider.RecordLogged += value;
remove => _logSinkProvider.RecordLogged -= value; remove => _logSinkProvider.RecordLogged -= value;
} }
public string WebSocketsUrl => Url.Replace("http", "ws"); public override string WebSocketsUrl => Url.Replace("http", "ws");
public string Url { get; private set; } public override string Url => _url;
public ServerFixture() : this(loggerFactory: null) public ServerFixture() : this(loggerFactory: null)
{ {
@ -98,7 +110,7 @@ namespace Microsoft.AspNetCore.SignalR.Tests
_logger.LogInformation("Test Server started"); _logger.LogInformation("Test Server started");
// Get the URL from the server // Get the URL from the server
Url = _host.ServerFeatures.Get<IServerAddressesFeature>().Addresses.Single(); _url = _host.ServerFeatures.Get<IServerAddressesFeature>().Addresses.Single();
_lifetime.ApplicationStopped.Register(() => _lifetime.ApplicationStopped.Register(() =>
{ {
@ -125,7 +137,7 @@ namespace Microsoft.AspNetCore.SignalR.Tests
return builder.ToString(); return builder.ToString();
} }
public void Dispose() public override void Dispose()
{ {
_logger.LogInformation("Shutting down test server"); _logger.LogInformation("Shutting down test server");
_host.Dispose(); _host.Dispose();

View File

@ -6,13 +6,13 @@ using Microsoft.Extensions.Logging;
namespace Microsoft.AspNetCore.SignalR.Tests namespace Microsoft.AspNetCore.SignalR.Tests
{ {
public class ServerLogScope<TStartup> : IDisposable where TStartup : class public class ServerLogScope : IDisposable
{ {
private readonly ServerFixture<TStartup> _serverFixture; private readonly ServerFixture _serverFixture;
private readonly IDisposable _wrappedDisposable; private readonly IDisposable _wrappedDisposable;
//private readonly ILogger _logger; //private readonly ILogger _logger;
public ServerLogScope(ServerFixture<TStartup> serverFixture, ILoggerFactory loggerFactory, IDisposable wrappedDisposable) public ServerLogScope(ServerFixture serverFixture, ILoggerFactory loggerFactory, IDisposable wrappedDisposable)
{ {
_serverFixture = serverFixture; _serverFixture = serverFixture;
_wrappedDisposable = wrappedDisposable; _wrappedDisposable = wrappedDisposable;

View File

@ -8,11 +8,11 @@ using Xunit.Abstractions;
namespace Microsoft.AspNetCore.SignalR.Tests namespace Microsoft.AspNetCore.SignalR.Tests
{ {
public class VerifiableServerLoggedTest<TStartup> : VerifiableLoggedTest where TStartup : class public class VerifiableServerLoggedTest : VerifiableLoggedTest
{ {
public ServerFixture<TStartup> ServerFixture { get; } public ServerFixture ServerFixture { get; }
public VerifiableServerLoggedTest(ServerFixture<TStartup> serverFixture, ITestOutputHelper output) : base(output) public VerifiableServerLoggedTest(ServerFixture serverFixture, ITestOutputHelper output) : base(output)
{ {
ServerFixture = serverFixture; ServerFixture = serverFixture;
} }
@ -20,13 +20,13 @@ namespace Microsoft.AspNetCore.SignalR.Tests
public override IDisposable StartVerifableLog(out ILoggerFactory loggerFactory, LogLevel minLogLevel, string testName = null, Func<WriteContext, bool> expectedErrorsFilter = null) public override IDisposable StartVerifableLog(out ILoggerFactory loggerFactory, LogLevel minLogLevel, string testName = null, Func<WriteContext, bool> expectedErrorsFilter = null)
{ {
var disposable = base.StartVerifableLog(out loggerFactory, minLogLevel, testName, expectedErrorsFilter); var disposable = base.StartVerifableLog(out loggerFactory, minLogLevel, testName, expectedErrorsFilter);
return new ServerLogScope<TStartup>(ServerFixture, loggerFactory, disposable); return new ServerLogScope(ServerFixture, loggerFactory, disposable);
} }
public override IDisposable StartVerifableLog(out ILoggerFactory loggerFactory, string testName = null, Func<WriteContext, bool> expectedErrorsFilter = null) public override IDisposable StartVerifableLog(out ILoggerFactory loggerFactory, string testName = null, Func<WriteContext, bool> expectedErrorsFilter = null)
{ {
var disposable = base.StartVerifableLog(out loggerFactory, testName, expectedErrorsFilter); var disposable = base.StartVerifableLog(out loggerFactory, testName, expectedErrorsFilter);
return new ServerLogScope<TStartup>(ServerFixture, loggerFactory, disposable); return new ServerLogScope(ServerFixture, loggerFactory, disposable);
} }
} }
} }

View File

@ -34,7 +34,7 @@ namespace Microsoft.AspNetCore.SignalR.Tests
} }
[Collection(EndToEndTestsCollection.Name)] [Collection(EndToEndTestsCollection.Name)]
public class EndToEndTests : VerifiableServerLoggedTest<Startup> public class EndToEndTests : VerifiableServerLoggedTest
{ {
private readonly ServerFixture<Startup> _serverFixture; private readonly ServerFixture<Startup> _serverFixture;
@ -44,6 +44,10 @@ namespace Microsoft.AspNetCore.SignalR.Tests
{ {
throw new ArgumentNullException(nameof(serverFixture)); throw new ArgumentNullException(nameof(serverFixture));
} }
if (output == null)
{
throw new ArgumentNullException(nameof(output));
}
_serverFixture = serverFixture; _serverFixture = serverFixture;
} }

View File

@ -22,7 +22,7 @@ using Xunit.Abstractions;
namespace Microsoft.AspNetCore.SignalR.Tests namespace Microsoft.AspNetCore.SignalR.Tests
{ {
[Collection(EndToEndTestsCollection.Name)] [Collection(EndToEndTestsCollection.Name)]
public class WebSocketsTransportTests : VerifiableServerLoggedTest<Startup> public class WebSocketsTransportTests : VerifiableServerLoggedTest
{ {
private readonly ServerFixture<Startup> _serverFixture; private readonly ServerFixture<Startup> _serverFixture;