diff --git a/KestrelHttpServer.sln b/KestrelHttpServer.sln index 2b528d0f1b..b5b6dc71f3 100644 --- a/KestrelHttpServer.sln +++ b/KestrelHttpServer.sln @@ -1,6 +1,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 -VisualStudioVersion = 15.0.26403.7 +VisualStudioVersion = 15.0.26510.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{7972A5D6-3385-4127-9277-428506DD44FF}" ProjectSection(SolutionItems) = preProject @@ -22,7 +22,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "shared", "shared", "{0EF2AC test\shared\DummyApplication.cs = test\shared\DummyApplication.cs test\shared\HttpClientSlim.cs = test\shared\HttpClientSlim.cs test\shared\HttpParsingData.cs = test\shared\HttpParsingData.cs - test\shared\KestrelTestLoggerFactory.cs = test\shared\KestrelTestLoggerFactory.cs + test\shared\KestrelTestLoggerProvider.cs = test\shared\KestrelTestLoggerProvider.cs test\shared\LifetimeNotImplemented.cs = test\shared\LifetimeNotImplemented.cs test\shared\MockConnectionInformation.cs = test\shared\MockConnectionInformation.cs test\shared\MockFrameControl.cs = test\shared\MockFrameControl.cs diff --git a/test/Microsoft.AspNetCore.Server.Kestrel.Core.Tests/KestrelServerTests.cs b/test/Microsoft.AspNetCore.Server.Kestrel.Core.Tests/KestrelServerTests.cs index 75ab8a3dbb..a61feba7bc 100644 --- a/test/Microsoft.AspNetCore.Server.Kestrel.Core.Tests/KestrelServerTests.cs +++ b/test/Microsoft.AspNetCore.Server.Kestrel.Core.Tests/KestrelServerTests.cs @@ -156,7 +156,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests private static KestrelServer CreateServer(KestrelServerOptions options, ILogger testLogger) { - return new KestrelServer(Options.Create(options), new MockTransportFactory(), new KestrelTestLoggerFactory(testLogger)); + return new KestrelServer(Options.Create(options), new MockTransportFactory(), new LoggerFactory(new [] { new KestrelTestLoggerProvider(testLogger)} )); } private static void StartDummyApplication(IServer server) diff --git a/test/Microsoft.AspNetCore.Server.Kestrel.Core.Tests/Microsoft.AspNetCore.Server.Kestrel.Core.Tests.csproj b/test/Microsoft.AspNetCore.Server.Kestrel.Core.Tests/Microsoft.AspNetCore.Server.Kestrel.Core.Tests.csproj index fb273003e7..fba2976f4e 100644 --- a/test/Microsoft.AspNetCore.Server.Kestrel.Core.Tests/Microsoft.AspNetCore.Server.Kestrel.Core.Tests.csproj +++ b/test/Microsoft.AspNetCore.Server.Kestrel.Core.Tests/Microsoft.AspNetCore.Server.Kestrel.Core.Tests.csproj @@ -26,6 +26,7 @@ + diff --git a/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/AddressRegistrationTests.cs b/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/AddressRegistrationTests.cs index 38ea0f1933..35a472a0db 100644 --- a/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/AddressRegistrationTests.cs +++ b/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/AddressRegistrationTests.cs @@ -19,6 +19,7 @@ using Microsoft.AspNetCore.Server.Kestrel.Core; using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure; using Microsoft.AspNetCore.Testing; using Microsoft.AspNetCore.Testing.xunit; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Xunit; @@ -31,9 +32,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests { private const int MaxRetries = 10; - private readonly ILoggerFactory _loggerFactory; + private readonly Action _configureLoggingDelegate; - public AddressRegistrationTests(ITestOutputHelper output) => _loggerFactory = new LoggerFactory().AddXunit(output); + public AddressRegistrationTests(ITestOutputHelper output) => _configureLoggingDelegate = builder => builder.AddXunit(output); [ConditionalFact] [NetworkIsReachable] @@ -161,7 +162,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests { var hostBuilder = new WebHostBuilder() .UseKestrel() - .UseLoggerFactory(_loggerFactory) + .ConfigureLogging(_configureLoggingDelegate) .UseUrls(addressInput) .Configure(ConfigureEchoAddress); @@ -220,7 +221,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests private async Task RegisterIPEndPoint_Success(IPEndPoint endPoint, string testUrl, int testPort = 0) { var hostBuilder = new WebHostBuilder() - .UseLoggerFactory(_loggerFactory) + .ConfigureLogging(_configureLoggingDelegate) .UseKestrel(options => { options.Listen(endPoint, listenOptions => @@ -301,9 +302,11 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests var testLogger = new TestApplicationErrorLogger(); var hostBuilder = new WebHostBuilder() - .UseLoggerFactory(_loggerFactory) + .ConfigureLogging(_configureLoggingDelegate) .UseKestrel() - .UseLoggerFactory(_ => new KestrelTestLoggerFactory(testLogger)) + .ConfigureLogging(builder => builder + .AddProvider(new KestrelTestLoggerProvider(testLogger)) + .SetMinimumLevel(LogLevel.Debug)) .Configure(ConfigureEchoAddress); using (var host = hostBuilder.Build()) @@ -331,7 +334,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests var port = ((IPEndPoint)socket.LocalEndPoint).Port; var hostBuilder = new WebHostBuilder() - .UseLoggerFactory(_loggerFactory) + .ConfigureLogging(_configureLoggingDelegate) .UseKestrel() .UseUrls($"http://127.0.0.1:{port}") .Configure(ConfigureEchoAddress); @@ -354,7 +357,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests var port = ((IPEndPoint)socket.LocalEndPoint).Port; var hostBuilder = new WebHostBuilder() - .UseLoggerFactory(_loggerFactory) + .ConfigureLogging(_configureLoggingDelegate) .UseKestrel() .UseUrls($"http://[::1]:{port}") .Configure(ConfigureEchoAddress); @@ -382,7 +385,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests }) .UseUrls(useUrlsAddress) .PreferHostingUrls(true) - .UseLoggerFactory(_ => new KestrelTestLoggerFactory(testLogger)) + .ConfigureLogging(builder => builder.AddProvider(new KestrelTestLoggerProvider(testLogger))) .Configure(ConfigureEchoAddress); using (var host = hostBuilder.Build()) @@ -412,7 +415,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests var useUrlsAddress = $"http://127.0.0.1:0"; var testLogger = new TestApplicationErrorLogger(); var hostBuilder = new WebHostBuilder() - .UseLoggerFactory(_loggerFactory) + .ConfigureLogging(_configureLoggingDelegate) .UseKestrel(options => { options.Listen(new IPEndPoint(IPAddress.Loopback, 0), listenOptions => @@ -422,7 +425,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests }) .UseUrls($"http://127.0.0.1:0") .PreferHostingUrls(false) - .UseLoggerFactory(_ => new KestrelTestLoggerFactory(testLogger)) + .ConfigureLogging(builder => builder.AddProvider(new KestrelTestLoggerProvider(testLogger))) .Configure(ConfigureEchoAddress); using (var host = hostBuilder.Build()) @@ -450,7 +453,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests public async Task DoesNotOverrideDirectConfigurationWithIServerAddressesFeature_IfAddressesEmpty() { var hostBuilder = new WebHostBuilder() - .UseLoggerFactory(_loggerFactory) + .ConfigureLogging(_configureLoggingDelegate) .UseKestrel(options => { options.Listen(new IPEndPoint(IPAddress.Loopback, 0), listenOptions => @@ -528,7 +531,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests var port = ((IPEndPoint)socket.LocalEndPoint).Port; var hostBuilder = new WebHostBuilder() - .UseLoggerFactory(_loggerFactory) + .ConfigureLogging(_configureLoggingDelegate) .UseKestrel() .UseUrls($"http://localhost:{port}") .Configure(ConfigureEchoAddress); diff --git a/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/FrameConnectionManagerTests.cs b/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/FrameConnectionManagerTests.cs index ac71db8730..0e71450a5e 100644 --- a/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/FrameConnectionManagerTests.cs +++ b/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/FrameConnectionManagerTests.cs @@ -8,6 +8,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure; using Microsoft.AspNetCore.Testing; using Microsoft.AspNetCore.Testing.xunit; +using Microsoft.Extensions.Logging; using Moq; using Xunit; @@ -42,7 +43,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests var tcs = new TaskCompletionSource(); return tcs.Task; }, - new TestServiceContext(new KestrelTestLoggerFactory(), mockTrace.Object))) + new TestServiceContext(new LoggerFactory(), mockTrace.Object))) { using (var connection = server.CreateConnection()) { diff --git a/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/HttpsTests.cs b/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/HttpsTests.cs index 01987f3464..fcb67652cc 100644 --- a/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/HttpsTests.cs +++ b/test/Microsoft.AspNetCore.Server.Kestrel.FunctionalTests/HttpsTests.cs @@ -11,6 +11,7 @@ using System.Security.Cryptography.X509Certificates; using System.Text; using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.DependencyInjection; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Server.Kestrel.Https; @@ -26,7 +27,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests [Fact] public async Task EmptyRequestLoggedAsInformation() { - var loggerFactory = new HandshakeErrorLoggerFactory(); + var loggerProvider = new HandshakeErrorLoggerProvider(); var hostBuilder = new WebHostBuilder() .UseKestrel(options => @@ -36,7 +37,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests listenOptions.UseHttps(TestResources.TestCertificatePath, "testPassword"); }); }) - .UseLoggerFactory(loggerFactory) + .ConfigureLogging(builder => builder.AddProvider(loggerProvider)) .Configure(app => { }); using (var host = hostBuilder.Build()) @@ -48,19 +49,19 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests // Close socket immediately } - await loggerFactory.FilterLogger.LogTcs.Task.TimeoutAfter(TimeSpan.FromSeconds(10)); + await loggerProvider.FilterLogger.LogTcs.Task.TimeoutAfter(TimeSpan.FromSeconds(10)); } - Assert.Equal(1, loggerFactory.FilterLogger.LastEventId.Id); - Assert.Equal(LogLevel.Information, loggerFactory.FilterLogger.LastLogLevel); - Assert.True(loggerFactory.ErrorLogger.TotalErrorsLogged == 0, - userMessage: string.Join(Environment.NewLine, loggerFactory.ErrorLogger.ErrorMessages)); + Assert.Equal(1, loggerProvider.FilterLogger.LastEventId.Id); + Assert.Equal(LogLevel.Information, loggerProvider.FilterLogger.LastLogLevel); + Assert.True(loggerProvider.ErrorLogger.TotalErrorsLogged == 0, + userMessage: string.Join(Environment.NewLine, loggerProvider.ErrorLogger.ErrorMessages)); } [Fact] public async Task ClientHandshakeFailureLoggedAsInformation() { - var loggerFactory = new HandshakeErrorLoggerFactory(); + var loggerProvider = new HandshakeErrorLoggerProvider(); var hostBuilder = new WebHostBuilder() .UseKestrel(options => @@ -70,7 +71,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests listenOptions.UseHttps(TestResources.TestCertificatePath, "testPassword"); }); }) - .UseLoggerFactory(loggerFactory) + .ConfigureLogging(builder => builder.AddProvider(loggerProvider)) .Configure(app => { }); using (var host = hostBuilder.Build()) @@ -84,20 +85,20 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests await stream.WriteAsync(new byte[10], 0, 10); } - await loggerFactory.FilterLogger.LogTcs.Task.TimeoutAfter(TimeSpan.FromSeconds(10)); + await loggerProvider.FilterLogger.LogTcs.Task.TimeoutAfter(TimeSpan.FromSeconds(10)); } - Assert.Equal(1, loggerFactory.FilterLogger.LastEventId.Id); - Assert.Equal(LogLevel.Information, loggerFactory.FilterLogger.LastLogLevel); - Assert.True(loggerFactory.ErrorLogger.TotalErrorsLogged == 0, - userMessage: string.Join(Environment.NewLine, loggerFactory.ErrorLogger.ErrorMessages)); + Assert.Equal(1, loggerProvider.FilterLogger.LastEventId.Id); + Assert.Equal(LogLevel.Information, loggerProvider.FilterLogger.LastLogLevel); + Assert.True(loggerProvider.ErrorLogger.TotalErrorsLogged == 0, + userMessage: string.Join(Environment.NewLine, loggerProvider.ErrorLogger.ErrorMessages)); } // Regression test for https://github.com/aspnet/KestrelHttpServer/issues/1103#issuecomment-246971172 [Fact] public async Task DoesNotThrowObjectDisposedExceptionOnConnectionAbort() { - var loggerFactory = new HandshakeErrorLoggerFactory(); + var loggerProvider = new HandshakeErrorLoggerProvider(); var hostBuilder = new WebHostBuilder() .UseKestrel(options => { @@ -106,7 +107,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests listenOptions.UseHttps(TestResources.TestCertificatePath, "testPassword"); }); }) - .UseLoggerFactory(loggerFactory) + .ConfigureLogging(builder => builder.AddProvider(loggerProvider)) .Configure(app => app.Run(async httpContext => { var ct = httpContext.RequestAborted; @@ -142,14 +143,14 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests } } - Assert.False(loggerFactory.ErrorLogger.ObjectDisposedExceptionLogged); + Assert.False(loggerProvider.ErrorLogger.ObjectDisposedExceptionLogged); } [Fact] public async Task DoesNotThrowObjectDisposedExceptionFromWriteAsyncAfterConnectionIsAborted() { var tcs = new TaskCompletionSource(); - var loggerFactory = new HandshakeErrorLoggerFactory(); + var loggerProvider = new HandshakeErrorLoggerProvider(); var hostBuilder = new WebHostBuilder() .UseKestrel(options => { @@ -158,7 +159,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests listenOptions.UseHttps(TestResources.TestCertificatePath, "testPassword"); }); }) - .UseLoggerFactory(loggerFactory) + .ConfigureLogging(builder => builder.AddProvider(loggerProvider)) .Configure(app => app.Run(async httpContext => { httpContext.Abort(); @@ -198,7 +199,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests [Fact] public async Task DoesNotThrowObjectDisposedExceptionOnEmptyConnection() { - var loggerFactory = new HandshakeErrorLoggerFactory(); + var loggerProvider = new HandshakeErrorLoggerProvider(); var hostBuilder = new WebHostBuilder() .UseKestrel(options => { @@ -207,7 +208,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests listenOptions.UseHttps(TestResources.TestCertificatePath, "testPassword"); }); }) - .UseLoggerFactory(loggerFactory) + .ConfigureLogging(builder => builder.AddProvider(loggerProvider)) .Configure(app => app.Run(httpContext => Task.CompletedTask)); using (var host = hostBuilder.Build()) @@ -224,14 +225,14 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests } } - Assert.False(loggerFactory.ErrorLogger.ObjectDisposedExceptionLogged); + Assert.False(loggerProvider.ErrorLogger.ObjectDisposedExceptionLogged); } // Regression test for https://github.com/aspnet/KestrelHttpServer/pull/1197 [Fact] public void ConnectionFilterDoesNotLeakBlock() { - var loggerFactory = new HandshakeErrorLoggerFactory(); + var loggerProvider = new HandshakeErrorLoggerProvider(); var hostBuilder = new WebHostBuilder() .UseKestrel(options => @@ -241,7 +242,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests listenOptions.UseHttps(TestResources.TestCertificatePath, "testPassword"); }); }) - .UseLoggerFactory(loggerFactory) + .ConfigureLogging(builder => builder.AddProvider(loggerProvider)) .Configure(app => { }); using (var host = hostBuilder.Build()) @@ -258,7 +259,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests } } - private class HandshakeErrorLoggerFactory : ILoggerFactory + private class HandshakeErrorLoggerProvider : ILoggerProvider { public HttpsConnectionFilterLogger FilterLogger { get; } = new HttpsConnectionFilterLogger(); public ApplicationErrorLogger ErrorLogger { get; } = new ApplicationErrorLogger(); @@ -275,11 +276,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests } } - public void AddProvider(ILoggerProvider provider) - { - throw new NotImplementedException(); - } - public void Dispose() { } diff --git a/test/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Tests/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Tests.csproj b/test/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Tests/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Tests.csproj index 9fd8124c11..d6e8bf6ba9 100644 --- a/test/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Tests/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Tests.csproj +++ b/test/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Tests/Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Tests.csproj @@ -27,6 +27,7 @@ + diff --git a/test/shared/KestrelTestLoggerFactory.cs b/test/shared/KestrelTestLoggerProvider.cs similarity index 69% rename from test/shared/KestrelTestLoggerFactory.cs rename to test/shared/KestrelTestLoggerProvider.cs index 80a94b0d1a..45462791d1 100644 --- a/test/shared/KestrelTestLoggerFactory.cs +++ b/test/shared/KestrelTestLoggerProvider.cs @@ -6,16 +6,16 @@ using Microsoft.Extensions.Logging; namespace Microsoft.AspNetCore.Testing { - public class KestrelTestLoggerFactory : ILoggerFactory + public class KestrelTestLoggerProvider : ILoggerProvider { private readonly ILogger _testLogger; - public KestrelTestLoggerFactory() + public KestrelTestLoggerProvider() : this(new TestApplicationErrorLogger()) { } - public KestrelTestLoggerFactory(ILogger testLogger) + public KestrelTestLoggerProvider(ILogger testLogger) { _testLogger = testLogger; } @@ -25,11 +25,6 @@ namespace Microsoft.AspNetCore.Testing return _testLogger; } - public void AddProvider(ILoggerProvider provider) - { - throw new NotImplementedException(); - } - public void Dispose() { throw new NotImplementedException(); diff --git a/test/shared/TestServiceContext.cs b/test/shared/TestServiceContext.cs index 9d59a66d44..5f4b572047 100644 --- a/test/shared/TestServiceContext.cs +++ b/test/shared/TestServiceContext.cs @@ -12,7 +12,7 @@ namespace Microsoft.AspNetCore.Testing public class TestServiceContext : ServiceContext { public TestServiceContext() - : this(new KestrelTestLoggerFactory()) + : this(new LoggerFactory(new[] { new KestrelTestLoggerProvider() })) { }