public void JobLoggerCanAggregateLoggersExceptions()
        {
            JobLogger jl = JobLogger.Instance;

            jl.Reset();

            StubLogger consoleLogger1 = new StubConsoleLogger();
            StubLogger consoleLogger2 = new StubConsoleLogger();
            StubLogger exceptionLogger1 = new StubExceptionThrowingLogger();
            StubLogger exceptionLogger2 = new StubExceptionThrowingLogger();
            StubLogger exceptionLogger3 = new StubExceptionThrowingLogger();

            List<ILogger> loggers = new List<ILogger>
            {
                exceptionLogger1,
                consoleLogger1,
                exceptionLogger2,
                consoleLogger2,
                exceptionLogger3
            };

            jl.SetLoggers(loggers);
            jl.AcceptMessages<ErrorMessage>();

            jl.LogMessage(new ErrorMessage("Error message."));
        }
        public void JobLoggerCanAggregateLoggersExceptions()
        {
            JobLogger jl = JobLogger.Instance;

            jl.Reset();

            StubLogger consoleLogger1   = new StubConsoleLogger();
            StubLogger consoleLogger2   = new StubConsoleLogger();
            StubLogger exceptionLogger1 = new StubExceptionThrowingLogger();
            StubLogger exceptionLogger2 = new StubExceptionThrowingLogger();
            StubLogger exceptionLogger3 = new StubExceptionThrowingLogger();

            List <ILogger> loggers = new List <ILogger>
            {
                exceptionLogger1,
                consoleLogger1,
                exceptionLogger2,
                consoleLogger2,
                exceptionLogger3
            };

            jl.SetLoggers(loggers);
            jl.AcceptMessages <ErrorMessage>();

            jl.LogMessage(new ErrorMessage("Error message."));
        }
        public void JobLoggerCanLogAcceptedMessageTypes()
        {
            JobLogger jl = JobLogger.Instance;

            jl.Reset();

            StubLogger consoleLogger = new StubConsoleLogger();

            List <ILogger> loggers = new List <ILogger>
            {
                consoleLogger
            };

            jl.SetLoggers(loggers);
            jl.AcceptMessages <ErrorMessage>();

            Assert.AreEqual(0, consoleLogger.Output.Count);

            jl.LogMessage(new GeneralMessage("This general message should not be logged."));

            Assert.AreEqual(0, consoleLogger.Output.Count);

            jl.LogMessage(new ErrorMessage("This error message should be logged."));

            Assert.AreEqual(1, consoleLogger.Output.Count);
            Assert.AreEqual("This error message should be logged.", consoleLogger.Output[0]);
        }
        public void JobLoggerCanLogToAllLoggers()
        {
            string msg_text1 = "This is a general message 1";
            string msg_text2 = "This is a general message 2";
            string msg_text3 = "This is a general message 3";
            string msg_text4 = "This is a general message 4";

            JobLogger jl = JobLogger.Instance;

            StubLogger consoleLogger  = new StubConsoleLogger();
            StubLogger textFileLogger = new StubTextFileLogger();
            StubLogger dbLogger       = new StubDBLogger();

            //Log two time to console logger
            List <ILogger> loggers = new List <ILogger>
            {
                consoleLogger,
                consoleLogger,
                textFileLogger,
                dbLogger
            };

            List <Type> acceptedMessages = new List <Type>
            {
                typeof(GeneralMessage),
            };

            jl.SetLoggers(loggers);
            jl.AcceptMessages <GeneralMessage>();

            Assert.AreEqual(0, consoleLogger.Output.Count);
            Assert.AreEqual(0, textFileLogger.Output.Count);
            Assert.AreEqual(0, dbLogger.Output.Count);

            jl.LogMessage(new GeneralMessage(msg_text1));
            jl.LogMessage(new GeneralMessage(msg_text2));
            jl.LogMessage(new GeneralMessage(msg_text3));
            jl.LogMessage(new GeneralMessage(msg_text4));

            Assert.AreEqual(8, consoleLogger.Output.Count);
            Assert.AreEqual(4, textFileLogger.Output.Count);
            Assert.AreEqual(4, dbLogger.Output.Count);

            CollectionAssert.AreEqual(new List <string> {
                msg_text1, msg_text1, msg_text2, msg_text2, msg_text3, msg_text3, msg_text4, msg_text4
            }, consoleLogger.Output);
            CollectionAssert.AreEqual(new List <string> {
                msg_text1, msg_text2, msg_text3, msg_text4
            }, textFileLogger.Output);
            CollectionAssert.AreEqual(new List <string> {
                msg_text1, msg_text2, msg_text3, msg_text4
            }, dbLogger.Output);
        }
        public void JobLoggerCanContinueIfLoggersThrowExceptions()
        {
            int    numberOfException = 0;
            string msg_text          = "Error message.";

            JobLogger jl = JobLogger.Instance;

            jl.Reset();

            StubLogger consoleLogger1   = new StubConsoleLogger();
            StubLogger consoleLogger2   = new StubConsoleLogger();
            StubLogger exceptionLogger1 = new StubExceptionThrowingLogger();
            StubLogger exceptionLogger2 = new StubExceptionThrowingLogger();
            StubLogger exceptionLogger3 = new StubExceptionThrowingLogger();

            List <ILogger> loggers = new List <ILogger>
            {
                exceptionLogger1,
                consoleLogger1,
                exceptionLogger2,
                consoleLogger2,
                exceptionLogger3
            };

            jl.SetLoggers(loggers);
            jl.AcceptMessages <ErrorMessage>();

            try
            {
                jl.LogMessage(new ErrorMessage(msg_text));
            }
            catch (AggregateException agg)
            {
                numberOfException = agg.InnerExceptions.Count();
            }

            Assert.AreEqual(3, numberOfException);

            Assert.AreEqual(1, consoleLogger1.Output.Count);
            Assert.AreEqual(1, consoleLogger2.Output.Count);

            CollectionAssert.AreEqual(new List <string> {
                msg_text
            }, consoleLogger1.Output);
            CollectionAssert.AreEqual(new List <string> {
                msg_text
            }, consoleLogger2.Output);
        }
        public void JobLoggerCannotLogIfHasNotAcceptedMessages()
        {
            JobLogger jl = JobLogger.Instance;

            jl.Reset();

            StubLogger consoleLogger = new StubConsoleLogger();

            //Log two time to console logger
            List <ILogger> loggers = new List <ILogger>
            {
                consoleLogger,
            };

            jl.SetLoggers(loggers);

            jl.LogMessage(new ErrorMessage("Cannot log this message."));
        }
        public void JobLoggerCannotLogUnspecifiedMessageTypes()
        {
            JobLogger jl = JobLogger.Instance;

            jl.Reset();

            StubLogger consoleLogger = new StubConsoleLogger();

            List<ILogger> loggers = new List<ILogger>
            {
                consoleLogger
            };

            jl.SetLoggers(loggers);
            jl.AcceptMessages<GeneralMessage>();

            Assert.AreEqual(0, consoleLogger.Output.Count);

            jl.LogMessage(new ErrorMessage("This error message should not be logged."));

            Assert.AreEqual(0, consoleLogger.Output.Count);
        }
        public void JobLoggerCannotLogIfHasNotAcceptedMessages()
        {
            JobLogger jl = JobLogger.Instance;

            jl.Reset();

            StubLogger consoleLogger = new StubConsoleLogger();

            //Log two time to console logger
            List<ILogger> loggers = new List<ILogger>
            {
                consoleLogger,
            };

            jl.SetLoggers(loggers);

            jl.LogMessage(new ErrorMessage("Cannot log this message."));
        }
        public void JobLoggerCanLogToAllLoggers()
        {
            string msg_text1 = "This is a general message 1";
            string msg_text2 = "This is a general message 2";
            string msg_text3 = "This is a general message 3";
            string msg_text4 = "This is a general message 4";

            JobLogger jl = JobLogger.Instance;

            StubLogger consoleLogger = new StubConsoleLogger();
            StubLogger textFileLogger = new StubTextFileLogger();
            StubLogger dbLogger = new StubDBLogger();

            //Log two time to console logger
            List<ILogger> loggers = new List<ILogger>
            {
                consoleLogger,
                consoleLogger,
                textFileLogger,
                dbLogger
            };

            List<Type> acceptedMessages = new List<Type>
            {
                typeof(GeneralMessage),
            };

            jl.SetLoggers(loggers);
            jl.AcceptMessages<GeneralMessage>();

            Assert.AreEqual(0, consoleLogger.Output.Count);
            Assert.AreEqual(0, textFileLogger.Output.Count);
            Assert.AreEqual(0, dbLogger.Output.Count);

            jl.LogMessage(new GeneralMessage(msg_text1));
            jl.LogMessage(new GeneralMessage(msg_text2));
            jl.LogMessage(new GeneralMessage(msg_text3));
            jl.LogMessage(new GeneralMessage(msg_text4));

            Assert.AreEqual(8, consoleLogger.Output.Count);
            Assert.AreEqual(4, textFileLogger.Output.Count);
            Assert.AreEqual(4, dbLogger.Output.Count);

            CollectionAssert.AreEqual(new List<string> { msg_text1, msg_text1, msg_text2, msg_text2, msg_text3, msg_text3, msg_text4, msg_text4 }, consoleLogger.Output);
            CollectionAssert.AreEqual(new List<string> { msg_text1, msg_text2, msg_text3, msg_text4 }, textFileLogger.Output);
            CollectionAssert.AreEqual(new List<string> { msg_text1, msg_text2, msg_text3, msg_text4 }, dbLogger.Output);
        }
        public void JobLoggerCanContinueIfLoggersThrowExceptions()
        {
            int numberOfException = 0;
            string msg_text = "Error message.";

            JobLogger jl = JobLogger.Instance;

            jl.Reset();

            StubLogger consoleLogger1 = new StubConsoleLogger();
            StubLogger consoleLogger2 = new StubConsoleLogger();
            StubLogger exceptionLogger1 = new StubExceptionThrowingLogger();
            StubLogger exceptionLogger2 = new StubExceptionThrowingLogger();
            StubLogger exceptionLogger3 = new StubExceptionThrowingLogger();

            List<ILogger> loggers = new List<ILogger>
            {
                exceptionLogger1,
                consoleLogger1,
                exceptionLogger2,
                consoleLogger2,
                exceptionLogger3
            };

            jl.SetLoggers(loggers);
            jl.AcceptMessages<ErrorMessage>();

            try
            {
                jl.LogMessage(new ErrorMessage(msg_text));
            }
            catch (AggregateException agg)
            {
                numberOfException = agg.InnerExceptions.Count();
            }

            Assert.AreEqual(3, numberOfException);

            Assert.AreEqual(1, consoleLogger1.Output.Count);
            Assert.AreEqual(1, consoleLogger2.Output.Count);

            CollectionAssert.AreEqual(new List<string> { msg_text }, consoleLogger1.Output);
            CollectionAssert.AreEqual(new List<string> { msg_text }, consoleLogger2.Output);
        }