public async Task When_InvokingMiddlewareWithPathAndIgnorePattern_Expect_Logged(string path, string ignorePattern, bool logged)
        {
            // Arrange
            Mock <ILogger <RequestLoggingMiddleware> > mock = new Mock <ILogger <RequestLoggingMiddleware> >();

            mock.Setup(m => m.IsEnabled(It.IsAny <LogLevel>())).Returns(true);

            RequestLoggingMiddleware.Options options = new RequestLoggingMiddleware.Options
            {
                IgnorePatterns = new string[] { ignorePattern },
            };

            RequestLoggingMiddleware middleware = new RequestLoggingMiddleware(
                (httpContext) => Task.CompletedTask,
                mock.Object,
                Options.Create(options));

            HttpContext context = new DefaultHttpContext();

            context.Request.Path = path;

            // Act
            await middleware.Invoke(context);

            // Assert
            mock.Verify(
                m => m.Log(
                    It.IsAny <LogLevel>(),
                    It.IsAny <EventId>(),
                    It.IsAny <It.IsAnyType>(),
                    null,
                    (Func <It.IsAnyType, Exception, string>)It.IsAny <object>()),
                Times.Exactly(logged ? 2 : 0));
        }
Beispiel #2
0
        public async Task Connection_Information_Should_Be_Logged()
        {
            var logger = A.Fake <IEventLogger <RequestLoggingMiddleware> >();
            RequestLoggingMiddleware middleware = new RequestLoggingMiddleware(logger);
            var context        = A.Fake <HttpContext>();
            var connectionInfo = A.Fake <ConnectionInfo>();

            A.CallTo(() => context.Connection).Returns(connectionInfo);
            A.CallTo(() => connectionInfo.Id).Returns("dummy");
            A.CallTo(() => connectionInfo.LocalIpAddress).Returns(IPAddress.Parse("1.1.1.1"));
            A.CallTo(() => connectionInfo.LocalPort).Returns(1234);
            A.CallTo(() => connectionInfo.RemoteIpAddress).Returns(IPAddress.Parse("2.2.2.2"));
            A.CallTo(() => connectionInfo.RemotePort).Returns(4321);

            await middleware.Invoke(context, () => Task.CompletedTask);

            A.CallTo(logger)
            .Where(call => call.Method.Name == "BeginScope")
            .WhenArgumentsMatch(args =>
            {
                dynamic data   = args[0];
                var connection = data.Connection;
                return(connection.Id == "dummy" &&
                       connection.LocalIpAddress.ToString() == "1.1.1.1" &&
                       connection.LocalPort == 1234 &&
                       connection.RemoteIpAddress.ToString() == "2.2.2.2" &&
                       connection.RemotePort == 4321);
            }).MustHaveHappened();
        }
        public async void PostrequestLogFormattedCorrectlyTest()
        {
            RequestDelegate requestDelegate = (innerHttpContext) => Task.CompletedTask;
            var             middleware      = new RequestLoggingMiddleware(requestDelegate, _loggerMock.Object);

            var context = new DefaultHttpContext();
            var path    = "/test";
            var size    = 50;

            context.Request.Path          = new PathString(path);
            context.Request.ContentLength = size;

            await middleware.Invoke(context);

            // TODO: find way to test timer
            var expectedStart = $"{{\"id\": \"{context.TraceIdentifier}\", " +
                                $"\"request\": \"{path}\", \"time\": ";

            _loggerMock.Verify(
                x => x.Log <object>(
                    LogLevel.Information,
                    It.IsAny <EventId>(),
                    It.Is <object>(y => y.ToString().StartsWith(expectedStart)),
                    It.IsAny <Exception>(),
                    It.IsAny <Func <object, Exception, string> >()),
                Times.Once());
        }
        public async Task When_InvokingMiddlewareWithStatusCode_Expect_LogLevel(int statusCode, LogLevel expectedLogLevel)
        {
            // Arrange
            Mock <ILogger <RequestLoggingMiddleware> > mock = new Mock <ILogger <RequestLoggingMiddleware> >();

            mock.Setup(m => m.IsEnabled(It.IsAny <LogLevel>())).Returns(true);

            RequestLoggingMiddleware middleware = new RequestLoggingMiddleware(
                (httpContext) => Task.CompletedTask,
                mock.Object,
                Options.Create(new RequestLoggingMiddleware.Options()));

            HttpContext context = new DefaultHttpContext();

            context.Response.StatusCode = statusCode;

            // Act
            await middleware.Invoke(context);

            // Assert
            mock.Verify(
                m => m.Log(
                    LogLevel.Information,
                    It.IsAny <EventId>(),
                    It.Is <It.IsAnyType>((@object, type) => @object.ToString()
                                         !.Equals("Inbound HTTP   started")),
                    null,
                    (Func <It.IsAnyType, Exception, string>)It.IsAny <object>()),
                Times.Once);

            mock.Verify(
                m => m.Log(
                    expectedLogLevel,
                    It.IsAny <EventId>(),
                    It.Is <It.IsAnyType>((@object, type) => @object.ToString()
                                         !.Equals($"Inbound HTTP   finished - {statusCode}")),
                    null,
                    (Func <It.IsAnyType, Exception, string>)It.IsAny <object>()),
                Times.Once());
        }