public async Task LogRequestMiddleware_Info_Logger_Called_For_Info_Only()
        {
            var LogRequestMiddleware = new LogRequestMiddleware(
                async(innerHttpContext) =>
                { await innerHttpContext.Response.WriteAsync("test response body"); },
                _mockLoggerFactory.Object);

            var path     = "/api/";
            var bodyText = "request body text";
            var context  = CreateContext(path, bodyText);

            await LogRequestMiddleware.Invoke(context);

            context.Response.StatusCode.Should().Be((int)HttpStatusCode.OK);

            _mockLogger.Verify(x => x.Log(LogLevel.Debug, It.IsAny <EventId>(),
                                          It.IsAny <FormattedLogValues>(),
                                          It.IsAny <Exception>(), It.IsAny <Func <object, Exception, string> >()), Times.Never);

            _mockLogger.Verify(x => x.Log(LogLevel.Information, It.IsAny <EventId>(),
                                          It.Is <FormattedLogValues>(v => v.ToString().Contains(path)),
                                          It.IsAny <Exception>(), It.IsAny <Func <object, Exception, string> >()), Times.Once);

            _mockLogger.Verify(x => x.Log(LogLevel.Information, It.IsAny <EventId>(),
                                          It.Is <FormattedLogValues>(v => v.ToString().Contains("UserClaim")),
                                          It.IsAny <Exception>(), It.IsAny <Func <object, Exception, string> >()), Times.Once);

            _requestBodyStream.Dispose();
        }
Пример #2
0
    public async void It_Should_Log_Request()
    {
        var loggerMock  = new Mock <ILogger <LogRequestMiddleware> >();
        var requestMock = new Mock <HttpRequest>();

        requestMock.Setup(x => x.Scheme).Returns("http");
        requestMock.Setup(x => x.Host).Returns(new HostString("localhost"));
        requestMock.Setup(x => x.Path).Returns(new PathString("/test"));
        requestMock.Setup(x => x.PathBase).Returns(new PathString("/"));
        requestMock.Setup(x => x.Method).Returns("GET");
        requestMock.Setup(x => x.Body).Returns(new MemoryStream());
        requestMock.Setup(x => x.QueryString).Returns(new QueryString("?param1=2"));


        var contextMock = new Mock <HttpContext>();

        contextMock.Setup(x => x.Request).Returns(requestMock.Object);

        var logRequestMiddleware = new LogRequestMiddleware(next: (innerHttpContext) => Task.FromResult(0), logger: loggerMock.Object);


        await logRequestMiddleware.Invoke(contextMock.Object);

        loggerMock.Verify(m => m.Log(
                              LogLevel.Information,
                              It.IsAny <EventId>(),
                              It.Is <string>(v => v.Contains("REQUEST METHOD: GET, REQUEST BODY: , REQUEST URL: http://localhost//test?param1=2")),
                              null,
                              It.IsAny <Func <string, Exception, string> >()));
    }
        public async Task LogRequestMiddleware_Logger_NotCalled()
        {
            var LogRequestMiddleware = new LogRequestMiddleware(
                async(innerHttpContext) =>
                { await innerHttpContext.Response.WriteAsync("test response body"); },
                _mockLoggerFactory.Object);

            var context = CreateContext("/filename/", "request body text");

            await LogRequestMiddleware.Invoke(context);

            context.Response.StatusCode.Should().Be((int)HttpStatusCode.OK);

            _mockLogger.Verify(x => x.Log(LogLevel.Information, It.IsAny <EventId>(),
                                          It.IsAny <FormattedLogValues>(),
                                          It.IsAny <Exception>(), It.IsAny <Func <object, Exception, string> >()), Times.Never);

            _mockLogger.Verify(x => x.Log(LogLevel.Debug, It.IsAny <EventId>(),
                                          It.IsAny <FormattedLogValues>(),
                                          It.IsAny <Exception>(), It.IsAny <Func <object, Exception, string> >()), Times.Never);

            _requestBodyStream.Dispose();
        }