public void ShouldWriteInitialTail() { const int LogFileLineCount = 9; var filePath = logFile9; using (var watcher = new Watcher()) { string[] writtenLines; using (var stringWriter = new StringWriter()) { var writer = new LineTextWriter(stringWriter); watcher.LineWriter = writer; watcher.DirectoryPath = Path.GetDirectoryName(filePath); watcher.Filter = Path.GetFileName(filePath); watcher.LineCount = 4; watcher.Start(); writer.Flush(); Thread.Sleep(200); writtenLines = stringWriter.ToString().ToLines(); } writtenLines.ForEach(i => Debug.WriteLine(i)); var expectedLines = CreateLineListWithFileMarker( TestData.LoadLines(logFile9, LogFileLineCount - watcher.LineCount, watcher.LineCount)); CompareLines(expectedLines.ToArray(), writtenLines); } }
public void ShouldDetectNewWrite() { const int LogFileLineCount = 9; string[] newLines = testData.CreateLogLines(1); var tempDir = TestData.CreateTempDirectory(); var tempFileName = Path.Combine(tempDir, "log.log"); Debug.WriteLine(tempFileName); using (var watcher = new Watcher()) { using (var stringWriter = new StringWriter()) { var writer = new LineTextWriter(stringWriter); string[] writtenLines; using (var logger = new LoggerEmulator(logFile9, tempFileName)) { logger.WriteToEnd(); watcher.LineWriter = writer; watcher.DirectoryPath = tempDir; watcher.Filter = "*.log"; watcher.LineCount = 4; watcher.Start(); Thread.Sleep(200); logger.WriteLines(newLines); } Thread.Sleep(1000); watcher.Stop(); writer.Flush(); writtenLines = stringWriter.ToString().ToLines(); var expectedLines = CreateLineListWithFileMarker( TestData.LoadLines(logFile9, LogFileLineCount - watcher.LineCount, watcher.LineCount)); expectedLines.AddRange(newLines); CompareLines(expectedLines.ToArray(), writtenLines); } } }
public void ShouldDetectFileRollover() { const int FirstLogFileLineCount = 9; const int SecondLogFileLineCount = 5; // Write 9 lines in file1 // Start watcher, will output 4 last lines of file 1 // Rename file1 to file1old // Write new 5 lines to a new file1 // Expected result: // 1 header // 4 lines from original file 1 // 1 header // 4 lines from new file 1 var tempDir = TestData.CreateTempDirectory(); var logTempFilePath = Path.Combine(tempDir, "log.log"); var oldLogTempFilePath = Path.Combine(tempDir, "log.old"); Debug.WriteLine("main file: " +logTempFilePath); Debug.WriteLine("old file: " + oldLogTempFilePath); string[] writtenLines; using (var watcher = new Watcher()) { using (var stringWriter = new StringWriter()) { var writer = new LineTextWriter(stringWriter); File.Copy(logFile9, logTempFilePath); watcher.LineWriter = writer; watcher.DirectoryPath = tempDir; watcher.Filter = "*.log"; watcher.LineCount = 4; watcher.Start(); Thread.Sleep(200); File.Move(logTempFilePath, oldLogTempFilePath); EmulateLog(logFile5, logTempFilePath); Thread.Sleep(1000); watcher.Stop(); writer.Flush(); writtenLines = stringWriter.ToString().ToLines(); } Debug.WriteLine("Written lines:"); DumpLines(writtenLines); var firstLines = CreateLineListWithFileMarker( TestData.LoadLines(logFile9, FirstLogFileLineCount - watcher.LineCount, watcher.LineCount)); //firstLines.Add(">>>>>> <<<<<<"); var secondLines = CreateLineListWithFileMarker( TestData.LoadLines(logFile5, SecondLogFileLineCount - watcher.LineCount, watcher.LineCount)); var expectedLines = firstLines.Concat(secondLines).ToArray(); CompareLines(expectedLines, writtenLines); } }