diff --git a/README.md b/README.md
index 7f2532761b..85a0a73610 100644
--- a/README.md
+++ b/README.md
@@ -17,6 +17,10 @@ This project is part of ASP.NET Core. You can find samples, documentation and ge
To run a complete build on command line only, execute `build.cmd` or `build.sh` without arguments. See [developer documentation](https://github.com/aspnet/Home/wiki) for more details.
+## File logging for functional test
+
+Turn on file logging for Kestrel functional tests by specifying the environment variable ASPNETCORE_TEST_LOG_DIR to the log output directory.
+
## Packages
Kestrel is available as a NuGet package.
diff --git a/build/dependencies.props b/build/dependencies.props
index ace613e29c..2a1dc23c3b 100644
--- a/build/dependencies.props
+++ b/build/dependencies.props
@@ -7,41 +7,41 @@
0.10.13
2.1.0-preview3-17002
1.10.0
- 2.1.0-preview3-32110
- 2.1.0-preview3-32110
- 2.1.0-preview3-32110
- 2.1.0-preview3-32110
- 2.1.0-preview3-32110
- 2.1.0-preview3-32110
- 2.1.0-preview3-32110
- 2.1.0-preview3-32110
- 2.1.0-preview3-32110
- 2.1.0-preview3-32110
- 2.1.0-preview3-32110
- 2.1.0-preview3-32110
- 2.1.0-preview3-32110
- 2.1.0-preview3-32110
- 2.1.0-preview3-32037
- 2.1.0-preview3-32110
- 2.1.0-preview3-32110
- 2.1.0-preview3-32110
- 2.1.0-preview3-32110
- 2.1.0-preview3-32110
- 2.1.0-preview3-32110
- 2.1.0-preview3-32110
+ 2.1.0-preview3-32196
+ 2.1.0-preview3-32196
+ 2.1.0-preview3-32196
+ 2.1.0-a-preview3-file-logger-16960
+ 2.1.0-a-preview3-file-logger-16960
+ 2.1.0-preview3-32196
+ 2.1.0-preview3-32196
+ 2.1.0-preview3-32196
+ 2.1.0-preview3-32196
+ 2.1.0-preview3-32196
+ 2.1.0-preview3-32196
+ 2.1.0-preview3-32196
+ 2.1.0-preview3-32196
+ 2.1.0-preview3-32196
+ 2.1.0-preview3-32196
+ 2.1.0-preview3-32196
+ 2.1.0-preview3-32196
+ 2.1.0-a-preview3-file-logger-16474
+ 2.1.0-a-preview3-file-logger-16474
+ 2.1.0-a-preview3-file-logger-16474
+ 2.1.0-a-preview3-file-logger-16474
+ 2.1.0-preview3-32196
2.0.0
- 2.1.0-preview3-26331-01
- 2.1.0-preview3-32110
+ 2.1.0-preview2-26406-04
+ 2.1.0-preview3-32196
15.6.1
4.7.49
11.0.2
- 4.5.0-preview3-26331-02
- 4.5.0-preview3-26331-02
- 4.5.0-preview3-26331-02
- 4.5.0-preview3-26331-02
- 4.5.0-preview3-26331-02
- 4.5.0-preview3-26331-02
- 4.5.0-preview3-26331-02
+ 4.5.0-preview2-26406-04
+ 4.5.0-preview2-26406-04
+ 4.5.0-preview2-26406-04
+ 4.5.0-preview2-26406-04
+ 4.5.0-preview2-26406-04
+ 4.5.0-preview2-26406-04
+ 4.5.0-preview2-26406-04
1.3.7
0.8.0
2.3.1
diff --git a/src/Kestrel.Core/Properties/AssemblyInfo.cs b/src/Kestrel.Core/Properties/AssemblyInfo.cs
index 793159eefb..27495d5268 100644
--- a/src/Kestrel.Core/Properties/AssemblyInfo.cs
+++ b/src/Kestrel.Core/Properties/AssemblyInfo.cs
@@ -4,8 +4,8 @@
using System.Runtime.CompilerServices;
[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Server.Kestrel.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.FunctionalTests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
-[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.FunctionalTests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
+[assembly: InternalsVisibleTo("Libuv.FunctionalTests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
+[assembly: InternalsVisibleTo("Sockets.FunctionalTests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Server.Kestrel.Core.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
[assembly: InternalsVisibleTo("Kestrel.Performance, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
[assembly: InternalsVisibleTo("Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
diff --git a/test/Kestrel.FunctionalTests/AddressRegistrationTests.cs b/test/Kestrel.FunctionalTests/AddressRegistrationTests.cs
index b550c852c7..3843c6c532 100644
--- a/test/Kestrel.FunctionalTests/AddressRegistrationTests.cs
+++ b/test/Kestrel.FunctionalTests/AddressRegistrationTests.cs
@@ -23,22 +23,14 @@ using Microsoft.AspNetCore.Testing.xunit;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Xunit;
-using Xunit.Abstractions;
using Xunit.Sdk;
namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
{
- public class AddressRegistrationTests
+ public class AddressRegistrationTests : TestApplicationErrorLoggerLoggedTest
{
private const int MaxRetries = 10;
- private readonly Action _configureLoggingDelegate;
-
- public AddressRegistrationTests(ITestOutputHelper output)
- {
- _configureLoggingDelegate = builder => builder.AddXunit(output);
- }
-
[ConditionalFact]
[HostNameIsReachable]
public async Task RegisterAddresses_HostName_Success()
@@ -165,7 +157,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
{
var hostBuilder = TransportSelector.GetWebHostBuilder()
.UseKestrel()
- .ConfigureLogging(_configureLoggingDelegate)
+ .ConfigureServices(AddTestLogging)
.UseUrls(addressInput)
.Configure(ConfigureEchoAddress);
@@ -201,7 +193,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
listenOptions.UseHttps(TestResources.GetTestCertificate());
});
})
- .ConfigureLogging(_configureLoggingDelegate)
+ .ConfigureServices(AddTestLogging)
.UseUrls("http://127.0.0.1:0")
.Configure(app =>
{
@@ -261,7 +253,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
private async Task RegisterIPEndPoint_Success(IPEndPoint endPoint, string testUrl, int testPort = 0)
{
var hostBuilder = TransportSelector.GetWebHostBuilder()
- .ConfigureLogging(_configureLoggingDelegate)
+ .ConfigureServices(AddTestLogging)
.UseKestrel(options =>
{
options.Listen(endPoint, listenOptions =>
@@ -322,7 +314,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
{
options.ListenAnyIP(testPort);
})
- .ConfigureLogging(_configureLoggingDelegate)
+ .ConfigureServices(AddTestLogging)
.Configure(ConfigureEchoAddress);
using (var host = hostBuilder.Build())
@@ -363,7 +355,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
{
options.ListenLocalhost(testPort);
})
- .ConfigureLogging(_configureLoggingDelegate)
+ .ConfigureServices(AddTestLogging)
.Configure(ConfigureEchoAddress);
using (var host = hostBuilder.Build())
@@ -419,10 +411,8 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
private async Task RegisterDefaultServerAddresses_Success(IEnumerable addresses, bool mockHttps = false)
{
- var testLogger = new TestApplicationErrorLogger();
-
var hostBuilder = TransportSelector.GetWebHostBuilder()
- .ConfigureLogging(_configureLoggingDelegate)
+ .ConfigureServices(AddTestLogging)
.UseKestrel(options =>
{
if (mockHttps)
@@ -430,9 +420,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
options.DefaultCertificate = new X509Certificate2(TestResources.TestCertificatePath, "testPassword");
}
})
- .ConfigureLogging(builder => builder
- .AddProvider(new KestrelTestLoggerProvider(testLogger))
- .SetMinimumLevel(LogLevel.Debug))
.Configure(ConfigureEchoAddress);
using (var host = hostBuilder.Build())
@@ -446,7 +433,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
Assert.Contains(5001, host.GetPorts());
}
- Assert.Single(testLogger.Messages, log => log.LogLevel == LogLevel.Debug &&
+ Assert.Single(TestApplicationErrorLogger.Messages, log => log.LogLevel == LogLevel.Debug &&
(string.Equals(CoreStrings.FormatBindingToDefaultAddresses(Constants.DefaultServerAddress, Constants.DefaultServerHttpsAddress), log.Message, StringComparison.Ordinal)
|| string.Equals(CoreStrings.FormatBindingToDefaultAddress(Constants.DefaultServerAddress), log.Message, StringComparison.Ordinal)));
@@ -467,7 +454,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
var port = ((IPEndPoint)socket.LocalEndPoint).Port;
var hostBuilder = TransportSelector.GetWebHostBuilder()
- .ConfigureLogging(_configureLoggingDelegate)
.UseKestrel()
.UseUrls($"http://127.0.0.1:{port}")
.Configure(ConfigureEchoAddress);
@@ -484,6 +470,8 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
[IPv6SupportedCondition]
public void ThrowsWhenBindingToIPv6AddressInUse()
{
+ TestApplicationErrorLogger.IgnoredExceptions.Add(typeof(IOException));
+
using (var socket = new Socket(AddressFamily.InterNetworkV6, SocketType.Stream, ProtocolType.Tcp))
{
socket.Bind(new IPEndPoint(IPAddress.IPv6Loopback, 0));
@@ -491,7 +479,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
var port = ((IPEndPoint)socket.LocalEndPoint).Port;
var hostBuilder = TransportSelector.GetWebHostBuilder()
- .ConfigureLogging(_configureLoggingDelegate)
+ .ConfigureServices(AddTestLogging)
.UseKestrel()
.UseUrls($"http://[::1]:{port}")
.Configure(ConfigureEchoAddress);
@@ -508,7 +496,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
public async Task OverrideDirectConfigurationWithIServerAddressesFeature_Succeeds()
{
var useUrlsAddress = $"http://127.0.0.1:0";
- var testLogger = new TestApplicationErrorLogger();
var hostBuilder = TransportSelector.GetWebHostBuilder()
.UseKestrel(options =>
{
@@ -519,7 +506,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
})
.UseUrls(useUrlsAddress)
.PreferHostingUrls(true)
- .ConfigureLogging(builder => builder.AddProvider(new KestrelTestLoggerProvider(testLogger)))
+ .ConfigureServices(AddTestLogging)
.Configure(ConfigureEchoAddress);
using (var host = hostBuilder.Build())
@@ -535,7 +522,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
var useUrlsAddressWithPort = $"http://127.0.0.1:{port}";
Assert.Equal(serverAddresses.First(), useUrlsAddressWithPort);
- Assert.Single(testLogger.Messages, log => log.LogLevel == LogLevel.Information &&
+ Assert.Single(TestApplicationErrorLogger.Messages, log => log.LogLevel == LogLevel.Information &&
string.Equals(CoreStrings.FormatOverridingWithPreferHostingUrls(nameof(IServerAddressesFeature.PreferHostingUrls), useUrlsAddress),
log.Message, StringComparison.Ordinal));
@@ -547,9 +534,9 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
public async Task DoesNotOverrideDirectConfigurationWithIServerAddressesFeature_IfPreferHostingUrlsFalse()
{
var useUrlsAddress = $"http://127.0.0.1:0";
- var testLogger = new TestApplicationErrorLogger();
+
var hostBuilder = TransportSelector.GetWebHostBuilder()
- .ConfigureLogging(_configureLoggingDelegate)
+ .ConfigureServices(AddTestLogging)
.UseKestrel(options =>
{
options.Listen(new IPEndPoint(IPAddress.Loopback, 0), listenOptions =>
@@ -559,7 +546,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
})
.UseUrls($"http://127.0.0.1:0")
.PreferHostingUrls(false)
- .ConfigureLogging(builder => builder.AddProvider(new KestrelTestLoggerProvider(testLogger)))
.Configure(ConfigureEchoAddress);
using (var host = hostBuilder.Build())
@@ -575,7 +561,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
var endPointAddress = $"https://127.0.0.1:{port}";
Assert.Equal(serverAddresses.First(), endPointAddress);
- Assert.Single(testLogger.Messages, log => log.LogLevel == LogLevel.Warning &&
+ Assert.Single(TestApplicationErrorLogger.Messages, log => log.LogLevel == LogLevel.Warning &&
string.Equals(CoreStrings.FormatOverridingWithKestrelOptions(useUrlsAddress, "UseKestrel()"),
log.Message, StringComparison.Ordinal));
@@ -587,7 +573,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
public async Task DoesNotOverrideDirectConfigurationWithIServerAddressesFeature_IfAddressesEmpty()
{
var hostBuilder = TransportSelector.GetWebHostBuilder()
- .ConfigureLogging(_configureLoggingDelegate)
+ .ConfigureServices(AddTestLogging)
.UseKestrel(options =>
{
options.Listen(new IPEndPoint(IPAddress.Loopback, 0), listenOptions =>
@@ -630,7 +616,10 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
[Fact]
public void ThrowsWhenBindingLocalhostToDynamicPort()
{
+ TestApplicationErrorLogger.IgnoredExceptions.Add(typeof(InvalidOperationException));
+
var hostBuilder = TransportSelector.GetWebHostBuilder()
+ .ConfigureServices(AddTestLogging)
.UseKestrel()
.UseUrls("http://localhost:0")
.Configure(ConfigureEchoAddress);
@@ -646,7 +635,10 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
[InlineData("ssh://localhost")]
public void ThrowsForUnsupportedAddressFromHosting(string addr)
{
+ TestApplicationErrorLogger.IgnoredExceptions.Add(typeof(InvalidOperationException));
+
var hostBuilder = TransportSelector.GetWebHostBuilder()
+ .ConfigureServices(AddTestLogging)
.UseKestrel()
.UseUrls(addr)
.Configure(ConfigureEchoAddress);
@@ -664,7 +656,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
var endPointAddress = $"http://127.0.0.1:{port}/";
var hostBuilder = TransportSelector.GetWebHostBuilder()
- .ConfigureLogging(_configureLoggingDelegate)
+ .ConfigureServices(AddTestLogging)
.UseKestrel(options =>
{
options.Listen(IPAddress.Loopback, port);
@@ -679,7 +671,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
}
hostBuilder = TransportSelector.GetWebHostBuilder()
- .ConfigureLogging(_configureLoggingDelegate)
.UseKestrel(options =>
{
options.Listen(IPAddress.Loopback, port);
@@ -703,7 +694,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
var ipv6endPointAddress = $"http://[::1]:{port}/";
var hostBuilder = TransportSelector.GetWebHostBuilder()
- .ConfigureLogging(_configureLoggingDelegate)
+ .ConfigureServices(AddTestLogging)
.UseKestrel(options =>
{
options.Listen(IPAddress.Loopback, port);
@@ -720,7 +711,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
}
hostBuilder = TransportSelector.GetWebHostBuilder()
- .ConfigureLogging(_configureLoggingDelegate)
.UseKestrel(options =>
{
options.Listen(IPAddress.Loopback, port);
@@ -739,6 +729,8 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
private void ThrowsWhenBindingLocalhostToAddressInUse(AddressFamily addressFamily)
{
+ TestApplicationErrorLogger.IgnoredExceptions.Add(typeof(IOException));
+
var addressInUseCount = 0;
var wrongMessageCount = 0;
@@ -771,7 +763,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
}
var hostBuilder = TransportSelector.GetWebHostBuilder()
- .ConfigureLogging(_configureLoggingDelegate)
+ .ConfigureServices(AddTestLogging)
.UseKestrel()
.UseUrls($"http://localhost:{port}")
.Configure(ConfigureEchoAddress);
diff --git a/test/Kestrel.FunctionalTests/BadHttpRequestTests.cs b/test/Kestrel.FunctionalTests/BadHttpRequestTests.cs
index d01f81b347..2954b3f7c2 100644
--- a/test/Kestrel.FunctionalTests/BadHttpRequestTests.cs
+++ b/test/Kestrel.FunctionalTests/BadHttpRequestTests.cs
@@ -15,7 +15,7 @@ using Xunit;
namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
{
- public class BadHttpRequestTests
+ public class BadHttpRequestTests : LoggedTest
{
[Theory]
[MemberData(nameof(InvalidRequestLineData))]
@@ -153,13 +153,10 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
[Fact]
public async Task BadRequestLogsAreNotHigherThanInformation()
{
- var sink = new TestSink();
- var logger = new TestLogger("TestLogger", sink, enabled: true);
-
using (var server = new TestServer(async context =>
{
await context.Request.Body.ReadAsync(new byte[1], 0, 1);
- }, new TestServiceContext { Log = new KestrelTrace(logger) }))
+ }, new TestServiceContext(LoggerFactory)))
{
using (var connection = new TestConnection(server.Port))
{
@@ -171,14 +168,14 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
}
}
- Assert.All(sink.Writes, w => Assert.InRange(w.LogLevel, LogLevel.Trace, LogLevel.Information));
- Assert.Contains(sink.Writes, w => w.EventId.Id == 17 && w.LogLevel == LogLevel.Information);
+ Assert.All(TestSink.Writes, w => Assert.InRange(w.LogLevel, LogLevel.Trace, LogLevel.Information));
+ Assert.Contains(TestSink.Writes, w => w.EventId.Id == 17 && w.LogLevel == LogLevel.Information);
}
[Fact]
public async Task TestRequestSplitting()
{
- using (var server = new TestServer(context => Task.CompletedTask, new TestServiceContext { Log = Mock.Of() }))
+ using (var server = new TestServer(context => Task.CompletedTask, new TestServiceContext(LoggerFactory, Mock.Of())))
{
using (var client = server.CreateConnection())
{
@@ -202,7 +199,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
.Setup(trace => trace.ConnectionBadRequest(It.IsAny(), It.IsAny()))
.Callback((connectionId, exception) => loggedException = exception);
- using (var server = new TestServer(context => Task.CompletedTask, new TestServiceContext { Log = mockKestrelTrace.Object }))
+ using (var server = new TestServer(context => Task.CompletedTask, new TestServiceContext(LoggerFactory, mockKestrelTrace.Object)))
{
using (var connection = server.CreateConnection())
{
diff --git a/test/Kestrel.FunctionalTests/CertificateLoaderTests.cs b/test/Kestrel.FunctionalTests/CertificateLoaderTests.cs
index 21ad9704ed..86cbaa288d 100644
--- a/test/Kestrel.FunctionalTests/CertificateLoaderTests.cs
+++ b/test/Kestrel.FunctionalTests/CertificateLoaderTests.cs
@@ -5,26 +5,19 @@ using System.Linq;
using System.Security.Cryptography.X509Certificates;
using Microsoft.AspNetCore.Server.Kestrel.Https.Internal;
using Microsoft.AspNetCore.Testing;
+using Microsoft.Extensions.Logging.Testing;
using Xunit;
-using Xunit.Abstractions;
namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
{
- public class CertificateLoaderTests
+ public class CertificateLoaderTests : LoggedTest
{
- private readonly ITestOutputHelper _output;
-
- public CertificateLoaderTests(ITestOutputHelper output)
- {
- _output = output;
- }
-
[Theory]
[InlineData("no_extensions.pfx")]
public void IsCertificateAllowedForServerAuth_AllowWithNoExtensions(string testCertName)
{
var certPath = TestResources.GetCertPath(testCertName);
- _output.WriteLine("Loading " + certPath);
+ TestOutputHelper.WriteLine("Loading " + certPath);
var cert = new X509Certificate2(certPath, "testPassword");
Assert.Empty(cert.Extensions.OfType());
@@ -37,7 +30,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
public void IsCertificateAllowedForServerAuth_ValidatesEnhancedKeyUsageOnCertificate(string testCertName)
{
var certPath = TestResources.GetCertPath(testCertName);
- _output.WriteLine("Loading " + certPath);
+ TestOutputHelper.WriteLine("Loading " + certPath);
var cert = new X509Certificate2(certPath, "testPassword");
Assert.NotEmpty(cert.Extensions);
var eku = Assert.Single(cert.Extensions.OfType());
@@ -52,7 +45,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
public void IsCertificateAllowedForServerAuth_RejectsCertificatesMissingServerEku(string testCertName)
{
var certPath = TestResources.GetCertPath(testCertName);
- _output.WriteLine("Loading " + certPath);
+ TestOutputHelper.WriteLine("Loading " + certPath);
var cert = new X509Certificate2(certPath, "testPassword");
Assert.NotEmpty(cert.Extensions);
var eku = Assert.Single(cert.Extensions.OfType());
diff --git a/test/Kestrel.FunctionalTests/ChunkedRequestTests.cs b/test/Kestrel.FunctionalTests/ChunkedRequestTests.cs
index 380f199768..8dba8331e1 100644
--- a/test/Kestrel.FunctionalTests/ChunkedRequestTests.cs
+++ b/test/Kestrel.FunctionalTests/ChunkedRequestTests.cs
@@ -10,11 +10,12 @@ using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Server.Kestrel.Core;
using Microsoft.AspNetCore.Testing;
+using Microsoft.Extensions.Logging.Testing;
using Xunit;
namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
{
- public class ChunkedRequestTests
+ public class ChunkedRequestTests : LoggedTest
{
public static TheoryData ConnectionAdapterData => new TheoryData
{
@@ -57,7 +58,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
[MemberData(nameof(ConnectionAdapterData))]
public async Task Http10TransferEncoding(ListenOptions listenOptions)
{
- var testContext = new TestServiceContext();
+ var testContext = new TestServiceContext(LoggerFactory);
using (var server = new TestServer(App, testContext, listenOptions))
{
@@ -87,7 +88,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
[MemberData(nameof(ConnectionAdapterData))]
public async Task Http10KeepAliveTransferEncoding(ListenOptions listenOptions)
{
- var testContext = new TestServiceContext();
+ var testContext = new TestServiceContext(LoggerFactory);
using (var server = new TestServer(AppChunked, testContext, listenOptions))
{
@@ -129,7 +130,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
[MemberData(nameof(ConnectionAdapterData))]
public async Task RequestBodyIsConsumedAutomaticallyIfAppDoesntConsumeItFully(ListenOptions listenOptions)
{
- var testContext = new TestServiceContext();
+ var testContext = new TestServiceContext(LoggerFactory);
using (var server = new TestServer(async httpContext =>
{
@@ -213,7 +214,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
response.Headers["Content-Length"] = new[] { "11" };
await response.Body.WriteAsync(Encoding.ASCII.GetBytes("Hello World"), 0, 11);
- }, new TestServiceContext(), listenOptions))
+ }, new TestServiceContext(LoggerFactory), listenOptions))
{
var response = string.Join("\r\n", new string[] {
"HTTP/1.1 200 OK",
@@ -274,7 +275,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
const string headerLine = "Header: value";
const string trailingHeaderLine = "Trailing-Header: trailing-value";
- var testContext = new TestServiceContext();
+ var testContext = new TestServiceContext(LoggerFactory);
testContext.ServerOptions.Limits.MaxRequestHeadersTotalSize =
transferEncodingHeaderLine.Length + 2 +
headerLine.Length + 2 +
@@ -319,7 +320,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
const string headerLine = "Header: value";
const string trailingHeaderLine = "Trailing-Header: trailing-value";
- var testContext = new TestServiceContext();
+ var testContext = new TestServiceContext(LoggerFactory);
testContext.ServerOptions.Limits.MaxRequestHeaderCount = 2;
using (var server = new TestServer(async context =>
@@ -357,7 +358,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
[MemberData(nameof(ConnectionAdapterData))]
public async Task ExtensionsAreIgnored(ListenOptions listenOptions)
{
- var testContext = new TestServiceContext();
+ var testContext = new TestServiceContext(LoggerFactory);
var requestCount = 10;
var requestsReceived = 0;
@@ -444,7 +445,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
[MemberData(nameof(ConnectionAdapterData))]
public async Task InvalidLengthResultsIn400(ListenOptions listenOptions)
{
- var testContext = new TestServiceContext();
+ var testContext = new TestServiceContext(LoggerFactory);
using (var server = new TestServer(async httpContext =>
{
var response = httpContext.Response;
@@ -488,7 +489,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
[MemberData(nameof(ConnectionAdapterData))]
public async Task InvalidSizedDataResultsIn400(ListenOptions listenOptions)
{
- var testContext = new TestServiceContext();
+ var testContext = new TestServiceContext(LoggerFactory);
using (var server = new TestServer(async httpContext =>
{
var response = httpContext.Response;
@@ -534,7 +535,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
[MemberData(nameof(ConnectionAdapterData))]
public async Task ChunkedNotFinalTransferCodingResultsIn400(ListenOptions listenOptions)
{
- var testContext = new TestServiceContext();
+ var testContext = new TestServiceContext(LoggerFactory);
using (var server = new TestServer(httpContext =>
{
return Task.CompletedTask;
diff --git a/test/Kestrel.FunctionalTests/ChunkedResponseTests.cs b/test/Kestrel.FunctionalTests/ChunkedResponseTests.cs
index dc953808ce..c9a7e70747 100644
--- a/test/Kestrel.FunctionalTests/ChunkedResponseTests.cs
+++ b/test/Kestrel.FunctionalTests/ChunkedResponseTests.cs
@@ -9,11 +9,12 @@ using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Server.Kestrel.Core;
using Microsoft.AspNetCore.Testing;
+using Microsoft.Extensions.Logging.Testing;
using Xunit;
namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
{
- public class ChunkedResponseTests
+ public class ChunkedResponseTests : LoggedTest
{
public static TheoryData ConnectionAdapterData => new TheoryData
{
@@ -28,7 +29,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
[MemberData(nameof(ConnectionAdapterData))]
public async Task ResponsesAreChunkedAutomatically(ListenOptions listenOptions)
{
- var testContext = new TestServiceContext();
+ var testContext = new TestServiceContext(LoggerFactory);
using (var server = new TestServer(async httpContext =>
{
@@ -64,7 +65,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
[MemberData(nameof(ConnectionAdapterData))]
public async Task ResponsesAreNotChunkedAutomaticallyForHttp10Requests(ListenOptions listenOptions)
{
- var testContext = new TestServiceContext();
+ var testContext = new TestServiceContext(LoggerFactory);
using (var server = new TestServer(async httpContext =>
{
@@ -93,7 +94,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
[MemberData(nameof(ConnectionAdapterData))]
public async Task ResponsesAreChunkedAutomaticallyForHttp11NonKeepAliveRequests(ListenOptions listenOptions)
{
- var testContext = new TestServiceContext();
+ var testContext = new TestServiceContext(LoggerFactory);
using (var server = new TestServer(async httpContext =>
{
@@ -130,7 +131,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
[MemberData(nameof(ConnectionAdapterData))]
public async Task SettingConnectionCloseHeaderInAppDoesNotDisableChunking(ListenOptions listenOptions)
{
- var testContext = new TestServiceContext();
+ var testContext = new TestServiceContext(LoggerFactory);
using (var server = new TestServer(async httpContext =>
{
@@ -167,7 +168,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
[MemberData(nameof(ConnectionAdapterData))]
public async Task ZeroLengthWritesAreIgnored(ListenOptions listenOptions)
{
- var testContext = new TestServiceContext();
+ var testContext = new TestServiceContext(LoggerFactory);
using (var server = new TestServer(async httpContext =>
{
@@ -204,7 +205,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
[MemberData(nameof(ConnectionAdapterData))]
public async Task ZeroLengthWritesFlushHeaders(ListenOptions listenOptions)
{
- var testContext = new TestServiceContext();
+ var testContext = new TestServiceContext(LoggerFactory);
var flushed = new SemaphoreSlim(0, 1);
@@ -249,7 +250,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
[MemberData(nameof(ConnectionAdapterData))]
public async Task EmptyResponseBodyHandledCorrectlyWithZeroLengthWrite(ListenOptions listenOptions)
{
- var testContext = new TestServiceContext();
+ var testContext = new TestServiceContext(LoggerFactory);
using (var server = new TestServer(async httpContext =>
{
@@ -280,7 +281,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
[MemberData(nameof(ConnectionAdapterData))]
public async Task ConnectionClosedIfExceptionThrownAfterWrite(ListenOptions listenOptions)
{
- var testContext = new TestServiceContext();
+ var testContext = new TestServiceContext(LoggerFactory);
using (var server = new TestServer(async httpContext =>
{
@@ -314,7 +315,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
[MemberData(nameof(ConnectionAdapterData))]
public async Task ConnectionClosedIfExceptionThrownAfterZeroLengthWrite(ListenOptions listenOptions)
{
- var testContext = new TestServiceContext();
+ var testContext = new TestServiceContext(LoggerFactory);
using (var server = new TestServer(async httpContext =>
{
@@ -347,7 +348,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
[MemberData(nameof(ConnectionAdapterData))]
public async Task WritesAreFlushedPriorToResponseCompletion(ListenOptions listenOptions)
{
- var testContext = new TestServiceContext();
+ var testContext = new TestServiceContext(LoggerFactory);
var flushWh = new ManualResetEventSlim();
@@ -394,7 +395,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
[MemberData(nameof(ConnectionAdapterData))]
public async Task ChunksCanBeWrittenManually(ListenOptions listenOptions)
{
- var testContext = new TestServiceContext();
+ var testContext = new TestServiceContext(LoggerFactory);
using (var server = new TestServer(async httpContext =>
{
diff --git a/test/Kestrel.FunctionalTests/ConnectionAdapterTests.cs b/test/Kestrel.FunctionalTests/ConnectionAdapterTests.cs
index 21e175d8e0..a4c719bbde 100644
--- a/test/Kestrel.FunctionalTests/ConnectionAdapterTests.cs
+++ b/test/Kestrel.FunctionalTests/ConnectionAdapterTests.cs
@@ -11,11 +11,12 @@ using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Server.Kestrel.Core;
using Microsoft.AspNetCore.Server.Kestrel.Core.Adapter.Internal;
using Microsoft.AspNetCore.Testing;
+using Microsoft.Extensions.Logging.Testing;
using Xunit;
namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
{
- public class ConnectionAdapterTests
+ public class ConnectionAdapterTests : LoggedTest
{
[Fact]
public async Task CanReadAndWriteWithRewritingConnectionAdapter()
@@ -26,7 +27,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
ConnectionAdapters = { adapter }
};
- var serviceContext = new TestServiceContext();
+ var serviceContext = new TestServiceContext(LoggerFactory);
var sendString = "POST / HTTP/1.0\r\nContent-Length: 12\r\n\r\nHello World?";
@@ -56,7 +57,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
ConnectionAdapters = { new AsyncConnectionAdapter() }
};
- var serviceContext = new TestServiceContext();
+ var serviceContext = new TestServiceContext(LoggerFactory);
using (var server = new TestServer(TestApp.EchoApp, serviceContext, listenOptions))
{
@@ -85,7 +86,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
ConnectionAdapters = { new AsyncConnectionAdapter() }
};
- var serviceContext = new TestServiceContext();
+ var serviceContext = new TestServiceContext(LoggerFactory);
using (var server = new TestServer(TestApp.EchoApp, serviceContext, listenOptions))
{
@@ -106,7 +107,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
ConnectionAdapters = { new ThrowingConnectionAdapter() }
};
- var serviceContext = new TestServiceContext();
+ var serviceContext = new TestServiceContext(LoggerFactory);
using (var server = new TestServer(TestApp.EchoApp, serviceContext, listenOptions))
{
@@ -127,7 +128,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
ConnectionAdapters = { new AsyncConnectionAdapter() }
};
- var serviceContext = new TestServiceContext();
+ var serviceContext = new TestServiceContext(LoggerFactory);
var stopTask = Task.CompletedTask;
using (var server = new TestServer(TestApp.EchoApp, serviceContext, listenOptions))
@@ -149,7 +150,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
ConnectionAdapters = { new ThrowingConnectionAdapter() }
};
- var serviceContext = new TestServiceContext();
+ var serviceContext = new TestServiceContext(LoggerFactory);
using (var server = new TestServer(TestApp.EchoApp, serviceContext, listenOptions))
{
@@ -181,7 +182,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
ConnectionAdapters = { new PassThroughConnectionAdapter() }
};
- var serviceContext = new TestServiceContext();
+ var serviceContext = new TestServiceContext(LoggerFactory);
using (var server = new TestServer(async context =>
{
diff --git a/test/Kestrel.FunctionalTests/ConnectionLimitTests.cs b/test/Kestrel.FunctionalTests/ConnectionLimitTests.cs
index db967776ed..8462050e36 100644
--- a/test/Kestrel.FunctionalTests/ConnectionLimitTests.cs
+++ b/test/Kestrel.FunctionalTests/ConnectionLimitTests.cs
@@ -12,11 +12,12 @@ using Microsoft.AspNetCore.Server.Kestrel.Core.Internal;
using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure;
using Microsoft.AspNetCore.Server.Kestrel.Tests;
using Microsoft.AspNetCore.Testing;
+using Microsoft.Extensions.Logging.Testing;
using Xunit;
namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
{
- public class ConnectionLimitTests
+ public class ConnectionLimitTests : LoggedTest
{
[Fact]
public async Task ResetsCountWhenConnectionClosed()
@@ -190,14 +191,14 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
private TestServer CreateServerWithMaxConnections(RequestDelegate app, long max)
{
- var serviceContext = new TestServiceContext();
+ var serviceContext = new TestServiceContext(LoggerFactory);
serviceContext.ServerOptions.Limits.MaxConcurrentConnections = max;
return new TestServer(app, serviceContext);
}
private TestServer CreateServerWithMaxConnections(RequestDelegate app, ResourceCounter concurrentConnectionCounter)
{
- var serviceContext = new TestServiceContext();
+ var serviceContext = new TestServiceContext(LoggerFactory);
var listenOptions = new ListenOptions(new IPEndPoint(IPAddress.Loopback, 0));
listenOptions.Use(next =>
{
diff --git a/test/Kestrel.FunctionalTests/DefaultHeaderTests.cs b/test/Kestrel.FunctionalTests/DefaultHeaderTests.cs
index 757a5a0a63..c9a564c68f 100644
--- a/test/Kestrel.FunctionalTests/DefaultHeaderTests.cs
+++ b/test/Kestrel.FunctionalTests/DefaultHeaderTests.cs
@@ -3,16 +3,17 @@
using System.Threading.Tasks;
using Microsoft.AspNetCore.Testing;
+using Microsoft.Extensions.Logging.Testing;
using Xunit;
namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
{
- public class DefaultHeaderTests
+ public class DefaultHeaderTests : LoggedTest
{
[Fact]
public async Task TestDefaultHeaders()
{
- var testContext = new TestServiceContext()
+ var testContext = new TestServiceContext(LoggerFactory)
{
ServerOptions = { AddServerHeader = true }
};
diff --git a/test/Kestrel.FunctionalTests/EventSourceTests.cs b/test/Kestrel.FunctionalTests/EventSourceTests.cs
index 1d99ade358..eddc396925 100644
--- a/test/Kestrel.FunctionalTests/EventSourceTests.cs
+++ b/test/Kestrel.FunctionalTests/EventSourceTests.cs
@@ -10,11 +10,12 @@ using System.Threading.Tasks;
using Microsoft.AspNetCore.Http.Features;
using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure;
using Microsoft.AspNetCore.Testing;
+using Microsoft.Extensions.Logging.Testing;
using Xunit;
namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
{
- public class EventSourceTests : IDisposable
+ public class EventSourceTests : LoggedTest, IDisposable
{
private readonly TestEventListener _listener = new TestEventListener();
@@ -34,7 +35,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
connectionId = context.Features.Get().ConnectionId;
requestId = context.TraceIdentifier;
return Task.CompletedTask;
- }))
+ }, new TestServiceContext(LoggerFactory)))
{
port = server.Port;
using (var connection = server.CreateConnection())
diff --git a/test/Kestrel.FunctionalTests/HttpConnectionManagerTests.cs b/test/Kestrel.FunctionalTests/HttpConnectionManagerTests.cs
index f0df336587..7f5296763c 100644
--- a/test/Kestrel.FunctionalTests/HttpConnectionManagerTests.cs
+++ b/test/Kestrel.FunctionalTests/HttpConnectionManagerTests.cs
@@ -9,12 +9,13 @@ using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure;
using Microsoft.AspNetCore.Testing;
using Microsoft.AspNetCore.Testing.xunit;
using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Logging.Testing;
using Moq;
using Xunit;
namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
{
- public class HttpConnectionManagerTests
+ public class HttpConnectionManagerTests : LoggedTest
{
// This test causes MemoryPoolBlocks to be finalized which in turn causes an assert failure in debug builds.
#if !DEBUG
diff --git a/test/Kestrel.FunctionalTests/HttpProtocolSelectionTests.cs b/test/Kestrel.FunctionalTests/HttpProtocolSelectionTests.cs
index b75496c097..c5e4f34fbd 100644
--- a/test/Kestrel.FunctionalTests/HttpProtocolSelectionTests.cs
+++ b/test/Kestrel.FunctionalTests/HttpProtocolSelectionTests.cs
@@ -11,12 +11,12 @@ using Microsoft.AspNetCore.Server.Kestrel.Core;
using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http2;
using Microsoft.AspNetCore.Testing;
using Microsoft.Extensions.Logging;
-using Moq;
+using Microsoft.Extensions.Logging.Testing;
using Xunit;
namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
{
- public class HttpProtocolSelectionTests
+ public class HttpProtocolSelectionTests : TestApplicationErrorLoggerLoggedTest
{
[Fact]
public Task Server_NoProtocols_Error()
@@ -46,6 +46,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
private async Task TestSuccess(HttpProtocols serverProtocols, string request, string expectedResponse)
{
var builder = TransportSelector.GetWebHostBuilder()
+ .ConfigureServices(AddTestLogging)
.UseKestrel(options =>
{
options.Listen(IPAddress.Loopback, 0, listenOptions =>
@@ -70,14 +71,8 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
private async Task TestError(HttpProtocols serverProtocols, string expectedErrorMessage)
where TException : Exception
{
- var logger = new TestApplicationErrorLogger();
- var loggerProvider = new Mock();
- loggerProvider
- .Setup(provider => provider.CreateLogger(It.IsAny()))
- .Returns(logger);
-
var builder = TransportSelector.GetWebHostBuilder()
- .ConfigureLogging(loggingBuilder => loggingBuilder.AddProvider(loggerProvider.Object))
+ .ConfigureServices(AddTestLogging)
.UseKestrel(options => options.Listen(IPAddress.Loopback, 0, listenOptions =>
{
listenOptions.Protocols = serverProtocols;
@@ -94,7 +89,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
}
}
- Assert.Single(logger.Messages, message => message.LogLevel == LogLevel.Error
+ Assert.Single(TestApplicationErrorLogger.Messages, message => message.LogLevel == LogLevel.Error
&& message.EventId.Id == 0
&& message.Message == expectedErrorMessage);
}
diff --git a/test/Kestrel.FunctionalTests/HttpsConnectionAdapterTests.cs b/test/Kestrel.FunctionalTests/HttpsConnectionAdapterTests.cs
index 37bc3e4d87..1531e07b97 100644
--- a/test/Kestrel.FunctionalTests/HttpsConnectionAdapterTests.cs
+++ b/test/Kestrel.FunctionalTests/HttpsConnectionAdapterTests.cs
@@ -19,28 +19,21 @@ using Microsoft.AspNetCore.Server.Kestrel.Core;
using Microsoft.AspNetCore.Server.Kestrel.Https;
using Microsoft.AspNetCore.Server.Kestrel.Https.Internal;
using Microsoft.AspNetCore.Testing;
+using Microsoft.Extensions.Logging.Testing;
using Xunit;
-using Xunit.Abstractions;
namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
{
- public class HttpsConnectionAdapterTests
+ public class HttpsConnectionAdapterTests : LoggedTest
{
private static X509Certificate2 _x509Certificate2 = TestResources.GetTestCertificate();
private static X509Certificate2 _x509Certificate2NoExt = TestResources.GetTestCertificate("no_extensions.pfx");
- private readonly ITestOutputHelper _output;
-
- public HttpsConnectionAdapterTests(ITestOutputHelper output)
- {
- _output = output;
- }
// https://github.com/aspnet/KestrelHttpServer/issues/240
// This test currently fails on mono because of an issue with SslStream.
[Fact]
public async Task CanReadAndWriteWithHttpsConnectionAdapter()
{
- var serviceContext = new TestServiceContext();
var listenOptions = new ListenOptions(new IPEndPoint(IPAddress.Loopback, 0))
{
ConnectionAdapters =
@@ -49,7 +42,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
}
};
- using (var server = new TestServer(App, serviceContext, listenOptions))
+ using (var server = new TestServer(App, new TestServiceContext(LoggerFactory), listenOptions))
{
var result = await HttpClientSlim.PostAsync($"https://localhost:{server.Port}/",
new FormUrlEncodedContent(new[] {
@@ -64,7 +57,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
[Fact]
public async Task RequireCertificateFailsWhenNoCertificate()
{
- var serviceContext = new TestServiceContext();
var listenOptions = new ListenOptions(new IPEndPoint(IPAddress.Loopback, 0))
{
ConnectionAdapters =
@@ -78,7 +70,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
};
- using (var server = new TestServer(App, serviceContext, listenOptions))
+ using (var server = new TestServer(App, new TestServiceContext(LoggerFactory), listenOptions))
{
await Assert.ThrowsAnyAsync(
() => HttpClientSlim.GetStringAsync($"https://localhost:{server.Port}/"));
@@ -88,7 +80,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
[Fact]
public async Task AllowCertificateContinuesWhenNoCertificate()
{
- var serviceContext = new TestServiceContext();
var listenOptions = new ListenOptions(new IPEndPoint(IPAddress.Loopback, 0))
{
ConnectionAdapters =
@@ -107,8 +98,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
Assert.NotNull(tlsFeature);
Assert.Null(tlsFeature.ClientCertificate);
return context.Response.WriteAsync("hello world");
- },
- serviceContext, listenOptions))
+ }, new TestServiceContext(LoggerFactory), listenOptions))
{
var result = await HttpClientSlim.GetStringAsync($"https://localhost:{server.Port}/", validateCertificate: false);
Assert.Equal("hello world", result);
@@ -126,7 +116,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
[Fact]
public async Task UsesProvidedServerCertificate()
{
- var serviceContext = new TestServiceContext();
var listenOptions = new ListenOptions(new IPEndPoint(IPAddress.Loopback, 0))
{
ConnectionAdapters =
@@ -135,7 +124,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
}
};
- using (var server = new TestServer(context => Task.CompletedTask, serviceContext, listenOptions))
+ using (var server = new TestServer(context => Task.CompletedTask, new TestServiceContext(LoggerFactory), listenOptions))
{
using (var client = new TcpClient())
{
@@ -153,7 +142,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
public async Task UsesProvidedServerCertificateSelector()
{
var selectorCalled = 0;
- var serviceContext = new TestServiceContext();
var listenOptions = new ListenOptions(new IPEndPoint(IPAddress.Loopback, 0))
{
ConnectionAdapters =
@@ -175,7 +163,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
})
}
};
- using (var server = new TestServer(context => Task.CompletedTask, serviceContext, listenOptions))
+ using (var server = new TestServer(context => Task.CompletedTask, new TestServiceContext(LoggerFactory), listenOptions))
{
using (var client = new TcpClient())
{
@@ -194,7 +182,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
public async Task UsesProvidedServerCertificateSelectorEachTime()
{
var selectorCalled = 0;
- var serviceContext = new TestServiceContext();
var listenOptions = new ListenOptions(new IPEndPoint(IPAddress.Loopback, 0))
{
ConnectionAdapters =
@@ -220,7 +207,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
})
}
};
- using (var server = new TestServer(context => Task.CompletedTask, serviceContext, listenOptions))
+ using (var server = new TestServer(context => Task.CompletedTask, new TestServiceContext(LoggerFactory), listenOptions))
{
using (var client = new TcpClient())
{
@@ -249,7 +236,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
public async Task UsesProvidedServerCertificateSelectorValidatesEkus()
{
var selectorCalled = 0;
- var serviceContext = new TestServiceContext();
var listenOptions = new ListenOptions(new IPEndPoint(IPAddress.Loopback, 0))
{
ConnectionAdapters =
@@ -264,7 +250,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
})
}
};
- using (var server = new TestServer(context => Task.CompletedTask, serviceContext, listenOptions))
+ using (var server = new TestServer(context => Task.CompletedTask, new TestServiceContext(LoggerFactory), listenOptions))
{
using (var client = new TcpClient())
{
@@ -283,7 +269,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
public async Task UsesProvidedServerCertificateSelectorOverridesServerCertificate()
{
var selectorCalled = 0;
- var serviceContext = new TestServiceContext();
var listenOptions = new ListenOptions(new IPEndPoint(IPAddress.Loopback, 0))
{
ConnectionAdapters =
@@ -306,7 +291,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
})
}
};
- using (var server = new TestServer(context => Task.CompletedTask, serviceContext, listenOptions))
+ using (var server = new TestServer(context => Task.CompletedTask, new TestServiceContext(LoggerFactory), listenOptions))
{
using (var client = new TcpClient())
{
@@ -325,7 +310,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
public async Task UsesProvidedServerCertificateSelectorFailsIfYouReturnNull()
{
var selectorCalled = 0;
- var serviceContext = new TestServiceContext();
var listenOptions = new ListenOptions(new IPEndPoint(IPAddress.Loopback, 0))
{
ConnectionAdapters =
@@ -340,7 +324,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
})
}
};
- using (var server = new TestServer(context => Task.CompletedTask, serviceContext, listenOptions))
+ using (var server = new TestServer(context => Task.CompletedTask, new TestServiceContext(LoggerFactory), listenOptions))
{
using (var client = new TcpClient())
{
@@ -358,7 +342,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
[Fact]
public async Task CertificatePassedToHttpContext()
{
- var serviceContext = new TestServiceContext();
var listenOptions = new ListenOptions(new IPEndPoint(IPAddress.Loopback, 0))
{
ConnectionAdapters =
@@ -379,8 +362,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
Assert.NotNull(tlsFeature.ClientCertificate);
Assert.NotNull(context.Connection.ClientCertificate);
return context.Response.WriteAsync("hello world");
- },
- serviceContext, listenOptions))
+ }, new TestServiceContext(LoggerFactory), listenOptions))
{
using (var client = new TcpClient())
{
@@ -404,9 +386,8 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
new HttpsConnectionAdapter(new HttpsConnectionAdapterOptions { ServerCertificate = _x509Certificate2 })
}
};
- var serviceContext = new TestServiceContext();
- using (var server = new TestServer(context => context.Response.WriteAsync(context.Request.Scheme), serviceContext, listenOptions))
+ using (var server = new TestServer(context => context.Response.WriteAsync(context.Request.Scheme), new TestServiceContext(LoggerFactory), listenOptions))
{
var result = await HttpClientSlim.GetStringAsync($"https://localhost:{server.Port}/", validateCertificate: false);
Assert.Equal("https", result);
@@ -416,7 +397,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
[Fact]
public async Task DoesNotSupportTls10()
{
- var serviceContext = new TestServiceContext();
var listenOptions = new ListenOptions(new IPEndPoint(IPAddress.Loopback, 0))
{
ConnectionAdapters =
@@ -430,7 +410,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
}
};
- using (var server = new TestServer(context => context.Response.WriteAsync("hello world"), serviceContext, listenOptions))
+ using (var server = new TestServer(context => context.Response.WriteAsync("hello world"), new TestServiceContext(LoggerFactory), listenOptions))
{
// SslStream is used to ensure the certificate is actually passed to the server
// HttpClient might not send the certificate because it is invalid or it doesn't match any
@@ -450,7 +430,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
public async Task ClientCertificateValidationGetsCalledWithNotNullParameters(ClientCertificateMode mode)
{
var clientCertificateValidationCalled = false;
- var serviceContext = new TestServiceContext();
var listenOptions = new ListenOptions(new IPEndPoint(IPAddress.Loopback, 0))
{
ConnectionAdapters =
@@ -470,7 +449,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
}
};
- using (var server = new TestServer(context => Task.CompletedTask, serviceContext, listenOptions))
+ using (var server = new TestServer(context => Task.CompletedTask, new TestServiceContext(LoggerFactory), listenOptions))
{
using (var client = new TcpClient())
{
@@ -487,7 +466,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
[InlineData(ClientCertificateMode.RequireCertificate)]
public async Task ValidationFailureRejectsConnection(ClientCertificateMode mode)
{
- var serviceContext = new TestServiceContext();
var listenOptions = new ListenOptions(new IPEndPoint(IPAddress.Loopback, 0))
{
ConnectionAdapters =
@@ -501,7 +479,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
}
};
- using (var server = new TestServer(context => Task.CompletedTask, serviceContext, listenOptions))
+ using (var server = new TestServer(context => Task.CompletedTask, new TestServiceContext(LoggerFactory), listenOptions))
{
using (var client = new TcpClient())
{
@@ -517,7 +495,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
[InlineData(ClientCertificateMode.RequireCertificate)]
public async Task RejectsConnectionOnSslPolicyErrorsWhenNoValidation(ClientCertificateMode mode)
{
- var serviceContext = new TestServiceContext();
var listenOptions = new ListenOptions(new IPEndPoint(IPAddress.Loopback, 0))
{
ConnectionAdapters =
@@ -530,7 +507,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
}
};
- using (var server = new TestServer(context => Task.CompletedTask, serviceContext, listenOptions))
+ using (var server = new TestServer(context => Task.CompletedTask, new TestServiceContext(LoggerFactory), listenOptions))
{
using (var client = new TcpClient())
{
@@ -544,7 +521,6 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
[Fact]
public async Task CertificatePassedToHttpContextIsNotDisposed()
{
- var serviceContext = new TestServiceContext();
var listenOptions = new ListenOptions(new IPEndPoint(IPAddress.Loopback, 0))
{
ConnectionAdapters =
@@ -568,7 +544,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
return context.Response.WriteAsync("hello world");
};
- using (var server = new TestServer(app, serviceContext, listenOptions))
+ using (var server = new TestServer(app, new TestServiceContext(LoggerFactory), listenOptions))
{
// SslStream is used to ensure the certificate is actually passed to the server
// HttpClient might not send the certificate because it is invalid or it doesn't match any
@@ -587,7 +563,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
public void AcceptsCertificateWithoutExtensions(string testCertName)
{
var certPath = TestResources.GetCertPath(testCertName);
- _output.WriteLine("Loading " + certPath);
+ TestOutputHelper.WriteLine("Loading " + certPath);
var cert = new X509Certificate2(certPath, "testPassword");
Assert.Empty(cert.Extensions.OfType());
@@ -603,7 +579,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
public void ValidatesEnhancedKeyUsageOnCertificate(string testCertName)
{
var certPath = TestResources.GetCertPath(testCertName);
- _output.WriteLine("Loading " + certPath);
+ TestOutputHelper.WriteLine("Loading " + certPath);
var cert = new X509Certificate2(certPath, "testPassword");
Assert.NotEmpty(cert.Extensions);
var eku = Assert.Single(cert.Extensions.OfType());
@@ -621,7 +597,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
public void ThrowsForCertificatesMissingServerEku(string testCertName)
{
var certPath = TestResources.GetCertPath(testCertName);
- _output.WriteLine("Loading " + certPath);
+ TestOutputHelper.WriteLine("Loading " + certPath);
var cert = new X509Certificate2(certPath, "testPassword");
Assert.NotEmpty(cert.Extensions);
var eku = Assert.Single(cert.Extensions.OfType());
diff --git a/test/Kestrel.FunctionalTests/HttpsTests.cs b/test/Kestrel.FunctionalTests/HttpsTests.cs
index 051d11ab8d..eda9cbb5e6 100644
--- a/test/Kestrel.FunctionalTests/HttpsTests.cs
+++ b/test/Kestrel.FunctionalTests/HttpsTests.cs
@@ -20,11 +20,12 @@ using Microsoft.AspNetCore.Testing;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions.Internal;
+using Microsoft.Extensions.Logging.Testing;
using Xunit;
namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
{
- public class HttpsTests
+ public class HttpsTests : LoggedTest
{
private KestrelServerOptions CreateServerOptions()
{
@@ -117,6 +118,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
public async Task EmptyRequestLoggedAsDebug()
{
var loggerProvider = new HandshakeErrorLoggerProvider();
+ LoggerFactory.AddProvider(loggerProvider);
var hostBuilder = TransportSelector.GetWebHostBuilder()
.UseKestrel(options =>
@@ -126,11 +128,8 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
listenOptions.UseHttps(TestResources.TestCertificatePath, "testPassword");
});
})
- .ConfigureLogging(builder =>
- {
- builder.AddProvider(loggerProvider);
- builder.SetMinimumLevel(LogLevel.Debug);
- })
+ .ConfigureServices(AddTestLogging)
+ .ConfigureLogging(builder => builder.AddProvider(loggerProvider))
.Configure(app => { });
using (var host = hostBuilder.Build())
@@ -155,6 +154,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
public async Task ClientHandshakeFailureLoggedAsDebug()
{
var loggerProvider = new HandshakeErrorLoggerProvider();
+ LoggerFactory.AddProvider(loggerProvider);
var hostBuilder = TransportSelector.GetWebHostBuilder()
.UseKestrel(options =>
@@ -164,11 +164,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
listenOptions.UseHttps(TestResources.TestCertificatePath, "testPassword");
});
})
- .ConfigureLogging(builder =>
- {
- builder.AddProvider(loggerProvider);
- builder.SetMinimumLevel(LogLevel.Debug);
- })
+ .ConfigureServices(AddTestLogging)
.Configure(app => { });
using (var host = hostBuilder.Build())
@@ -196,6 +192,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
public async Task DoesNotThrowObjectDisposedExceptionOnConnectionAbort()
{
var loggerProvider = new HandshakeErrorLoggerProvider();
+ LoggerFactory.AddProvider(loggerProvider);
var hostBuilder = TransportSelector.GetWebHostBuilder()
.UseKestrel(options =>
{
@@ -204,6 +201,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
listenOptions.UseHttps(TestResources.TestCertificatePath, "testPassword");
});
})
+ .ConfigureServices(AddTestLogging)
.ConfigureLogging(builder => builder.AddProvider(loggerProvider))
.Configure(app => app.Run(async httpContext =>
{
@@ -248,6 +246,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
{
var tcs = new TaskCompletionSource