2011-05-22 19:53:21 +03:00
|
|
|
// ReSharper disable RedundantUsingDirective
|
2011-10-24 08:54:09 +03:00
|
|
|
|
2011-05-22 19:53:21 +03:00
|
|
|
using System;
|
2011-05-19 06:55:35 +03:00
|
|
|
using System.Collections.Generic;
|
2011-06-18 05:00:44 +03:00
|
|
|
using System.Linq;
|
2011-05-19 06:55:35 +03:00
|
|
|
using NLog;
|
|
|
|
using NLog.Targets;
|
2011-06-03 00:06:46 +03:00
|
|
|
using NUnit.Framework;
|
2011-05-19 06:55:35 +03:00
|
|
|
|
2011-10-24 08:54:09 +03:00
|
|
|
namespace NzbDrone.Test.Common
|
2011-05-19 06:55:35 +03:00
|
|
|
{
|
|
|
|
public class ExceptionVerification : Target
|
|
|
|
{
|
|
|
|
private static List<LogEventInfo> _logs = new List<LogEventInfo>();
|
|
|
|
|
|
|
|
protected override void Write(LogEventInfo logEvent)
|
|
|
|
{
|
|
|
|
if (logEvent.Level >= LogLevel.Warn)
|
|
|
|
{
|
|
|
|
_logs.Add(logEvent);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-10-24 08:54:09 +03:00
|
|
|
public static void Reset()
|
2011-05-19 06:55:35 +03:00
|
|
|
{
|
|
|
|
_logs = new List<LogEventInfo>();
|
|
|
|
}
|
|
|
|
|
2011-10-24 08:54:09 +03:00
|
|
|
public static void AssertNoUnexcpectedLogs()
|
2011-05-19 06:55:35 +03:00
|
|
|
{
|
2011-12-20 03:58:26 +03:00
|
|
|
ExpectedFatals(0);
|
|
|
|
ExpectedErrors(0);
|
|
|
|
ExpectedWarns(0);
|
2011-05-19 06:55:35 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
private static string GetLogsString(IEnumerable<LogEventInfo> logs)
|
|
|
|
{
|
|
|
|
string errors = "";
|
|
|
|
foreach (var log in logs)
|
|
|
|
{
|
|
|
|
string exception = "";
|
|
|
|
if (log.Exception != null)
|
|
|
|
{
|
2011-11-21 06:58:32 +03:00
|
|
|
exception = String.Format("[{0}: {1}]", log.Exception.GetType(), log.Exception.Message);
|
2011-05-19 06:55:35 +03:00
|
|
|
}
|
2011-11-07 09:26:21 +03:00
|
|
|
|
|
|
|
errors += Environment.NewLine + String.Format("[{0}] {1}: {2} {3}", log.Level, log.LoggerName, log.FormattedMessage, exception);
|
2011-05-19 06:55:35 +03:00
|
|
|
}
|
|
|
|
return errors;
|
|
|
|
}
|
|
|
|
|
2011-12-20 03:58:26 +03:00
|
|
|
public static void ExpectedErrors(int count)
|
2011-05-19 06:55:35 +03:00
|
|
|
{
|
2012-03-07 10:34:26 +03:00
|
|
|
Expected(LogLevel.Error, count);
|
2011-05-19 06:55:35 +03:00
|
|
|
}
|
|
|
|
|
2011-12-20 03:58:26 +03:00
|
|
|
public static void ExpectedFatals(int count)
|
2011-05-19 06:55:35 +03:00
|
|
|
{
|
2012-03-07 10:34:26 +03:00
|
|
|
Expected(LogLevel.Fatal, count);
|
2011-05-19 06:55:35 +03:00
|
|
|
}
|
|
|
|
|
2011-12-20 03:58:26 +03:00
|
|
|
public static void ExpectedWarns(int count)
|
2011-05-19 06:55:35 +03:00
|
|
|
{
|
2012-03-07 10:34:26 +03:00
|
|
|
Expected(LogLevel.Warn, count);
|
2011-05-19 06:55:35 +03:00
|
|
|
}
|
|
|
|
|
2011-10-24 08:54:09 +03:00
|
|
|
public static void IgnoreWarns()
|
2011-05-20 07:18:51 +03:00
|
|
|
{
|
|
|
|
Ignore(LogLevel.Warn);
|
|
|
|
}
|
|
|
|
|
2011-10-24 08:54:09 +03:00
|
|
|
public static void IgnoreErrors()
|
2011-05-20 07:18:51 +03:00
|
|
|
{
|
|
|
|
Ignore(LogLevel.Error);
|
|
|
|
}
|
|
|
|
|
2011-10-24 08:54:09 +03:00
|
|
|
public static void MarkInconclusive(Type exception)
|
2011-10-17 05:42:11 +03:00
|
|
|
{
|
2011-11-21 06:58:32 +03:00
|
|
|
var inconclusiveLogs = _logs.Where(l => l.Exception != null && l.Exception.GetType() == exception).ToList();
|
2011-10-17 06:32:57 +03:00
|
|
|
|
2012-02-25 22:57:56 +03:00
|
|
|
if (inconclusiveLogs.Any())
|
2011-10-17 06:32:57 +03:00
|
|
|
{
|
|
|
|
inconclusiveLogs.ForEach(c => _logs.Remove(c));
|
|
|
|
Assert.Inconclusive(GetLogsString(inconclusiveLogs));
|
|
|
|
}
|
2011-10-17 05:42:11 +03:00
|
|
|
}
|
|
|
|
|
2012-01-23 06:01:16 +03:00
|
|
|
public static void MarkInconclusive(string text)
|
|
|
|
{
|
2012-02-25 22:57:56 +03:00
|
|
|
var inconclusiveLogs = _logs.Where(l => l.FormattedMessage.ToLower().Contains(text.ToLower())).ToList();
|
2012-01-23 06:01:16 +03:00
|
|
|
|
2012-02-25 22:57:56 +03:00
|
|
|
if (inconclusiveLogs.Any())
|
2012-01-23 06:01:16 +03:00
|
|
|
{
|
|
|
|
inconclusiveLogs.ForEach(c => _logs.Remove(c));
|
|
|
|
Assert.Inconclusive(GetLogsString(inconclusiveLogs));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-03-07 10:34:26 +03:00
|
|
|
private static void Expected(LogLevel level, int count)
|
2011-05-19 06:55:35 +03:00
|
|
|
{
|
2011-10-17 06:32:57 +03:00
|
|
|
var levelLogs = _logs.Where(l => l.Level == level).ToList();
|
2011-05-19 06:55:35 +03:00
|
|
|
|
|
|
|
if (levelLogs.Count != count)
|
|
|
|
{
|
2011-05-27 06:04:36 +03:00
|
|
|
|
2011-05-19 06:55:35 +03:00
|
|
|
var message = String.Format("{0} {1}(s) were expected but {2} were logged.\n\r{3}",
|
2011-05-27 06:04:36 +03:00
|
|
|
count, level, levelLogs.Count, GetLogsString(levelLogs));
|
|
|
|
|
2011-11-07 09:26:21 +03:00
|
|
|
message = "\n\r****************************************************************************************\n\r"
|
2011-05-27 06:04:36 +03:00
|
|
|
+ message +
|
2011-11-07 09:26:21 +03:00
|
|
|
"\n\r****************************************************************************************";
|
2011-05-19 06:55:35 +03:00
|
|
|
|
|
|
|
Assert.Fail(message);
|
|
|
|
}
|
|
|
|
|
|
|
|
levelLogs.ForEach(c => _logs.Remove(c));
|
|
|
|
}
|
2011-05-20 07:18:51 +03:00
|
|
|
|
|
|
|
private static void Ignore(LogLevel level)
|
|
|
|
{
|
|
|
|
var levelLogs = _logs.Where(l => l.Level == level).ToList();
|
|
|
|
levelLogs.ForEach(c => _logs.Remove(c));
|
|
|
|
}
|
2011-05-19 06:55:35 +03:00
|
|
|
}
|
|
|
|
}
|