public async Task MiddlewareIsRunWithConnectionLoggingScopeForHttp2Requests() { var expectedLogMessage = "Log from connection scope!"; string connectionIdFromFeature = null; var mockScopeLoggerProvider = new MockScopeLoggerProvider(expectedLogMessage); LoggerFactory.AddProvider(mockScopeLoggerProvider); await using var server = new TestServer(async context => { connectionIdFromFeature = context.Features.Get <IConnectionIdFeature>().ConnectionId; var logger = context.RequestServices.GetRequiredService <ILogger <Http2EndToEndTests> >(); logger.LogInformation(expectedLogMessage); await context.Response.WriteAsync("hello, world"); }, new TestServiceContext(LoggerFactory), listenOptions => { listenOptions.Protocols = HttpProtocols.Http2; }); var connectionCount = 0; using var connection = server.CreateConnection(); using var socketsHandler = new SocketsHttpHandler() { ConnectCallback = (_, _) => { if (connectionCount != 0) { throw new InvalidOperationException(); } connectionCount++; return(new ValueTask <Stream>(connection.Stream)); }, }; using var httpClient = new HttpClient(socketsHandler); using var httpRequsetMessage = new HttpRequestMessage() { RequestUri = new Uri("http://localhost/"), Version = new Version(2, 0), VersionPolicy = HttpVersionPolicy.RequestVersionExact, }; using var responseMessage = await httpClient.SendAsync(httpRequsetMessage); Assert.Equal("hello, world", await responseMessage.Content.ReadAsStringAsync()); Assert.NotNull(connectionIdFromFeature); Assert.NotNull(mockScopeLoggerProvider.ConnectionLogScope); Assert.Equal(connectionIdFromFeature, mockScopeLoggerProvider.ConnectionLogScope[0].Value); }
public async Task GET_MiddlewareIsRunWithConnectionLoggingScopeForHttpRequests(HttpProtocols protocol) { // Arrange var expectedLogMessage = "Log from connection scope!"; string connectionIdFromFeature = null; var mockScopeLoggerProvider = new MockScopeLoggerProvider(expectedLogMessage); LoggerFactory.AddProvider(mockScopeLoggerProvider); var builder = CreateHostBuilder(async context => { connectionIdFromFeature = context.Features.Get <IConnectionIdFeature>().ConnectionId; var logger = context.RequestServices.GetRequiredService <ILogger <Http3RequestTests> >(); logger.LogInformation(expectedLogMessage); await context.Response.WriteAsync("hello, world"); }, protocol: protocol); using (var host = builder.Build()) using (var client = CreateClient()) { await host.StartAsync().DefaultTimeout(); var request = new HttpRequestMessage(HttpMethod.Get, $"https://127.0.0.1:{host.GetPort()}/"); request.Version = GetProtocol(protocol); request.VersionPolicy = HttpVersionPolicy.RequestVersionExact; // Act var responseMessage = await client.SendAsync(request, CancellationToken.None).DefaultTimeout(); // Assert Assert.Equal("hello, world", await responseMessage.Content.ReadAsStringAsync()); Assert.NotNull(connectionIdFromFeature); Assert.NotNull(mockScopeLoggerProvider.LogScope); Assert.Equal(connectionIdFromFeature, mockScopeLoggerProvider.LogScope[0].Value); } }
public MockScopeLogger(MockScopeLoggerProvider parent) { _loggerProvider = parent; }