2018-04-21 04:59:31 +00:00
|
|
|
using System;
|
2019-09-03 02:22:25 +00:00
|
|
|
using System.Diagnostics;
|
2011-11-13 07:27:16 +00:00
|
|
|
using System.IO;
|
2013-09-04 06:15:35 +00:00
|
|
|
using System.Threading;
|
2013-04-16 04:52:41 +00:00
|
|
|
using FluentAssertions;
|
2011-11-13 07:27:16 +00:00
|
|
|
using Moq;
|
2013-02-18 07:59:43 +00:00
|
|
|
using NLog;
|
2011-11-13 07:27:16 +00:00
|
|
|
using NUnit.Framework;
|
2013-05-23 05:12:01 +00:00
|
|
|
using NzbDrone.Common.Cache;
|
2013-06-28 00:04:52 +00:00
|
|
|
using NzbDrone.Common.EnvironmentInfo;
|
2013-04-24 01:56:00 +00:00
|
|
|
using NzbDrone.Common.Messaging;
|
2013-09-14 06:42:09 +00:00
|
|
|
using NzbDrone.Core.Messaging.Events;
|
2011-11-14 00:22:18 +00:00
|
|
|
using NzbDrone.Test.Common.AutoMoq;
|
2011-11-13 07:27:16 +00:00
|
|
|
|
|
|
|
namespace NzbDrone.Test.Common
|
|
|
|
{
|
2013-03-29 23:00:38 +00:00
|
|
|
public abstract class TestBase<TSubject> : TestBase where TSubject : class
|
|
|
|
{
|
|
|
|
|
|
|
|
private TSubject _subject;
|
|
|
|
|
|
|
|
[SetUp]
|
|
|
|
public void CoreTestSetup()
|
|
|
|
{
|
|
|
|
_subject = null;
|
2013-05-23 05:12:01 +00:00
|
|
|
|
2013-03-29 23:00:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
protected TSubject Subject
|
|
|
|
{
|
|
|
|
get
|
|
|
|
{
|
|
|
|
if (_subject == null)
|
|
|
|
{
|
|
|
|
_subject = Mocker.Resolve<TSubject>();
|
|
|
|
}
|
|
|
|
|
|
|
|
return _subject;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
2013-04-30 00:04:14 +00:00
|
|
|
|
2013-03-29 23:00:38 +00:00
|
|
|
}
|
|
|
|
|
2013-02-02 19:39:27 +00:00
|
|
|
public abstract class TestBase : LoggingTest
|
2011-11-13 07:27:16 +00:00
|
|
|
{
|
2013-09-04 06:15:35 +00:00
|
|
|
|
|
|
|
private static readonly Random _random = new Random();
|
2019-09-03 02:22:25 +00:00
|
|
|
private static int _nextUid;
|
2013-09-04 06:15:35 +00:00
|
|
|
|
2011-12-15 04:15:53 +00:00
|
|
|
private AutoMoqer _mocker;
|
|
|
|
protected AutoMoqer Mocker
|
|
|
|
{
|
|
|
|
get
|
|
|
|
{
|
|
|
|
if (_mocker == null)
|
|
|
|
{
|
|
|
|
_mocker = new AutoMoqer();
|
2014-09-11 23:49:41 +00:00
|
|
|
_mocker.SetConstant<ICacheManager>(new CacheManager());
|
|
|
|
_mocker.SetConstant<IStartupContext>(new StartupContext(new string[0]));
|
|
|
|
_mocker.SetConstant(TestLogger);
|
2011-12-15 04:15:53 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return _mocker;
|
|
|
|
}
|
|
|
|
}
|
2011-11-13 07:27:16 +00:00
|
|
|
|
2012-02-05 06:34:36 +00:00
|
|
|
|
2013-09-04 06:15:35 +00:00
|
|
|
protected int RandomNumber
|
|
|
|
{
|
|
|
|
get
|
|
|
|
{
|
|
|
|
Thread.Sleep(1);
|
|
|
|
return _random.Next(0, int.MaxValue);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-01-19 20:59:36 +00:00
|
|
|
private string VirtualPath
|
2011-11-13 07:27:16 +00:00
|
|
|
{
|
|
|
|
get
|
|
|
|
{
|
|
|
|
var virtualPath = Path.Combine(TempFolder, "VirtualNzbDrone");
|
|
|
|
if (!Directory.Exists(virtualPath)) Directory.CreateDirectory(virtualPath);
|
|
|
|
|
|
|
|
return virtualPath;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-09-03 02:22:25 +00:00
|
|
|
private string _tempFolder;
|
|
|
|
protected string TempFolder
|
|
|
|
{
|
|
|
|
get
|
|
|
|
{
|
|
|
|
if (_tempFolder == null)
|
|
|
|
{
|
|
|
|
_tempFolder = Path.Combine(TestContext.CurrentContext.TestDirectory, "_temp_" + GetUID());
|
|
|
|
|
|
|
|
Directory.CreateDirectory(_tempFolder);
|
|
|
|
}
|
|
|
|
|
|
|
|
return _tempFolder;
|
|
|
|
}
|
|
|
|
}
|
2013-01-19 20:59:36 +00:00
|
|
|
|
2011-11-13 07:27:16 +00:00
|
|
|
[SetUp]
|
2011-11-13 19:15:40 +00:00
|
|
|
public void TestBaseSetup()
|
2011-11-13 07:27:16 +00:00
|
|
|
{
|
2013-04-16 04:52:41 +00:00
|
|
|
GetType().IsPublic.Should().BeTrue("All Test fixtures should be public to work in mono.");
|
|
|
|
|
2013-03-04 05:53:02 +00:00
|
|
|
LogManager.ReconfigExistingLoggers();
|
|
|
|
|
2019-09-03 02:22:25 +00:00
|
|
|
_tempFolder = null;
|
2011-11-13 07:27:16 +00:00
|
|
|
}
|
|
|
|
|
2011-11-13 19:15:40 +00:00
|
|
|
[TearDown]
|
|
|
|
public void TestBaseTearDown()
|
|
|
|
{
|
2011-12-15 04:15:53 +00:00
|
|
|
_mocker = null;
|
2013-01-19 20:59:36 +00:00
|
|
|
|
2019-09-03 02:22:25 +00:00
|
|
|
DeleteTempFolder(_tempFolder);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public static string GetUID()
|
|
|
|
{
|
|
|
|
return Process.GetCurrentProcess().Id + "_" + DateTime.Now.Ticks + "_" + Interlocked.Increment(ref _nextUid);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void DeleteTempFolder(string folder)
|
|
|
|
{
|
|
|
|
if (folder == null)
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2013-01-19 20:59:36 +00:00
|
|
|
try
|
|
|
|
{
|
2019-09-03 02:22:25 +00:00
|
|
|
var tempFolder = new DirectoryInfo(folder);
|
2014-05-04 14:33:25 +00:00
|
|
|
if (tempFolder.Exists)
|
2013-01-19 20:59:36 +00:00
|
|
|
{
|
2014-05-04 14:33:25 +00:00
|
|
|
foreach (var file in tempFolder.GetFiles("*", SearchOption.AllDirectories))
|
|
|
|
{
|
|
|
|
file.IsReadOnly = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
tempFolder.Delete(true);
|
2013-01-19 20:59:36 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (Exception)
|
|
|
|
{
|
|
|
|
}
|
2013-06-28 01:03:04 +00:00
|
|
|
}
|
2013-04-30 00:04:14 +00:00
|
|
|
|
2013-07-05 04:43:28 +00:00
|
|
|
protected IAppFolderInfo TestFolderInfo { get; private set; }
|
2013-04-30 00:39:25 +00:00
|
|
|
|
|
|
|
protected void WindowsOnly()
|
|
|
|
{
|
2014-12-07 20:54:07 +00:00
|
|
|
if (OsInfo.IsNotWindows)
|
2013-04-30 00:39:25 +00:00
|
|
|
{
|
|
|
|
throw new IgnoreException("windows specific test");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-10-14 20:21:00 +00:00
|
|
|
protected void PosixOnly()
|
|
|
|
{
|
|
|
|
if (OsInfo.IsWindows)
|
|
|
|
{
|
|
|
|
throw new IgnoreException("non windows specific test");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-03-14 10:15:30 +00:00
|
|
|
protected void MonoOnly()
|
2013-04-30 00:39:25 +00:00
|
|
|
{
|
2018-04-21 04:59:31 +00:00
|
|
|
if (!PlatformInfo.IsMono)
|
2013-04-30 00:39:25 +00:00
|
|
|
{
|
2014-09-11 23:49:41 +00:00
|
|
|
throw new IgnoreException("mono specific test");
|
2013-04-30 00:04:14 +00:00
|
|
|
}
|
2011-11-13 07:27:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
protected void WithTempAsAppPath()
|
|
|
|
{
|
2013-07-05 04:43:28 +00:00
|
|
|
Mocker.GetMock<IAppFolderInfo>()
|
|
|
|
.SetupGet(c => c.AppDataFolder)
|
2011-11-13 07:27:16 +00:00
|
|
|
.Returns(VirtualPath);
|
2013-06-28 01:03:04 +00:00
|
|
|
|
2013-07-05 04:43:28 +00:00
|
|
|
TestFolderInfo = Mocker.GetMock<IAppFolderInfo>().Object;
|
2011-11-13 07:27:16 +00:00
|
|
|
}
|
|
|
|
|
2016-04-04 17:40:51 +00:00
|
|
|
protected string GetTestPath(string path)
|
|
|
|
{
|
|
|
|
return Path.Combine(TestContext.CurrentContext.TestDirectory, Path.Combine(path.Split('/')));
|
|
|
|
}
|
|
|
|
|
|
|
|
protected string ReadAllText(string path)
|
|
|
|
{
|
|
|
|
return File.ReadAllText(GetTestPath(path));
|
|
|
|
}
|
|
|
|
|
2014-05-04 14:33:25 +00:00
|
|
|
protected string GetTempFilePath()
|
2013-09-13 04:59:29 +00:00
|
|
|
{
|
2014-05-04 14:33:25 +00:00
|
|
|
return Path.Combine(TempFolder, Path.GetRandomFileName());
|
2013-09-13 04:59:29 +00:00
|
|
|
}
|
|
|
|
|
2013-05-13 02:52:55 +00:00
|
|
|
protected void VerifyEventPublished<TEvent>() where TEvent : class, IEvent
|
2013-02-24 19:18:48 +00:00
|
|
|
{
|
2013-03-07 04:34:56 +00:00
|
|
|
VerifyEventPublished<TEvent>(Times.Once());
|
|
|
|
}
|
|
|
|
|
2013-05-13 02:52:55 +00:00
|
|
|
protected void VerifyEventPublished<TEvent>(Times times) where TEvent : class, IEvent
|
2013-03-07 04:34:56 +00:00
|
|
|
{
|
2013-09-14 06:36:07 +00:00
|
|
|
Mocker.GetMock<IEventAggregator>().Verify(c => c.PublishEvent(It.IsAny<TEvent>()), times);
|
2013-02-24 19:18:48 +00:00
|
|
|
}
|
|
|
|
|
2013-05-13 02:52:55 +00:00
|
|
|
protected void VerifyEventNotPublished<TEvent>() where TEvent : class, IEvent
|
2013-02-24 19:18:48 +00:00
|
|
|
{
|
2013-09-14 06:36:07 +00:00
|
|
|
Mocker.GetMock<IEventAggregator>().Verify(c => c.PublishEvent(It.IsAny<TEvent>()), Times.Never());
|
2013-02-24 19:18:48 +00:00
|
|
|
}
|
2011-11-13 07:27:16 +00:00
|
|
|
}
|
|
|
|
}
|