예제 #1
0
        public void AppendTest()
        {
            var myPath = $"{typeof(DebouncingFileLoggingTests).Namespace}.{Path.GetRandomFileName()}.log";
            var testedQueuedFileLogger = new QueuedLoggerWrapper(new FileLoggerBase(myPath), new PassiveDebouncer());

            try
            {
                var expectedError1  = new Exception("testError1");
                var expectedError2  = "testError2";
                var expectedWarning = "testWarning1";
                var expectedinfo    = "testInfo1";
                testedQueuedFileLogger.LogError(expectedError1);
                testedQueuedFileLogger.LogError(expectedError2);
                testedQueuedFileLogger.LogWarning(expectedWarning);
                testedQueuedFileLogger.LogInfo(expectedinfo);
                testedQueuedFileLogger.Flush();


                var received = File.ReadAllText(myPath);
                Assert.True(File.Exists(myPath));
                Assert.Contains(expectedError1.Message, received);
                Assert.Contains(expectedError2, received);
                Assert.Contains(expectedWarning, received);
                Assert.Contains(expectedinfo, received);
                Assert.Contains(MessageSeverity.Error.ToString(), received);
                Assert.Contains(MessageSeverity.Warning.ToString(), received);
                Assert.Contains(MessageSeverity.Information.ToString(), received);
            }
            finally
            {
                testedQueuedFileLogger.Dispose();
                File.Delete(myPath);
            }
        }
예제 #2
0
        private static void Main(string[] args)
        {
            Console.WriteLine("Hello in Passive Debouncer test harness! " +
                              "This is the load test. The file logger will be spammed with the number of messages (random GUIDs) you choose from multiple threads." +
                              " The debouncer role is to keep the messages queued in memory and not flush immidiatly. How many messages would you like to send from the thread pool?");
            Console.Write("Number of messages: ");
            var line = Console.ReadLine();
            int validInteger;

            while (!int.TryParse(line, out validInteger) && !(validInteger > 0))
            {
                Console.WriteLine($"There was a problem with your input: {line} is not a valid integer in this context. Enter any natural number greater than 0.");
                Console.Write("Number of messages: ");
                line = Console.ReadLine();
            }
            Console.Write($"You chose {validInteger}.");
            if (validInteger > 100000)
            {
                Console.Write(" This can take a while:)");
            }
            Console.WriteLine();
            var file = new FileInfo(Path.ChangeExtension(Path.GetRandomFileName(), "txt"));

            Console.WriteLine($"The contents will be written to {file.FullName}. Note, that passive debouncer is 'lazy' and will write the rest on next request.");

            var fileLogger = new FileLoggerBase(file.FullName);
            var watch      = Stopwatch.StartNew();

            using (var passiveDebouncer = new PassiveDebouncer())
                using (var wrapper = new QueuedLoggerWrapper(fileLogger, passiveDebouncer))
                {
                    Parallel.For(0, validInteger, x =>
                    {
                        wrapper.LogInfo(Guid.NewGuid().ToString());
                    });
                    watch.Stop();
                    Console.WriteLine($"Finished in {watch.Elapsed} with {wrapper.Failures} failures, after {wrapper.Requests} log requests");
                }
            Console.WriteLine("Open file? y/n");
            var key = Console.ReadKey();

            if (key.KeyChar == 'y')
            {
                using (var process = Process.Start(new ProcessStartInfo {
                    FileName = fileLogger.OutputFile.FullName, UseShellExecute = true
                }))
                { }
            }
            Console.WriteLine();
            Console.WriteLine("Delete file? y/n");
            key = Console.ReadKey();
            if (key.KeyChar == 'y')
            {
                fileLogger.OutputFile.Delete();
            }
        }
예제 #3
0
        public void IsThreadSafeAlwaysReturnsTrue(bool isThreadSafe)
        {
            var myPath         = $"{typeof(QueuedLoggerWrapperTests).Namespace}.{Path.GetRandomFileName()}.log";
            var mockLogger1    = new Mock <FileLoggerBase>(myPath);
            var mockDebouncer1 = new Mock <IDebouncer>();

            mockLogger1.SetupGet(m => m.IsThreadSafe).Returns(isThreadSafe);
            var testedQueuedFileLogger = new QueuedLoggerWrapper(mockLogger1.Object, mockDebouncer1.Object);

            Assert.True(testedQueuedFileLogger.IsThreadSafe);
        }
예제 #4
0
        public void FlushAutoReturnsValueDependingOnWrappedLogger(bool flushesAuto)
        {
            var myPath         = $"{typeof(QueuedLoggerWrapperTests).Namespace}.{Path.GetRandomFileName()}.log";
            var mockLogger1    = new Mock <FileLoggerBase>(myPath);
            var mockDebouncer1 = new Mock <IDebouncer>();

            mockLogger1.SetupGet(m => m.FlushAuto).Returns(flushesAuto);
            var testedQueuedFileLogger = new QueuedLoggerWrapper(mockLogger1.Object, mockDebouncer1.Object);

            Assert.Equal(flushesAuto, testedQueuedFileLogger.FlushAuto);
        }
예제 #5
0
        public void CreateQueuedFileLogger()
        {
            var myPath = $"{typeof(QueuedLoggerWrapperTests).Namespace}.{Path.GetRandomFileName()}.log";
            var testedQueuedFileLogger = new QueuedLoggerWrapper(new FileLoggerBase(myPath), new PassiveDebouncer {
                DebounceMilliseconds = 1
            });

            try
            {
                testedQueuedFileLogger.LogInfo("test7013");
                Assert.True(File.Exists(myPath));
            }
            finally
            {
                testedQueuedFileLogger.Dispose();
                File.Delete(myPath);
            }
        }
예제 #6
0
        public void DisposeDisposesUnderlyingLogger()
        {
            var myPath         = $"{typeof(QueuedLoggerWrapperTests).Namespace}.{Path.GetRandomFileName()}.log";
            var mockLogger1    = new Mock <FileLoggerBase>(myPath);
            var mockDebouncer1 = new Mock <IDebouncer>();

            mockDebouncer1.Setup(e => e.Dispose());
            QueuedLoggerWrapper testedQueuedFileLogger = null;

            try
            {
                testedQueuedFileLogger = new QueuedLoggerWrapper(mockLogger1.Object, mockDebouncer1.Object);
            }
            finally
            {
                testedQueuedFileLogger.Dispose();
            }
            mockDebouncer1.Verify(e => e.Dispose());
        }
예제 #7
0
        public void LogError2()
        {
            var myPath = $"{typeof(DebouncingFileLoggingTests).Namespace}.{Path.GetRandomFileName()}.log";
            var testedQueuedFileLogger = new QueuedLoggerWrapper(new FileLoggerBase(myPath), new PassiveDebouncer {
                DebounceMilliseconds = 1
            });

            try
            {
                var expected = new Exception("test");
                testedQueuedFileLogger.LogError(expected);
                var received = File.ReadAllText(myPath);
                Assert.True(File.Exists(myPath));
                Assert.Contains(expected.Message, received);
                Assert.Contains(MessageSeverity.Error.ToString(), received);
            }
            finally
            {
                testedQueuedFileLogger.Dispose();
                File.Delete(myPath);
            }
        }