From 899f12fd0c4a031c4c1b518523b6684d7842e0f7 Mon Sep 17 00:00:00 2001 From: Qstick Date: Sun, 29 Oct 2017 21:40:10 -0400 Subject: [PATCH] Set test log output via environment variable --- src/NzbDrone.Test.Common/LoggingTest.cs | 47 +++++++++++++++++-- .../NzbDrone.Test.Common.csproj | 1 + src/NzbDrone.Test.Common/TestLogOutput.cs | 9 ++++ test.sh | 8 +++- 4 files changed, 61 insertions(+), 4 deletions(-) create mode 100644 src/NzbDrone.Test.Common/TestLogOutput.cs diff --git a/src/NzbDrone.Test.Common/LoggingTest.cs b/src/NzbDrone.Test.Common/LoggingTest.cs index b8aba6dcd..b2d783761 100644 --- a/src/NzbDrone.Test.Common/LoggingTest.cs +++ b/src/NzbDrone.Test.Common/LoggingTest.cs @@ -1,6 +1,8 @@ using NLog; using NLog.Config; using NLog.Targets; +using System; +using System.IO; using NUnit.Framework; using NUnit.Framework.Interfaces; using NzbDrone.Common.EnvironmentInfo; @@ -20,9 +22,19 @@ namespace NzbDrone.Test.Common if (LogManager.Configuration == null || LogManager.Configuration.AllTargets.None(c => c is ExceptionVerification)) { LogManager.Configuration = new LoggingConfiguration(); - var consoleTarget = new ConsoleTarget { Layout = "${level}: ${message} ${exception}" }; - LogManager.Configuration.AddTarget(consoleTarget.GetType().Name, consoleTarget); - LogManager.Configuration.LoggingRules.Add(new LoggingRule("*", LogLevel.Trace, consoleTarget)); + + var logOutput = TestLogOutput.Console; + Enum.TryParse(Environment.GetEnvironmentVariable("LIDARR_TESTS_LOG_OUTPUT"), out logOutput); + + switch (logOutput) + { + case TestLogOutput.Console: + RegisterConsoleLogger(); + break; + case TestLogOutput.File: + RegisterFileLogger(); + break; + } RegisterExceptionVerification(); @@ -30,6 +42,32 @@ namespace NzbDrone.Test.Common } } + private static void RegisterConsoleLogger() + { + var consoleTarget = new ConsoleTarget { Layout = "${level}: ${message} ${exception}" }; + LogManager.Configuration.AddTarget(consoleTarget.GetType().Name, consoleTarget); + LogManager.Configuration.LoggingRules.Add(new LoggingRule("*", LogLevel.Trace, consoleTarget)); + } + + private static void RegisterFileLogger() + { + const string layout = @"${level}|${message}${onexception:inner=${newline}${newline}${exception:format=ToString}${newline}}"; + + var fileTarget = new FileTarget(); + + fileTarget.Name = "Test File Logger"; + fileTarget.FileName = Path.Combine(TestContext.CurrentContext.WorkDirectory, "TestLog.txt"); + fileTarget.AutoFlush = false; + fileTarget.KeepFileOpen = true; + fileTarget.ConcurrentWrites = true; + fileTarget.ConcurrentWriteAttemptDelay = 50; + fileTarget.ConcurrentWriteAttempts = 10; + fileTarget.Layout = layout; + + LogManager.Configuration.AddTarget(fileTarget.GetType().Name, fileTarget); + LogManager.Configuration.LoggingRules.Add(new LoggingRule("*", LogLevel.Trace, fileTarget)); + } + private static void RegisterExceptionVerification() { var exceptionVerification = new ExceptionVerification(); @@ -42,6 +80,7 @@ namespace NzbDrone.Test.Common { InitLogging(); ExceptionVerification.Reset(); + TestLogger.Info("--- Start: {0} ---", TestContext.CurrentContext.Test.FullName); } [TearDown] @@ -53,6 +92,8 @@ namespace NzbDrone.Test.Common { ExceptionVerification.AssertNoUnexpectedLogs(); } + + TestLogger.Info("--- End: {0} ---", TestContext.CurrentContext.Test.FullName); } } } diff --git a/src/NzbDrone.Test.Common/NzbDrone.Test.Common.csproj b/src/NzbDrone.Test.Common/NzbDrone.Test.Common.csproj index f710cb88b..03d7d1d15 100644 --- a/src/NzbDrone.Test.Common/NzbDrone.Test.Common.csproj +++ b/src/NzbDrone.Test.Common/NzbDrone.Test.Common.csproj @@ -107,6 +107,7 @@ + diff --git a/src/NzbDrone.Test.Common/TestLogOutput.cs b/src/NzbDrone.Test.Common/TestLogOutput.cs new file mode 100644 index 000000000..91cf2d52d --- /dev/null +++ b/src/NzbDrone.Test.Common/TestLogOutput.cs @@ -0,0 +1,9 @@ +namespace NzbDrone.Test.Common +{ + public enum TestLogOutput + { + Console = 0, + File = 1, + None = 2 + } +} diff --git a/test.sh b/test.sh index 77b58f2e5..0e4d1d381 100644 --- a/test.sh +++ b/test.sh @@ -4,14 +4,20 @@ WHERE="cat != ManualTest" TEST_DIR="." TEST_PATTERN="*Test.dll" ASSEMBLIES="" +TEST_LOG_FILE="TestLog.txt" if [ -d "$TEST_DIR/_tests" ]; then TEST_DIR="$TEST_DIR/_tests" fi +rm -f "$TEST_LOG_FILE" + +# Uncomment to log test output to a file instead of the console +# export LIDARR_TESTS_LOG_OUTPUT="File" + NUNIT="$TEST_DIR/NUnit.ConsoleRunner.3.2.0/tools/nunit3-console.exe" NUNIT_COMMAND="$NUNIT" -NUNIT_PARAMS="--teamcity" +NUNIT_PARAMS="--teamcity --workers=1" if [ "$PLATFORM" = "Windows" ]; then WHERE="$WHERE && cat != LINUX"