public async Task StopWithoutFlush_When_Logs_Are_AlreadySaved_SimplyDoesNothing(int logsCount) { // arrange var logsPath = Path.Combine(Path.GetTempPath(), $"IntegrationTests-{Guid.NewGuid()}"); using (var cut = new AsyncLogger(new List <ILogWriter> { new ToFileWriter(logsPath, "testLog") }, new LoggerDateProvider())) { var logTasks = Enumerable.Range(1, logsCount) .Select(i => Task.Run(() => { cut.Write($"LogMessage number {i}"); })); await Task.WhenAll(logTasks); await Task.Delay(2000); // Give some time so we are sure all logs will be written; // act cut.StopWithoutFlush(); } await Task.Delay(100); // assert Assert.Equal(logsCount, File.ReadAllLines(Directory.GetFiles(logsPath)[0]).Length); Directory.Delete(logsPath, true); }
public async Task StopWithoutFlush_Rejects_NotSavedLogs(int logsCount) { // arrange var logsPath = Path.Combine(Path.GetTempPath(), $"IntegrationTests-{Guid.NewGuid()}"); using (var cut = new AsyncLogger(new List <ILogWriter> { new ToFileWriter(logsPath, "testLog") }, new LoggerDateProvider())) { var logTasks = Enumerable.Range(1, logsCount) .Select(i => Task.Run(() => { cut.Write($"LogMessage number {i}"); })); await Task.WhenAll(logTasks); // act cut.StopWithoutFlush(); } await Task.Delay(100); // assert (Two things can happen - file did not make it to emerge yet or it did but without writing all logs. if (File.Exists(Path.Combine(logsPath, $"testLog_{DateTime.Today:yyyyMMdd}.log"))) { Assert.NotEqual(logsCount, File.ReadAllLines(Directory.GetFiles(logsPath)[0]).Length); } Directory.Delete(logsPath, true); }
public async Task AsyncLogger_UsesSameLogFile_JustBeforeMidnight() { // arrange var logsPath = Path.Combine(Path.GetTempPath(), $"IntegrationTests-{Guid.NewGuid()}"); using (var beforeMidnightCut = new AsyncLogger(new List <ILogWriter> { new ToFileWriter(logsPath, "testLog") }, new LoggerDateProvider())) { beforeMidnightCut.Write("BeforeMidnight"); await beforeMidnightCut.StopWithFlush(); } var loggerDate = Mock.Of <ILoggerDateProvider>(m => m.Now == DateTime.Now.Date.AddSeconds(-1).AddDays(1).Date); using (var afterMidnightCut = new AsyncLogger(new List <ILogWriter> { new ToFileWriter(logsPath, "testLog") }, loggerDate)) { // act afterMidnightCut.Write("AfterMidnight"); await afterMidnightCut.StopWithFlush(); } await Task.Delay(100); // assert Assert.Single(Directory.GetFiles(logsPath)); Directory.Delete(logsPath, true); }
public void AsyncLogger_AfterDispose_Cannot_WriteLogs() { var logsPath = Path.Combine(Path.GetTempPath(), $"IntegrationTests-{Guid.NewGuid()}"); var cut = new AsyncLogger(new[] { new ToFileWriter(logsPath, "testLog") }, new LoggerDateProvider()); cut.Dispose(); Assert.Throws <ObjectDisposedException>(() => cut.Write("I like kittens")); }
public async Task AsyncLogger_Silently_Swallows_Exception_AndConitnous_When_LogWriterThrowsException() { // arrange var logWriterMock = new Mock <ILogWriter>(); logWriterMock.Setup(mock => mock.WriteLog(It.IsAny <LogLine>())).Throws(new Exception("I am a random Error! Say Hi :)")); var cut = new AsyncLogger(new[] { logWriterMock.Object }, new LoggerDateProvider()); // act & assert cut.Write("Nothing happens..."); await cut.StopWithFlush(); }
public async Task AsyncLogger_WritesLogsLines_To_File() { // arrange var logsPath = Path.Combine(Path.GetTempPath(), $"IntegrationTests-{Guid.NewGuid()}"); using (var cut = new AsyncLogger(new List <ILogWriter> { new ToFileWriter(logsPath, "testLog") }, new LoggerDateProvider())) { // act cut.Write("random log 1"); cut.Write("random log 2"); await Task.Delay(50); // some time to get the job done by the other thread. } await Task.Delay(100); // assert Assert.Equal(2, File.ReadAllLines(Directory.GetFiles(logsPath)[0]).Length); Directory.Delete(logsPath, true); }
private static async Task RunAppAsync() { IAsyncLogger logger = new AsyncLogger(new ILogWriter[] { new ToFileWriter("C:\\Logs", "logs") }, new LoggerDateProvider()); for (int i = 0; i < 15; i++) { logger.Write("Number with Flush: " + i.ToString()); } await logger.StopWithFlush(); IAsyncLogger logger2 = new AsyncLogger(new ILogWriter[] { new ToFileWriter("C:\\Logs", "logs") }, new LoggerDateProvider()); for (int i = 50; i > 0; i--) { logger2.Write("Number with No flush: " + i.ToString()); } logger2.StopWithoutFlush(); Console.ReadKey(); }
public async Task StopWithFlush_Saves_PendingsLogs_AndStops(int logsCount) { // arrange var logsPath = Path.Combine(Path.GetTempPath(), $"IntegrationTests-{Guid.NewGuid()}"); using (var cut = new AsyncLogger(new List <ILogWriter> { new ToFileWriter(logsPath, "testLog") }, new LoggerDateProvider())) { var logTasks = Enumerable.Range(1, logsCount) .Select(i => Task.Run(() => { cut.Write($"LogMessage number {i}"); })); await Task.WhenAll(logTasks); // act await cut.StopWithFlush(); } var lines = File.ReadAllLines(Directory.GetFiles(logsPath)[0]).Length; Assert.Equal(logsCount, lines); Directory.Delete(logsPath, true); }