예제 #1
0
        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);
        }
예제 #2
0
        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);
                }
        }
예제 #3
0
 public MockScopeLogger(MockScopeLoggerProvider parent)
 {
     _loggerProvider = parent;
 }