268 lines
8.1 KiB
C#
268 lines
8.1 KiB
C#
// ReSharper disable RedundantUsingDirective
|
|
using System;
|
|
using System.Linq;
|
|
using AutoMoq;
|
|
using FizzWare.NBuilder;
|
|
using FluentAssertions;
|
|
using Moq;
|
|
using NLog;
|
|
using NLog.Config;
|
|
using NUnit.Framework;
|
|
using NzbDrone.Core.Instrumentation;
|
|
using NzbDrone.Core.Providers;
|
|
using NzbDrone.Core.Repository;
|
|
using NzbDrone.Core.Repository.Quality;
|
|
using NzbDrone.Core.Test.Framework;
|
|
|
|
namespace NzbDrone.Core.Test
|
|
{
|
|
[TestFixture]
|
|
// ReSharper disable InconsistentNaming
|
|
public class LogProviderTest : TestBase
|
|
{
|
|
|
|
|
|
[Test]
|
|
public void write_log()
|
|
{
|
|
//setup
|
|
var message = Guid.NewGuid().ToString();
|
|
|
|
var db = MockLib.GetEmptyDatabase(true);
|
|
|
|
var sonicTarget = new DatabaseTarget(db);
|
|
|
|
LogManager.Configuration.AddTarget("DbLogger", sonicTarget);
|
|
LogManager.Configuration.LoggingRules.Add(new LoggingRule("*", LogLevel.Info, sonicTarget));
|
|
LogManager.Configuration.Reload();
|
|
|
|
Logger Logger = LogManager.GetCurrentClassLogger();
|
|
//Act
|
|
|
|
Logger.Info(message);
|
|
|
|
//Assert
|
|
db.Fetch<Log>().Should().HaveCount(1);
|
|
|
|
var logItem = db.Fetch<Log>().First();
|
|
Assert.AreNotEqual(new DateTime(), logItem.Time);
|
|
Assert.AreEqual(message, logItem.Message);
|
|
Assert.AreEqual("Core.Test.LogProviderTest", logItem.Logger);
|
|
|
|
Logger.Name.Should().EndWith(logItem.Logger);
|
|
|
|
Assert.AreEqual(LogLevel.Info.Name, logItem.Level);
|
|
Assert.AreEqual("write_log", logItem.Method);
|
|
}
|
|
|
|
[Test]
|
|
public void write_long_log()
|
|
{
|
|
//setup
|
|
var message = String.Empty;
|
|
for (int i = 0; i < 100; i++)
|
|
{
|
|
message += Guid.NewGuid();
|
|
}
|
|
|
|
var db = MockLib.GetEmptyDatabase(true);
|
|
|
|
var sonicTarget = new DatabaseTarget(db);
|
|
|
|
LogManager.Configuration.AddTarget("DbLogger", sonicTarget);
|
|
LogManager.Configuration.LoggingRules.Add(new LoggingRule("*", LogLevel.Info, sonicTarget));
|
|
LogManager.Configuration.Reload();
|
|
|
|
Logger Logger = LogManager.GetCurrentClassLogger();
|
|
//Act
|
|
|
|
Logger.Info(message);
|
|
|
|
//Assert
|
|
db.Fetch<Log>().Should().HaveCount(1);
|
|
|
|
var logItem = db.Fetch<Log>().First();
|
|
|
|
logItem.Message.Should().HaveLength(message.Length);
|
|
Assert.AreEqual(message, logItem.Message);
|
|
}
|
|
|
|
|
|
[Test]
|
|
public void clearLog()
|
|
{
|
|
//setup
|
|
var db = MockLib.GetEmptyDatabase(true);
|
|
|
|
var sonicTarget = new DatabaseTarget(db);
|
|
|
|
LogManager.Configuration.AddTarget("DbLogger", sonicTarget);
|
|
LogManager.Configuration.LoggingRules.Add(new LoggingRule("*", LogLevel.Info, sonicTarget));
|
|
LogManager.Configuration.Reload();
|
|
|
|
Logger Logger = LogManager.GetCurrentClassLogger();
|
|
//Act
|
|
|
|
for (int i = 0; i < 10; i++)
|
|
{
|
|
Logger.Info("Test");
|
|
}
|
|
|
|
|
|
|
|
//Assert
|
|
var provider = new LogProvider(db);
|
|
provider.GetAllLogs().Should().HaveCount(10);
|
|
provider.DeleteAll();
|
|
provider.GetAllLogs().Should().HaveCount(1);
|
|
}
|
|
|
|
[Test]
|
|
public void write_log_exception()
|
|
{
|
|
//setup
|
|
var message = Guid.NewGuid().ToString();
|
|
|
|
var db = MockLib.GetEmptyDatabase(true);
|
|
|
|
var sonicTarget = new DatabaseTarget(db);
|
|
|
|
LogManager.Configuration.AddTarget("DbLogger", sonicTarget);
|
|
LogManager.Configuration.LoggingRules.Add(new LoggingRule("*", LogLevel.Info, sonicTarget));
|
|
LogManager.Configuration.Reload();
|
|
|
|
Logger Logger = LogManager.GetCurrentClassLogger();
|
|
|
|
var ex = new InvalidOperationException("Fake Exception");
|
|
//Act
|
|
|
|
Logger.ErrorException(message, ex);
|
|
|
|
//Assert
|
|
db.Fetch<Log>().Should().HaveCount(1);
|
|
|
|
var logItem = db.Fetch<Log>().First();
|
|
Assert.AreNotEqual(new DateTime(), logItem.Time);
|
|
Assert.AreEqual(message + ": " + ex.Message, logItem.Message);
|
|
Assert.AreEqual("Core.Test.LogProviderTest", logItem.Logger);
|
|
Assert.AreEqual(LogLevel.Error.Name, logItem.Level);
|
|
Assert.AreEqual(ex.GetType().ToString(), logItem.ExceptionType);
|
|
Assert.AreEqual(ex.ToString(), logItem.Exception);
|
|
ExceptionVerification.ExcpectedErrors(1);
|
|
}
|
|
|
|
[Test]
|
|
public void write_log_exception_no_message_should_use_exception_message()
|
|
{
|
|
//setup
|
|
var message = String.Empty;
|
|
|
|
var db = MockLib.GetEmptyDatabase(true);
|
|
|
|
var sonicTarget = new DatabaseTarget(db);
|
|
|
|
LogManager.Configuration.AddTarget("DbLogger", sonicTarget);
|
|
LogManager.Configuration.LoggingRules.Add(new LoggingRule("*", LogLevel.Info, sonicTarget));
|
|
LogManager.Configuration.Reload();
|
|
|
|
Logger Logger = LogManager.GetCurrentClassLogger();
|
|
|
|
var ex = new InvalidOperationException("Fake Exception");
|
|
//Act
|
|
|
|
Logger.ErrorException(message, ex);
|
|
|
|
//Assert
|
|
db.Fetch<Log>().Should().HaveCount(1);
|
|
|
|
var logItem = db.Fetch<Log>().First();
|
|
Assert.AreNotEqual(new DateTime(), logItem.Time);
|
|
Assert.AreEqual(ex.Message, logItem.Message);
|
|
Assert.AreEqual("Core.Test.LogProviderTest", logItem.Logger);
|
|
Assert.AreEqual(LogLevel.Error.Name, logItem.Level);
|
|
Assert.AreEqual(ex.GetType().ToString(), logItem.ExceptionType);
|
|
Assert.AreEqual(ex.ToString(), logItem.Exception);
|
|
ExceptionVerification.ExcpectedErrors(1);
|
|
}
|
|
|
|
[Test]
|
|
public void null_string_as_arg_should_not_fail()
|
|
{
|
|
//setup
|
|
|
|
Logger Logger = LogManager.GetCurrentClassLogger();
|
|
var epFile = new EpisodeFile();
|
|
Logger.Trace("File {0} no longer exists on disk. removing from database.", epFile.Path);
|
|
|
|
epFile.Path.Should().BeNull();
|
|
}
|
|
|
|
[Test]
|
|
public void top_logs()
|
|
{
|
|
//Setup
|
|
var mocker = new AutoMoqer(MockBehavior.Strict);
|
|
var db = MockLib.GetEmptyDatabase();
|
|
mocker.SetConstant(db);
|
|
|
|
var fakeLogs = Builder<Log>.CreateListOfSize(510)
|
|
|
|
.Build();
|
|
|
|
db.InsertMany(fakeLogs);
|
|
|
|
//Act
|
|
var logs = mocker.Resolve<LogProvider>().TopLogs(500);
|
|
|
|
//Assert
|
|
logs.Should().HaveCount(501);
|
|
logs.Last().Message.Should().Be(
|
|
"Number of logs currently shown: 500. More may exist, check 'All' to see everything");
|
|
}
|
|
|
|
[Test]
|
|
public void top_logs_less_than_number_wanted()
|
|
{
|
|
//Setup
|
|
var mocker = new AutoMoqer(MockBehavior.Strict);
|
|
var db = MockLib.GetEmptyDatabase();
|
|
mocker.SetConstant(db);
|
|
|
|
var fakeLogs = Builder<Log>.CreateListOfSize(100)
|
|
|
|
.Build();
|
|
|
|
db.InsertMany(fakeLogs);
|
|
|
|
//Act
|
|
var logs = mocker.Resolve<LogProvider>().TopLogs(500);
|
|
|
|
//Assert
|
|
logs.Should().HaveCount(101);
|
|
logs.Last().Message.Should().Be(
|
|
"Number of logs currently shown: 100. More may exist, check 'All' to see everything");
|
|
}
|
|
|
|
[Test]
|
|
public void pagedLogs()
|
|
{
|
|
//Setup
|
|
var mocker = new AutoMoqer(MockBehavior.Strict);
|
|
var db = MockLib.GetEmptyDatabase();
|
|
mocker.SetConstant(db);
|
|
|
|
var fakeLogs = Builder<Log>.CreateListOfSize(100)
|
|
|
|
.Build();
|
|
|
|
db.InsertMany(fakeLogs);
|
|
|
|
//Act
|
|
var logs = mocker.Resolve<LogProvider>().GetPagedLogs(1, 50);
|
|
|
|
//Assert
|
|
logs.Items.Should().HaveCount(50);
|
|
logs.TotalItems.Should().Be(100);
|
|
}
|
|
}
|
|
} |