Bug in yml dotnet tool PackageReference arrangement RDS Blank Change int dotnet test nuget ^ [spcepiworld].[dbo].[evnt_inf] Assembly Version WS Result bug fix and Nuget bump, PSN, Reactor and Extra RDS rule OpenInsightApi and testRunTitle editorconfig bugs Fix Type serializerValue RDS oversight PropertyNameCaseInsensitive Save check for file already present NoWaitDirectory MoveArchive allow empty directory and continueOnError for clean files CreatePointerFile and more on NoWaitDirectory
112 lines
4.4 KiB
C#
112 lines
4.4 KiB
C#
using Adaptation._Tests.Shared.Log;
|
|
using Microsoft.Extensions.Configuration;
|
|
using Microsoft.Extensions.Logging;
|
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
|
|
namespace Adaptation._Tests.Shared;
|
|
|
|
public class LoggingUnitTesting : UnitTesting, IDisposable
|
|
{
|
|
|
|
protected ILogger<object> _Logger;
|
|
protected ILoggerFactory _LoggerFactory;
|
|
protected readonly LogLevel? _DefaultLogLevel;
|
|
protected readonly LogLevel? _Log4netProviderLogLevel;
|
|
protected readonly IConfigurationRoot _ConfigurationRoot;
|
|
public ILogger<object> Logger => _Logger;
|
|
public LogLevel? DefaultLogLevel => _DefaultLogLevel;
|
|
public ILoggerFactory LoggerFactory => _LoggerFactory;
|
|
public IConfigurationRoot ConfigurationRoot => _ConfigurationRoot;
|
|
public LogLevel? Log4netProviderLogLevel => _Log4netProviderLogLevel;
|
|
|
|
public LoggingUnitTesting(TestContext testContext, Type declaringType) :
|
|
base(testContext, declaringType)
|
|
{
|
|
_LoggerFactory = new LoggerFactory();
|
|
if (testContext is null || declaringType is null || _IsEnvironment is null)
|
|
{
|
|
_ConfigurationRoot = null;
|
|
_DefaultLogLevel = null;
|
|
_Log4netProviderLogLevel = null;
|
|
}
|
|
else
|
|
{
|
|
LogLevel logLevel;
|
|
IConfigurationSection configurationSection;
|
|
List<LogLevel> logLevels = new();
|
|
string defaultLogLevelSection = "Logging:LogLevel:Default";
|
|
string log4netProviderLogLevelSection = "Logging:LogLevel:Log4netProvider";
|
|
string[] sections = new string[] { defaultLogLevelSection, log4netProviderLogLevelSection };
|
|
IConfigurationBuilder configurationBuilder = new ConfigurationBuilder()
|
|
.AddEnvironmentVariables()
|
|
.AddJsonFile(_IsEnvironment.AppSettingsFileName, optional: false, reloadOnChange: true);
|
|
_ConfigurationRoot = configurationBuilder.Build();
|
|
foreach (string section in sections)
|
|
{
|
|
configurationSection = _ConfigurationRoot.GetSection(section);
|
|
if (configurationSection is null)
|
|
logLevel = LogLevel.Debug;
|
|
else if (!Enum.TryParse(configurationSection.Value, out logLevel))
|
|
logLevel = LogLevel.Debug;
|
|
logLevels.Add(logLevel);
|
|
}
|
|
_DefaultLogLevel = logLevels[0];
|
|
_Log4netProviderLogLevel = logLevels[1];
|
|
}
|
|
if (DefaultLogLevel.HasValue)
|
|
_LoggerFactory.AddProvider(new DebugProvider(DefaultLogLevel.Value));
|
|
if (DefaultLogLevel.HasValue)
|
|
_LoggerFactory.AddProvider(new ConsoleProvider(DefaultLogLevel.Value));
|
|
_Logger = _LoggerFactory.CreateLogger<object>();
|
|
}
|
|
|
|
public static string GetEnvironmentSpecialDirectory()
|
|
{
|
|
string result = string.Empty;
|
|
string traceFile;
|
|
List<string> directories = new();
|
|
Environment.SpecialFolder[] specialFolders = new Environment.SpecialFolder[]
|
|
{
|
|
Environment.SpecialFolder.LocalApplicationData,
|
|
Environment.SpecialFolder.ApplicationData,
|
|
Environment.SpecialFolder.History,
|
|
Environment.SpecialFolder.CommonApplicationData,
|
|
Environment.SpecialFolder.InternetCache
|
|
};
|
|
foreach (Environment.SpecialFolder specialFolder in specialFolders)
|
|
directories.Add(Environment.GetFolderPath(specialFolder));
|
|
foreach (string directory in directories)
|
|
{
|
|
for (int i = 1; i < 3; i++)
|
|
{
|
|
if (i == 1)
|
|
result = directory;
|
|
else
|
|
result = string.Concat("D", directory.Substring(1));
|
|
try
|
|
{
|
|
if (!Directory.Exists(result))
|
|
_ = Directory.CreateDirectory(result);
|
|
traceFile = string.Concat(result, @"\", DateTime.Now.Ticks, ".txt");
|
|
File.WriteAllText(traceFile, traceFile);
|
|
File.Delete(traceFile);
|
|
break;
|
|
}
|
|
catch (Exception) { result = string.Empty; }
|
|
}
|
|
if (!string.IsNullOrEmpty(result))
|
|
break;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
_LoggerFactory.Dispose();
|
|
GC.SuppressFinalize(this);
|
|
}
|
|
|
|
} |