aspnetcore/src/Logging/Logging.AzureAppServices/test/FileLoggerTests.cs

122 lines
4.2 KiB
C#

// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Xunit;
namespace Microsoft.Extensions.Logging.AzureAppServices.Test
{
public class FileLoggerTests: IDisposable
{
DateTimeOffset _timestampOne = new DateTimeOffset(2016, 05, 04, 03, 02, 01, TimeSpan.Zero);
public FileLoggerTests()
{
TempPath = Path.GetTempFileName() + "_";
}
public string TempPath { get; }
public void Dispose()
{
try
{
if (Directory.Exists(TempPath))
{
Directory.Delete(TempPath, true);
}
}
catch
{
// ignored
}
}
[Fact]
public async Task WritesToTextFile()
{
var provider = new TestFileLoggerProvider(TempPath);
var logger = (BatchingLogger)provider.CreateLogger("Cat");
await provider.IntervalControl.Pause;
logger.Log(_timestampOne, LogLevel.Information, 0, "Info message", null, (state, ex) => state);
logger.Log(_timestampOne.AddHours(1), LogLevel.Error, 0, "Error message", null, (state, ex) => state);
provider.IntervalControl.Resume();
await provider.IntervalControl.Pause;
Assert.Equal(
"2016-05-04 03:02:01.000 +00:00 [Information] Cat: Info message" + Environment.NewLine +
"2016-05-04 04:02:01.000 +00:00 [Error] Cat: Error message" + Environment.NewLine,
File.ReadAllText(Path.Combine(TempPath, "LogFile.20160504.txt")));
}
[Fact]
public async Task RollsTextFile()
{
var provider = new TestFileLoggerProvider(TempPath);
var logger = (BatchingLogger)provider.CreateLogger("Cat");
await provider.IntervalControl.Pause;
logger.Log(_timestampOne, LogLevel.Information, 0, "Info message", null, (state, ex) => state);
logger.Log(_timestampOne.AddDays(1), LogLevel.Error, 0, "Error message", null, (state, ex) => state);
provider.IntervalControl.Resume();
await provider.IntervalControl.Pause;
Assert.Equal(
"2016-05-04 03:02:01.000 +00:00 [Information] Cat: Info message" + Environment.NewLine,
File.ReadAllText(Path.Combine(TempPath, "LogFile.20160504.txt")));
Assert.Equal(
"2016-05-05 03:02:01.000 +00:00 [Error] Cat: Error message" + Environment.NewLine,
File.ReadAllText(Path.Combine(TempPath, "LogFile.20160505.txt")));
}
[Fact]
public async Task RespectsMaxFileCount()
{
Directory.CreateDirectory(TempPath);
File.WriteAllText(Path.Combine(TempPath, "randomFile.txt"), "Text");
var provider = new TestFileLoggerProvider(TempPath, maxRetainedFiles: 5);
var logger = (BatchingLogger)provider.CreateLogger("Cat");
await provider.IntervalControl.Pause;
var timestamp = _timestampOne;
for (int i = 0; i < 10; i++)
{
logger.Log(timestamp, LogLevel.Information, 0, "Info message", null, (state, ex) => state);
logger.Log(timestamp.AddHours(1), LogLevel.Error, 0, "Error message", null, (state, ex) => state);
timestamp = timestamp.AddDays(1);
}
provider.IntervalControl.Resume();
await provider.IntervalControl.Pause;
var actualFiles = new DirectoryInfo(TempPath)
.GetFiles()
.Select(f => f.Name)
.OrderBy(f => f)
.ToArray();
Assert.Equal(6, actualFiles.Length);
Assert.Equal(new[] {
"LogFile.20160509.txt",
"LogFile.20160510.txt",
"LogFile.20160511.txt",
"LogFile.20160512.txt",
"LogFile.20160513.txt",
"randomFile.txt"
}, actualFiles);
}
}
}