blob: 3efe326b2db58ae578ea1dd27e2cde2b48ad0dc8 [file] [log] [blame]
#region Apache License
//
// Licensed to the Apache Software Foundation (ASF) under one or more
// contributor license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright ownership.
// The ASF licenses this file to you under the Apache License, Version 2.0
// (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
#endregion
using System;
using System.Linq;
using System.Threading;
using log4net.Core;
using NUnit.Framework;
namespace log4net.Tests.Core;
[TestFixture]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Usage", "CA2201:Do not raise reserved exception types")]
public class FixingTest
{
const string TestRepository = "Test Repository";
[OneTimeSetUp]
public void CreateRepository()
{
bool exists = false;
Repository.ILoggerRepository[] repositories = LogManager.GetAllRepositories();
if (repositories is not null)
{
foreach (Repository.ILoggerRepository r in repositories)
{
if (r.Name == TestRepository)
{
exists = true;
break;
}
}
}
if (!exists)
{
LogManager.CreateRepository(TestRepository);
}
// write-once
if (Thread.CurrentThread.Name is null)
{
Thread.CurrentThread.Name = "Log4Net Test thread";
}
}
[Test]
public void All_ShouldContainAllFlags()
{
// Arrange
// Act
var allFlags = Enum.GetValues(typeof(FixFlags)).Cast<FixFlags>()
.Except([FixFlags.None])
.ToArray();
// Assert
foreach (var flag in allFlags)
{
Assert.That(FixFlags.All & flag, Is.EqualTo(flag), $"FixFlags.All does not contain {flag}");
}
}
[Test]
public void TestUnfixedValues()
{
LoggingEventData loggingEventData = BuildStandardEventData();
// LoggingEvents occur at distinct points in time
LoggingEvent loggingEvent = new(
loggingEventData.LocationInfo?.GetType(),
LogManager.GetRepository(TestRepository),
loggingEventData.LoggerName,
loggingEventData.Level,
loggingEventData.Message,
new("This is the exception"));
AssertExpectedLoggingEvent(loggingEvent, loggingEventData);
Assert.That(loggingEvent.Fix, Is.EqualTo(FixFlags.None), "Fixed Fields is incorrect");
}
[Test]
public void TestAllFixedValues()
{
LoggingEventData loggingEventData = BuildStandardEventData();
// LoggingEvents occur at distinct points in time
LoggingEvent loggingEvent = new(
loggingEventData.LocationInfo?.GetType(),
LogManager.GetRepository(TestRepository),
loggingEventData.LoggerName,
loggingEventData.Level,
loggingEventData.Message,
new("This is the exception"));
AssertExpectedLoggingEvent(loggingEvent, loggingEventData);
loggingEvent.Fix = FixFlags.All;
Assert.That(loggingEvent.Fix, Is.EqualTo(FixFlags.LocationInfo | FixFlags.UserName | FixFlags.Identity | FixFlags.Partial | FixFlags.Message | FixFlags.ThreadName | FixFlags.Exception | FixFlags.Domain | FixFlags.Properties), "Fixed Fields is incorrect");
}
[Test]
public void TestNoFixedValues()
{
LoggingEventData loggingEventData = BuildStandardEventData();
// LoggingEvents occur at distinct points in time
LoggingEvent loggingEvent = new(
loggingEventData.LocationInfo?.GetType(),
LogManager.GetRepository(TestRepository),
loggingEventData.LoggerName,
loggingEventData.Level,
loggingEventData.Message,
new("This is the exception"));
AssertExpectedLoggingEvent(loggingEvent, loggingEventData);
loggingEvent.Fix = FixFlags.None;
Assert.That(loggingEvent.Fix, Is.EqualTo(FixFlags.None), "Fixed Fields is incorrect");
}
private static LoggingEventData BuildStandardEventData()
{
LoggingEventData loggingEventData = new()
{
LoggerName = typeof(FixingTest).FullName,
Level = Level.Warn,
Message = "Logging event works",
Domain = "ReallySimpleApp",
LocationInfo = new(nameof(FixingTest), "Main", "Class1.cs", "29"), //Completely arbitary
ThreadName = Thread.CurrentThread.Name,
TimeStampUtc = DateTime.UtcNow.Date,
ExceptionString = "Exception occured here",
UserName = "TestUser"
};
return loggingEventData;
}
private static void AssertExpectedLoggingEvent(LoggingEvent loggingEvent, LoggingEventData loggingEventData)
{
Assert.That(loggingEventData.Domain, Is.EqualTo("ReallySimpleApp"), "Domain is incorrect");
Assert.That(loggingEvent.GetExceptionString(), Is.EqualTo("System.Exception: This is the exception"), "Exception is incorrect");
Assert.That(loggingEventData.Identity, Is.Null, "Identity is incorrect");
Assert.That(loggingEventData.Level, Is.EqualTo(Level.Warn), "Level is incorrect");
Assert.That(loggingEvent.LocationInformation, Is.Not.Null);
Assert.That(loggingEvent.LocationInformation.MethodName, Is.EqualTo("get_LocationInformation"), "Location Info is incorrect");
Assert.That(loggingEventData.LoggerName, Is.EqualTo("log4net.Tests.Core.FixingTest"), "LoggerName is incorrect");
Assert.That(loggingEvent.Repository, Is.EqualTo(LogManager.GetRepository(TestRepository)), "Repository is incorrect");
Assert.That(loggingEventData.ThreadName, Is.EqualTo(Thread.CurrentThread.Name), "ThreadName is incorrect");
Assert.That(loggingEventData.UserName, Is.EqualTo("TestUser"), "UserName is incorrect");
Assert.That(loggingEvent.RenderedMessage, Is.EqualTo("Logging event works"), "Message is incorrect");
}
}