Пример #1
0
 /// <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)));
     }
 }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        /// <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));
        }
Пример #6
0
        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);
            }
        }
Пример #7
0
        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);
            }
        }
Пример #8
0
        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]);
                }
            }
        }
Пример #9
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();
            }
        }