예제 #1
0
        public void LogMessagesAreFilteredByInterceptorShouldLog()
        {
            CommonTestHelpers.ResetContext();

            List <FlushLogArgs> args = new List <FlushLogArgs>();

            KissLogConfiguration.Listeners.Add(new CustomLogListener(onFlush: (FlushLogArgs arg) => args.Add(arg))
            {
                Interceptor = new CustomLogListenerInterceptor
                {
                    ShouldLogMessage = (LogMessage message) =>
                    {
                        return(message.LogLevel >= LogLevel.Warning);
                    }
                }
            });

            Logger logger = new Logger();

            logger.Trace("Trace");
            logger.Debug("Debug");
            logger.Info("Info");
            logger.Warn("Warn");
            logger.Error("Error");
            logger.Critical("Critical");

            NotifyFlush.Notify(new[] { logger });

            Assert.AreEqual(3, args[0].MessagesGroups.ElementAt(0).Messages.Count());
        }
        public void LogListenerInterceptorShouldLogIsEvaluated()
        {
            CommonTestHelpers.ResetContext();

            List <HttpRequest> httpRequestArgs = new List <HttpRequest>();

            ILogListener listener = new CustomLogListener(onBeginRequest: (arg) => { httpRequestArgs.Add(arg); })
            {
                Interceptor = new CustomLogListenerInterceptor
                {
                    ShouldLogBeginRequest = (HttpRequest httpRequest) =>
                    {
                        return(httpRequest.Url.LocalPath == "/App/Method1" || httpRequest.Url.LocalPath == "/App/Method3");
                    }
                }
            };

            KissLogConfiguration.Listeners.Add(listener);

            string[] urls = new[] { "/App/Method1", "/App/Method2", "/App/Method3", "/App/Method4" };

            foreach (string url in urls)
            {
                HttpRequest httpRequest = new HttpRequest(new HttpRequest.CreateOptions
                {
                    Url        = UrlParser.GenerateUri(url),
                    HttpMethod = "GET"
                });

                NotifyBeginRequest.Notify(httpRequest);
            }

            Assert.AreEqual(2, httpRequestArgs.Count);
        }
예제 #3
0
        public void OptionsAreEvaluated()
        {
            CommonTestHelpers.ResetContext();

            FlushLogArgs flushLogArgs = null;

            KissLogConfiguration.Options.ShouldLogRequestHeader((OptionsArgs.LogListenerHeaderArgs args) => false);
            KissLogConfiguration.Options.ShouldLogRequestCookie((OptionsArgs.LogListenerCookieArgs args) => false);
            KissLogConfiguration.Options.ShouldLogFormData((OptionsArgs.LogListenerFormDataArgs args) => false);
            KissLogConfiguration.Options.ShouldLogServerVariable((OptionsArgs.LogListenerServerVariableArgs args) => false);
            KissLogConfiguration.Options.ShouldLogClaim((OptionsArgs.LogListenerClaimArgs args) => false);
            KissLogConfiguration.Options.ShouldLogInputStream((OptionsArgs.LogListenerInputStreamArgs args) => false);
            KissLogConfiguration.Options.ShouldLogResponseHeader((OptionsArgs.LogListenerHeaderArgs args) => false);

            KissLogConfiguration.Listeners.Add(new CustomLogListener(onFlush: (FlushLogArgs arg) => flushLogArgs = arg));

            Logger logger = new Logger();

            logger.DataContainer.SetHttpProperties(CommonTestHelpers.Factory.CreateHttpProperties());

            NotifyFlush.Notify(new[] { logger });

            Assert.AreEqual(0, flushLogArgs.HttpProperties.Request.Properties.Headers.Count());
            Assert.AreEqual(0, flushLogArgs.HttpProperties.Request.Properties.Cookies.Count());
            Assert.AreEqual(0, flushLogArgs.HttpProperties.Request.Properties.FormData.Count());
            Assert.AreEqual(0, flushLogArgs.HttpProperties.Request.Properties.ServerVariables.Count());
            Assert.AreEqual(0, flushLogArgs.HttpProperties.Request.Properties.Claims.Count());
            Assert.IsNull(flushLogArgs.HttpProperties.Request.Properties.InputStream);

            Assert.AreEqual(0, flushLogArgs.HttpProperties.Response.Properties.Headers.Count());
        }
예제 #4
0
        private void RunTestHttp(
            string httpMethod, string origin,
            string configXml, string json, string requestId, string userAgent, string userHostAddress,
            DateTime serverSideTimeUtc, string url,
            int expectedResponseCode, Dictionary <string, string> expectedResponseHeaders, List <LogEntry> expectedLogEntries)
        {
            // Arrange

            LogResponse response = new LogResponse();
            TestLogger  logger   = new TestLogger();

            CommonTestHelpers.SetConfigCache(configXml, logger);

            // Act

            LoggerProcessor.ProcessLogRequest(
                json,
                new LogRequestBase(userAgent, userHostAddress, requestId, url, null, null, null),
                serverSideTimeUtc,
                httpMethod, origin, response);

            // Assert

            Assert.Equal(expectedResponseCode, response.StatusCode);
            TestLogEntries(expectedLogEntries, logger.LogEntries);
            TestResponseHeaders(expectedResponseHeaders, response.Headers);
        }
        public void NotifyShouldNotBeInvokedIfInterceptorShouldLogBeginRequestReturnsFalse()
        {
            CommonTestHelpers.ResetContext();

            List <LogMessage> messageArgs = new List <LogMessage>();

            ILogListener listener1 = new CustomLogListener(onMessage: (LogMessage message) => { messageArgs.Add(message); })
            {
                Interceptor = new CustomLogListenerInterceptor
                {
                    ShouldLogBeginRequest = (HttpRequest httpRequest) => httpRequest.Url.LocalPath == "/App/Method2"
                }
            };

            KissLogConfiguration.Listeners.Add(listener1);

            ILogListener listener2 = new CustomLogListener(onMessage: (LogMessage message) => { messageArgs.Add(message); });

            KissLogConfiguration.Listeners.Add(listener2);

            Logger logger = new Logger(url: "/App/Method1");

            logger.Trace("Message 1");
            logger.Trace("Message 2");

            logger = new Logger(url: "/App/Method2");
            logger.Trace("Message 1");
            logger.Trace("Message 2");

            Assert.AreEqual(6, messageArgs.Count);
        }
예제 #6
0
        public void LogListenerInterceptorShouldLogIsEvaluated(int statusCode, bool expectedResult)
        {
            CommonTestHelpers.ResetContext();

            List <FlushLogArgs> args = new List <FlushLogArgs>();

            KissLogConfiguration.Listeners.Add(new CustomLogListener(onFlush: (FlushLogArgs arg) => args.Add(arg))
            {
                Interceptor = new CustomLogListenerInterceptor
                {
                    ShouldLogFlush = (FlushLogArgs args) =>
                    {
                        return(args.HttpProperties.Response.StatusCode >= 400);
                    }
                }
            });

            Logger logger = new Logger(url: $"/MyUrl/{statusCode}");

            logger.DataContainer.HttpProperties.SetResponse(new HttpResponse(new HttpResponse.CreateOptions
            {
                StatusCode = statusCode
            }));

            NotifyFlush.Notify(new[] { logger });

            Assert.AreEqual(expectedResult, args.Count == 1);
        }
예제 #7
0
        public void NotifyShouldNotBeInvokedIfInterceptorShouldLogBeginRequestReturnsFalse()
        {
            CommonTestHelpers.ResetContext();

            List <FlushLogArgs> flushLogArgs = new List <FlushLogArgs>();

            ILogListener listener1 = new CustomLogListener(onFlush: (FlushLogArgs args) => { flushLogArgs.Add(args); })
            {
                Interceptor = new CustomLogListenerInterceptor
                {
                    ShouldLogBeginRequest = (HttpRequest httpRequest) => httpRequest.Url.LocalPath == "/App/Method2"
                }
            };

            KissLogConfiguration.Listeners.Add(listener1);

            ILogListener listener2 = new CustomLogListener(onFlush: (FlushLogArgs args) => { flushLogArgs.Add(args); });

            KissLogConfiguration.Listeners.Add(listener2);

            Logger logger = new Logger(url: "/App/Method1");

            NotifyFlush.Notify(new[] { logger });

            logger = new Logger(url: "/App/Method2");
            NotifyFlush.Notify(new[] { logger });

            logger = new Logger(url: "/App/Method3");
            NotifyFlush.Notify(new[] { logger });

            Assert.AreEqual(4, flushLogArgs.Count);
        }
        public void LogListenerInterceptorShouldLogIsEvaluated(LogLevel logLevel, bool expectedResult)
        {
            CommonTestHelpers.ResetContext();

            List <LogMessage> messageArgs = new List <LogMessage>();

            ILogListener listener = new CustomLogListener(onMessage: (LogMessage message) => { messageArgs.Add(message); })
            {
                Interceptor = new CustomLogListenerInterceptor
                {
                    ShouldLogMessage = (LogMessage message) =>
                    {
                        return(message.LogLevel >= LogLevel.Warning);
                    }
                }
            };

            KissLogConfiguration.Listeners.Add(listener);

            LogMessage message = new LogMessage(new LogMessage.CreateOptions
            {
                CategoryName = Constants.DefaultLoggerCategoryName,
                LogLevel     = logLevel,
                Message      = "Message"
            });

            NotifyOnMessage.Notify(message);

            Assert.AreEqual(expectedResult, messageArgs.Count == 1);
        }
예제 #9
0
        public void FactoryIsNotNull()
        {
            CommonTestHelpers.ResetContext();

            ILoggerFactory factory = Logger.Factory;

            Assert.IsNotNull(factory);
        }
예제 #10
0
        public void NotifyOnBeginRequestExceptionIsSilentlySwallowed()
        {
            CommonTestHelpers.ResetContext();

            KissLogConfiguration.Listeners.Add(new CustomLogListener(onBeginRequest: (HttpRequest arg) => { throw new Exception(); }));

            Logger logger = new Logger(url: "App/Method1");
        }
예제 #11
0
        public void NotifyMessageExceptionIsSilentlySwallowed()
        {
            CommonTestHelpers.ResetContext();

            KissLogConfiguration.Listeners.Add(new CustomLogListener(onMessage: (LogMessage arg) => { throw new Exception(); }));

            Logger logger = new Logger();

            logger.Log(LogLevel.Trace, "Message");
        }
예제 #12
0
        private void RunTest(string configXml)
        {
            var sb = new StringBuilder();

            CommonTestHelpers.SetConfigCache(configXml);

            var configProcessor = new ConfigProcessor();

            configProcessor.ProcessRootExec(sb, s => s, "23.89.450.1", "req", true);
        }
예제 #13
0
        public void IsLoggingUrl_NoUrl()
        {
            string configXml = @"
                <jsnlog></jsnlog>
";

            CommonTestHelpers.SetConfigCache(configXml, null);

            Exception ex = Assert.Throws <ArgumentNullException>(() => LoggingUrlHelpers.IsLoggingUrl(null));
        }
예제 #14
0
        public void NegativeContentLengthThrowsException()
        {
            var options = new ResponseProperties.CreateOptions
            {
                Headers       = CommonTestHelpers.GenerateList(2),
                ContentLength = -1
            };

            ResponseProperties item = new ResponseProperties(options);
        }
예제 #15
0
        public void NotifyListenersExceptionIsSilentlySwallowed()
        {
            CommonTestHelpers.ResetContext();

            KissLogConfiguration.Listeners.Add(new CustomLogListener(onFlush: (FlushLogArgs arg) => { throw new Exception(); }));

            Logger logger = new Logger();

            Logger.NotifyListeners(logger);
        }
예제 #16
0
        public void ExceptionIsSilentlySwallowed()
        {
            CommonTestHelpers.ResetContext();

            KissLogConfiguration.InternalLog = (message) =>
            {
                throw new Exception();
            };

            InternalLogger.LogException(new Exception());
        }
예제 #17
0
        public void IsLoggingUrl_NoUrlsConfigured()
        {
            string configXml = @"
                <jsnlog></jsnlog>
";

            CommonTestHelpers.SetConfigCache(configXml, null);

            Assert.True(LoggingUrlHelpers.IsLoggingUrl("/jsnlog.logger"));
            Assert.True(LoggingUrlHelpers.IsLoggingUrl("http://abc.com/jsnlog.logger"));
            Assert.False(LoggingUrlHelpers.IsLoggingUrl("http://abc.com/jsnlog.css"));
        }
예제 #18
0
        public void NotifyOnBeginRequestContainsTheLoggerUrl()
        {
            CommonTestHelpers.ResetContext();

            HttpRequest httpRequestArgs = null;

            KissLogConfiguration.Listeners.Add(new CustomLogListener(onBeginRequest: (HttpRequest arg) => { httpRequestArgs = arg; }));

            Logger logger = new Logger(url: "/App/Method1");

            Assert.AreEqual(httpRequestArgs.Url.LocalPath, "/App/Method1");
        }
예제 #19
0
        private string ToJavaScript(string configXml)
        {
            var sb = new StringBuilder();

            CommonTestHelpers.SetConfigCache(configXml);

            var configProcessor = new ConfigProcessor();

            configProcessor.ProcessRootExec(sb, s => s, "23.89.450.1", "req", false);

            return(sb.ToString());
        }
        public void DeserializeAndFlattenWorks()
        {
            DirectoryInfo testDataDir = CommonTestHelpers.FindTestDataDirectory();

            IJsonSerializer serializer = new SystemTextJsonSerializer();

            foreach (var file in testDataDir.EnumerateFiles("*.json"))
            {
                string json = File.ReadAllText(file.FullName);
                List <KeyValuePair <string, object> > result = serializer.DeserializeAndFlatten(json).ToList();
            }
        }
예제 #21
0
        public void NullKeyValuesAreNotCopied(string keyName)
        {
            var options = new ResponseProperties.CreateOptions
            {
                Headers       = CommonTestHelpers.GenerateList(keyName, 2),
                ContentLength = 10000
            };

            ResponseProperties item = new ResponseProperties(options);

            Assert.AreEqual(0, item.Headers.Count());
        }
예제 #22
0
        public void EvaluatesOptionsShouldLogClaim()
        {
            CommonTestHelpers.ResetContext();

            KissLogConfiguration.Options.ShouldLogClaim((OptionsArgs.LogListenerClaimArgs args) => false);

            FlushLogArgs flushLogArgs = CommonTestHelpers.Factory.CreateFlushLogArgs();

            FlushLogArgs result = NotifyFlush.CreateArgsForListener(flushLogArgs, new CustomLogListener());

            Assert.AreEqual(0, result.HttpProperties.Request.Properties.Claims.Count());
            Assert.AreNotEqual(0, flushLogArgs.HttpProperties.Request.Properties.Claims.Count());
        }
예제 #23
0
        public void EvaluatesOptionsShouldLogInputStream()
        {
            CommonTestHelpers.ResetContext();

            KissLogConfiguration.Options.ShouldLogInputStream((OptionsArgs.LogListenerInputStreamArgs args) => false);

            FlushLogArgs flushLogArgs = CommonTestHelpers.Factory.CreateFlushLogArgs();

            FlushLogArgs result = NotifyFlush.CreateArgsForListener(flushLogArgs, new CustomLogListener());

            Assert.IsNull(result.HttpProperties.Request.Properties.InputStream);
            Assert.IsNotNull(flushLogArgs.HttpProperties.Request.Properties.InputStream);
        }
예제 #24
0
        public void CreateOptionsConstructorUpdatesProperties()
        {
            var options = new ResponseProperties.CreateOptions
            {
                Headers       = CommonTestHelpers.GenerateList(2),
                ContentLength = 10000
            };

            ResponseProperties item = new ResponseProperties(options);

            Assert.AreEqual(JsonSerializer.Serialize(options.Headers), JsonSerializer.Serialize(item.Headers));
            Assert.AreEqual(options.ContentLength, item.ContentLength);
        }
예제 #25
0
        public void NotifyOnBeginRequestIsNotInvokedForLoggersWithoutUrl()
        {
            CommonTestHelpers.ResetContext();

            List <HttpRequest> onBeginRequestArgs = new List <HttpRequest>();

            KissLogConfiguration.Listeners.Add(new CustomLogListener(onBeginRequest: (HttpRequest arg) => { onBeginRequestArgs.Add(arg); }));

            Logger logger1 = new Logger();
            Logger logger2 = new Logger();

            Assert.AreEqual(0, onBeginRequestArgs.Count);
        }
예제 #26
0
        public void NotifyMessageIsInvoked()
        {
            CommonTestHelpers.ResetContext();

            List <LogMessage> messageArgs = new List <LogMessage>();

            KissLogConfiguration.Listeners.Add(new CustomLogListener(onMessage: (LogMessage arg) => { messageArgs.Add(arg); }));

            Logger logger = new Logger();

            logger.Log(LogLevel.Trace, "Message");

            Assert.AreEqual(1, messageArgs.Count);
        }
        public void HeadersAreCopied()
        {
            var value = CommonTestHelpers.GenerateList(5);

            var httpRequest = new Mock <HttpRequest>();

            httpRequest.SetUrl(UrlParser.GenerateUri("/Home/Index"));
            httpRequest.Setup(p => p.Method).Returns("GET");
            httpRequest.Setup(p => p.Headers).Returns(new CustomHeaderCollection(value.ToStringValuesDictionary()));

            var result = HttpRequestFactory.Create(httpRequest.Object);

            Assert.AreEqual(JsonSerializer.Serialize(value), JsonSerializer.Serialize(result.Properties.Headers));
        }
예제 #28
0
        public void IsLoggingUrl_DefaultConfigured_NoAppenderUrlsConfigured()
        {
            string configXml = @"
                <jsnlog defaultAjaxUrl=""/jsnlogger""></jsnlog>
";

            CommonTestHelpers.SetConfigCache(configXml, null);

            Assert.True(LoggingUrlHelpers.IsLoggingUrl("/jsnlogger"));
            Assert.True(LoggingUrlHelpers.IsLoggingUrl("/abc/def/jsnlogger"));
            Assert.False(LoggingUrlHelpers.IsLoggingUrl("/jsnlog.logger"));
            Assert.False(LoggingUrlHelpers.IsLoggingUrl("http://abc.com/jsnlog.logger"));
            Assert.False(LoggingUrlHelpers.IsLoggingUrl("http://abc.com/jsnlog.css"));
        }
예제 #29
0
        public void NotifyContinuesForOtherListenersWhenOneThrowsAnException()
        {
            CommonTestHelpers.ResetContext();

            List <FlushLogArgs> flushArgs = new List <FlushLogArgs>();

            KissLogConfiguration.Listeners.Add(new CustomLogListener(onFlush: (FlushLogArgs arg) => { throw new Exception(); }));
            KissLogConfiguration.Listeners.Add(new CustomLogListener(onFlush: (FlushLogArgs arg) => { flushArgs.Add(arg); }));
            KissLogConfiguration.Listeners.Add(new CustomLogListener(onFlush: (FlushLogArgs arg) => { flushArgs.Add(arg); }));

            Logger logger = new Logger();

            NotifyFlush.Notify(new[] { logger });

            Assert.AreEqual(2, flushArgs.Count);
        }
        public void QueryStringIsCopied()
        {
            var value = CommonTestHelpers.GenerateList(5);
            var qs    = new FormUrlEncodedContent(value).ReadAsStringAsync().Result;

            var dictionary = CommonTestHelpers.GenerateDictionary(value);

            var httpRequest = new Mock <HttpRequest>();

            httpRequest.SetUrl(UrlParser.GenerateUri("/Home/Index?" + qs));
            httpRequest.Setup(p => p.Method).Returns("GET");

            var result = HttpRequestFactory.Create(httpRequest.Object);

            Assert.AreEqual(JsonSerializer.Serialize(value), JsonSerializer.Serialize(result.Properties.QueryString));
        }