/// <summary> /// Creates some dummy files with different previous dates, including the <see cref="BaseDate"/>. /// </summary> /// <param name="period">Rolling file period to consider.</param> private void CreateDummyFiles(RollingFilePeriod period) { for (var days = 0; days < 10; days++) { var date = BaseDate.AddDays(-days); File.Create(Path.Combine(tempFolder.FolderPath, period.GetFileName(date))); } }
public void WhenRolling_CheckPeriodExceeded(RollingFilePeriod period, int minutesToAdd, bool expected) { var last = DateTime.Now; var current = DateTime.Now.AddMinutes(minutesToAdd); var isExceeded = period.IsPeriodExceeded(last, current); Assert.Equal(expected, isExceeded); }
public void WhenGettingFilePath_ReturnCorrectName(RollingFilePeriod period, int minutesToAdd, string expected) { CreateDummyFiles(period); var namer = new RollingFileNamer(tempFolder.FolderPath, period); var fileName = Path.GetFileName(namer.GetFilePath(BaseDate.AddMinutes(minutesToAdd))); Assert.Equal(expected, fileName); }
public void WhenCheckingForUpdate_ReturnBool(RollingFilePeriod period, int minutesToAdd, bool expected) { CreateDummyFiles(period); var namer = new RollingFileNamer(tempFolder.FolderPath, period); var shouldUpdate = namer.ShouldUpdateFile(BaseDate.AddMinutes(minutesToAdd)); Assert.Equal(expected, shouldUpdate); }
/// <summary> /// Creates a file sink for tests. /// </summary> /// <param name="async">Indicates whether the asynchronous sink should be created.</param> /// <param name="logFileFolder">Log files folder path.</param> /// <param name="period">Rolling file period.</param> /// <returns>Created sink.</returns> private ILogSink CreateSink(bool async, string logFileFolder, RollingFilePeriod period) { var formatter = new CompactKeyValueFormatter(); Func <IDataRenderer> renderer = () => new DefaultDataRenderer(); var namer = new RollingFileNamer(logFileFolder, period); return(async ? (ILogSink) new AsyncRollingFileSink(formatter, renderer, namer) : new RollingFileSink(formatter, renderer, namer)); }
public void WhenWritingInSamePeriod_DontCreateNewFile(bool async, RollingFilePeriod period, int[] minutesToAdd) { using (var temp = TempFolder.Create()) { WriteLogs(async, temp.FolderPath, period, minutesToAdd); var files = Directory.GetFiles(temp.FolderPath); Assert.Single(files); var contents = File.ReadAllLines(files[0]); Assert.Equal(minutesToAdd.Length, contents.Length); } }
public void WhenCreatingFileWithFormat_PatternMatches(RollingFilePeriod period) { using (var tempFolder = TempFolder.Create()) { var date = DateTime.Now; File.Create(Path.Combine(tempFolder.FolderPath, period.GetFileName(date))); var files = Directory.GetFiles(tempFolder.FolderPath); Assert.Single(files); Assert.True(Regex.IsMatch(Path.GetFileName(files[0]), period.FileNamePattern)); var match = Regex.Match(Path.GetFileName(files[0]), period.FileNamePattern); Assert.Equal(date.ToString(period.DateFormat), match.Groups[1].Value); } }
public void WhenWritingInDifferentPeriod_CreateNewFile(bool async, RollingFilePeriod period, int[] minutesToAdd) { using (var temp = TempFolder.Create()) { WriteLogs(async, temp.FolderPath, period, minutesToAdd); foreach (var minutes in minutesToAdd) { var date = BaseDate.AddMinutes(minutes); var contentsFile = File.ReadAllLines(Path.Combine(temp.FolderPath, period.GetFileName(date))); var log = string.Format("{0} [DBG] date={1}", date.ToString(DefaultDateTimeFormat), date.ToString(period.DateFormat)); Assert.Equal(log, contentsFile[0]); } } }
/// <summary> /// Writes logs using a sink. /// </summary> /// <param name="async">Indicates whether the asynchronous sink should be created.</param> /// <param name="logFolderPath">Log files folder path.</param> /// <param name="period">Rolling file period.</param> /// <param name="minutesToAdd">Minutes to add for each writing.</param> private void WriteLogs(bool async, string logFolderPath, RollingFilePeriod period, int[] minutesToAdd) { foreach (var minutes in minutesToAdd) { var date = BaseDate.AddMinutes(minutes); timeProviderMock.Setup(m => m.CurrentDateTime).Returns(date); var sink = CreateSink(async, logFolderPath, period); var entries = new List <ILogEntry>() { new LogEntry("date", date.ToString(period.DateFormat)) }; sink.Write(GenericLogLevelName.Debug, entries); ((IDisposable)sink).Dispose(); } }