Пример #1
0
        private Tuple <ElmLogger, ElmStore> SetUp(Func <string, LogLevel, bool> filter = null, string name = null)
        {
            // Arrange
            var store   = new ElmStore();
            var options = new ElmOptions()
            {
                Filter = filter ?? _filter
            };
            var provider = new ElmLoggerProvider(store, options);
            var logger   = (ElmLogger)provider.CreateLogger(name ?? _name);

            return(new Tuple <ElmLogger, ElmStore>(logger, store));
        }
Пример #2
0
        public async void Invoke_WithMatchingPath_FulfillsRequest()
        {
            // Arrange
            var elmStore    = new ElmStore();
            var factory     = new LoggerFactory();
            var optionsMock = new Mock <IOptions <ElmOptions> >();

            optionsMock
            .SetupGet(o => o.Value)
            .Returns(new ElmOptions());
            factory.AddProvider(new ElmLoggerProvider(elmStore, optionsMock.Object));

            RequestDelegate next = _ =>
            {
                return(Task.FromResult <object>(null));
            };

            var captureMiddleware = new ElmCaptureMiddleware(
                next,
                factory,
                optionsMock.Object);
            var pageMiddleware = new ElmPageMiddleware(
                next,
                optionsMock.Object,
                elmStore);
            var contextMock = GetMockContext("/Elm");

            using (var responseStream = new MemoryStream())
            {
                contextMock
                .SetupGet(c => c.Response.Body)
                .Returns(responseStream);
                contextMock
                .SetupGet(c => c.RequestServices)
                .Returns(() => null);

                // Act
                await captureMiddleware.Invoke(contextMock.Object);

                await pageMiddleware.Invoke(contextMock.Object);

                string response = Encoding.UTF8.GetString(responseStream.ToArray());

                // Assert
                contextMock.VerifyGet(c => c.Request.Query, Times.AtLeastOnce());
                Assert.Contains("<title>ASP.NET Core Logs</title>", response);
            }
        }
Пример #3
0
        public async void Invoke_BadRequestShowsError()
        {
            // Arrange
            var elmStore    = new ElmStore();
            var factory     = new LoggerFactory();
            var optionsMock = new Mock <IOptions <ElmOptions> >();

            optionsMock
            .SetupGet(o => o.Options)
            .Returns(new ElmOptions());
            factory.AddProvider(new ElmLoggerProvider(elmStore, optionsMock.Object.Options));

            RequestDelegate next = _ =>
            {
                return(Task.FromResult <object>(null));
            };

            var captureMiddleware = new ElmCaptureMiddleware(
                next,
                factory,
                optionsMock.Object);
            var pageMiddleware = new ElmPageMiddleware(
                next,
                optionsMock.Object,
                elmStore);
            var contextMock = GetMockContext("/Elm/666");

            using (var responseStream = new MemoryStream())
            {
                contextMock
                .SetupGet(c => c.Response.Body)
                .Returns(responseStream);

                // Act
                await captureMiddleware.Invoke(contextMock.Object);

                await pageMiddleware.Invoke(contextMock.Object);

                string response = Encoding.UTF8.GetString(responseStream.ToArray());

                // Assert
                contextMock.VerifyGet(c => c.Request.Query, Times.AtLeastOnce());
                Assert.True(response.Contains("Invalid Id"));
            }
        }
Пример #4
0
        private IEnumerable <ActivityContextDto> GetLogDetails(ElmStore elmStore)
        {
            var activities = new List <ActivityContextDto>();

            foreach (var activity in elmStore.GetActivities().Reverse())
            {
                var rootScopeNodeDto = new ScopeNodeDto();
                CopyScopeNodeTree(activity.Root, rootScopeNodeDto);

                activities.Add(new ActivityContextDto()
                {
                    RequestInfo     = GetRequestInfoDto(activity.HttpInfo),
                    Id              = activity.Id,
                    RepresentsScope = activity.RepresentsScope,
                    Root            = rootScopeNodeDto
                });
            }

            return(activities);
        }
Пример #5
0
        public Task Invoke(HttpContext context, ElmStore elmStore)
        {
            var currentRequest = context.Request;

            var logActivities = GetLogDetails(elmStore);

            context.Response.StatusCode  = StatusCodes.Status200OK;
            context.Response.ContentType = "application/json";

            var serializer = JsonSerializer.Create();

            using (var writer = new JsonTextWriter(new StreamWriter(stream: context.Response.Body,
                                                                    encoding: Encoding.UTF8,
                                                                    bufferSize: 1024,
                                                                    leaveOpen: true)))
            {
                serializer.Serialize(writer, logActivities);
            }

            return(Task.FromResult(true));
        }
Пример #6
0
        public async void Invoke_WithNonMatchingPath_IgnoresRequest()
        {
            // Arrange
            var elmStore    = new ElmStore();
            var factory     = new LoggerFactory();
            var optionsMock = new Mock <IOptions <ElmOptions> >();

            optionsMock
            .SetupGet(o => o.Value)
            .Returns(new ElmOptions());
            factory.AddProvider(new ElmLoggerProvider(elmStore, optionsMock.Object));

            RequestDelegate next = _ =>
            {
                return(Task.FromResult <object>(null));
            };

            var captureMiddleware = new ElmCaptureMiddleware(
                next,
                factory,
                optionsMock.Object);
            var pageMiddleware = new ElmPageMiddleware(
                next,
                optionsMock.Object,
                elmStore);

            var contextMock = GetMockContext("/nonmatchingpath");

            // Act
            await captureMiddleware.Invoke(contextMock.Object);

            await pageMiddleware.Invoke(contextMock.Object);

            // Assert
            // Request.Query is used by the ElmPageMiddleware to parse the query parameters
            contextMock.VerifyGet(c => c.Request.Query, Times.Never());
        }