Revert breaking KestrelServer ctor change (#26367)

This commit is contained in:
Stephen Halter 2020-09-29 11:06:32 -07:00 committed by GitHub
parent 792df8a4c2
commit ccc59b91c4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 24 additions and 31 deletions

View File

@ -54,8 +54,8 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core
} }
// For testing // For testing
internal KestrelServerImpl(IEnumerable<IConnectionListenerFactory> transportFactories, ServiceContext serviceContext) internal KestrelServerImpl(IConnectionListenerFactory transportFactory, ServiceContext serviceContext)
: this(transportFactories, null, serviceContext) : this(new[] { transportFactory }, null, serviceContext)
{ {
} }

View File

@ -1,13 +1,12 @@
// Copyright (c) .NET Foundation. All rights reserved. // 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. // 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;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Connections; using Microsoft.AspNetCore.Connections;
using Microsoft.AspNetCore.Hosting.Server; using Microsoft.AspNetCore.Hosting.Server;
using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.Http.Features;
using Microsoft.AspNetCore.Server.Kestrel.Core.Internal;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
@ -17,18 +16,12 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core
{ {
private KestrelServerImpl _innerKestrelServer; private KestrelServerImpl _innerKestrelServer;
public KestrelServer( public KestrelServer(IOptions<KestrelServerOptions> options, IConnectionListenerFactory transportFactory, ILoggerFactory loggerFactory)
IOptions<KestrelServerOptions> options,
IEnumerable<IConnectionListenerFactory> transportFactories,
ILoggerFactory loggerFactory)
{ {
_innerKestrelServer = new KestrelServerImpl(options, transportFactories, loggerFactory); _innerKestrelServer = new KestrelServerImpl(
} options,
new[] { transportFactory ?? throw new ArgumentNullException(nameof(transportFactory)) },
// For testing loggerFactory);
internal KestrelServer(IEnumerable<IConnectionListenerFactory> transportFactories, ServiceContext serviceContext)
{
_innerKestrelServer = new KestrelServerImpl(transportFactories, serviceContext);
} }
public IFeatureCollection Features => _innerKestrelServer.Features; public IFeatureCollection Features => _innerKestrelServer.Features;

View File

@ -164,7 +164,7 @@ Microsoft.AspNetCore.Server.Kestrel.KestrelConfigurationLoader.Load() -> void
~Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpParser<TRequestHandler>.ParseHeaders(TRequestHandler handler, ref System.Buffers.SequenceReader<byte> reader) -> bool ~Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpParser<TRequestHandler>.ParseHeaders(TRequestHandler handler, ref System.Buffers.SequenceReader<byte> reader) -> bool
~Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpParser<TRequestHandler>.ParseRequestLine(TRequestHandler handler, ref System.Buffers.SequenceReader<byte> reader) -> bool ~Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpParser<TRequestHandler>.ParseRequestLine(TRequestHandler handler, ref System.Buffers.SequenceReader<byte> reader) -> bool
~Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServer.Features.get -> Microsoft.AspNetCore.Http.Features.IFeatureCollection ~Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServer.Features.get -> Microsoft.AspNetCore.Http.Features.IFeatureCollection
~Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServer.KestrelServer(Microsoft.Extensions.Options.IOptions<Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerOptions> options, System.Collections.Generic.IEnumerable<Microsoft.AspNetCore.Connections.IConnectionListenerFactory> transportFactories, Microsoft.Extensions.Logging.ILoggerFactory loggerFactory) -> void ~Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServer.KestrelServer(Microsoft.Extensions.Options.IOptions<Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerOptions> 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.Options.get -> Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerOptions
~Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServer.StartAsync<TContext>(Microsoft.AspNetCore.Hosting.Server.IHttpApplication<TContext> application, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task ~Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServer.StartAsync<TContext>(Microsoft.AspNetCore.Hosting.Server.IHttpApplication<TContext> application, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task
~Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServer.StopAsync(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task ~Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServer.StopAsync(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task

View File

@ -208,12 +208,12 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests
var mockLoggerFactory = new Mock<ILoggerFactory>(); var mockLoggerFactory = new Mock<ILoggerFactory>();
var mockLogger = new Mock<ILogger>(); var mockLogger = new Mock<ILogger>();
mockLoggerFactory.Setup(m => m.CreateLogger(It.IsAny<string>())).Returns(mockLogger.Object); mockLoggerFactory.Setup(m => m.CreateLogger(It.IsAny<string>())).Returns(mockLogger.Object);
new KestrelServer(Options.Create<KestrelServerOptions>(null), new List<IConnectionListenerFactory>() { new MockTransportFactory() }, mockLoggerFactory.Object); new KestrelServer(Options.Create<KestrelServerOptions>(null), new MockTransportFactory(), mockLoggerFactory.Object);
mockLoggerFactory.Verify(factory => factory.CreateLogger("Microsoft.AspNetCore.Server.Kestrel")); mockLoggerFactory.Verify(factory => factory.CreateLogger("Microsoft.AspNetCore.Server.Kestrel"));
} }
[Fact] [Fact]
public void ConstructorWithNullTransportFactoriesThrows() public void ConstructorWithNullTransportFactoryThrows()
{ {
var exception = Assert.Throws<ArgumentNullException>(() => var exception = Assert.Throws<ArgumentNullException>(() =>
new KestrelServer( new KestrelServer(
@ -221,14 +221,14 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests
null, null,
new LoggerFactory(new[] { new KestrelTestLoggerProvider() }))); new LoggerFactory(new[] { new KestrelTestLoggerProvider() })));
Assert.Equal("transportFactories", exception.ParamName); Assert.Equal("transportFactory", exception.ParamName);
} }
[Fact] [Fact]
public void ConstructorWithNoTransportFactoriesThrows() public void ConstructorWithNoTransportFactoriesThrows()
{ {
var exception = Assert.Throws<InvalidOperationException>(() => var exception = Assert.Throws<InvalidOperationException>(() =>
new KestrelServer( new KestrelServerImpl(
Options.Create<KestrelServerOptions>(null), Options.Create<KestrelServerOptions>(null),
new List<IConnectionListenerFactory>(), new List<IConnectionListenerFactory>(),
new LoggerFactory(new[] { new KestrelTestLoggerProvider() }))); new LoggerFactory(new[] { new KestrelTestLoggerProvider() })));
@ -239,7 +239,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests
[Fact] [Fact]
public void StartWithMultipleTransportFactoriesDoesNotThrow() public void StartWithMultipleTransportFactoriesDoesNotThrow()
{ {
using var server = new KestrelServer( using var server = new KestrelServerImpl(
Options.Create(CreateServerOptions()), Options.Create(CreateServerOptions()),
new List<IConnectionListenerFactory>() { new ThrowingTransportFactory(), new MockTransportFactory() }, new List<IConnectionListenerFactory>() { new ThrowingTransportFactory(), new MockTransportFactory() },
new LoggerFactory(new[] { new KestrelTestLoggerProvider() })); new LoggerFactory(new[] { new KestrelTestLoggerProvider() }));
@ -285,7 +285,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests
var mockLoggerFactory = new Mock<ILoggerFactory>(); var mockLoggerFactory = new Mock<ILoggerFactory>();
var mockLogger = new Mock<ILogger>(); var mockLogger = new Mock<ILogger>();
mockLoggerFactory.Setup(m => m.CreateLogger(It.IsAny<string>())).Returns(mockLogger.Object); mockLoggerFactory.Setup(m => m.CreateLogger(It.IsAny<string>())).Returns(mockLogger.Object);
var server = new KestrelServer(Options.Create(options), new List<IConnectionListenerFactory>() { mockTransportFactory.Object }, mockLoggerFactory.Object); var server = new KestrelServer(Options.Create(options), mockTransportFactory.Object, mockLoggerFactory.Object);
await server.StartAsync(new DummyApplication(), CancellationToken.None); await server.StartAsync(new DummyApplication(), CancellationToken.None);
var stopTask1 = server.StopAsync(default); var stopTask1 = server.StopAsync(default);
@ -343,7 +343,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests
var mockLoggerFactory = new Mock<ILoggerFactory>(); var mockLoggerFactory = new Mock<ILoggerFactory>();
var mockLogger = new Mock<ILogger>(); var mockLogger = new Mock<ILogger>();
mockLoggerFactory.Setup(m => m.CreateLogger(It.IsAny<string>())).Returns(mockLogger.Object); mockLoggerFactory.Setup(m => m.CreateLogger(It.IsAny<string>())).Returns(mockLogger.Object);
var server = new KestrelServer(Options.Create(options), new List<IConnectionListenerFactory>() { mockTransportFactory.Object }, mockLoggerFactory.Object); var server = new KestrelServer(Options.Create(options), mockTransportFactory.Object, mockLoggerFactory.Object);
await server.StartAsync(new DummyApplication(), CancellationToken.None); await server.StartAsync(new DummyApplication(), CancellationToken.None);
var stopTask1 = server.StopAsync(default); var stopTask1 = server.StopAsync(default);
@ -398,7 +398,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests
var mockLoggerFactory = new Mock<ILoggerFactory>(); var mockLoggerFactory = new Mock<ILoggerFactory>();
var mockLogger = new Mock<ILogger>(); var mockLogger = new Mock<ILogger>();
mockLoggerFactory.Setup(m => m.CreateLogger(It.IsAny<string>())).Returns(mockLogger.Object); mockLoggerFactory.Setup(m => m.CreateLogger(It.IsAny<string>())).Returns(mockLogger.Object);
var server = new KestrelServer(Options.Create(options), new List<IConnectionListenerFactory>() { mockTransportFactory.Object }, mockLoggerFactory.Object); var server = new KestrelServer(Options.Create(options), mockTransportFactory.Object, mockLoggerFactory.Object);
await server.StartAsync(new DummyApplication(), default); await server.StartAsync(new DummyApplication(), default);
var stopTask1 = server.StopAsync(default); var stopTask1 = server.StopAsync(default);
@ -444,7 +444,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests
DebuggerWrapper.Singleton, DebuggerWrapper.Singleton,
testContext.Log); testContext.Log);
using (var server = new KestrelServer(new List<IConnectionListenerFactory>() { new MockTransportFactory() }, testContext)) using (var server = new KestrelServerImpl(new MockTransportFactory(), testContext))
{ {
Assert.Null(testContext.DateHeaderValueManager.GetDateHeaderValues()); 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. // Don't use "using". Dispose() could hang if test fails.
var server = new KestrelServer(Options.Create(options), new List<IConnectionListenerFactory>() { mockTransportFactory.Object }, mockLoggerFactory.Object); var server = new KestrelServer(Options.Create(options), mockTransportFactory.Object, mockLoggerFactory.Object);
await server.StartAsync(new DummyApplication(), CancellationToken.None).DefaultTimeout(); 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. // Don't use "using". Dispose() could hang if test fails.
var server = new KestrelServer(Options.Create(options), new List<IConnectionListenerFactory>() { mockTransportFactory.Object }, mockLoggerFactory.Object); var server = new KestrelServer(Options.Create(options), mockTransportFactory.Object, mockLoggerFactory.Object);
await server.StartAsync(new DummyApplication(), CancellationToken.None).DefaultTimeout(); 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) private static KestrelServer CreateServer(KestrelServerOptions options, ILogger testLogger)
{ {
return new KestrelServer(Options.Create(options), new List<IConnectionListenerFactory>() { 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) private static KestrelServer CreateServer(KestrelServerOptions options, bool throwOnCriticalErrors = true)
{ {
return new KestrelServer(Options.Create(options), new List<IConnectionListenerFactory>() { 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) private static void StartDummyApplication(IServer server)

View File

@ -93,7 +93,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
c.Configure(context.ServerOptions); c.Configure(context.ServerOptions);
} }
return new KestrelServer(new List<IConnectionListenerFactory>() { sp.GetRequiredService<IConnectionListenerFactory>() }, context); return new KestrelServerImpl(sp.GetRequiredService<IConnectionListenerFactory>(), context);
}); });
configureServices(services); configureServices(services);
}) })

View File

@ -88,7 +88,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.InMemory.FunctionalTests.TestTrans
{ {
context.ServerOptions.ApplicationServices = sp; context.ServerOptions.ApplicationServices = sp;
configureKestrel(context.ServerOptions); configureKestrel(context.ServerOptions);
return new KestrelServer(new List<IConnectionListenerFactory>() { _transportFactory }, context); return new KestrelServerImpl(_transportFactory, context);
}); });
}); });