public async Task SetNewLogFile_PurgesOldLogFiles()
{
DirectoryInfo directory = new DirectoryInfo(_logFilePath);
directory.Create();
// below test expects the retention days to be set to 1
Assert.Equal(1, FileTraceWriter.LastModifiedCutoffDays);
// create some log files
List<FileInfo> logFiles = new List<FileInfo>();
int initialCount = 5;
for (int i = 0; i < initialCount; i++)
{
string fileName = string.Format("{0}-{1}.log", i, FileTraceWriter.GetInstanceId());
string path = Path.Combine(_logFilePath, fileName);
Thread.Sleep(50);
File.WriteAllText(path, "Test Logs");
logFiles.Add(new FileInfo(path));
}
// mark some of the files as old - we expect
// all of these to be purged
File.SetLastWriteTime(logFiles[2].FullName, DateTime.Now.Subtract(TimeSpan.FromDays(1)));
File.SetLastWriteTime(logFiles[1].FullName, DateTime.Now.Subtract(TimeSpan.FromDays(1)));
File.SetLastWriteTime(logFiles[0].FullName, DateTime.Now.Subtract(TimeSpan.FromDays(2)));
var files = directory.GetFiles().OrderByDescending(p => p.LastWriteTime).ToArray();
Assert.Equal(initialCount, files.Length);
FileTraceWriter traceWriter = new FileTraceWriter(_logFilePath, TraceLevel.Verbose);
traceWriter.SetNewLogFile();
files = directory.GetFiles().OrderByDescending(p => p.LastWriteTime).ToArray();
await TestHelpers.Await(() =>
{
files = directory.GetFiles().OrderByDescending(p => p.LastWriteTime).ToArray();
return files.Length == 2;
}, timeout: 2000);
// verify the correct log files were purged and the 2
// most recent files were retained
Assert.True(files[0].Name.StartsWith("4"));
Assert.True(files[1].Name.StartsWith("3"));
}