aspnetcore/test/shared/TestServiceContext.cs

82 lines
3.2 KiB
C#

// 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;
using System.Buffers;
using System.IO.Pipelines;
using Microsoft.AspNetCore.Server.Kestrel.Core;
using Microsoft.AspNetCore.Server.Kestrel.Core.Internal;
using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http;
using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure;
using Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions.Internal;
using Microsoft.Extensions.Logging;
namespace Microsoft.AspNetCore.Testing
{
public class TestServiceContext : ServiceContext
{
public TestServiceContext()
{
var logger = new TestApplicationErrorLogger();
var kestrelTrace = new TestKestrelTrace(logger);
var loggerFactory = new LoggerFactory(new[] { new KestrelTestLoggerProvider(logger) });
Initialize(loggerFactory, kestrelTrace);
}
public TestServiceContext(ILoggerFactory loggerFactory)
{
Initialize(loggerFactory, CreateLoggingTrace(loggerFactory));
}
public TestServiceContext(ILoggerFactory loggerFactory, IKestrelTrace kestrelTrace)
{
Initialize(loggerFactory, new CompositeKestrelTrace(kestrelTrace, CreateLoggingTrace(loggerFactory)));
}
private static KestrelTrace CreateLoggingTrace(ILoggerFactory loggerFactory)
{
return new KestrelTrace(loggerFactory.CreateLogger("Microsoft.AspNetCore.Server.Kestrel"));
}
public void InitializeHeartbeat()
{
var now = DateTimeOffset.UtcNow;
var heartbeatManager = new HeartbeatManager(ConnectionManager, now);
DateHeaderValueManager = new DateHeaderValueManager(now);
Heartbeat = new Heartbeat(
new IHeartbeatHandler[] { DateHeaderValueManager, heartbeatManager },
new SystemClock(),
DebuggerWrapper.Singleton,
Log);
MockSystemClock = null;
SystemClock = heartbeatManager;
}
private void Initialize(ILoggerFactory loggerFactory, IKestrelTrace kestrelTrace)
{
LoggerFactory = loggerFactory;
Log = kestrelTrace;
Scheduler = PipeScheduler.ThreadPool;
MockSystemClock = new MockSystemClock();
SystemClock = MockSystemClock;
DateHeaderValueManager = new DateHeaderValueManager(MockSystemClock.UtcNow);
ConnectionManager = new ConnectionManager(Log, ResourceCounter.Unlimited);
HttpParser = new HttpParser<Http1ParsingHandler>(Log.IsEnabled(LogLevel.Information));
ServerOptions = new KestrelServerOptions
{
AddServerHeader = false
};
}
public ILoggerFactory LoggerFactory { get; set; }
public MockSystemClock MockSystemClock { get; set; }
public Func<MemoryPool<byte>> MemoryPoolFactory { get; set; } = KestrelMemoryPool.Create;
public string DateHeaderValue => DateHeaderValueManager.GetDateHeaderValues().String;
}
}