From ccc59b91c4ac44bcdcf8bfb77f59d05c4d5dc2e3 Mon Sep 17 00:00:00 2001 From: Stephen Halter Date: Tue, 29 Sep 2020 11:06:32 -0700 Subject: [PATCH] Revert breaking KestrelServer ctor change (#26367) --- .../Core/src/Internal/KestrelServerImpl.cs | 4 +-- src/Servers/Kestrel/Core/src/KestrelServer.cs | 19 +++++--------- .../Kestrel/Core/src/PublicAPI.Unshipped.txt | 2 +- .../Kestrel/Core/test/KestrelServerTests.cs | 26 +++++++++---------- .../test/TransportTestHelpers/TestServer.cs | 2 +- .../TestTransport/TestServer.cs | 2 +- 6 files changed, 24 insertions(+), 31 deletions(-) diff --git a/src/Servers/Kestrel/Core/src/Internal/KestrelServerImpl.cs b/src/Servers/Kestrel/Core/src/Internal/KestrelServerImpl.cs index 43e155bccc..5a5cbb70d0 100644 --- a/src/Servers/Kestrel/Core/src/Internal/KestrelServerImpl.cs +++ b/src/Servers/Kestrel/Core/src/Internal/KestrelServerImpl.cs @@ -54,8 +54,8 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core } // For testing - internal KestrelServerImpl(IEnumerable transportFactories, ServiceContext serviceContext) - : this(transportFactories, null, serviceContext) + internal KestrelServerImpl(IConnectionListenerFactory transportFactory, ServiceContext serviceContext) + : this(new[] { transportFactory }, null, serviceContext) { } diff --git a/src/Servers/Kestrel/Core/src/KestrelServer.cs b/src/Servers/Kestrel/Core/src/KestrelServer.cs index 9ad15a1e94..93b8b36c9e 100644 --- a/src/Servers/Kestrel/Core/src/KestrelServer.cs +++ b/src/Servers/Kestrel/Core/src/KestrelServer.cs @@ -1,13 +1,12 @@ // 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.Collections.Generic; +using System; using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Connections; using Microsoft.AspNetCore.Hosting.Server; using Microsoft.AspNetCore.Http.Features; -using Microsoft.AspNetCore.Server.Kestrel.Core.Internal; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; @@ -17,18 +16,12 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core { private KestrelServerImpl _innerKestrelServer; - public KestrelServer( - IOptions options, - IEnumerable transportFactories, - ILoggerFactory loggerFactory) + public KestrelServer(IOptions options, IConnectionListenerFactory transportFactory, ILoggerFactory loggerFactory) { - _innerKestrelServer = new KestrelServerImpl(options, transportFactories, loggerFactory); - } - - // For testing - internal KestrelServer(IEnumerable transportFactories, ServiceContext serviceContext) - { - _innerKestrelServer = new KestrelServerImpl(transportFactories, serviceContext); + _innerKestrelServer = new KestrelServerImpl( + options, + new[] { transportFactory ?? throw new ArgumentNullException(nameof(transportFactory)) }, + loggerFactory); } public IFeatureCollection Features => _innerKestrelServer.Features; diff --git a/src/Servers/Kestrel/Core/src/PublicAPI.Unshipped.txt b/src/Servers/Kestrel/Core/src/PublicAPI.Unshipped.txt index 493e73f1a1..393183ba67 100644 --- a/src/Servers/Kestrel/Core/src/PublicAPI.Unshipped.txt +++ b/src/Servers/Kestrel/Core/src/PublicAPI.Unshipped.txt @@ -164,7 +164,7 @@ Microsoft.AspNetCore.Server.Kestrel.KestrelConfigurationLoader.Load() -> void ~Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpParser.ParseHeaders(TRequestHandler handler, ref System.Buffers.SequenceReader reader) -> bool ~Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpParser.ParseRequestLine(TRequestHandler handler, ref System.Buffers.SequenceReader reader) -> bool ~Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServer.Features.get -> Microsoft.AspNetCore.Http.Features.IFeatureCollection -~Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServer.KestrelServer(Microsoft.Extensions.Options.IOptions options, System.Collections.Generic.IEnumerable transportFactories, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void +~Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServer.KestrelServer(Microsoft.Extensions.Options.IOptions options, Microsoft.AspNetCore.Connections.IConnectionListenerFactory transportFactory, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void ~Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServer.Options.get -> Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerOptions ~Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServer.StartAsync(Microsoft.AspNetCore.Hosting.Server.IHttpApplication application, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task ~Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServer.StopAsync(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task diff --git a/src/Servers/Kestrel/Core/test/KestrelServerTests.cs b/src/Servers/Kestrel/Core/test/KestrelServerTests.cs index dac5a74c53..23a85f5d2e 100644 --- a/src/Servers/Kestrel/Core/test/KestrelServerTests.cs +++ b/src/Servers/Kestrel/Core/test/KestrelServerTests.cs @@ -208,12 +208,12 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests var mockLoggerFactory = new Mock(); var mockLogger = new Mock(); mockLoggerFactory.Setup(m => m.CreateLogger(It.IsAny())).Returns(mockLogger.Object); - new KestrelServer(Options.Create(null), new List() { new MockTransportFactory() }, mockLoggerFactory.Object); + new KestrelServer(Options.Create(null), new MockTransportFactory(), mockLoggerFactory.Object); mockLoggerFactory.Verify(factory => factory.CreateLogger("Microsoft.AspNetCore.Server.Kestrel")); } [Fact] - public void ConstructorWithNullTransportFactoriesThrows() + public void ConstructorWithNullTransportFactoryThrows() { var exception = Assert.Throws(() => new KestrelServer( @@ -221,14 +221,14 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests null, new LoggerFactory(new[] { new KestrelTestLoggerProvider() }))); - Assert.Equal("transportFactories", exception.ParamName); + Assert.Equal("transportFactory", exception.ParamName); } [Fact] public void ConstructorWithNoTransportFactoriesThrows() { var exception = Assert.Throws(() => - new KestrelServer( + new KestrelServerImpl( Options.Create(null), new List(), new LoggerFactory(new[] { new KestrelTestLoggerProvider() }))); @@ -239,7 +239,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests [Fact] public void StartWithMultipleTransportFactoriesDoesNotThrow() { - using var server = new KestrelServer( + using var server = new KestrelServerImpl( Options.Create(CreateServerOptions()), new List() { new ThrowingTransportFactory(), new MockTransportFactory() }, new LoggerFactory(new[] { new KestrelTestLoggerProvider() })); @@ -285,7 +285,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests var mockLoggerFactory = new Mock(); var mockLogger = new Mock(); mockLoggerFactory.Setup(m => m.CreateLogger(It.IsAny())).Returns(mockLogger.Object); - var server = new KestrelServer(Options.Create(options), new List() { mockTransportFactory.Object }, mockLoggerFactory.Object); + var server = new KestrelServer(Options.Create(options), mockTransportFactory.Object, mockLoggerFactory.Object); await server.StartAsync(new DummyApplication(), CancellationToken.None); var stopTask1 = server.StopAsync(default); @@ -343,7 +343,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests var mockLoggerFactory = new Mock(); var mockLogger = new Mock(); mockLoggerFactory.Setup(m => m.CreateLogger(It.IsAny())).Returns(mockLogger.Object); - var server = new KestrelServer(Options.Create(options), new List() { mockTransportFactory.Object }, mockLoggerFactory.Object); + var server = new KestrelServer(Options.Create(options), mockTransportFactory.Object, mockLoggerFactory.Object); await server.StartAsync(new DummyApplication(), CancellationToken.None); var stopTask1 = server.StopAsync(default); @@ -398,7 +398,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests var mockLoggerFactory = new Mock(); var mockLogger = new Mock(); mockLoggerFactory.Setup(m => m.CreateLogger(It.IsAny())).Returns(mockLogger.Object); - var server = new KestrelServer(Options.Create(options), new List() { mockTransportFactory.Object }, mockLoggerFactory.Object); + var server = new KestrelServer(Options.Create(options), mockTransportFactory.Object, mockLoggerFactory.Object); await server.StartAsync(new DummyApplication(), default); var stopTask1 = server.StopAsync(default); @@ -444,7 +444,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests DebuggerWrapper.Singleton, testContext.Log); - using (var server = new KestrelServer(new List() { new MockTransportFactory() }, testContext)) + using (var server = new KestrelServerImpl(new MockTransportFactory(), testContext)) { Assert.Null(testContext.DateHeaderValueManager.GetDateHeaderValues()); @@ -526,7 +526,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests }); // Don't use "using". Dispose() could hang if test fails. - var server = new KestrelServer(Options.Create(options), new List() { mockTransportFactory.Object }, mockLoggerFactory.Object); + var server = new KestrelServer(Options.Create(options), mockTransportFactory.Object, mockLoggerFactory.Object); await server.StartAsync(new DummyApplication(), CancellationToken.None).DefaultTimeout(); @@ -663,7 +663,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests }); // Don't use "using". Dispose() could hang if test fails. - var server = new KestrelServer(Options.Create(options), new List() { mockTransportFactory.Object }, mockLoggerFactory.Object); + var server = new KestrelServer(Options.Create(options), mockTransportFactory.Object, mockLoggerFactory.Object); await server.StartAsync(new DummyApplication(), CancellationToken.None).DefaultTimeout(); @@ -677,12 +677,12 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests private static KestrelServer CreateServer(KestrelServerOptions options, ILogger testLogger) { - return new KestrelServer(Options.Create(options), new List() { new MockTransportFactory() }, new LoggerFactory(new[] { new KestrelTestLoggerProvider(testLogger) })); + return new KestrelServer(Options.Create(options), new MockTransportFactory(), new LoggerFactory(new[] { new KestrelTestLoggerProvider(testLogger) })); } private static KestrelServer CreateServer(KestrelServerOptions options, bool throwOnCriticalErrors = true) { - return new KestrelServer(Options.Create(options), new List() { new MockTransportFactory() }, new LoggerFactory(new[] { new KestrelTestLoggerProvider(throwOnCriticalErrors) })); + return new KestrelServer(Options.Create(options), new MockTransportFactory(), new LoggerFactory(new[] { new KestrelTestLoggerProvider(throwOnCriticalErrors) })); } private static void StartDummyApplication(IServer server) diff --git a/src/Servers/Kestrel/shared/test/TransportTestHelpers/TestServer.cs b/src/Servers/Kestrel/shared/test/TransportTestHelpers/TestServer.cs index a95568d28b..41acd8618d 100644 --- a/src/Servers/Kestrel/shared/test/TransportTestHelpers/TestServer.cs +++ b/src/Servers/Kestrel/shared/test/TransportTestHelpers/TestServer.cs @@ -93,7 +93,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests c.Configure(context.ServerOptions); } - return new KestrelServer(new List() { sp.GetRequiredService() }, context); + return new KestrelServerImpl(sp.GetRequiredService(), context); }); configureServices(services); }) diff --git a/src/Servers/Kestrel/test/InMemory.FunctionalTests/TestTransport/TestServer.cs b/src/Servers/Kestrel/test/InMemory.FunctionalTests/TestTransport/TestServer.cs index e69e7b4764..7983bfcebb 100644 --- a/src/Servers/Kestrel/test/InMemory.FunctionalTests/TestTransport/TestServer.cs +++ b/src/Servers/Kestrel/test/InMemory.FunctionalTests/TestTransport/TestServer.cs @@ -88,7 +88,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.InMemory.FunctionalTests.TestTrans { context.ServerOptions.ApplicationServices = sp; configureKestrel(context.ServerOptions); - return new KestrelServer(new List() { _transportFactory }, context); + return new KestrelServerImpl(_transportFactory, context); }); });