From 08ec560c71d252c777f0a4eae4f35606eae762c9 Mon Sep 17 00:00:00 2001 From: "kay.one" Date: Sat, 12 Nov 2011 17:59:33 -0800 Subject: [PATCH 01/10] Resharper EAP fixes --- NzbDrone.6.1.ReSharper | 148 ++++++++++++++++++++++ NzbDrone.Web/Content/Blueprint/screen.css | 4 - NzbDrone.Web/Content/Slider.css | 4 +- 3 files changed, 150 insertions(+), 6 deletions(-) create mode 100644 NzbDrone.6.1.ReSharper diff --git a/NzbDrone.6.1.ReSharper b/NzbDrone.6.1.ReSharper new file mode 100644 index 000000000..79b7cba21 --- /dev/null +++ b/NzbDrone.6.1.ReSharper @@ -0,0 +1,148 @@ + + + + SOLUTION + + + + + + + True + False + 2 + SEPARATE + True + True + True + + public + protected + internal + private + new + abstract + virtual + override + sealed + static + readonly + extern + unsafe + volatile + + False + True + True + False + False + False + True + False + False + False + False + False + True + False + False + False + False + False + + + + System.Linq + + + + $object$_On$event$ + $event$Handler + + + + + + + + + + + + + + + + + + + + + + $object$_On$event$ + $event$Handler + + + + + + + + + + + + + + $object$_On$event$ + $event$Handler + + + + + + + + + + + + + + + + + + + + + + 43BD3BBD-1531-4D8F-9C08-E1CD544AB2CD/d:Content/d:2011.2.712 + 43BD3BBD-1531-4D8F-9C08-E1CD544AB2CD/d:Content/d:jQueryUI + + + + + + + + + \ No newline at end of file diff --git a/NzbDrone.Web/Content/Blueprint/screen.css b/NzbDrone.Web/Content/Blueprint/screen.css index 69f2d5ec0..39e65517e 100644 --- a/NzbDrone.Web/Content/Blueprint/screen.css +++ b/NzbDrone.Web/Content/Blueprint/screen.css @@ -413,10 +413,6 @@ form.inline p width: 1190px; margin: 0 auto; } -.showgrid -{ - background: url(src/grid.png); -} .column, .span-1, .span-2, .span-3, .span-4, .span-5, .span-6, .span-7, .span-8, .span-9, .span-10, .span-11, .span-12, .span-13, .span-14, .span-15, .span-16, .span-17, .span-18, .span-19, .span-20, .span-21, .span-22, .span-23, .span-24 { float: left; diff --git a/NzbDrone.Web/Content/Slider.css b/NzbDrone.Web/Content/Slider.css index 5e738f808..c3c4ced73 100644 --- a/NzbDrone.Web/Content/Slider.css +++ b/NzbDrone.Web/Content/Slider.css @@ -54,9 +54,9 @@ } .sliderClosed { - background:url('../../Content/Images/ui-icons_2e83ff_256x240.png') -64px -16px no-repeat; + background:url('../Content/Images/ui-icons_2e83ff_256x240.png') -64px -16px no-repeat; } .sliderOpened { - background:url('../../Content/Images/ui-icons_2e83ff_256x240.png') 0px -16px no-repeat; + background:url('../Content/Images/ui-icons_2e83ff_256x240.png') 0px -16px no-repeat; } \ No newline at end of file From 1270e464b35c4969b6aedc178d5686ce94648442 Mon Sep 17 00:00:00 2001 From: "kay.one" Date: Sat, 12 Nov 2011 20:07:06 -0800 Subject: [PATCH 02/10] More autoupdate code. --- NzbDrone.Common/DiskProvider.cs | 62 +++++++--- NzbDrone.Common/PathProvider.cs | 19 ++- NzbDrone.Common/ServiceProvider.cs | 10 ++ .../JobTests/BannerDownloadJobTest.cs | 1 - .../ExtractArchiveFixture.cs | 4 +- .../DiskProviderTests/FreeDiskSpaceTest.cs | 1 + .../ProviderTests/DiskScanProviderTest.cs | 1 + .../DiskScanProviderTest_ImportFile.cs | 1 + .../ProviderTests/MediaFileProviderTests.cs | 1 + .../ProcessDownloadFixture.cs | 1 + .../ProviderTests/RootDirProviderTest.cs | 1 + .../PreformUpdateFixture.cs | 39 +++--- NzbDrone.Core/Providers/Core/DiskProvider.cs | 109 +--------------- NzbDrone.Core/Providers/DiskScanProvider.cs | 1 + .../Providers/Jobs/BannerDownloadJob.cs | 1 - .../Providers/Jobs/PostDownloadScanJob.cs | 1 + .../Providers/PostDownloadProvider.cs | 1 + NzbDrone.Core/Providers/RootDirProvider.cs | 1 + NzbDrone.Core/Providers/UpdateProvider.cs | 11 +- .../UpdateProviderStartTest.cs | 116 +++++++++++++++++- .../UpdateProviderVerifyTest.cs | 28 ++--- NzbDrone.Update/Providers/UpdateProvider.cs | 68 +++++++--- .../Controllers/AddSeriesController.cs | 1 + .../Controllers/DirectoryController.cs | 8 +- NzbDrone.Web/Controllers/SystemController.cs | 2 +- 25 files changed, 285 insertions(+), 204 deletions(-) diff --git a/NzbDrone.Common/DiskProvider.cs b/NzbDrone.Common/DiskProvider.cs index fcec4573f..a3f49be2f 100644 --- a/NzbDrone.Common/DiskProvider.cs +++ b/NzbDrone.Common/DiskProvider.cs @@ -2,12 +2,20 @@ using System.Collections.Generic; using System.IO; using System.Linq; +using System.Runtime.InteropServices; using NLog; namespace NzbDrone.Common { public class DiskProvider { + [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)] + [return: MarshalAs(UnmanagedType.Bool)] + static extern bool GetDiskFreeSpaceEx(string lpDirectoryName, + out ulong lpFreeBytesAvailable, + out ulong lpTotalNumberOfBytes, + out ulong lpTotalNumberOfFreeBytes); + private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); public virtual bool FolderExists(string path) @@ -47,6 +55,25 @@ namespace NzbDrone.Common return Directory.CreateDirectory(path).FullName; } + public virtual void CopyDirectory(string source, string target) + { + Logger.Trace("Copying {0} -> {1}", source, target); + + var sourceFolder = new DirectoryInfo(source); + var targetFolder = new DirectoryInfo(target); + + if (!targetFolder.Exists) + { + targetFolder.Create(); + } + + foreach (var file in sourceFolder.GetFiles("*.*", SearchOption.AllDirectories)) + { + var destFile = Path.Combine(target, file.Name); + file.CopyTo(destFile, true); + } + } + public virtual void DeleteFile(string path) { File.Delete(path); @@ -77,30 +104,25 @@ namespace NzbDrone.Common Directory.Move(source, destination); } - public virtual void CopyDirectory(string source, string target) - { - Logger.Trace("Copying {0} -> {1}", source, target); - - var sourceFolder = new DirectoryInfo(source); - var targetFolder = new DirectoryInfo(target); - - if (!targetFolder.Exists) - { - targetFolder.Create(); - } - - foreach (var file in sourceFolder.GetFiles("*.*", SearchOption.AllDirectories)) - { - var destFile = Path.Combine(target, file.Name); - file.CopyTo(destFile, true); - } - } - public virtual void InheritFolderPermissions(string filename) { var fs = File.GetAccessControl(filename); fs.SetAccessRuleProtection(false, false); File.SetAccessControl(filename, fs); } + + public virtual ulong FreeDiskSpace(DirectoryInfo directoryInfo) + { + ulong freeBytesAvailable; + ulong totalNumberOfBytes; + ulong totalNumberOfFreeBytes; + + bool success = GetDiskFreeSpaceEx(directoryInfo.FullName, out freeBytesAvailable, out totalNumberOfBytes, + out totalNumberOfFreeBytes); + if (!success) + throw new System.ComponentModel.Win32Exception(); + + return freeBytesAvailable; + } } -} +} \ No newline at end of file diff --git a/NzbDrone.Common/PathProvider.cs b/NzbDrone.Common/PathProvider.cs index 9925e72b5..1dffafeba 100644 --- a/NzbDrone.Common/PathProvider.cs +++ b/NzbDrone.Common/PathProvider.cs @@ -17,11 +17,12 @@ namespace NzbDrone.Common private const string NZBDRONE_DB_FILE = "nzbdrone.sdf"; private const string LOG_DB_FILE = "log.sdf"; - public const string UPDATE_SANDBOX_FOLDER_NAME = "nzbdrone_update"; + private const string UPDATE_SANDBOX_FOLDER_NAME = "nzbdrone_update"; + private const string UPDATE_BACKUP_FOLDER_NAME = "nzbdrone_backup"; private readonly string _applicationPath; - + public PathProvider(EnviromentProvider enviromentProvider) { _applicationPath = enviromentProvider.ApplicationPath; @@ -29,7 +30,7 @@ namespace NzbDrone.Common public PathProvider() { - + } public virtual String LogPath @@ -103,9 +104,19 @@ namespace NzbDrone.Common get { return Path.Combine(AppData, "Cache"); } } - public string UpdateSandboxFolder + public virtual string UpdateSandboxFolder { get { return Path.Combine(SystemTemp, UPDATE_SANDBOX_FOLDER_NAME); } } + + public virtual string UpdatePackageFolder + { + get { return Path.Combine(UPDATE_SANDBOX_FOLDER_NAME, "NzbDrone"); } + } + + public virtual string UpdateBackUpFolder + { + get { return Path.Combine(UpdateSandboxFolder, UPDATE_BACKUP_FOLDER_NAME); } + } } } \ No newline at end of file diff --git a/NzbDrone.Common/ServiceProvider.cs b/NzbDrone.Common/ServiceProvider.cs index bf22ca256..c086af759 100644 --- a/NzbDrone.Common/ServiceProvider.cs +++ b/NzbDrone.Common/ServiceProvider.cs @@ -22,6 +22,16 @@ namespace NzbDrone.Common s => String.Equals(s.ServiceName, name, StringComparison.InvariantCultureIgnoreCase)); } + public virtual bool IsServiceRunning(string name) + { + Logger.Debug("Checking if '{0}' service is running", name); + + var service = ServiceController.GetServices() + .SingleOrDefault(s => String.Equals(s.ServiceName, name, StringComparison.InvariantCultureIgnoreCase)); + + return service != null && service.Status == ServiceControllerStatus.Running; + } + public virtual void Install(string serviceName) { diff --git a/NzbDrone.Core.Test/JobTests/BannerDownloadJobTest.cs b/NzbDrone.Core.Test/JobTests/BannerDownloadJobTest.cs index 3f37ffe38..4ff3f8e60 100644 --- a/NzbDrone.Core.Test/JobTests/BannerDownloadJobTest.cs +++ b/NzbDrone.Core.Test/JobTests/BannerDownloadJobTest.cs @@ -11,7 +11,6 @@ using NzbDrone.Core.Providers.Core; using NzbDrone.Core.Providers.Jobs; using NzbDrone.Core.Repository; using NzbDrone.Core.Test.Framework; -using DiskProvider = NzbDrone.Core.Providers.Core.DiskProvider; namespace NzbDrone.Core.Test.JobTests { diff --git a/NzbDrone.Core.Test/ProviderTests/DiskProviderTests/ExtractArchiveFixture.cs b/NzbDrone.Core.Test/ProviderTests/DiskProviderTests/ExtractArchiveFixture.cs index 2c2103b61..9b0ffca27 100644 --- a/NzbDrone.Core.Test/ProviderTests/DiskProviderTests/ExtractArchiveFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/DiskProviderTests/ExtractArchiveFixture.cs @@ -12,10 +12,10 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskProviderTests [Test] public void Should_extract_to_correct_folder() { - var diskProvider = new DiskProvider(); + var archiveProvider = new ArchiveProvider(); var destination = Path.Combine(TempFolder, "destination"); - diskProvider.ExtractArchive(GetTestFilePath("TestArchive.zip"), destination); + archiveProvider.ExtractArchive(GetTestFilePath("TestArchive.zip"), destination); var destinationFolder = new DirectoryInfo(destination); diff --git a/NzbDrone.Core.Test/ProviderTests/DiskProviderTests/FreeDiskSpaceTest.cs b/NzbDrone.Core.Test/ProviderTests/DiskProviderTests/FreeDiskSpaceTest.cs index 56e4c4934..7679538ee 100644 --- a/NzbDrone.Core.Test/ProviderTests/DiskProviderTests/FreeDiskSpaceTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/DiskProviderTests/FreeDiskSpaceTest.cs @@ -7,6 +7,7 @@ using AutoMoq; using FluentAssertions; using Moq; using NUnit.Framework; +using NzbDrone.Common; using NzbDrone.Core.Providers.Core; using NzbDrone.Core.Test.Framework; diff --git a/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTest.cs b/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTest.cs index 1a63cc487..1fc8d35bb 100644 --- a/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTest.cs @@ -4,6 +4,7 @@ using AutoMoq; using FizzWare.NBuilder; using Moq; using NUnit.Framework; +using NzbDrone.Common; using NzbDrone.Core.Providers; using NzbDrone.Core.Providers.Core; using NzbDrone.Core.Repository; diff --git a/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTest_ImportFile.cs b/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTest_ImportFile.cs index 9f37f54f0..caec1d8f1 100644 --- a/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTest_ImportFile.cs +++ b/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTest_ImportFile.cs @@ -5,6 +5,7 @@ using FizzWare.NBuilder; using FluentAssertions; using Moq; using NUnit.Framework; +using NzbDrone.Common; using NzbDrone.Core.Model; using NzbDrone.Core.Providers; using NzbDrone.Core.Providers.Core; diff --git a/NzbDrone.Core.Test/ProviderTests/MediaFileProviderTests.cs b/NzbDrone.Core.Test/ProviderTests/MediaFileProviderTests.cs index edfa1ac69..4b5f55391 100644 --- a/NzbDrone.Core.Test/ProviderTests/MediaFileProviderTests.cs +++ b/NzbDrone.Core.Test/ProviderTests/MediaFileProviderTests.cs @@ -6,6 +6,7 @@ using FizzWare.NBuilder; using FluentAssertions; using Moq; using NUnit.Framework; +using NzbDrone.Common; using NzbDrone.Core.Providers; using NzbDrone.Core.Providers.Core; using NzbDrone.Core.Repository; diff --git a/NzbDrone.Core.Test/ProviderTests/PostDownloadProviderTests/ProcessDownloadFixture.cs b/NzbDrone.Core.Test/ProviderTests/PostDownloadProviderTests/ProcessDownloadFixture.cs index 8a8655838..77a87f7c6 100644 --- a/NzbDrone.Core.Test/ProviderTests/PostDownloadProviderTests/ProcessDownloadFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/PostDownloadProviderTests/ProcessDownloadFixture.cs @@ -7,6 +7,7 @@ using AutoMoq; using FizzWare.NBuilder; using Moq; using NUnit.Framework; +using NzbDrone.Common; using NzbDrone.Core.Model; using NzbDrone.Core.Providers; using NzbDrone.Core.Providers.Core; diff --git a/NzbDrone.Core.Test/ProviderTests/RootDirProviderTest.cs b/NzbDrone.Core.Test/ProviderTests/RootDirProviderTest.cs index 9c52f8fa8..af1179cf5 100644 --- a/NzbDrone.Core.Test/ProviderTests/RootDirProviderTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/RootDirProviderTest.cs @@ -6,6 +6,7 @@ using AutoMoq; using FluentAssertions; using Moq; using NUnit.Framework; +using NzbDrone.Common; using NzbDrone.Core.Providers; using NzbDrone.Core.Providers.Core; using NzbDrone.Core.Repository; diff --git a/NzbDrone.Core.Test/ProviderTests/UpdateProviderTests/PreformUpdateFixture.cs b/NzbDrone.Core.Test/ProviderTests/UpdateProviderTests/PreformUpdateFixture.cs index a6d09601d..1f31f0eb5 100644 --- a/NzbDrone.Core.Test/ProviderTests/UpdateProviderTests/PreformUpdateFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/UpdateProviderTests/PreformUpdateFixture.cs @@ -1,29 +1,34 @@ using System; using System.IO; -using AutoMoq; using FluentAssertions; -using Moq; using NUnit.Framework; using NzbDrone.Common; using NzbDrone.Core.Model; using NzbDrone.Core.Providers; using NzbDrone.Core.Providers.Core; using NzbDrone.Core.Test.Framework; -using DiskProvider = NzbDrone.Core.Providers.Core.DiskProvider; namespace NzbDrone.Core.Test.ProviderTests.UpdateProviderTests { [TestFixture] internal class PreformUpdateFixture : TestBase { - private AutoMoqer _mocker = null; + + private string SandBoxPath; [SetUp] public void setup() { - _mocker = new AutoMoqer(MockBehavior.Strict); - _mocker.GetMock() - .SetupGet(c => c.SystemTemp).Returns(TempFolder); + WithStrictMocker(); + Mocker.GetMock() + .SetupGet(c => c.UpdateSandboxFolder).Returns(Path.Combine(TempFolder, "NzbDrone_update")); + + + SandBoxPath = Mocker.GetMock().Object.UpdateSandboxFolder; + + Mocker.GetMock() + .SetupGet(c => c.UpdatePackageFolder).Returns(Path.Combine(SandBoxPath, "NzbDrone")); + } @@ -38,21 +43,20 @@ namespace NzbDrone.Core.Test.ProviderTests.UpdateProviderTests Version = new Version("0.6.0.2031") }; - _mocker.GetMock().Setup( - c => c.DownloadFile(updatePackage.Url, Path.Combine(TempFolder, PathProvider.UPDATE_SANDBOX_FOLDER_NAME, updatePackage.FileName))); + Mocker.GetMock().Setup( + c => c.DownloadFile(updatePackage.Url, Path.Combine(SandBoxPath, updatePackage.FileName))); - _mocker.GetMock().Setup( - c => c.ExtractArchive(Path.Combine(TempFolder, PathProvider.UPDATE_SANDBOX_FOLDER_NAME, updatePackage.FileName), - Path.Combine(TempFolder, PathProvider.UPDATE_SANDBOX_FOLDER_NAME))); + Mocker.GetMock().Setup( + c => c.ExtractArchive(Path.Combine(SandBoxPath, updatePackage.FileName), SandBoxPath)); - _mocker.Resolve().PreformUpdate(updatePackage); + Mocker.Resolve().StartUpgrade(updatePackage); } [Test] public void Should_download_and_extract_to_temp_folder() { - var updateSubFolder = new DirectoryInfo(Path.Combine(TempFolder, PathProvider.UPDATE_SANDBOX_FOLDER_NAME)); + var updateSubFolder = new DirectoryInfo(SandBoxPath); var updatePackage = new UpdatePackage { @@ -65,9 +69,10 @@ namespace NzbDrone.Core.Test.ProviderTests.UpdateProviderTests //Act updateSubFolder.Exists.Should().BeFalse(); - _mocker.Resolve(); - _mocker.Resolve(); - _mocker.Resolve().PreformUpdate(updatePackage); + Mocker.Resolve(); + Mocker.Resolve(); + Mocker.Resolve(); + Mocker.Resolve().StartUpgrade(updatePackage); updateSubFolder.Refresh(); //Assert diff --git a/NzbDrone.Core/Providers/Core/DiskProvider.cs b/NzbDrone.Core/Providers/Core/DiskProvider.cs index 4fe32a0f7..aa2de9abf 100644 --- a/NzbDrone.Core/Providers/Core/DiskProvider.cs +++ b/NzbDrone.Core/Providers/Core/DiskProvider.cs @@ -1,122 +1,25 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Runtime.InteropServices; +using System.Linq; using Ionic.Zip; using NLog; namespace NzbDrone.Core.Providers.Core { - public class DiskProvider + public class ArchiveProvider { - [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)] - [return: MarshalAs(UnmanagedType.Bool)] - static extern bool GetDiskFreeSpaceEx(string lpDirectoryName, - out ulong lpFreeBytesAvailable, - out ulong lpTotalNumberOfBytes, - out ulong lpTotalNumberOfFreeBytes); - - private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); - - public virtual bool FolderExists(string path) - { - return Directory.Exists(path); - } - - public virtual bool FileExists(string path) - { - return File.Exists(path); - } - - public virtual string[] GetDirectories(string path) - { - return Directory.GetDirectories(path); - } - - public virtual string[] GetFiles(string path, SearchOption searchOption) - { - return Directory.GetFiles(path, "*.*", searchOption); - } - - public virtual long GetDirectorySize(string path) - { - return GetFiles(path, SearchOption.AllDirectories).Sum(e => new FileInfo(e).Length); - } - - public virtual long GetSize(string path) - { - var fi = new FileInfo(path); - return fi.Length; - //return new FileInfo(path).Length; - } - - public virtual String CreateDirectory(string path) - { - return Directory.CreateDirectory(path).FullName; - } - - public virtual void DeleteFile(string path) - { - File.Delete(path); - } - - public virtual void MoveFile(string sourcePath, string destinationPath) - { - File.Move(sourcePath, destinationPath); - } - - public virtual void DeleteFolder(string path, bool recursive) - { - Directory.Delete(path, recursive); - } - - public virtual DateTime DirectoryDateCreated(string path) - { - return Directory.GetCreationTime(path); - } - - public virtual IEnumerable GetFileInfos(string path, string pattern, SearchOption searchOption) - { - return new DirectoryInfo(path).GetFiles(pattern, searchOption); - } - - public virtual void MoveDirectory(string source, string destination) - { - Directory.Move(source, destination); - } + private static readonly Logger logger = LogManager.GetCurrentClassLogger(); + public virtual void ExtractArchive(string compressedFile, string destination) { - Logger.Trace("Extracting archive [{0}] to [{1}]", compressedFile, destination); + logger.Trace("Extracting archive [{0}] to [{1}]", compressedFile, destination); using (ZipFile zipFile = ZipFile.Read(compressedFile)) { zipFile.ExtractAll(destination); } - Logger.Trace("Extraction complete."); + logger.Trace("Extraction complete."); } - public virtual void InheritFolderPermissions(string filename) - { - var fs = File.GetAccessControl(filename); - fs.SetAccessRuleProtection(false, false); - File.SetAccessControl(filename, fs); - } - - public virtual ulong FreeDiskSpace(DirectoryInfo directoryInfo) - { - ulong freeBytesAvailable; - ulong totalNumberOfBytes; - ulong totalNumberOfFreeBytes; - - bool success = GetDiskFreeSpaceEx(directoryInfo.FullName, out freeBytesAvailable, out totalNumberOfBytes, - out totalNumberOfFreeBytes); - if (!success) - throw new System.ComponentModel.Win32Exception(); - - return freeBytesAvailable; - } } } \ No newline at end of file diff --git a/NzbDrone.Core/Providers/DiskScanProvider.cs b/NzbDrone.Core/Providers/DiskScanProvider.cs index ddb848e4d..b9691a7e9 100644 --- a/NzbDrone.Core/Providers/DiskScanProvider.cs +++ b/NzbDrone.Core/Providers/DiskScanProvider.cs @@ -4,6 +4,7 @@ using System.IO; using System.Linq; using Ninject; using NLog; +using NzbDrone.Common; using NzbDrone.Core.Model; using NzbDrone.Core.Providers.Core; using NzbDrone.Core.Repository; diff --git a/NzbDrone.Core/Providers/Jobs/BannerDownloadJob.cs b/NzbDrone.Core/Providers/Jobs/BannerDownloadJob.cs index f90e73748..7d3942e9c 100644 --- a/NzbDrone.Core/Providers/Jobs/BannerDownloadJob.cs +++ b/NzbDrone.Core/Providers/Jobs/BannerDownloadJob.cs @@ -8,7 +8,6 @@ using NzbDrone.Common; using NzbDrone.Core.Model.Notification; using NzbDrone.Core.Providers.Core; using NzbDrone.Core.Repository; -using DiskProvider = NzbDrone.Core.Providers.Core.DiskProvider; namespace NzbDrone.Core.Providers.Jobs { diff --git a/NzbDrone.Core/Providers/Jobs/PostDownloadScanJob.cs b/NzbDrone.Core/Providers/Jobs/PostDownloadScanJob.cs index 8ace8bf40..bf21ac3f9 100644 --- a/NzbDrone.Core/Providers/Jobs/PostDownloadScanJob.cs +++ b/NzbDrone.Core/Providers/Jobs/PostDownloadScanJob.cs @@ -1,6 +1,7 @@ using System; using NLog; using Ninject; +using NzbDrone.Common; using NzbDrone.Core.Model.Notification; using NzbDrone.Core.Providers.Core; diff --git a/NzbDrone.Core/Providers/PostDownloadProvider.cs b/NzbDrone.Core/Providers/PostDownloadProvider.cs index 439c87cf5..90330875c 100644 --- a/NzbDrone.Core/Providers/PostDownloadProvider.cs +++ b/NzbDrone.Core/Providers/PostDownloadProvider.cs @@ -3,6 +3,7 @@ using System.IO; using System.Text.RegularExpressions; using NLog; using Ninject; +using NzbDrone.Common; using NzbDrone.Core.Model; using NzbDrone.Core.Providers.Core; diff --git a/NzbDrone.Core/Providers/RootDirProvider.cs b/NzbDrone.Core/Providers/RootDirProvider.cs index 4c4c804ef..98574b5c2 100644 --- a/NzbDrone.Core/Providers/RootDirProvider.cs +++ b/NzbDrone.Core/Providers/RootDirProvider.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.IO; using Ninject; using NLog; +using NzbDrone.Common; using NzbDrone.Core.Providers.Core; using NzbDrone.Core.Repository; using PetaPoco; diff --git a/NzbDrone.Core/Providers/UpdateProvider.cs b/NzbDrone.Core/Providers/UpdateProvider.cs index dab67ad13..9bdb51104 100644 --- a/NzbDrone.Core/Providers/UpdateProvider.cs +++ b/NzbDrone.Core/Providers/UpdateProvider.cs @@ -2,14 +2,13 @@ using System.Collections.Generic; using System.IO; using System.Linq; -using System.Text; using System.Text.RegularExpressions; using NLog; using Ninject; using NzbDrone.Common; using NzbDrone.Core.Model; using NzbDrone.Core.Providers.Core; -using DiskProvider = NzbDrone.Core.Providers.Core.DiskProvider; + namespace NzbDrone.Core.Providers { @@ -20,6 +19,7 @@ namespace NzbDrone.Core.Providers private readonly EnviromentProvider _enviromentProvider; private readonly PathProvider _pathProvider; private readonly DiskProvider _diskProvider; + private readonly ArchiveProvider _archiveProvider; private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); private static readonly Regex ParseRegex = new Regex(@"(?:\>)(?NzbDrone.+?(?\d+\.\d+\.\d+\.\d+).+?)(?:\<\/A\>)", RegexOptions.IgnoreCase); @@ -28,13 +28,14 @@ namespace NzbDrone.Core.Providers [Inject] public UpdateProvider(HttpProvider httpProvider, ConfigProvider configProvider, EnviromentProvider enviromentProvider, - PathProvider pathProvider, DiskProvider diskProvider) + PathProvider pathProvider, DiskProvider diskProvider, ArchiveProvider archiveProvider) { _httpProvider = httpProvider; _configProvider = configProvider; _enviromentProvider = enviromentProvider; _pathProvider = pathProvider; _diskProvider = diskProvider; + _archiveProvider = archiveProvider; } public UpdateProvider() @@ -74,7 +75,7 @@ namespace NzbDrone.Core.Providers return null; } - public virtual void PreformUpdate(UpdatePackage updatePackage) + public virtual void StartUpgrade(UpdatePackage updatePackage) { var packageDestination = Path.Combine(_pathProvider.UpdateSandboxFolder, updatePackage.FileName); @@ -83,7 +84,7 @@ namespace NzbDrone.Core.Providers Logger.Info("Download completed for update package from [{0}]", updatePackage.FileName); Logger.Info("Extracting Update package"); - _diskProvider.ExtractArchive(packageDestination, _pathProvider.UpdateSandboxFolder); + _archiveProvider.ExtractArchive(packageDestination, _pathProvider.UpdateSandboxFolder); Logger.Info("Update package extracted successfully"); } diff --git a/NzbDrone.Update.Test/UpdateProviderStartTest.cs b/NzbDrone.Update.Test/UpdateProviderStartTest.cs index 920f89a2f..6ac2d71fa 100644 --- a/NzbDrone.Update.Test/UpdateProviderStartTest.cs +++ b/NzbDrone.Update.Test/UpdateProviderStartTest.cs @@ -1,4 +1,5 @@ -using AutoMoq; +using System.IO; +using AutoMoq; using FizzWare.NBuilder; using Moq; using NUnit.Framework; @@ -13,21 +14,47 @@ namespace NzbDrone.Update.Test { AutoMoqer mocker = new AutoMoqer(); + private const string UPDATE_FOLDER = @"C:\Temp\NzbDrone_update\NzbDrone"; + private const string BACKUP_FOLDER = @"C:\Temp\NzbDrone_update\NzbDrone_Backup"; + private const string TARGET_FOLDER = @"C:\NzbDrone\"; + + Mock _pathProvider = null; + + [SetUp] public void Setup() { mocker = new AutoMoqer(); + + + _pathProvider = mocker.GetMock(); + + _pathProvider.SetupGet(c => c.UpdateBackUpFolder).Returns(BACKUP_FOLDER); + _pathProvider.SetupGet(c => c.UpdatePackageFolder).Returns(UPDATE_FOLDER); + + mocker.GetMock() + .Setup(c => c.FolderExists(UPDATE_FOLDER)) + .Returns(true); + + mocker.GetMock() + .Setup(c => c.FolderExists(TARGET_FOLDER)) + .Returns(true); + } + + public void WithInstalledService() + { + mocker.GetMock() + .Setup(c => c.ServiceExist(ServiceProvider.NZBDRONE_SERVICE_NAME)) + .Returns(true); } [Test] public void should_stop_nzbdrone_service_if_installed() { - mocker.GetMock() - .Setup(c => c.ServiceExist(ServiceProvider.NZBDRONE_SERVICE_NAME)) - .Returns(true); + WithInstalledService(); //Act - mocker.Resolve().Start(null); + mocker.Resolve().Start(TARGET_FOLDER); //Assert mocker.GetMock().Verify(c => c.Stop(ServiceProvider.NZBDRONE_SERVICE_NAME), Times.Once()); @@ -44,12 +71,89 @@ namespace NzbDrone.Update.Test .Returns(proccesses); //Act - mocker.Resolve().Start(null); + mocker.Resolve().Start(TARGET_FOLDER); //Assert mocker.GetMock().Verify(c => c.Kill(proccesses[0].Id), Times.Once()); mocker.GetMock().Verify(c => c.Kill(proccesses[1].Id), Times.Once()); mocker.VerifyAllMocks(); } + + [Test] + public void should_create_backup_of_current_installation() + { + var diskprovider = mocker.GetMock() + .Setup(c => c.CopyDirectory(TARGET_FOLDER, BACKUP_FOLDER)); + + mocker.Resolve().Start(TARGET_FOLDER); + + mocker.VerifyAllMocks(); + } + + [Test] + public void should_copy_update_package_to_target() + { + var diskprovider = mocker.GetMock() + .Setup(c => c.CopyDirectory(UPDATE_FOLDER, TARGET_FOLDER)); + + mocker.Resolve().Start(TARGET_FOLDER); + + mocker.VerifyAllMocks(); + } + + [Test] + public void should_restore_if_update_fails() + { + var diskprovider = mocker.GetMock(); + diskprovider.Setup(c => c.CopyDirectory(BACKUP_FOLDER, TARGET_FOLDER)); + + diskprovider.Setup(c => c.CopyDirectory(UPDATE_FOLDER, TARGET_FOLDER)).Throws(new IOException()); + + mocker.Resolve().Start(TARGET_FOLDER); + + mocker.VerifyAllMocks(); + } + + [Test] + public void should_restart_service_if_service_was_running() + { + WithInstalledService(); + + var serviceProvider = mocker.GetMock(); + + serviceProvider.Setup(c => c.IsServiceRunning(ServiceProvider.NZBDRONE_SERVICE_NAME)).Returns(true); + + //Act + mocker.Resolve().Start(TARGET_FOLDER); + + //Assert + serviceProvider + .Verify(c => c.Start(ServiceProvider.NZBDRONE_SERVICE_NAME), Times.Once()); + + mocker.VerifyAllMocks(); + } + + [Test] + public void should_not_restart_service_if_service_was_not_running() + { + WithInstalledService(); + + var serviceProvider = mocker.GetMock(); + + serviceProvider.Setup(c => c.IsServiceRunning(ServiceProvider.NZBDRONE_SERVICE_NAME)) + .Returns(false); + + //Act + mocker.Resolve().Start(TARGET_FOLDER); + + //Assert + mocker.GetMock() + .Verify(c => c.Start(TARGET_FOLDER + "nzbdrone.exe"), Times.Once()); + + serviceProvider + .Verify(c => c.Start(It.IsAny()), Times.Never()); + + mocker.VerifyAllMocks(); + } } } diff --git a/NzbDrone.Update.Test/UpdateProviderVerifyTest.cs b/NzbDrone.Update.Test/UpdateProviderVerifyTest.cs index 1e4d833d2..e5b31dd59 100644 --- a/NzbDrone.Update.Test/UpdateProviderVerifyTest.cs +++ b/NzbDrone.Update.Test/UpdateProviderVerifyTest.cs @@ -28,25 +28,25 @@ namespace NzbDrone.Update.Test [TestCase(null)] [TestCase("")] [TestCase(" ")] - public void verify_should_throw_target_folder_is_blank(string target) + public void update_should_throw_target_folder_is_blank(string target) { - Assert.Throws(() => mocker.Resolve().Verify(target)) + Assert.Throws(() => mocker.Resolve().Start(target)) .Message.Should().StartWith("Target folder can not be null or empty"); } [Test] - public void verify_should_throw_if_target_folder_doesnt_exist() + public void update_should_throw_if_target_folder_doesnt_exist() { string targetFolder = "c:\\NzbDrone\\"; - Assert.Throws(() => mocker.Resolve().Verify(targetFolder)) + Assert.Throws(() => mocker.Resolve().Start(targetFolder)) .Message.Should().StartWith("Target folder doesn't exist"); } [Test] - public void verify_should_throw_if_update_folder_doesnt_exist() + public void update_should_throw_if_update_folder_doesnt_exist() { - const string sandboxFolder = @"C:\Temp\NzbDrone_update\nzbdrone_update"; + const string sandboxFolder = @"C:\Temp\NzbDrone_update\nzbdrone"; const string targetFolder = "c:\\NzbDrone\\"; mocker.GetMock() @@ -57,22 +57,8 @@ namespace NzbDrone.Update.Test .Setup(c => c.FolderExists(sandboxFolder)) .Returns(false); - Assert.Throws(() => mocker.Resolve().Verify(targetFolder)) + Assert.Throws(() => mocker.Resolve().Start(targetFolder)) .Message.Should().StartWith("Update folder doesn't exist"); } - - [Test] - public void verify_should_pass_if_update_folder_and_target_folder_both_exist() - { - const string targetFolder = "c:\\NzbDrone\\"; - - mocker.GetMock() - .Setup(c => c.FolderExists(It.IsAny())) - .Returns(true); - - mocker.Resolve().Verify(targetFolder); - - mocker.VerifyAllMocks(); - } } } diff --git a/NzbDrone.Update/Providers/UpdateProvider.cs b/NzbDrone.Update/Providers/UpdateProvider.cs index b92f2d302..69aa02e6f 100644 --- a/NzbDrone.Update/Providers/UpdateProvider.cs +++ b/NzbDrone.Update/Providers/UpdateProvider.cs @@ -12,40 +12,47 @@ namespace NzbDrone.Update.Providers private readonly EnviromentProvider _enviromentProvider; private readonly ServiceProvider _serviceProvider; private readonly ProcessProvider _processProvider; + private readonly PathProvider _pathProvider; private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); public UpdateProvider(DiskProvider diskProvider, EnviromentProvider enviromentProvider, - ServiceProvider serviceProvider, ProcessProvider processProvider) + ServiceProvider serviceProvider, ProcessProvider processProvider, PathProvider pathProvider) { _diskProvider = diskProvider; _enviromentProvider = enviromentProvider; _serviceProvider = serviceProvider; _processProvider = processProvider; + _pathProvider = pathProvider; } - public void Verify(string targetFolder) + private void Verify(string installationFolder) { Logger.Info("Verifying requirements before update..."); - if (String.IsNullOrWhiteSpace(targetFolder)) + if (String.IsNullOrWhiteSpace(installationFolder)) throw new ArgumentException("Target folder can not be null or empty"); - if (!_diskProvider.FolderExists(targetFolder)) - throw new DirectoryNotFoundException("Target folder doesn't exist" + targetFolder); - - var sandboxFolder = Path.Combine(_enviromentProvider.StartUpPath, "nzbdrone_update"); + if (!_diskProvider.FolderExists(installationFolder)) + throw new DirectoryNotFoundException("Target folder doesn't exist" + installationFolder); Logger.Info("Verifying Update Folder"); - if (!_diskProvider.FolderExists(sandboxFolder)) - throw new DirectoryNotFoundException("Update folder doesn't exist" + sandboxFolder); + if (!_diskProvider.FolderExists(_pathProvider.UpdatePackageFolder)) + throw new DirectoryNotFoundException("Update folder doesn't exist" + _pathProvider.UpdateSandboxFolder); } - public void Start(string installationFolder) + public void Start(string targetFolder) { + Verify(targetFolder); + bool isService = false; + Logger.Info("Stopping all running services"); if (_serviceProvider.ServiceExist(ServiceProvider.NZBDRONE_SERVICE_NAME)) { + if (_serviceProvider.IsServiceRunning(ServiceProvider.NZBDRONE_SERVICE_NAME)) + { + isService = true; + } _serviceProvider.Stop(ServiceProvider.NZBDRONE_SERVICE_NAME); } @@ -56,17 +63,44 @@ namespace NzbDrone.Update.Providers _processProvider.Kill(processInfo.Id); } + Logger.Info("Creating backup of existing installation"); + _diskProvider.CopyDirectory(targetFolder, _pathProvider.UpdateBackUpFolder); + - //Create backup of current folder + Logger.Info("Copying update package to target"); + + try + { + _diskProvider.CopyDirectory(_pathProvider.UpdatePackageFolder, targetFolder); + } + catch (Exception e) + { + RollBack(targetFolder); + Logger.Fatal("Failed to copy upgrade package to target folder.", e); + } + finally + { + StartNzbDrone(isService, targetFolder); + } + } - //Copy update folder on top of the existing folder + private void RollBack(string targetFolder) + { + Logger.Info("Attempting to rollback upgrade"); + _diskProvider.CopyDirectory(_pathProvider.UpdateBackUpFolder, targetFolder); + } - //Happy: Cleanup - //Happy: Start Service, Process? - //Sad: delete fucked up folder - //Sad: restore backup - //Sad: start service, process + private void StartNzbDrone(bool isService, string targetFolder) + { + if (isService) + { + _serviceProvider.Start(ServiceProvider.NZBDRONE_SERVICE_NAME); + } + else + { + _processProvider.Start(Path.Combine(targetFolder, "nzbdrone.exe")); + } } } } diff --git a/NzbDrone.Web/Controllers/AddSeriesController.cs b/NzbDrone.Web/Controllers/AddSeriesController.cs index 0487b540f..5449da36b 100644 --- a/NzbDrone.Web/Controllers/AddSeriesController.cs +++ b/NzbDrone.Web/Controllers/AddSeriesController.cs @@ -4,6 +4,7 @@ using System.IO; using System.Linq; using System.Web.Mvc; using NLog; +using NzbDrone.Common; using NzbDrone.Core.Providers; using NzbDrone.Core.Providers.Core; using NzbDrone.Core.Providers.Jobs; diff --git a/NzbDrone.Web/Controllers/DirectoryController.cs b/NzbDrone.Web/Controllers/DirectoryController.cs index ee87dc1b0..faae59850 100644 --- a/NzbDrone.Web/Controllers/DirectoryController.cs +++ b/NzbDrone.Web/Controllers/DirectoryController.cs @@ -1,9 +1,5 @@ -using System; -using System.Collections.Generic; -using System.Web; -using System.Web.Helpers; -using System.Web.Mvc; -using NzbDrone.Core.Providers.Core; +using System.Web.Mvc; +using NzbDrone.Common; namespace NzbDrone.Web.Controllers { diff --git a/NzbDrone.Web/Controllers/SystemController.cs b/NzbDrone.Web/Controllers/SystemController.cs index c247c77fd..569e98a63 100644 --- a/NzbDrone.Web/Controllers/SystemController.cs +++ b/NzbDrone.Web/Controllers/SystemController.cs @@ -3,8 +3,8 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Web.Mvc; +using NzbDrone.Common; using NzbDrone.Core.Helpers; -using NzbDrone.Core.Model; using NzbDrone.Core.Providers; using NzbDrone.Core.Providers.Core; using NzbDrone.Core.Providers.Jobs; From 8a7bc7bf808102193d072dbe77f98cb678c3d2c5 Mon Sep 17 00:00:00 2001 From: "kay.one" Date: Sat, 12 Nov 2011 20:16:54 -0800 Subject: [PATCH 03/10] Removed unused references. --- NzbDrone.Common/NzbDrone.Common.csproj | 5 --- NzbDrone.Core/NzbDrone.Core.csproj | 14 ------- NzbDrone.Update/NzbDrone.Update.csproj | 5 --- NzbDrone.Update/Providers/UpdateProvider.cs | 24 ++++++------ NzbDrone.Web/NzbDrone.Web.csproj | 43 --------------------- NzbDrone/NzbDrone.csproj | 11 ------ NzbDrone/Providers/MonitoringProvider.cs | 1 - 7 files changed, 11 insertions(+), 92 deletions(-) diff --git a/NzbDrone.Common/NzbDrone.Common.csproj b/NzbDrone.Common/NzbDrone.Common.csproj index 55c76cf7e..605dc0094 100644 --- a/NzbDrone.Common/NzbDrone.Common.csproj +++ b/NzbDrone.Common/NzbDrone.Common.csproj @@ -42,11 +42,6 @@ - - - - - diff --git a/NzbDrone.Core/NzbDrone.Core.csproj b/NzbDrone.Core/NzbDrone.Core.csproj index b294c0c0e..f1e127439 100644 --- a/NzbDrone.Core/NzbDrone.Core.csproj +++ b/NzbDrone.Core/NzbDrone.Core.csproj @@ -121,10 +121,6 @@ - - False - ..\Libraries\Exceptioneer.WindowsFormsClient.dll - ..\packages\Growl.0.6\lib\Growl.Connector.dll @@ -134,7 +130,6 @@ ..\packages\DotNetZip.1.9.1.8\lib\net20\Ionic.Zip.dll - False ..\Libraries\Migrator.NET\Migrator.dll @@ -143,17 +138,10 @@ False ..\Libraries\Migrator.NET\Migrator.Framework.dll - - False - ..\Libraries\Migrator.NET\Migrator.Providers.dll - False ..\packages\MiniProfiler.1.9\lib\net40\MvcMiniProfiler.dll - - ..\packages\Newtonsoft.Json.3.5.8\lib\35\Newtonsoft.Json.dll - ..\packages\Ninject.2.2.1.4\lib\net40-Full\Ninject.dll @@ -164,7 +152,6 @@ ..\packages\Prowlin 0.9.4163.39219\Prowlin.dll - @@ -174,7 +161,6 @@ ..\packages\SqlServerCompact.4.0.8482.1\lib\System.Data.SqlServerCe.dll - diff --git a/NzbDrone.Update/NzbDrone.Update.csproj b/NzbDrone.Update/NzbDrone.Update.csproj index 1bb943104..1310f2da8 100644 --- a/NzbDrone.Update/NzbDrone.Update.csproj +++ b/NzbDrone.Update/NzbDrone.Update.csproj @@ -39,11 +39,6 @@ - - - - - diff --git a/NzbDrone.Update/Providers/UpdateProvider.cs b/NzbDrone.Update/Providers/UpdateProvider.cs index 69aa02e6f..d9ad53bc6 100644 --- a/NzbDrone.Update/Providers/UpdateProvider.cs +++ b/NzbDrone.Update/Providers/UpdateProvider.cs @@ -9,17 +9,15 @@ namespace NzbDrone.Update.Providers public class UpdateProvider { private readonly DiskProvider _diskProvider; - private readonly EnviromentProvider _enviromentProvider; private readonly ServiceProvider _serviceProvider; private readonly ProcessProvider _processProvider; private readonly PathProvider _pathProvider; - private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); + private static readonly Logger logger = LogManager.GetCurrentClassLogger(); - public UpdateProvider(DiskProvider diskProvider, EnviromentProvider enviromentProvider, - ServiceProvider serviceProvider, ProcessProvider processProvider, PathProvider pathProvider) + public UpdateProvider(DiskProvider diskProvider,ServiceProvider serviceProvider, + ProcessProvider processProvider, PathProvider pathProvider) { _diskProvider = diskProvider; - _enviromentProvider = enviromentProvider; _serviceProvider = serviceProvider; _processProvider = processProvider; _pathProvider = pathProvider; @@ -27,7 +25,7 @@ namespace NzbDrone.Update.Providers private void Verify(string installationFolder) { - Logger.Info("Verifying requirements before update..."); + logger.Info("Verifying requirements before update..."); if (String.IsNullOrWhiteSpace(installationFolder)) throw new ArgumentException("Target folder can not be null or empty"); @@ -35,7 +33,7 @@ namespace NzbDrone.Update.Providers if (!_diskProvider.FolderExists(installationFolder)) throw new DirectoryNotFoundException("Target folder doesn't exist" + installationFolder); - Logger.Info("Verifying Update Folder"); + logger.Info("Verifying Update Folder"); if (!_diskProvider.FolderExists(_pathProvider.UpdatePackageFolder)) throw new DirectoryNotFoundException("Update folder doesn't exist" + _pathProvider.UpdateSandboxFolder); @@ -46,7 +44,7 @@ namespace NzbDrone.Update.Providers Verify(targetFolder); bool isService = false; - Logger.Info("Stopping all running services"); + logger.Info("Stopping all running services"); if (_serviceProvider.ServiceExist(ServiceProvider.NZBDRONE_SERVICE_NAME)) { if (_serviceProvider.IsServiceRunning(ServiceProvider.NZBDRONE_SERVICE_NAME)) @@ -56,18 +54,18 @@ namespace NzbDrone.Update.Providers _serviceProvider.Stop(ServiceProvider.NZBDRONE_SERVICE_NAME); } - Logger.Info("Killing all running processes"); + logger.Info("Killing all running processes"); var processes = _processProvider.GetProcessByName(ProcessProvider.NzbDroneProccessName); foreach (var processInfo in processes) { _processProvider.Kill(processInfo.Id); } - Logger.Info("Creating backup of existing installation"); + logger.Info("Creating backup of existing installation"); _diskProvider.CopyDirectory(targetFolder, _pathProvider.UpdateBackUpFolder); - Logger.Info("Copying update package to target"); + logger.Info("Copying update package to target"); try { @@ -76,7 +74,7 @@ namespace NzbDrone.Update.Providers catch (Exception e) { RollBack(targetFolder); - Logger.Fatal("Failed to copy upgrade package to target folder.", e); + logger.Fatal("Failed to copy upgrade package to target folder.", e); } finally { @@ -86,7 +84,7 @@ namespace NzbDrone.Update.Providers private void RollBack(string targetFolder) { - Logger.Info("Attempting to rollback upgrade"); + logger.Info("Attempting to rollback upgrade"); _diskProvider.CopyDirectory(_pathProvider.UpdateBackUpFolder, targetFolder); } diff --git a/NzbDrone.Web/NzbDrone.Web.csproj b/NzbDrone.Web/NzbDrone.Web.csproj index dee81fc2e..1e95ce60d 100644 --- a/NzbDrone.Web/NzbDrone.Web.csproj +++ b/NzbDrone.Web/NzbDrone.Web.csproj @@ -45,11 +45,6 @@ x86 - - - True - ..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll - False ..\packages\MiniProfiler.1.9\lib\net40\MvcMiniProfiler.dll @@ -65,38 +60,18 @@ - - - True - ..\packages\SqlServerCompact.4.0.8482.1\lib\System.Data.SqlServerCe.dll - - - - - 3.5 - True - - False - ..\Libraries\MVC3\System.Web.Helpers.dll - True - False ..\Libraries\MVC3\System.Web.Mvc.dll True - - False - ..\Libraries\MVC3\System.Web.Razor.dll - True - True @@ -105,21 +80,7 @@ ..\Libraries\MVC3\System.Web.WebPages.dll True - - False - ..\Libraries\MVC3\System.Web.WebPages.Deployment.dll - True - - - False - ..\Libraries\MVC3\System.Web.WebPages.Razor.dll - True - - - - - ..\packages\TelerikMvcExtensions.2011.2.712\lib\net40\Telerik.Web.Mvc.dll @@ -127,10 +88,6 @@ False ..\Libraries\TvdbLib.dll - - False - ..\packages\WebActivator.1.5\lib\net40\WebActivator.dll - diff --git a/NzbDrone/NzbDrone.csproj b/NzbDrone/NzbDrone.csproj index ba239aa30..f32f9e508 100644 --- a/NzbDrone/NzbDrone.csproj +++ b/NzbDrone/NzbDrone.csproj @@ -57,19 +57,12 @@ NzbDrone.AppMain - - True - True True - - False - ..\Libraries\Exceptioneer.WindowsFormsClient.dll - ..\packages\Ninject.2.2.1.4\lib\net40-Full\Ninject.dll @@ -77,13 +70,9 @@ ..\packages\NLog.2.0.0.2000\lib\net40\NLog.dll - - - - diff --git a/NzbDrone/Providers/MonitoringProvider.cs b/NzbDrone/Providers/MonitoringProvider.cs index 087052110..95dfa13d5 100644 --- a/NzbDrone/Providers/MonitoringProvider.cs +++ b/NzbDrone/Providers/MonitoringProvider.cs @@ -2,7 +2,6 @@ using System.Diagnostics; using System.Runtime.Remoting; using System.Timers; -using Exceptioneer.WindowsFormsClient; using NLog; using Ninject; using NzbDrone.Common; From 18b10d45c6e8ac337f0a46002b292a20706fa9ed Mon Sep 17 00:00:00 2001 From: "kay.one" Date: Sat, 12 Nov 2011 20:22:13 -0800 Subject: [PATCH 04/10] Fixed build error. --- NzbDrone/NzbDrone.csproj | 1 + NzbDrone/Providers/MonitoringProvider.cs | 17 +++++++++-------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/NzbDrone/NzbDrone.csproj b/NzbDrone/NzbDrone.csproj index f32f9e508..ff4dbf855 100644 --- a/NzbDrone/NzbDrone.csproj +++ b/NzbDrone/NzbDrone.csproj @@ -63,6 +63,7 @@ True + ..\packages\Ninject.2.2.1.4\lib\net40-Full\Ninject.dll diff --git a/NzbDrone/Providers/MonitoringProvider.cs b/NzbDrone/Providers/MonitoringProvider.cs index 95dfa13d5..88ff9e887 100644 --- a/NzbDrone/Providers/MonitoringProvider.cs +++ b/NzbDrone/Providers/MonitoringProvider.cs @@ -2,6 +2,7 @@ using System.Diagnostics; using System.Runtime.Remoting; using System.Timers; +using Exceptioneer.WindowsFormsClient; using NLog; using Ninject; using NzbDrone.Common; @@ -106,15 +107,15 @@ namespace NzbDrone.Providers { Console.WriteLine("EPIC FAIL: {0}", excepion); -#if DEBUG -#else - new Client + if (EnviromentProvider.IsProduction) { - ApiKey = "43BBF60A-EB2A-4C1C-B09E-422ADF637265", - ApplicationName = "NzbDrone", - CurrentException = excepion as Exception - }.Submit(); -#endif + new Client + { + ApiKey = "43BBF60A-EB2A-4C1C-B09E-422ADF637265", + ApplicationName = "NzbDrone", + CurrentException = excepion as Exception + }.Submit(); + } Logger.Fatal("EPIC FAIL: {0}", excepion); } From 2e94e322f4ad89c3e82d0176db773b42857116ee Mon Sep 17 00:00:00 2001 From: "kay.one" Date: Sat, 12 Nov 2011 21:19:19 -0800 Subject: [PATCH 05/10] Path calculations are now done using extension methods. --- NzbDrone.Common/NzbDrone.Common.csproj | 1 + NzbDrone.Common/PathExtentions.cs | 39 +++++++++++++++++++ NzbDrone.Common/PathProvider.cs | 15 ------- .../PreformUpdateFixture.cs | 24 ++++++------ NzbDrone.Core/Providers/UpdateProvider.cs | 4 +- .../UpdateProviderStartTest.cs | 12 +++--- .../UpdateProviderVerifyTest.cs | 3 ++ NzbDrone.Update/Providers/UpdateProvider.cs | 18 ++++----- 8 files changed, 71 insertions(+), 45 deletions(-) create mode 100644 NzbDrone.Common/PathExtentions.cs diff --git a/NzbDrone.Common/NzbDrone.Common.csproj b/NzbDrone.Common/NzbDrone.Common.csproj index 605dc0094..d4e1e1631 100644 --- a/NzbDrone.Common/NzbDrone.Common.csproj +++ b/NzbDrone.Common/NzbDrone.Common.csproj @@ -45,6 +45,7 @@ + diff --git a/NzbDrone.Common/PathExtentions.cs b/NzbDrone.Common/PathExtentions.cs new file mode 100644 index 000000000..9f3b40074 --- /dev/null +++ b/NzbDrone.Common/PathExtentions.cs @@ -0,0 +1,39 @@ +using System; +using System.Diagnostics; +using System.IO; +using System.Reflection; + +namespace NzbDrone.Common +{ + public static class PathExtentions + { + private const string WEB_FOLDER = "NzbDrone.Web\\"; + private const string APP_DATA = "App_Data\\"; + + + private const string LOG_CONFIG_FILE = "log.config"; + private const string APP_CONFIG_FILE = "config.xml"; + + private const string NZBDRONE_DB_FILE = "nzbdrone.sdf"; + private const string LOG_DB_FILE = "log.sdf"; + + private const string UPDATE_SANDBOX_FOLDER_NAME = "nzbdrone_update\\"; + private const string UPDATE_PACKAGE_FOLDER_NAME = "nzbdrone\\"; + private const string UPDATE_BACKUP_FOLDER_NAME = "nzbdrone_backup\\"; + + public static string GetUpdateSandboxFolder(this PathProvider pathProvider) + { + return Path.Combine(pathProvider.SystemTemp, UPDATE_SANDBOX_FOLDER_NAME); + } + + public static string GetUpdateBackUpFolder(this PathProvider pathProvider) + { + return Path.Combine(pathProvider.GetUpdateSandboxFolder(), UPDATE_BACKUP_FOLDER_NAME); + } + + public static string GetUpdatePackageFolder(this PathProvider pathProvider) + { + return Path.Combine(pathProvider.GetUpdateSandboxFolder(), UPDATE_PACKAGE_FOLDER_NAME); + } + } +} \ No newline at end of file diff --git a/NzbDrone.Common/PathProvider.cs b/NzbDrone.Common/PathProvider.cs index 1dffafeba..fdae9143e 100644 --- a/NzbDrone.Common/PathProvider.cs +++ b/NzbDrone.Common/PathProvider.cs @@ -103,20 +103,5 @@ namespace NzbDrone.Common { get { return Path.Combine(AppData, "Cache"); } } - - public virtual string UpdateSandboxFolder - { - get { return Path.Combine(SystemTemp, UPDATE_SANDBOX_FOLDER_NAME); } - } - - public virtual string UpdatePackageFolder - { - get { return Path.Combine(UPDATE_SANDBOX_FOLDER_NAME, "NzbDrone"); } - } - - public virtual string UpdateBackUpFolder - { - get { return Path.Combine(UpdateSandboxFolder, UPDATE_BACKUP_FOLDER_NAME); } - } } } \ No newline at end of file diff --git a/NzbDrone.Core.Test/ProviderTests/UpdateProviderTests/PreformUpdateFixture.cs b/NzbDrone.Core.Test/ProviderTests/UpdateProviderTests/PreformUpdateFixture.cs index 1f31f0eb5..bcbf1d92d 100644 --- a/NzbDrone.Core.Test/ProviderTests/UpdateProviderTests/PreformUpdateFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/UpdateProviderTests/PreformUpdateFixture.cs @@ -14,28 +14,23 @@ namespace NzbDrone.Core.Test.ProviderTests.UpdateProviderTests internal class PreformUpdateFixture : TestBase { - private string SandBoxPath; + + private const string SANDBOX_FOLDER = @"C:\Temp\nzbdrone_update\"; [SetUp] public void setup() { WithStrictMocker(); - Mocker.GetMock() - .SetupGet(c => c.UpdateSandboxFolder).Returns(Path.Combine(TempFolder, "NzbDrone_update")); - SandBoxPath = Mocker.GetMock().Object.UpdateSandboxFolder; - - Mocker.GetMock() - .SetupGet(c => c.UpdatePackageFolder).Returns(Path.Combine(SandBoxPath, "NzbDrone")); - } [Test] public void Should_call_download_and_extract_using_correct_arguments() { - //Act + Mocker.GetMock().SetupGet(c => c.SystemTemp).Returns(@"C:\Temp\"); + var updatePackage = new UpdatePackage { FileName = "NzbDrone.kay.one.0.6.0.2031.zip", @@ -43,12 +38,15 @@ namespace NzbDrone.Core.Test.ProviderTests.UpdateProviderTests Version = new Version("0.6.0.2031") }; + var updateArchive = Path.Combine(SANDBOX_FOLDER, updatePackage.FileName); + Mocker.GetMock().Setup( - c => c.DownloadFile(updatePackage.Url, Path.Combine(SandBoxPath, updatePackage.FileName))); + c => c.DownloadFile(updatePackage.Url, updateArchive)); Mocker.GetMock().Setup( - c => c.ExtractArchive(Path.Combine(SandBoxPath, updatePackage.FileName), SandBoxPath)); + c => c.ExtractArchive(updateArchive, SANDBOX_FOLDER)); + //Act Mocker.Resolve().StartUpgrade(updatePackage); } @@ -56,7 +54,9 @@ namespace NzbDrone.Core.Test.ProviderTests.UpdateProviderTests public void Should_download_and_extract_to_temp_folder() { - var updateSubFolder = new DirectoryInfo(SandBoxPath); + Mocker.GetMock().SetupGet(c => c.SystemTemp).Returns(TempFolder); + + var updateSubFolder = new DirectoryInfo(Mocker.GetMock().Object.GetUpdateSandboxFolder()); var updatePackage = new UpdatePackage { diff --git a/NzbDrone.Core/Providers/UpdateProvider.cs b/NzbDrone.Core/Providers/UpdateProvider.cs index 9bdb51104..720466e28 100644 --- a/NzbDrone.Core/Providers/UpdateProvider.cs +++ b/NzbDrone.Core/Providers/UpdateProvider.cs @@ -77,14 +77,14 @@ namespace NzbDrone.Core.Providers public virtual void StartUpgrade(UpdatePackage updatePackage) { - var packageDestination = Path.Combine(_pathProvider.UpdateSandboxFolder, updatePackage.FileName); + var packageDestination = Path.Combine(_pathProvider.GetUpdateSandboxFolder(), updatePackage.FileName); Logger.Info("Downloading update package from [{0}] to [{1}]", updatePackage.Url, packageDestination); _httpProvider.DownloadFile(updatePackage.Url, packageDestination); Logger.Info("Download completed for update package from [{0}]", updatePackage.FileName); Logger.Info("Extracting Update package"); - _archiveProvider.ExtractArchive(packageDestination, _pathProvider.UpdateSandboxFolder); + _archiveProvider.ExtractArchive(packageDestination, _pathProvider.GetUpdateSandboxFolder()); Logger.Info("Update package extracted successfully"); } diff --git a/NzbDrone.Update.Test/UpdateProviderStartTest.cs b/NzbDrone.Update.Test/UpdateProviderStartTest.cs index 6ac2d71fa..699af817d 100644 --- a/NzbDrone.Update.Test/UpdateProviderStartTest.cs +++ b/NzbDrone.Update.Test/UpdateProviderStartTest.cs @@ -14,23 +14,21 @@ namespace NzbDrone.Update.Test { AutoMoqer mocker = new AutoMoqer(); - private const string UPDATE_FOLDER = @"C:\Temp\NzbDrone_update\NzbDrone"; - private const string BACKUP_FOLDER = @"C:\Temp\NzbDrone_update\NzbDrone_Backup"; + private const string UPDATE_FOLDER = @"C:\Temp\nzbdrone_update\nzbdrone\"; + private const string BACKUP_FOLDER = @"C:\Temp\nzbdrone_update\nzbdrone_backup\"; private const string TARGET_FOLDER = @"C:\NzbDrone\"; - Mock _pathProvider = null; + Mock _pathProvider; [SetUp] public void Setup() { mocker = new AutoMoqer(); - - + _pathProvider = mocker.GetMock(); - _pathProvider.SetupGet(c => c.UpdateBackUpFolder).Returns(BACKUP_FOLDER); - _pathProvider.SetupGet(c => c.UpdatePackageFolder).Returns(UPDATE_FOLDER); + _pathProvider.SetupGet(c => c.SystemTemp).Returns(@"C:\Temp\"); mocker.GetMock() .Setup(c => c.FolderExists(UPDATE_FOLDER)) diff --git a/NzbDrone.Update.Test/UpdateProviderVerifyTest.cs b/NzbDrone.Update.Test/UpdateProviderVerifyTest.cs index e5b31dd59..7c133869d 100644 --- a/NzbDrone.Update.Test/UpdateProviderVerifyTest.cs +++ b/NzbDrone.Update.Test/UpdateProviderVerifyTest.cs @@ -23,6 +23,9 @@ namespace NzbDrone.Update.Test mocker.GetMock() .Setup(c => c.StartUpPath).Returns(@"C:\Temp\NzbDrone_update\"); + + mocker.GetMock() + .Setup(c => c.SystemTemp).Returns(@"C:\Temp\"); } [TestCase(null)] diff --git a/NzbDrone.Update/Providers/UpdateProvider.cs b/NzbDrone.Update/Providers/UpdateProvider.cs index d9ad53bc6..9dd5279fa 100644 --- a/NzbDrone.Update/Providers/UpdateProvider.cs +++ b/NzbDrone.Update/Providers/UpdateProvider.cs @@ -23,19 +23,19 @@ namespace NzbDrone.Update.Providers _pathProvider = pathProvider; } - private void Verify(string installationFolder) + private void Verify(string targetFolder) { logger.Info("Verifying requirements before update..."); - if (String.IsNullOrWhiteSpace(installationFolder)) + if (String.IsNullOrWhiteSpace(targetFolder)) throw new ArgumentException("Target folder can not be null or empty"); - if (!_diskProvider.FolderExists(installationFolder)) - throw new DirectoryNotFoundException("Target folder doesn't exist" + installationFolder); + if (!_diskProvider.FolderExists(targetFolder)) + throw new DirectoryNotFoundException("Target folder doesn't exist " + targetFolder); logger.Info("Verifying Update Folder"); - if (!_diskProvider.FolderExists(_pathProvider.UpdatePackageFolder)) - throw new DirectoryNotFoundException("Update folder doesn't exist" + _pathProvider.UpdateSandboxFolder); + if (!_diskProvider.FolderExists(_pathProvider.GetUpdatePackageFolder())) + throw new DirectoryNotFoundException("Update folder doesn't exist " + _pathProvider.GetUpdatePackageFolder()); } @@ -62,14 +62,14 @@ namespace NzbDrone.Update.Providers } logger.Info("Creating backup of existing installation"); - _diskProvider.CopyDirectory(targetFolder, _pathProvider.UpdateBackUpFolder); + _diskProvider.CopyDirectory(targetFolder, _pathProvider.GetUpdateBackUpFolder()); logger.Info("Copying update package to target"); try { - _diskProvider.CopyDirectory(_pathProvider.UpdatePackageFolder, targetFolder); + _diskProvider.CopyDirectory(_pathProvider.GetUpdatePackageFolder(), targetFolder); } catch (Exception e) { @@ -85,7 +85,7 @@ namespace NzbDrone.Update.Providers private void RollBack(string targetFolder) { logger.Info("Attempting to rollback upgrade"); - _diskProvider.CopyDirectory(_pathProvider.UpdateBackUpFolder, targetFolder); + _diskProvider.CopyDirectory(_pathProvider.GetUpdateBackUpFolder(), targetFolder); } From 72d0fc50ed63a07d4ccb7772ee1e2a8aa50b2fa1 Mon Sep 17 00:00:00 2001 From: "kay.one" Date: Sat, 12 Nov 2011 23:27:16 -0800 Subject: [PATCH 06/10] Alot of refactoring. --- NzbDrone.App.Test/ConfigProviderTest.cs | 59 ------ NzbDrone.App.Test/IISProviderTest.cs | 36 ---- NzbDrone.App.Test/NzbDrone.App.Test.csproj | 2 - .../ConfigFileProviderTest.cs | 10 +- .../NzbDrone.Common.Test.csproj | 2 + NzbDrone.Common.Test/PathExtentionFixture.cs | 52 +++++ .../ConfigFileProvider.cs | 183 +++++++----------- NzbDrone.Common/EnviromentProvider.cs | 8 + NzbDrone.Common/LogConfiguration.cs | 22 +-- NzbDrone.Common/Model/AuthenticationType.cs | 10 + NzbDrone.Common/NzbDrone.Common.csproj | 5 +- NzbDrone.Common/PathExtentions.cs | 76 ++++++-- NzbDrone.Common/PathProvider.cs | 107 ---------- NzbDrone.Core.Test/CentralDispatchFixture.cs | 10 +- NzbDrone.Core.Test/EpisodeStatusTest.cs | 2 +- NzbDrone.Core.Test/FluentTest.cs | 2 +- NzbDrone.Core.Test/Framework/CoreTest.cs | 53 +++++ NzbDrone.Core.Test/Framework/TestBase.cs | 111 ----------- NzbDrone.Core.Test/IndexerTests.cs | 2 +- .../JobTests/BannerDownloadJobTest.cs | 41 +--- .../JobTests/DiskScanJobTest.cs | 2 +- .../JobTests/ImportNewSeriesJobTest.cs | 2 +- .../JobTests/SeasonSearchJobTest.cs | 2 +- .../JobTests/SeriesSearchJobTest.cs | 2 +- NzbDrone.Core.Test/NzbDrone.Core.Test.csproj | 3 +- NzbDrone.Core.Test/ParserTest.cs | 2 +- .../ProviderTests/ConfigProviderTest.cs | 2 +- .../ExtractArchiveFixture.cs | 2 +- .../DiskProviderTests/FreeDiskSpaceTest.cs | 2 +- .../ProviderTests/DiskScanProviderTest.cs | 2 +- .../DiskScanProviderTest_ImportFile.cs | 2 +- .../ProviderTests/DownloadProviderTest.cs | 2 +- .../ProviderTests/EpisodeProviderTest.cs | 2 +- ...isodeProviderTest_DeleteInvalidEpisodes.cs | 2 +- ...deProviderTest_GetEpisodesByParseResult.cs | 2 +- .../ProviderTests/EventClientProviderTest.cs | 2 +- .../ProviderTests/GrowlProviderTest.cs | 2 +- .../ProviderTests/HistoryProviderTest.cs | 2 +- .../ProviderTests/IndexerProviderTest.cs | 2 +- .../InventoryProvider_IsAcceptableSizeTest.cs | 2 +- .../InventoryProvider_IsMonitoredTest.cs | 2 +- .../InventoryProvider_QualityNeededTest.cs | 2 +- .../JobProviderTests/JobProviderTest.cs | 2 +- .../ProviderTests/LogProviderTest.cs | 2 +- .../ProviderTests/MediaFileProviderTests.cs | 2 +- .../MediaFileProvider_GetNewFilenameTest.cs | 2 +- .../PostDownloadProviderFixture.cs | 2 +- .../ProcessDownloadFixture.cs | 2 +- .../ProviderTests/ProwlProviderTest.cs | 2 +- .../ProviderTests/QualityTypeProviderTest.cs | 2 +- .../ProviderTests/RootDirProviderTest.cs | 2 +- .../ProviderTests/SabProviderTest.cs | 2 +- .../SearchProviderTest_Episode.cs | 2 +- .../SearchProviderTest_PartialSeason.cs | 2 +- .../SearchProviderTest_Season.cs | 2 +- .../ProviderTests/SeriesProviderTest.cs | 2 +- .../ProviderTests/TvDbProviderTest.cs | 2 +- .../UpcomingEpisodesProviderTest.cs | 2 +- .../GetAvilableUpdateFixture.cs | 2 +- .../PreformUpdateFixture.cs | 8 +- .../ProviderTests/XbmcProviderTest.cs | 2 +- NzbDrone.Core.Test/QualityProfileTest.cs | 2 +- NzbDrone.Core.Test/QualityTest.cs | 2 +- NzbDrone.Core.Test/SceneMappingTest.cs | 2 +- NzbDrone.Core.Test/SortHelperTest.cs | 2 +- NzbDrone.Core.Test/dbBenchmark.cs | 2 +- NzbDrone.Core/CentralDispatch.cs | 2 + NzbDrone.Core/Datastore/Connection.cs | 18 +- .../Instrumentation/LogConfiguration.cs | 9 +- NzbDrone.Core/Model/AuthenticationType.cs | 13 -- NzbDrone.Core/NzbDrone.Core.csproj | 4 +- .../{DiskProvider.cs => ArchiveProvider.cs} | 0 .../Providers/Core/ConfigFileProvider.cs | 124 ------------ .../Providers/Jobs/BannerDownloadJob.cs | 8 +- NzbDrone.Core/Providers/TvDbProvider.cs | 6 +- NzbDrone.Core/Providers/UpdateProvider.cs | 30 ++- NzbDrone.Test.Common/LoggingTest.cs | 16 +- .../NzbDrone.Test.Common.csproj | 1 + NzbDrone.Test.Common/TestBase.cs | 68 +++++++ .../UpdateProviderStartTest.cs | 6 +- .../UpdateProviderVerifyTest.cs | 2 +- NzbDrone.Update/Providers/UpdateProvider.cs | 16 +- .../Controllers/SettingsController.cs | 2 + NzbDrone.Web/Models/SystemSettingsModel.cs | 7 +- NzbDrone/ApplicationServer.cs | 9 +- NzbDrone/CentralDispatch.cs | 6 +- NzbDrone/Model/AuthenticationType.cs | 13 -- NzbDrone/NzbDrone.csproj | 2 - NzbDrone/Providers/IISProvider.cs | 16 +- 89 files changed, 503 insertions(+), 767 deletions(-) delete mode 100644 NzbDrone.App.Test/ConfigProviderTest.cs delete mode 100644 NzbDrone.App.Test/IISProviderTest.cs rename {NzbDrone.Core.Test/ProviderTests => NzbDrone.Common.Test}/ConfigFileProviderTest.cs (95%) create mode 100644 NzbDrone.Common.Test/PathExtentionFixture.cs rename NzbDrone/Providers/ConfigProvider.cs => NzbDrone.Common/ConfigFileProvider.cs (67%) create mode 100644 NzbDrone.Common/Model/AuthenticationType.cs delete mode 100644 NzbDrone.Common/PathProvider.cs create mode 100644 NzbDrone.Core.Test/Framework/CoreTest.cs delete mode 100644 NzbDrone.Core.Test/Framework/TestBase.cs delete mode 100644 NzbDrone.Core/Model/AuthenticationType.cs rename NzbDrone.Core/Providers/Core/{DiskProvider.cs => ArchiveProvider.cs} (100%) delete mode 100644 NzbDrone.Core/Providers/Core/ConfigFileProvider.cs create mode 100644 NzbDrone.Test.Common/TestBase.cs delete mode 100644 NzbDrone/Model/AuthenticationType.cs diff --git a/NzbDrone.App.Test/ConfigProviderTest.cs b/NzbDrone.App.Test/ConfigProviderTest.cs deleted file mode 100644 index 87f133ee7..000000000 --- a/NzbDrone.App.Test/ConfigProviderTest.cs +++ /dev/null @@ -1,59 +0,0 @@ -using FluentAssertions; -using Moq; -using NUnit.Framework; -using NzbDrone.Common; -using NzbDrone.Providers; - -namespace NzbDrone.App.Test -{ - [TestFixture] - public class ConfigProviderTest - { - - private ConfigProvider GetConfigProvider() - { - var envMoq = new Mock(); - envMoq.SetupGet(c => c.ApplicationPath).Returns(@"C:\NzbDrone\"); - - return new ConfigProvider(envMoq.Object); - } - - - [Test] - public void IISExpress_path_test() - { - GetConfigProvider().IISDirectory.Should().BeEquivalentTo(@"C:\NzbDrone\IISExpress"); - } - - [Test] - public void AppDataDirectory_path_test() - { - GetConfigProvider().AppDataDirectory.Should().BeEquivalentTo(@"C:\NzbDrone\NzbDrone.Web\App_Data"); - } - - - [Test] - public void Config_path_test() - { - GetConfigProvider().ConfigFile.Should().BeEquivalentTo(@"C:\NzbDrone\NzbDrone.Web\App_Data\Config.xml"); - } - - [Test] - public void IISConfig_path_test() - { - GetConfigProvider().IISConfigPath.Should().BeEquivalentTo(@"C:\NzbDrone\IISExpress\AppServer\applicationhost.config"); - } - - [Test] - public void IISExe_path_test() - { - GetConfigProvider().IISExePath.Should().BeEquivalentTo(@"C:\NzbDrone\IISExpress\IISExpress.exe"); - } - - [Test] - public void NlogConfig_path_test() - { - GetConfigProvider().NlogConfigPath.Should().BeEquivalentTo(@"C:\NzbDrone\NzbDrone.Web\log.config"); - } - } -} diff --git a/NzbDrone.App.Test/IISProviderTest.cs b/NzbDrone.App.Test/IISProviderTest.cs deleted file mode 100644 index 00c3e548b..000000000 --- a/NzbDrone.App.Test/IISProviderTest.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; -using System.Text; -using AutoMoq; -using FluentAssertions; -using Moq; -using NUnit.Framework; -using NzbDrone.Common; -using NzbDrone.Providers; - -namespace NzbDrone.App.Test -{ - [TestFixture] - public class IISProviderTest - { - [Test] - public void start_should_set_IISProccessId_property() - { - var mocker = new AutoMoqer(); - - var configMock = mocker.GetMock(); - configMock.SetupGet(c => c.IISExePath).Returns("NzbDrone.Test.Dummy.exe"); - - mocker.Resolve(); - - var iisProvider = mocker.Resolve(); - - iisProvider.StartServer(); - - iisProvider.IISProcessId.Should().NotBe(0); - } - - } -} diff --git a/NzbDrone.App.Test/NzbDrone.App.Test.csproj b/NzbDrone.App.Test/NzbDrone.App.Test.csproj index b928d92fc..543832cf4 100644 --- a/NzbDrone.App.Test/NzbDrone.App.Test.csproj +++ b/NzbDrone.App.Test/NzbDrone.App.Test.csproj @@ -68,8 +68,6 @@ - - diff --git a/NzbDrone.Core.Test/ProviderTests/ConfigFileProviderTest.cs b/NzbDrone.Common.Test/ConfigFileProviderTest.cs similarity index 95% rename from NzbDrone.Core.Test/ProviderTests/ConfigFileProviderTest.cs rename to NzbDrone.Common.Test/ConfigFileProviderTest.cs index 6b56ff532..2d1f0ff7f 100644 --- a/NzbDrone.Core.Test/ProviderTests/ConfigFileProviderTest.cs +++ b/NzbDrone.Common.Test/ConfigFileProviderTest.cs @@ -3,9 +3,9 @@ using AutoMoq; using FluentAssertions; using NUnit.Framework; using NzbDrone.Common; -using NzbDrone.Core.Model; -using NzbDrone.Core.Providers.Core; -using NzbDrone.Core.Test.Framework; +using NzbDrone.Common.Model; +using NzbDrone.Test.Common; + namespace NzbDrone.Core.Test.ProviderTests { @@ -16,10 +16,10 @@ namespace NzbDrone.Core.Test.ProviderTests [SetUp] public void SetUp() { - WithTempAsStartUpPath(); + WithTempAsAppPath(); //Reset config file - var configFile = Mocker.Resolve().AppConfigFile; + var configFile = Mocker.Resolve().GetConfigPath(); if (File.Exists(configFile)) File.Delete(configFile); diff --git a/NzbDrone.Common.Test/NzbDrone.Common.Test.csproj b/NzbDrone.Common.Test/NzbDrone.Common.Test.csproj index bf72a48ee..705d95e02 100644 --- a/NzbDrone.Common.Test/NzbDrone.Common.Test.csproj +++ b/NzbDrone.Common.Test/NzbDrone.Common.Test.csproj @@ -61,6 +61,8 @@ + + diff --git a/NzbDrone.Common.Test/PathExtentionFixture.cs b/NzbDrone.Common.Test/PathExtentionFixture.cs new file mode 100644 index 000000000..96c6342de --- /dev/null +++ b/NzbDrone.Common.Test/PathExtentionFixture.cs @@ -0,0 +1,52 @@ +using FluentAssertions; +using Moq; +using NUnit.Framework; +using NzbDrone.Common; + +namespace NzbDrone.App.Test +{ + [TestFixture] + public class PathExtentionFixture + { + + private EnviromentProvider GetEnviromentProvider() + { + var envMoq = new Mock(); + envMoq.SetupGet(c => c.ApplicationPath).Returns(@"C:\NzbDrone\"); + + return envMoq.Object; + } + + + [Test] + public void AppDataDirectory_path_test() + { + GetEnviromentProvider().GetAppDataPath().Should().BeEquivalentTo(@"C:\NzbDrone\NzbDrone.Web\App_Data\"); + } + + + [Test] + public void Config_path_test() + { + GetEnviromentProvider().GetConfigPath().Should().BeEquivalentTo(@"C:\NzbDrone\Config.xml"); + } + + [Test] + public void IISConfig_path_test() + { + GetEnviromentProvider().GetIISConfigPath().Should().BeEquivalentTo(@"C:\NzbDrone\IISExpress\AppServer\applicationhost.config"); + } + + [Test] + public void IISExe_path_test() + { + GetEnviromentProvider().GetIISExe().Should().BeEquivalentTo(@"C:\NzbDrone\IISExpress\IISExpress.exe"); + } + + [Test] + public void NlogConfig_path_test() + { + GetEnviromentProvider().GetNlogConfigPath().Should().BeEquivalentTo(@"C:\NzbDrone\NzbDrone.Web\log.config"); + } + } +} diff --git a/NzbDrone/Providers/ConfigProvider.cs b/NzbDrone.Common/ConfigFileProvider.cs similarity index 67% rename from NzbDrone/Providers/ConfigProvider.cs rename to NzbDrone.Common/ConfigFileProvider.cs index b6e77cbea..e3768b1fe 100644 --- a/NzbDrone/Providers/ConfigProvider.cs +++ b/NzbDrone.Common/ConfigFileProvider.cs @@ -4,132 +4,45 @@ using System.Linq; using System.Xml.Linq; using System.Xml.XPath; using NLog; -using Ninject; -using NzbDrone.Common; -using NzbDrone.Model; +using NzbDrone.Common.Model; -namespace NzbDrone.Providers +namespace NzbDrone.Common { - public class ConfigProvider + public class ConfigFileProvider { private readonly EnviromentProvider _enviromentProvider; - private static readonly Logger Logger = LogManager.GetLogger("Host.ConfigProvider"); + private static readonly Logger logger = LogManager.GetCurrentClassLogger(); - [Inject] - public ConfigProvider(EnviromentProvider enviromentProvider) - { - _enviromentProvider = enviromentProvider; - } - public ConfigProvider() + + private readonly string _configFile; + public ConfigFileProvider(EnviromentProvider enviromentProvider) { - + _enviromentProvider = enviromentProvider; + _configFile = _enviromentProvider.GetConfigPath(); } - public virtual int PortNumber + public virtual int Port { get { return GetValueInt("Port", 8989); } + set { SetValue("Port", value); } } public virtual bool LaunchBrowser { get { return GetValueBoolean("LaunchBrowser", true); } - } - - public virtual string IISDirectory - { - get { return Path.Combine(_enviromentProvider.ApplicationPath, "IISExpress"); } - } - - public virtual string IISExePath - { - get { return Path.Combine(IISDirectory, "iisexpress.exe"); } - } - - public virtual string IISConfigPath - { - get { return Path.Combine(IISDirectory, "AppServer", "applicationhost.config"); } - } - - public virtual string AppDataDirectory - { - get { return Path.Combine(_enviromentProvider.ApplicationPath, "NzbDrone.Web", "App_Data"); } - } - - public virtual string ConfigFile - { - get { return Path.Combine(AppDataDirectory, "Config.xml"); } - } - - public virtual string NlogConfigPath - { - get { return Path.Combine(_enviromentProvider.ApplicationPath, "NzbDrone.Web\\log.config"); } + set { SetValue("LaunchBrowser", value); } } public virtual AuthenticationType AuthenticationType { get { return (AuthenticationType)GetValueInt("AuthenticationType", 0); } + set { SetValue("AuthenticationType", (int)value); } } - public virtual void UpdateIISConfig(string configPath) + public virtual string GetValue(string key, object defaultValue, string parent = null) { - Logger.Info(@"Server configuration file: {0}", configPath); - Logger.Info(@"Configuring server to: [http://localhost:{0}]", PortNumber); - - var configXml = XDocument.Load(configPath); - - var bindings = - configXml.XPathSelectElement("configuration/system.applicationHost/sites").Elements("site").Where( - d => d.Attribute("name").Value.ToLowerInvariant() == "nzbdrone").First().Element("bindings"); - bindings.Descendants().Remove(); - bindings.Add( - new XElement("binding", - new XAttribute("protocol", "http"), - new XAttribute("bindingInformation", String.Format("*:{0}:localhost", PortNumber)) - )); - - bindings.Add( - new XElement("binding", - new XAttribute("protocol", "http"), - new XAttribute("bindingInformation", String.Format("*:{0}:", PortNumber)) - )); - - //Update the authenticationTypes - - var location = configXml.XPathSelectElement("configuration").Elements("location").Where( - d => d.Attribute("path").Value.ToLowerInvariant() == "nzbdrone").First(); - - - var authenticationTypes = location.XPathSelectElements("system.webServer/security/authentication").First().Descendants(); - - //Set all authentication types enabled to false - foreach (var child in authenticationTypes) - { - child.Attribute("enabled").Value = "false"; - } - - var configuredAuthType = String.Format("{0}Authentication", AuthenticationType.ToString()).ToLowerInvariant(); - - //Set the users authenticationType to true - authenticationTypes.Where(t => t.Name.ToString().ToLowerInvariant() == configuredAuthType).Single().Attribute("enabled").Value = "true"; - - configXml.Save(configPath); - } - - public virtual void CreateDefaultConfigFile() - { - //Create the config file here - Directory.CreateDirectory(AppDataDirectory); - - if (!File.Exists(ConfigFile)) - { - WriteDefaultConfig(); - } - } - - private string GetValue(string key, object defaultValue, string parent = null) - { - var xDoc = XDocument.Load(ConfigFile); + var xDoc = XDocument.Load(_configFile); var config = xDoc.Descendants("Config").Single(); var parentContainer = config; @@ -142,7 +55,7 @@ namespace NzbDrone.Providers SetValue(key, defaultValue, parent); //Reload the configFile - xDoc = XDocument.Load(ConfigFile); + xDoc = XDocument.Load(_configFile); config = xDoc.Descendants("Config").Single(); } @@ -173,7 +86,7 @@ namespace NzbDrone.Providers public virtual void SetValue(string key, object value, string parent = null) { - var xDoc = XDocument.Load(ConfigFile); + var xDoc = XDocument.Load(_configFile); var config = xDoc.Descendants("Config").Single(); var parentContainer = config; @@ -197,16 +110,66 @@ namespace NzbDrone.Providers else parentContainer.Descendants(key).Single().Value = value.ToString(); - xDoc.Save(ConfigFile); + xDoc.Save(_configFile); } - public virtual void WriteDefaultConfig() + public virtual void CreateDefaultConfigFile() { - var xDoc = new XDocument(new XDeclaration("1.0", "utf-8", "yes")); + if (!File.Exists(_configFile)) + { + var xDoc = new XDocument(new XDeclaration("1.0", "utf-8", "yes")); + + xDoc.Add(new XElement("Config")); + + xDoc.Save(_configFile); + } + } + + + + public virtual void UpdateIISConfig(string configPath) + { + logger.Info(@"Server configuration file: {0}", configPath); + logger.Info(@"Configuring server to: [http://localhost:{0}]", Port); + + var configXml = XDocument.Load(configPath); + + var bindings = + configXml.XPathSelectElement("configuration/system.applicationHost/sites").Elements("site").Where( + d => d.Attribute("name").Value.ToLowerInvariant() == "nzbdrone").First().Element("bindings"); + bindings.Descendants().Remove(); + bindings.Add( + new XElement("binding", + new XAttribute("protocol", "http"), + new XAttribute("bindingInformation", String.Format("*:{0}:localhost", Port)) + )); + + bindings.Add( + new XElement("binding", + new XAttribute("protocol", "http"), + new XAttribute("bindingInformation", String.Format("*:{0}:", Port)) + )); + + //Update the authenticationTypes + + var location = configXml.XPathSelectElement("configuration").Elements("location").Where( + d => d.Attribute("path").Value.ToLowerInvariant() == "nzbdrone").First(); - xDoc.Add(new XElement("Config")); - xDoc.Save(ConfigFile); + var authenticationTypes = location.XPathSelectElements("system.webServer/security/authentication").First().Descendants(); + + //Set all authentication types enabled to false + foreach (var child in authenticationTypes) + { + child.Attribute("enabled").Value = "false"; + } + + var configuredAuthType = String.Format("{0}Authentication", AuthenticationType.ToString()).ToLowerInvariant(); + + //Set the users authenticationType to true + authenticationTypes.Where(t => t.Name.ToString().ToLowerInvariant() == configuredAuthType).Single().Attribute("enabled").Value = "true"; + + configXml.Save(configPath); } } -} \ No newline at end of file +} diff --git a/NzbDrone.Common/EnviromentProvider.cs b/NzbDrone.Common/EnviromentProvider.cs index 6ff76153f..3680860c0 100644 --- a/NzbDrone.Common/EnviromentProvider.cs +++ b/NzbDrone.Common/EnviromentProvider.cs @@ -72,6 +72,14 @@ namespace NzbDrone.Common } } + public virtual String SystemTemp + { + get + { + return Path.GetTempPath(); + } + } + public virtual Version Version { get { return Assembly.GetExecutingAssembly().GetName().Version; } diff --git a/NzbDrone.Common/LogConfiguration.cs b/NzbDrone.Common/LogConfiguration.cs index 716b18edd..99dbb48c4 100644 --- a/NzbDrone.Common/LogConfiguration.cs +++ b/NzbDrone.Common/LogConfiguration.cs @@ -33,7 +33,6 @@ namespace NzbDrone.Common consoleTarget.Layout = "${message} ${exception}"; LogManager.Configuration.AddTarget(consoleTarget.GetType().Name, consoleTarget); LogManager.Configuration.LoggingRules.Add(new LoggingRule(loggerNamePattern, minLevel, consoleTarget)); - Reload(); } catch (Exception e) { @@ -57,7 +56,6 @@ namespace NzbDrone.Common udpTarget.IncludeNdc = true; LogManager.Configuration.AddTarget(udpTarget.GetType().Name, udpTarget); LogManager.Configuration.LoggingRules.Add(new LoggingRule("*", LogLevel.Trace, udpTarget)); - Reload(); } catch (Exception e) { @@ -71,16 +69,18 @@ namespace NzbDrone.Common public static void RegisterExceptioneer() { - try - { - var exTarget = new ExceptioneerTarget(); - LogManager.Configuration.AddTarget("Exceptioneer", exTarget); - LogManager.Configuration.LoggingRules.Add(new LoggingRule("*", LogLevel.Error, exTarget)); - Reload(); - } - catch (Exception e) + if (EnviromentProvider.IsProduction) { - Console.WriteLine(e); + try + { + var exTarget = new ExceptioneerTarget(); + LogManager.Configuration.AddTarget("Exceptioneer", exTarget); + LogManager.Configuration.LoggingRules.Add(new LoggingRule("*", LogLevel.Error, exTarget)); + } + catch (Exception e) + { + Console.WriteLine(e); + } } } diff --git a/NzbDrone.Common/Model/AuthenticationType.cs b/NzbDrone.Common/Model/AuthenticationType.cs new file mode 100644 index 000000000..34d37edf6 --- /dev/null +++ b/NzbDrone.Common/Model/AuthenticationType.cs @@ -0,0 +1,10 @@ +using System.Linq; + +namespace NzbDrone.Common.Model +{ + public enum AuthenticationType + { + Anonymous = 0, + Windows = 1 + } +} diff --git a/NzbDrone.Common/NzbDrone.Common.csproj b/NzbDrone.Common/NzbDrone.Common.csproj index d4e1e1631..b7461ac7b 100644 --- a/NzbDrone.Common/NzbDrone.Common.csproj +++ b/NzbDrone.Common/NzbDrone.Common.csproj @@ -42,11 +42,14 @@ + + + + - diff --git a/NzbDrone.Common/PathExtentions.cs b/NzbDrone.Common/PathExtentions.cs index 9f3b40074..3e6ff95a2 100644 --- a/NzbDrone.Common/PathExtentions.cs +++ b/NzbDrone.Common/PathExtentions.cs @@ -1,7 +1,4 @@ -using System; -using System.Diagnostics; -using System.IO; -using System.Reflection; +using System.IO; namespace NzbDrone.Common { @@ -9,7 +6,9 @@ namespace NzbDrone.Common { private const string WEB_FOLDER = "NzbDrone.Web\\"; private const string APP_DATA = "App_Data\\"; - + public const string IIS_FOLDER = EnviromentProvider.IIS_FOLDER_NAME; + public const string IIS_EXE = "iisexpress.exe"; + private const string LOG_CONFIG_FILE = "log.config"; private const string APP_CONFIG_FILE = "config.xml"; @@ -21,19 +20,74 @@ namespace NzbDrone.Common private const string UPDATE_PACKAGE_FOLDER_NAME = "nzbdrone\\"; private const string UPDATE_BACKUP_FOLDER_NAME = "nzbdrone_backup\\"; - public static string GetUpdateSandboxFolder(this PathProvider pathProvider) + public static string GetUpdateSandboxFolder(this EnviromentProvider enviromentProvider) + { + return Path.Combine(enviromentProvider.SystemTemp, UPDATE_SANDBOX_FOLDER_NAME); + } + + public static string GetUpdateBackUpFolder(this EnviromentProvider enviromentProvider) + { + return Path.Combine(enviromentProvider.GetUpdateSandboxFolder(), UPDATE_BACKUP_FOLDER_NAME); + } + + public static string GetUpdatePackageFolder(this EnviromentProvider enviromentProvider) + { + return Path.Combine(enviromentProvider.GetUpdateSandboxFolder(), UPDATE_PACKAGE_FOLDER_NAME); + } + + public static string GetIISFolder(this EnviromentProvider enviromentProvider) + { + return Path.Combine(enviromentProvider.ApplicationPath, IIS_FOLDER); + } + + public static string GetIISExe(this EnviromentProvider enviromentProvider) + { + return Path.Combine(enviromentProvider.GetIISFolder(), IIS_EXE); + } + + public static string GetIISConfigPath(this EnviromentProvider enviromentProvider) + { + return Path.Combine(enviromentProvider.GetIISFolder(), "AppServer", "applicationhost.config"); + } + + public static string GetWebRoot(this EnviromentProvider enviromentProvider) + { + return Path.Combine(enviromentProvider.ApplicationPath, WEB_FOLDER); + } + + public static string GetAppDataPath(this EnviromentProvider enviromentProvider) + { + return Path.Combine(enviromentProvider.GetWebRoot(), APP_DATA); + } + + public static string GetNlogConfigPath(this EnviromentProvider enviromentProvider) + { + return Path.Combine(enviromentProvider.GetWebRoot(), LOG_CONFIG_FILE); + } + + public static string GetConfigPath(this EnviromentProvider enviromentProvider) + { + return Path.Combine(enviromentProvider.ApplicationPath, APP_CONFIG_FILE); + } + + public static string GetNzbDronoeDbFile(this EnviromentProvider enviromentProvider) + { + return Path.Combine(enviromentProvider.GetAppDataPath(), NZBDRONE_DB_FILE); + } + + public static string GetLogDbFileDbFile(this EnviromentProvider enviromentProvider) { - return Path.Combine(pathProvider.SystemTemp, UPDATE_SANDBOX_FOLDER_NAME); + return Path.Combine(enviromentProvider.GetAppDataPath(), LOG_DB_FILE); } - public static string GetUpdateBackUpFolder(this PathProvider pathProvider) + public static string GetBannerPath(this EnviromentProvider enviromentProvider) { - return Path.Combine(pathProvider.GetUpdateSandboxFolder(), UPDATE_BACKUP_FOLDER_NAME); + return Path.Combine(enviromentProvider.GetWebRoot(), "Content", "Images", "Banners"); } - public static string GetUpdatePackageFolder(this PathProvider pathProvider) + public static string GetCacheFolder(this EnviromentProvider enviromentProvider) { - return Path.Combine(pathProvider.GetUpdateSandboxFolder(), UPDATE_PACKAGE_FOLDER_NAME); + return Path.Combine(enviromentProvider.GetWebRoot(), "Cache"); } } } \ No newline at end of file diff --git a/NzbDrone.Common/PathProvider.cs b/NzbDrone.Common/PathProvider.cs deleted file mode 100644 index fdae9143e..000000000 --- a/NzbDrone.Common/PathProvider.cs +++ /dev/null @@ -1,107 +0,0 @@ -using System; -using System.Diagnostics; -using System.IO; -using System.Reflection; - -namespace NzbDrone.Common -{ - public class PathProvider - { - - private const string WEB_FOLDER = "NzbDrone.Web"; - private const string APP_DATA = "App_Data"; - - private const string LOG_CONFIG_FILE = "log.config"; - private const string APP_CONFIG_FILE = "config.xml"; - - private const string NZBDRONE_DB_FILE = "nzbdrone.sdf"; - private const string LOG_DB_FILE = "log.sdf"; - - private const string UPDATE_SANDBOX_FOLDER_NAME = "nzbdrone_update"; - private const string UPDATE_BACKUP_FOLDER_NAME = "nzbdrone_backup"; - - private readonly string _applicationPath; - - - public PathProvider(EnviromentProvider enviromentProvider) - { - _applicationPath = enviromentProvider.ApplicationPath; - } - - public PathProvider() - { - - } - - public virtual String LogPath - { - get { return Environment.CurrentDirectory; } - } - - public virtual string WebRoot - { - get - { - return Path.Combine(_applicationPath, WEB_FOLDER); - } - } - - public virtual string AppData - { - get - { - var path = Path.Combine(WebRoot, APP_DATA); - if (!Directory.Exists(path)) - Directory.CreateDirectory(path); - - return path; - } - } - - public virtual string NzbDronoeDbFile - { - get - { - - return Path.Combine(AppData, NZBDRONE_DB_FILE); - } - } - - public virtual string LogDbFile - { - get - { - - return Path.Combine(AppData, LOG_DB_FILE); - } - } - - public virtual String SystemTemp - { - get - { - return Path.GetTempPath(); - } - } - - public string LogConfigFile - { - get { return Path.Combine(WebRoot, LOG_CONFIG_FILE); } - } - - public string AppConfigFile - { - get { return Path.Combine(_applicationPath, APP_CONFIG_FILE); } - } - - public string BannerPath - { - get { return Path.Combine(WebRoot, "Content", "Images", "Banners"); } - } - - public string CacheFolder - { - get { return Path.Combine(AppData, "Cache"); } - } - } -} \ No newline at end of file diff --git a/NzbDrone.Core.Test/CentralDispatchFixture.cs b/NzbDrone.Core.Test/CentralDispatchFixture.cs index cc1895813..9f1cec65c 100644 --- a/NzbDrone.Core.Test/CentralDispatchFixture.cs +++ b/NzbDrone.Core.Test/CentralDispatchFixture.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using FluentAssertions; +using NLog; using NUnit.Framework; using NzbDrone.Core.Providers; using NzbDrone.Core.Providers.Indexer; @@ -13,7 +14,7 @@ namespace NzbDrone.Core.Test { [TestFixture] // ReSharper disable InconsistentNaming - class CentralDispatchFixture : TestBase + class CentralDispatchFixture : CoreTest { readonly IList indexers = typeof(CentralDispatch).Assembly.GetTypes().Where(t => t.IsSubclassOf(typeof(IndexerBase))).ToList(); readonly IList jobs = typeof(CentralDispatch).Assembly.GetTypes().Where(t => t.GetInterfaces().Contains(typeof(IJob))).ToList(); @@ -99,5 +100,12 @@ namespace NzbDrone.Core.Test first.Should().BeSameAs(second); } + + [TearDown] + public void TearDownBase() + { + WebTimer.Stop(); + + } } } diff --git a/NzbDrone.Core.Test/EpisodeStatusTest.cs b/NzbDrone.Core.Test/EpisodeStatusTest.cs index 8ff0cee59..051575c04 100644 --- a/NzbDrone.Core.Test/EpisodeStatusTest.cs +++ b/NzbDrone.Core.Test/EpisodeStatusTest.cs @@ -10,7 +10,7 @@ namespace NzbDrone.Core.Test { [TestFixture] // ReSharper disable InconsistentNaming - public class EpisodeStatusTest : TestBase + public class EpisodeStatusTest : CoreTest { [TestCase(1, false, false, EpisodeStatusType.NotAired)] [TestCase(-2, false, false, EpisodeStatusType.Missing)] diff --git a/NzbDrone.Core.Test/FluentTest.cs b/NzbDrone.Core.Test/FluentTest.cs index a6e7be4cc..8a703d3fa 100644 --- a/NzbDrone.Core.Test/FluentTest.cs +++ b/NzbDrone.Core.Test/FluentTest.cs @@ -8,7 +8,7 @@ namespace NzbDrone.Core.Test { [TestFixture] // ReSharper disable InconsistentNaming - public class FluentTest : TestBase + public class FluentTest : CoreTest { [TestCase(null, "def", "def")] [TestCase("", "def", "def")] diff --git a/NzbDrone.Core.Test/Framework/CoreTest.cs b/NzbDrone.Core.Test/Framework/CoreTest.cs new file mode 100644 index 000000000..0bf8e1037 --- /dev/null +++ b/NzbDrone.Core.Test/Framework/CoreTest.cs @@ -0,0 +1,53 @@ +using System.IO; +using NUnit.Framework; +using Ninject; +using NzbDrone.Test.Common; +using PetaPoco; + +namespace NzbDrone.Core.Test.Framework +{ + public class CoreTest : TestBase + // ReSharper disable InconsistentNaming + { + static CoreTest() + { + var oldDbFiles = Directory.GetFiles(Directory.GetCurrentDirectory(), "*.sdf", SearchOption.AllDirectories); + foreach (var file in oldDbFiles) + { + try + { + File.Delete(file); + } + catch { } + } + + MockLib.CreateDataBaseTemplate(); + } + + protected StandardKernel LiveKernel = null; + protected IDatabase Db = null; + + + [SetUp] + public virtual void SetupBase() + { + LiveKernel = new StandardKernel(); + } + + protected override void WithStrictMocker() + { + base.WithStrictMocker(); + + if (Db != null) + { + Mocker.SetConstant(Db); + } + } + + protected void WithRealDb() + { + Db = MockLib.GetEmptyDatabase(); + Mocker.SetConstant(Db); + } + } +} diff --git a/NzbDrone.Core.Test/Framework/TestBase.cs b/NzbDrone.Core.Test/Framework/TestBase.cs deleted file mode 100644 index 351c9cf0d..000000000 --- a/NzbDrone.Core.Test/Framework/TestBase.cs +++ /dev/null @@ -1,111 +0,0 @@ -using System.IO; -using AutoMoq; -using Moq; -using NUnit.Framework; -using Ninject; -using NzbDrone.Common; -using NzbDrone.Test.Common; -using PetaPoco; - -namespace NzbDrone.Core.Test.Framework -{ - public class TestBase : LoggingTest - // ReSharper disable InconsistentNaming - { - static TestBase() - { - var oldDbFiles = Directory.GetFiles(Directory.GetCurrentDirectory(), "*.sdf", SearchOption.AllDirectories); - foreach (var file in oldDbFiles) - { - try - { - File.Delete(file); - } - catch { } - } - - MockLib.CreateDataBaseTemplate(); - } - - protected StandardKernel LiveKernel = null; - protected AutoMoqer Mocker = null; - protected IDatabase Db = null; - - protected string VirtualPath - { - get - { - var virtualPath = Path.Combine(TempFolder, "VirtualNzbDrone"); - if (!Directory.Exists(virtualPath)) Directory.CreateDirectory(virtualPath); - - return virtualPath; - } - } - - [SetUp] - public virtual void SetupBase() - { - InitLogging(); - - ExceptionVerification.Reset(); - if (Directory.Exists(TempFolder)) - { - Directory.Delete(TempFolder, true); - } - - Directory.CreateDirectory(TempFolder); - - LiveKernel = new StandardKernel(); - Mocker = new AutoMoqer(); - } - - protected void WithStrictMocker() - { - Mocker = new AutoMoqer(MockBehavior.Strict); - if (Db != null) - { - Mocker.SetConstant(Db); - } - } - - protected void WithRealDb() - { - Db = MockLib.GetEmptyDatabase(); - Mocker.SetConstant(Db); - } - - [TearDown] - public void TearDownBase() - { - ExceptionVerification.AssertNoUnexcpectedLogs(); - Mocker = new AutoMoqer(MockBehavior.Strict); - WebTimer.Stop(); - } - - - protected void WithTempAsStartUpPath() - { - Mocker.GetMock() - .SetupGet(c => c.ApplicationPath) - .Returns(VirtualPath); - - Mocker.Resolve(); - } - - - protected string TempFolder - { - get { return Path.Combine(Directory.GetCurrentDirectory(), "temp"); } - } - - protected string GetTestFilePath(string fileName) - { - return Path.Combine(@".\Files\", fileName); - } - - protected string ReadTestFile(string fileName) - { - return File.ReadAllText(GetTestFilePath(fileName)); - } - } -} diff --git a/NzbDrone.Core.Test/IndexerTests.cs b/NzbDrone.Core.Test/IndexerTests.cs index f698d5af7..df5d66b31 100644 --- a/NzbDrone.Core.Test/IndexerTests.cs +++ b/NzbDrone.Core.Test/IndexerTests.cs @@ -22,7 +22,7 @@ namespace NzbDrone.Core.Test { [TestFixture] // ReSharper disable InconsistentNaming - public class IndexerTests : TestBase + public class IndexerTests : CoreTest { [TestCase("nzbsorg.xml", 2)] diff --git a/NzbDrone.Core.Test/JobTests/BannerDownloadJobTest.cs b/NzbDrone.Core.Test/JobTests/BannerDownloadJobTest.cs index 4ff3f8e60..2e3f0922f 100644 --- a/NzbDrone.Core.Test/JobTests/BannerDownloadJobTest.cs +++ b/NzbDrone.Core.Test/JobTests/BannerDownloadJobTest.cs @@ -16,14 +16,14 @@ namespace NzbDrone.Core.Test.JobTests { [TestFixture] // ReSharper disable InconsistentNaming - public class BannerDownloadJobTest : TestBase + public class BannerDownloadJobTest : CoreTest { [SetUp] public void Setup() { WithStrictMocker(); - WithTempAsStartUpPath(); + WithTempAsAppPath(); } [Test] @@ -90,11 +90,11 @@ namespace NzbDrone.Core.Test.JobTests public void BannerDownload_some_failed_download() { //Setup - var fakeSeries = Builder.CreateListOfSize(10) + var fakeSeries = Builder.CreateListOfSize(4) .Build(); - var pathProvider = Mocker.Resolve(); + var bannerPath = Mocker.GetMock().Object.GetBannerPath(); var notification = new ProgressNotification("Banner Download"); @@ -103,43 +103,18 @@ namespace NzbDrone.Core.Test.JobTests .Returns(fakeSeries); Mocker.GetMock() - .Setup(s => s.DownloadFile(It.IsAny(), Path.Combine(pathProvider.BannerPath, "1.jpg"))) - .Throws(new WebException()); - - Mocker.GetMock() - .Setup(s => s.DownloadFile(It.IsAny(), Path.Combine(pathProvider.BannerPath, "2.jpg"))); - - Mocker.GetMock() - .Setup(s => s.DownloadFile(It.IsAny(), Path.Combine(pathProvider.BannerPath, "3.jpg"))) - .Throws(new WebException()); - - Mocker.GetMock() - .Setup(s => s.DownloadFile(It.IsAny(), Path.Combine(pathProvider.BannerPath, "4.jpg"))); - - - Mocker.GetMock() - .Setup(s => s.DownloadFile(It.IsAny(), Path.Combine(pathProvider.BannerPath, "5.jpg"))) - .Throws(new WebException()); - - Mocker.GetMock() - .Setup(s => s.DownloadFile(It.IsAny(), Path.Combine(pathProvider.BannerPath, "6.jpg"))); - - - Mocker.GetMock() - .Setup(s => s.DownloadFile(It.IsAny(), Path.Combine(pathProvider.BannerPath, "7.jpg"))) + .Setup(s => s.DownloadFile(It.IsAny(), Path.Combine(bannerPath, "1.jpg"))) .Throws(new WebException()); Mocker.GetMock() - .Setup(s => s.DownloadFile(It.IsAny(), Path.Combine(pathProvider.BannerPath, "8.jpg"))); - + .Setup(s => s.DownloadFile(It.IsAny(), Path.Combine(bannerPath, "2.jpg"))); Mocker.GetMock() - .Setup(s => s.DownloadFile(It.IsAny(), Path.Combine(pathProvider.BannerPath, "9.jpg"))) + .Setup(s => s.DownloadFile(It.IsAny(), Path.Combine(bannerPath, "3.jpg"))) .Throws(new WebException()); Mocker.GetMock() - .Setup(s => s.DownloadFile(It.IsAny(), Path.Combine(pathProvider.BannerPath, "10.jpg"))); - + .Setup(s => s.DownloadFile(It.IsAny(), Path.Combine(bannerPath, "4.jpg"))); Mocker.GetMock() .Setup(S => S.CreateDirectory(It.IsAny())) diff --git a/NzbDrone.Core.Test/JobTests/DiskScanJobTest.cs b/NzbDrone.Core.Test/JobTests/DiskScanJobTest.cs index 0d9a211c6..2ca294f16 100644 --- a/NzbDrone.Core.Test/JobTests/DiskScanJobTest.cs +++ b/NzbDrone.Core.Test/JobTests/DiskScanJobTest.cs @@ -17,7 +17,7 @@ namespace NzbDrone.Core.Test.JobTests { [TestFixture] // ReSharper disable InconsistentNaming - public class DiskScanJobTest : TestBase + public class DiskScanJobTest : CoreTest { [Test] public void series_specific_scan_should_scan_series() diff --git a/NzbDrone.Core.Test/JobTests/ImportNewSeriesJobTest.cs b/NzbDrone.Core.Test/JobTests/ImportNewSeriesJobTest.cs index 41a7b334e..1cdaa57a3 100644 --- a/NzbDrone.Core.Test/JobTests/ImportNewSeriesJobTest.cs +++ b/NzbDrone.Core.Test/JobTests/ImportNewSeriesJobTest.cs @@ -17,7 +17,7 @@ namespace NzbDrone.Core.Test.JobTests { [TestFixture] // ReSharper disable InconsistentNaming - public class ImportNewSeriesJobTest : TestBase + public class ImportNewSeriesJobTest : CoreTest { [Test] public void import_new_series_succesfull() diff --git a/NzbDrone.Core.Test/JobTests/SeasonSearchJobTest.cs b/NzbDrone.Core.Test/JobTests/SeasonSearchJobTest.cs index cf6edf385..fa95e89d8 100644 --- a/NzbDrone.Core.Test/JobTests/SeasonSearchJobTest.cs +++ b/NzbDrone.Core.Test/JobTests/SeasonSearchJobTest.cs @@ -14,7 +14,7 @@ namespace NzbDrone.Core.Test.JobTests { [TestFixture] // ReSharper disable InconsistentNaming - public class SeasonSearchJobTest : TestBase + public class SeasonSearchJobTest : CoreTest { [Test] public void SeasonSearch_full_season_success() diff --git a/NzbDrone.Core.Test/JobTests/SeriesSearchJobTest.cs b/NzbDrone.Core.Test/JobTests/SeriesSearchJobTest.cs index ad9c148cc..a8a69f91d 100644 --- a/NzbDrone.Core.Test/JobTests/SeriesSearchJobTest.cs +++ b/NzbDrone.Core.Test/JobTests/SeriesSearchJobTest.cs @@ -11,7 +11,7 @@ namespace NzbDrone.Core.Test.JobTests { [TestFixture] // ReSharper disable InconsistentNaming - public class SeriesSearchJobTest : TestBase + public class SeriesSearchJobTest : CoreTest { [Test] public void SeriesSearch_success() diff --git a/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj b/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj index 1aa915b0d..8df497f7e 100644 --- a/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj +++ b/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj @@ -84,7 +84,6 @@ - @@ -115,7 +114,7 @@ - + diff --git a/NzbDrone.Core.Test/ParserTest.cs b/NzbDrone.Core.Test/ParserTest.cs index 6bf30377b..34913a87d 100644 --- a/NzbDrone.Core.Test/ParserTest.cs +++ b/NzbDrone.Core.Test/ParserTest.cs @@ -10,7 +10,7 @@ namespace NzbDrone.Core.Test { [TestFixture] // ReSharper disable InconsistentNaming - public class ParserTest : TestBase + public class ParserTest : CoreTest { /*Fucked-up hall of shame, * WWE.Wrestlemania.27.PPV.HDTV.XviD-KYR diff --git a/NzbDrone.Core.Test/ProviderTests/ConfigProviderTest.cs b/NzbDrone.Core.Test/ProviderTests/ConfigProviderTest.cs index 6c4d488b9..62bce6cf9 100644 --- a/NzbDrone.Core.Test/ProviderTests/ConfigProviderTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/ConfigProviderTest.cs @@ -14,7 +14,7 @@ namespace NzbDrone.Core.Test.ProviderTests { [TestFixture] // ReSharper disable InconsistentNaming - public class ConfigProviderTest : TestBase + public class ConfigProviderTest : CoreTest { [Test] public void Add_new_value_to_database() diff --git a/NzbDrone.Core.Test/ProviderTests/DiskProviderTests/ExtractArchiveFixture.cs b/NzbDrone.Core.Test/ProviderTests/DiskProviderTests/ExtractArchiveFixture.cs index 9b0ffca27..60256ab1d 100644 --- a/NzbDrone.Core.Test/ProviderTests/DiskProviderTests/ExtractArchiveFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/DiskProviderTests/ExtractArchiveFixture.cs @@ -7,7 +7,7 @@ using System.IO; namespace NzbDrone.Core.Test.ProviderTests.DiskProviderTests { [TestFixture] - public class ExtractArchiveFixture : TestBase + public class ExtractArchiveFixture : CoreTest { [Test] public void Should_extract_to_correct_folder() diff --git a/NzbDrone.Core.Test/ProviderTests/DiskProviderTests/FreeDiskSpaceTest.cs b/NzbDrone.Core.Test/ProviderTests/DiskProviderTests/FreeDiskSpaceTest.cs index 7679538ee..e7a27d4a6 100644 --- a/NzbDrone.Core.Test/ProviderTests/DiskProviderTests/FreeDiskSpaceTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/DiskProviderTests/FreeDiskSpaceTest.cs @@ -14,7 +14,7 @@ using NzbDrone.Core.Test.Framework; namespace NzbDrone.Core.Test.ProviderTests.DiskProviderTests { [TestFixture] - public class FreeDiskSpaceTest : TestBase + public class FreeDiskSpaceTest : CoreTest { [Test] public void FreeDiskSpace() diff --git a/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTest.cs b/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTest.cs index 1fc8d35bb..b58b59e84 100644 --- a/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTest.cs @@ -14,7 +14,7 @@ using NzbDrone.Test.Common; namespace NzbDrone.Core.Test.ProviderTests { // ReSharper disable InconsistentNaming - public class DiskScanProviderTest : TestBase + public class DiskScanProviderTest : CoreTest { [Test] public void scan_series_should_update_the_last_scan_date() diff --git a/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTest_ImportFile.cs b/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTest_ImportFile.cs index caec1d8f1..a34adfda1 100644 --- a/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTest_ImportFile.cs +++ b/NzbDrone.Core.Test/ProviderTests/DiskScanProviderTest_ImportFile.cs @@ -17,7 +17,7 @@ using NzbDrone.Test.Common; namespace NzbDrone.Core.Test.ProviderTests { // ReSharper disable InconsistentNaming - public class DiskScanProviderTest_ImportFile : TestBase + public class DiskScanProviderTest_ImportFile : CoreTest { [Test] public void import_new_file_should_succeed() diff --git a/NzbDrone.Core.Test/ProviderTests/DownloadProviderTest.cs b/NzbDrone.Core.Test/ProviderTests/DownloadProviderTest.cs index 7b8033a11..ce1ac4713 100644 --- a/NzbDrone.Core.Test/ProviderTests/DownloadProviderTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/DownloadProviderTest.cs @@ -14,7 +14,7 @@ using NzbDrone.Core.Test.Framework; namespace NzbDrone.Core.Test.ProviderTests { [TestFixture] - public class DownloadProviderTest : TestBase + public class DownloadProviderTest : CoreTest { [Test] public void Download_report_should_send_to_sab_add_to_history_mark_as_grabbed() diff --git a/NzbDrone.Core.Test/ProviderTests/EpisodeProviderTest.cs b/NzbDrone.Core.Test/ProviderTests/EpisodeProviderTest.cs index 05781e5e2..7482c3d91 100644 --- a/NzbDrone.Core.Test/ProviderTests/EpisodeProviderTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/EpisodeProviderTest.cs @@ -21,7 +21,7 @@ namespace NzbDrone.Core.Test.ProviderTests { [TestFixture] // ReSharper disable InconsistentNaming - public class EpisodeProviderTest : TestBase + public class EpisodeProviderTest : CoreTest { [Test] public void GetEpisodes_exists() diff --git a/NzbDrone.Core.Test/ProviderTests/EpisodeProviderTest_DeleteInvalidEpisodes.cs b/NzbDrone.Core.Test/ProviderTests/EpisodeProviderTest_DeleteInvalidEpisodes.cs index 70cdf960e..efc47f1a0 100644 --- a/NzbDrone.Core.Test/ProviderTests/EpisodeProviderTest_DeleteInvalidEpisodes.cs +++ b/NzbDrone.Core.Test/ProviderTests/EpisodeProviderTest_DeleteInvalidEpisodes.cs @@ -15,7 +15,7 @@ namespace NzbDrone.Core.Test.ProviderTests { [TestFixture] // ReSharper disable InconsistentNaming - public class EpisodeProviderTest_DeleteInvalidEpisodes : TestBase + public class EpisodeProviderTest_DeleteInvalidEpisodes : CoreTest { [Test] public void Delete_None_Valid_TvDbEpisodeId() diff --git a/NzbDrone.Core.Test/ProviderTests/EpisodeProviderTest_GetEpisodesByParseResult.cs b/NzbDrone.Core.Test/ProviderTests/EpisodeProviderTest_GetEpisodesByParseResult.cs index 1e588c6b9..f2cb6db5c 100644 --- a/NzbDrone.Core.Test/ProviderTests/EpisodeProviderTest_GetEpisodesByParseResult.cs +++ b/NzbDrone.Core.Test/ProviderTests/EpisodeProviderTest_GetEpisodesByParseResult.cs @@ -15,7 +15,7 @@ namespace NzbDrone.Core.Test.ProviderTests { [TestFixture] // ReSharper disable InconsistentNaming - public class EpisodeProviderTest_GetEpisodesByParseResult : TestBase + public class EpisodeProviderTest_GetEpisodesByParseResult : CoreTest { [Test] diff --git a/NzbDrone.Core.Test/ProviderTests/EventClientProviderTest.cs b/NzbDrone.Core.Test/ProviderTests/EventClientProviderTest.cs index bc15cc152..6e6bc544e 100644 --- a/NzbDrone.Core.Test/ProviderTests/EventClientProviderTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/EventClientProviderTest.cs @@ -13,7 +13,7 @@ namespace NzbDrone.Core.Test.ProviderTests { [TestFixture] // ReSharper disable InconsistentNaming - public class EventClientProviderTest : TestBase + public class EventClientProviderTest : CoreTest { [Test] public void SendNotification_true() diff --git a/NzbDrone.Core.Test/ProviderTests/GrowlProviderTest.cs b/NzbDrone.Core.Test/ProviderTests/GrowlProviderTest.cs index a7586aa7f..3c70d4a96 100644 --- a/NzbDrone.Core.Test/ProviderTests/GrowlProviderTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/GrowlProviderTest.cs @@ -16,7 +16,7 @@ namespace NzbDrone.Core.Test.ProviderTests { [Explicit] [TestFixture] - public class GrowlProviderTest : TestBase + public class GrowlProviderTest : CoreTest { [Test] public void Register_should_add_new_application_to_local_growl_instance() diff --git a/NzbDrone.Core.Test/ProviderTests/HistoryProviderTest.cs b/NzbDrone.Core.Test/ProviderTests/HistoryProviderTest.cs index 8f4ef6700..556559b93 100644 --- a/NzbDrone.Core.Test/ProviderTests/HistoryProviderTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/HistoryProviderTest.cs @@ -14,7 +14,7 @@ namespace NzbDrone.Core.Test.ProviderTests { [TestFixture] // ReSharper disable InconsistentNaming - public class HistoryProviderTest : TestBase + public class HistoryProviderTest : CoreTest { [Test] public void AllItems() diff --git a/NzbDrone.Core.Test/ProviderTests/IndexerProviderTest.cs b/NzbDrone.Core.Test/ProviderTests/IndexerProviderTest.cs index 9dde9b574..8df70dd2b 100644 --- a/NzbDrone.Core.Test/ProviderTests/IndexerProviderTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/IndexerProviderTest.cs @@ -18,7 +18,7 @@ namespace NzbDrone.Core.Test.ProviderTests { [TestFixture] // ReSharper disable InconsistentNaming - public class IndexerProviderTest : TestBase + public class IndexerProviderTest : CoreTest { [Test] public void Init_indexer_test() diff --git a/NzbDrone.Core.Test/ProviderTests/InventoryProvider_IsAcceptableSizeTest.cs b/NzbDrone.Core.Test/ProviderTests/InventoryProvider_IsAcceptableSizeTest.cs index 1f2e2d6b0..b25538a03 100644 --- a/NzbDrone.Core.Test/ProviderTests/InventoryProvider_IsAcceptableSizeTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/InventoryProvider_IsAcceptableSizeTest.cs @@ -17,7 +17,7 @@ namespace NzbDrone.Core.Test.ProviderTests { [TestFixture] // ReSharper disable InconsistentNaming - public class InventoryProvider_IsAcceptableSizeTest : TestBase + public class InventoryProvider_IsAcceptableSizeTest : CoreTest { private EpisodeParseResult parseResultMulti; private EpisodeParseResult parseResultSingle; diff --git a/NzbDrone.Core.Test/ProviderTests/InventoryProvider_IsMonitoredTest.cs b/NzbDrone.Core.Test/ProviderTests/InventoryProvider_IsMonitoredTest.cs index 333c1b36a..c786f106a 100644 --- a/NzbDrone.Core.Test/ProviderTests/InventoryProvider_IsMonitoredTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/InventoryProvider_IsMonitoredTest.cs @@ -17,7 +17,7 @@ namespace NzbDrone.Core.Test.ProviderTests { [TestFixture] // ReSharper disable InconsistentNaming - public class InventoryProvider_IsMonitoredTest : TestBase + public class InventoryProvider_IsMonitoredTest : CoreTest { private EpisodeParseResult parseResultMulti; private Series series; diff --git a/NzbDrone.Core.Test/ProviderTests/InventoryProvider_QualityNeededTest.cs b/NzbDrone.Core.Test/ProviderTests/InventoryProvider_QualityNeededTest.cs index 46334e1ea..3b538664a 100644 --- a/NzbDrone.Core.Test/ProviderTests/InventoryProvider_QualityNeededTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/InventoryProvider_QualityNeededTest.cs @@ -17,7 +17,7 @@ namespace NzbDrone.Core.Test.ProviderTests { [TestFixture] // ReSharper disable InconsistentNaming - public class InventoryProvider_QualityNeededTest : TestBase + public class InventoryProvider_QualityNeededTest : CoreTest { private Episode episode; private Episode episode2; diff --git a/NzbDrone.Core.Test/ProviderTests/JobProviderTests/JobProviderTest.cs b/NzbDrone.Core.Test/ProviderTests/JobProviderTests/JobProviderTest.cs index a36bda385..6c0ce248c 100644 --- a/NzbDrone.Core.Test/ProviderTests/JobProviderTests/JobProviderTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/JobProviderTests/JobProviderTest.cs @@ -16,7 +16,7 @@ namespace NzbDrone.Core.Test.ProviderTests.JobProviderTests { [TestFixture] // ReSharper disable InconsistentNaming - public class JobProviderTest : TestBase + public class JobProviderTest : CoreTest { [Test] public void Run_Jobs_Updates_Last_Execution() diff --git a/NzbDrone.Core.Test/ProviderTests/LogProviderTest.cs b/NzbDrone.Core.Test/ProviderTests/LogProviderTest.cs index 9ed70808a..22012c763 100644 --- a/NzbDrone.Core.Test/ProviderTests/LogProviderTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/LogProviderTest.cs @@ -19,7 +19,7 @@ namespace NzbDrone.Core.Test.ProviderTests { [TestFixture] // ReSharper disable InconsistentNaming - public class LogProviderTest : TestBase + public class LogProviderTest : CoreTest { private const string loggerName = "Core.Test.ProviderTests.LogProviderTest"; diff --git a/NzbDrone.Core.Test/ProviderTests/MediaFileProviderTests.cs b/NzbDrone.Core.Test/ProviderTests/MediaFileProviderTests.cs index 4b5f55391..e92fb5dbd 100644 --- a/NzbDrone.Core.Test/ProviderTests/MediaFileProviderTests.cs +++ b/NzbDrone.Core.Test/ProviderTests/MediaFileProviderTests.cs @@ -16,7 +16,7 @@ namespace NzbDrone.Core.Test.ProviderTests { [TestFixture] // ReSharper disable InconsistentNaming - public class MediaFileProviderTests : TestBase + public class MediaFileProviderTests : CoreTest { [Test] public void get_series_files() diff --git a/NzbDrone.Core.Test/ProviderTests/MediaFileProvider_GetNewFilenameTest.cs b/NzbDrone.Core.Test/ProviderTests/MediaFileProvider_GetNewFilenameTest.cs index 3435c70a2..2b7609f61 100644 --- a/NzbDrone.Core.Test/ProviderTests/MediaFileProvider_GetNewFilenameTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/MediaFileProvider_GetNewFilenameTest.cs @@ -14,7 +14,7 @@ namespace NzbDrone.Core.Test.ProviderTests { [TestFixture] // ReSharper disable InconsistentNaming - public class MediaFileProvider_GetNewFilenameTest : TestBase + public class MediaFileProvider_GetNewFilenameTest : CoreTest { [Test] public void GetNewFilename_Series_Episode_Quality_S01E05_Dash() diff --git a/NzbDrone.Core.Test/ProviderTests/PostDownloadProviderTests/PostDownloadProviderFixture.cs b/NzbDrone.Core.Test/ProviderTests/PostDownloadProviderTests/PostDownloadProviderFixture.cs index 9d49d06c5..55861608a 100644 --- a/NzbDrone.Core.Test/ProviderTests/PostDownloadProviderTests/PostDownloadProviderFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/PostDownloadProviderTests/PostDownloadProviderFixture.cs @@ -12,7 +12,7 @@ namespace NzbDrone.Core.Test.ProviderTests { [TestFixture] // ReSharper disable InconsistentNaming - public class PostDownloadProviderFixture : TestBase + public class PostDownloadProviderFixture : CoreTest { [TestCase(@"c:\_NzbDrone_InvalidEpisode_Title", @"c:\_UnknownSeries_Title", PostDownloadStatusType.UnknownSeries)] [TestCase(@"c:\Title", @"c:\_Failed_Title", PostDownloadStatusType.Failed)] diff --git a/NzbDrone.Core.Test/ProviderTests/PostDownloadProviderTests/ProcessDownloadFixture.cs b/NzbDrone.Core.Test/ProviderTests/PostDownloadProviderTests/ProcessDownloadFixture.cs index 77a87f7c6..c9f3b70d6 100644 --- a/NzbDrone.Core.Test/ProviderTests/PostDownloadProviderTests/ProcessDownloadFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/PostDownloadProviderTests/ProcessDownloadFixture.cs @@ -18,7 +18,7 @@ using NzbDrone.Test.Common; namespace NzbDrone.Core.Test.ProviderTests.PostDownloadProviderTests { [TestFixture] - public class ProcessDownloadFixture : TestBase + public class ProcessDownloadFixture : CoreTest { [Test] public void should_skip_if_folder_is_tagged_and_too_fresh() diff --git a/NzbDrone.Core.Test/ProviderTests/ProwlProviderTest.cs b/NzbDrone.Core.Test/ProviderTests/ProwlProviderTest.cs index c6d6c506e..2e856935f 100644 --- a/NzbDrone.Core.Test/ProviderTests/ProwlProviderTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/ProwlProviderTest.cs @@ -18,7 +18,7 @@ namespace NzbDrone.Core.Test.ProviderTests { [Explicit] [TestFixture] - public class ProwlProviderTest : TestBase + public class ProwlProviderTest : CoreTest { private const string _apiKey = "c3bdc0f48168f72d546cc6872925b160f5cbffc1"; private const string _apiKey2 = "46a710a46b111b0b8633819b0d8a1e0272a3affa"; diff --git a/NzbDrone.Core.Test/ProviderTests/QualityTypeProviderTest.cs b/NzbDrone.Core.Test/ProviderTests/QualityTypeProviderTest.cs index a31cd4031..4431f3559 100644 --- a/NzbDrone.Core.Test/ProviderTests/QualityTypeProviderTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/QualityTypeProviderTest.cs @@ -13,7 +13,7 @@ namespace NzbDrone.Core.Test.ProviderTests { [TestFixture] // ReSharper disable InconsistentNaming - public class QualityTypeProviderTest : TestBase + public class QualityTypeProviderTest : CoreTest { [Test] public void SetupDefault_should_add_six_profiles() diff --git a/NzbDrone.Core.Test/ProviderTests/RootDirProviderTest.cs b/NzbDrone.Core.Test/ProviderTests/RootDirProviderTest.cs index af1179cf5..17cf3d018 100644 --- a/NzbDrone.Core.Test/ProviderTests/RootDirProviderTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/RootDirProviderTest.cs @@ -16,7 +16,7 @@ namespace NzbDrone.Core.Test.ProviderTests { [TestFixture] // ReSharper disable InconsistentNaming - public class RootDirProviderTest : TestBase + public class RootDirProviderTest : CoreTest { [Test] diff --git a/NzbDrone.Core.Test/ProviderTests/SabProviderTest.cs b/NzbDrone.Core.Test/ProviderTests/SabProviderTest.cs index 75c592395..0618c33a7 100644 --- a/NzbDrone.Core.Test/ProviderTests/SabProviderTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/SabProviderTest.cs @@ -20,7 +20,7 @@ namespace NzbDrone.Core.Test.ProviderTests { [TestFixture] // ReSharper disable InconsistentNaming - public class SabProviderTest : TestBase + public class SabProviderTest : CoreTest { [Test] public void AddByUrlSuccess() diff --git a/NzbDrone.Core.Test/ProviderTests/SearchProviderTest_Episode.cs b/NzbDrone.Core.Test/ProviderTests/SearchProviderTest_Episode.cs index e68839f6e..e4d1601fe 100644 --- a/NzbDrone.Core.Test/ProviderTests/SearchProviderTest_Episode.cs +++ b/NzbDrone.Core.Test/ProviderTests/SearchProviderTest_Episode.cs @@ -19,7 +19,7 @@ namespace NzbDrone.Core.Test.ProviderTests { [TestFixture] // ReSharper disable InconsistentNaming - public class SearchProviderTest_Episode : TestBase + public class SearchProviderTest_Episode : CoreTest { [Test] public void processResults_ParseResult_should_return_after_match() diff --git a/NzbDrone.Core.Test/ProviderTests/SearchProviderTest_PartialSeason.cs b/NzbDrone.Core.Test/ProviderTests/SearchProviderTest_PartialSeason.cs index 39bc18407..82d389571 100644 --- a/NzbDrone.Core.Test/ProviderTests/SearchProviderTest_PartialSeason.cs +++ b/NzbDrone.Core.Test/ProviderTests/SearchProviderTest_PartialSeason.cs @@ -17,7 +17,7 @@ namespace NzbDrone.Core.Test.ProviderTests { [TestFixture] // ReSharper disable InconsistentNaming - public class SearchProviderTest_PartialSeason : TestBase + public class SearchProviderTest_PartialSeason : CoreTest { [Test] public void SeasonPartialSearch_season_success() diff --git a/NzbDrone.Core.Test/ProviderTests/SearchProviderTest_Season.cs b/NzbDrone.Core.Test/ProviderTests/SearchProviderTest_Season.cs index e10bc647c..5366202f6 100644 --- a/NzbDrone.Core.Test/ProviderTests/SearchProviderTest_Season.cs +++ b/NzbDrone.Core.Test/ProviderTests/SearchProviderTest_Season.cs @@ -18,7 +18,7 @@ namespace NzbDrone.Core.Test.ProviderTests { [TestFixture] // ReSharper disable InconsistentNaming - public class SearchProviderTest_Season : TestBase + public class SearchProviderTest_Season : CoreTest { [Test] public void SeasonSearch_season_success() diff --git a/NzbDrone.Core.Test/ProviderTests/SeriesProviderTest.cs b/NzbDrone.Core.Test/ProviderTests/SeriesProviderTest.cs index 8e2d7d548..5d8042b03 100644 --- a/NzbDrone.Core.Test/ProviderTests/SeriesProviderTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/SeriesProviderTest.cs @@ -15,7 +15,7 @@ using NzbDrone.Core.Test.Framework; namespace NzbDrone.Core.Test.ProviderTests { [TestFixture] - public class SeriesProviderTest : TestBase + public class SeriesProviderTest : CoreTest { [TestCase(true)] [TestCase(false)] diff --git a/NzbDrone.Core.Test/ProviderTests/TvDbProviderTest.cs b/NzbDrone.Core.Test/ProviderTests/TvDbProviderTest.cs index cb894ebf6..5e8cfe7f9 100644 --- a/NzbDrone.Core.Test/ProviderTests/TvDbProviderTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/TvDbProviderTest.cs @@ -15,7 +15,7 @@ namespace NzbDrone.Core.Test.ProviderTests { [TestFixture] // ReSharper disable InconsistentNaming - public class TvDbProviderTest : TestBase + public class TvDbProviderTest : CoreTest { private TvDbProvider tvDbProvider; diff --git a/NzbDrone.Core.Test/ProviderTests/UpcomingEpisodesProviderTest.cs b/NzbDrone.Core.Test/ProviderTests/UpcomingEpisodesProviderTest.cs index 0a8d7c801..311c58ab0 100644 --- a/NzbDrone.Core.Test/ProviderTests/UpcomingEpisodesProviderTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/UpcomingEpisodesProviderTest.cs @@ -15,7 +15,7 @@ namespace NzbDrone.Core.Test.ProviderTests { [TestFixture] // ReSharper disable InconsistentNaming - public class UpcomingEpisodesProviderTest : TestBase + public class UpcomingEpisodesProviderTest : CoreTest { private IList episodes; private Series series; diff --git a/NzbDrone.Core.Test/ProviderTests/UpdateProviderTests/GetAvilableUpdateFixture.cs b/NzbDrone.Core.Test/ProviderTests/UpdateProviderTests/GetAvilableUpdateFixture.cs index 5e30f3206..5e988e858 100644 --- a/NzbDrone.Core.Test/ProviderTests/UpdateProviderTests/GetAvilableUpdateFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/UpdateProviderTests/GetAvilableUpdateFixture.cs @@ -10,7 +10,7 @@ using NzbDrone.Core.Test.Framework; namespace NzbDrone.Core.Test.ProviderTests.UpdateProviderTests { - class GetAvilableUpdateFixture : TestBase + class GetAvilableUpdateFixture : CoreTest { private AutoMoqer _mocker = null; diff --git a/NzbDrone.Core.Test/ProviderTests/UpdateProviderTests/PreformUpdateFixture.cs b/NzbDrone.Core.Test/ProviderTests/UpdateProviderTests/PreformUpdateFixture.cs index bcbf1d92d..8dfe0e488 100644 --- a/NzbDrone.Core.Test/ProviderTests/UpdateProviderTests/PreformUpdateFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/UpdateProviderTests/PreformUpdateFixture.cs @@ -11,7 +11,7 @@ using NzbDrone.Core.Test.Framework; namespace NzbDrone.Core.Test.ProviderTests.UpdateProviderTests { [TestFixture] - internal class PreformUpdateFixture : TestBase + internal class PreformUpdateFixture : CoreTest { @@ -29,7 +29,7 @@ namespace NzbDrone.Core.Test.ProviderTests.UpdateProviderTests [Test] public void Should_call_download_and_extract_using_correct_arguments() { - Mocker.GetMock().SetupGet(c => c.SystemTemp).Returns(@"C:\Temp\"); + Mocker.GetMock().SetupGet(c => c.SystemTemp).Returns(@"C:\Temp\"); var updatePackage = new UpdatePackage { @@ -54,9 +54,9 @@ namespace NzbDrone.Core.Test.ProviderTests.UpdateProviderTests public void Should_download_and_extract_to_temp_folder() { - Mocker.GetMock().SetupGet(c => c.SystemTemp).Returns(TempFolder); + Mocker.GetMock().SetupGet(c => c.SystemTemp).Returns(TempFolder); - var updateSubFolder = new DirectoryInfo(Mocker.GetMock().Object.GetUpdateSandboxFolder()); + var updateSubFolder = new DirectoryInfo(Mocker.GetMock().Object.GetUpdateSandboxFolder()); var updatePackage = new UpdatePackage { diff --git a/NzbDrone.Core.Test/ProviderTests/XbmcProviderTest.cs b/NzbDrone.Core.Test/ProviderTests/XbmcProviderTest.cs index eebaacf01..cba1bf035 100644 --- a/NzbDrone.Core.Test/ProviderTests/XbmcProviderTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/XbmcProviderTest.cs @@ -17,7 +17,7 @@ namespace NzbDrone.Core.Test.ProviderTests { [TestFixture] // ReSharper disable InconsistentNaming - public class XbmcProviderTest : TestBase + public class XbmcProviderTest : CoreTest { [Test] public void JsonError_true() diff --git a/NzbDrone.Core.Test/QualityProfileTest.cs b/NzbDrone.Core.Test/QualityProfileTest.cs index 10cf89eaf..d185e199e 100644 --- a/NzbDrone.Core.Test/QualityProfileTest.cs +++ b/NzbDrone.Core.Test/QualityProfileTest.cs @@ -14,7 +14,7 @@ namespace NzbDrone.Core.Test { [TestFixture] // ReSharper disable InconsistentNaming - public class QualityProfileTest : TestBase + public class QualityProfileTest : CoreTest { [Test] public void Test_Storage() diff --git a/NzbDrone.Core.Test/QualityTest.cs b/NzbDrone.Core.Test/QualityTest.cs index 03c2f9af0..176005171 100644 --- a/NzbDrone.Core.Test/QualityTest.cs +++ b/NzbDrone.Core.Test/QualityTest.cs @@ -8,7 +8,7 @@ namespace NzbDrone.Core.Test { [TestFixture] // ReSharper disable InconsistentNaming - public class QualityTest : TestBase + public class QualityTest : CoreTest { [Test] public void Icomparer_greater_test() diff --git a/NzbDrone.Core.Test/SceneMappingTest.cs b/NzbDrone.Core.Test/SceneMappingTest.cs index 6f55f2c78..c703f3480 100644 --- a/NzbDrone.Core.Test/SceneMappingTest.cs +++ b/NzbDrone.Core.Test/SceneMappingTest.cs @@ -9,7 +9,7 @@ namespace NzbDrone.Core.Test { [TestFixture] // ReSharper disable InconsistentNaming - public class SceneMappingTest : TestBase + public class SceneMappingTest : CoreTest { [Test] public void GetSceneName_exists() diff --git a/NzbDrone.Core.Test/SortHelperTest.cs b/NzbDrone.Core.Test/SortHelperTest.cs index fbbc675e3..90f11bcce 100644 --- a/NzbDrone.Core.Test/SortHelperTest.cs +++ b/NzbDrone.Core.Test/SortHelperTest.cs @@ -17,7 +17,7 @@ namespace NzbDrone.Core.Test { [TestFixture] // ReSharper disable InconsistentNaming - public class SortHelperTest : TestBase + public class SortHelperTest : CoreTest { //American Gladiators //Ancient Apocalypse diff --git a/NzbDrone.Core.Test/dbBenchmark.cs b/NzbDrone.Core.Test/dbBenchmark.cs index 66fae0a9f..ea9033100 100644 --- a/NzbDrone.Core.Test/dbBenchmark.cs +++ b/NzbDrone.Core.Test/dbBenchmark.cs @@ -18,7 +18,7 @@ namespace NzbDrone.Core.Test [Explicit] [Category("Benchmark")] // ReSharper disable InconsistentNaming - public class DbBenchmark : TestBase + public class DbBenchmark : CoreTest { const int Episodes_Per_Season = 20; private readonly List seasonsNumbers = new List { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; diff --git a/NzbDrone.Core/CentralDispatch.cs b/NzbDrone.Core/CentralDispatch.cs index 3f38a2abf..0d313883b 100644 --- a/NzbDrone.Core/CentralDispatch.cs +++ b/NzbDrone.Core/CentralDispatch.cs @@ -3,6 +3,7 @@ using System.Diagnostics; using System.Linq; using Ninject; using NLog; +using NzbDrone.Common; using NzbDrone.Core.Datastore; using NzbDrone.Core.Instrumentation; using NzbDrone.Core.Providers; @@ -11,6 +12,7 @@ using NzbDrone.Core.Providers.ExternalNotification; using NzbDrone.Core.Providers.Indexer; using NzbDrone.Core.Providers.Jobs; using PetaPoco; +using LogConfiguration = NzbDrone.Core.Instrumentation.LogConfiguration; namespace NzbDrone.Core { diff --git a/NzbDrone.Core/Datastore/Connection.cs b/NzbDrone.Core/Datastore/Connection.cs index 8dfc38859..3d3c15fdd 100644 --- a/NzbDrone.Core/Datastore/Connection.cs +++ b/NzbDrone.Core/Datastore/Connection.cs @@ -1,22 +1,16 @@ using System; -using System.Data; -using System.Data.Common; -using System.Data.SqlServerCe; -using System.IO; -using MvcMiniProfiler.Data; using NzbDrone.Common; -using NzbDrone.Core.Providers; using PetaPoco; namespace NzbDrone.Core.Datastore { public class Connection { - private readonly PathProvider _pathProvider; + private readonly EnviromentProvider _enviromentProvider; - public Connection(PathProvider pathProvider) + public Connection(EnviromentProvider enviromentProvider) { - _pathProvider = pathProvider; + _enviromentProvider = enviromentProvider; } static Connection() @@ -28,7 +22,7 @@ namespace NzbDrone.Core.Datastore { get { - return GetConnectionString(_pathProvider.NzbDronoeDbFile); + return GetConnectionString(_enviromentProvider.GetNzbDronoeDbFile()); } } @@ -36,7 +30,7 @@ namespace NzbDrone.Core.Datastore { get { - return GetConnectionString(_pathProvider.LogDbFile); + return GetConnectionString(_enviromentProvider.GetLogDbFileDbFile()); } } @@ -45,7 +39,7 @@ namespace NzbDrone.Core.Datastore //return String.Format("Data Source={0};Version=3;Cache Size=30000;Pooling=true;Default Timeout=2", path); return String.Format("Data Source={0}", path); } - + public IDatabase GetMainPetaPocoDb(Boolean profiled = true) { return GetPetaPocoDb(MainConnectionString, profiled); diff --git a/NzbDrone.Core/Instrumentation/LogConfiguration.cs b/NzbDrone.Core/Instrumentation/LogConfiguration.cs index 0baba5855..60ecfec45 100644 --- a/NzbDrone.Core/Instrumentation/LogConfiguration.cs +++ b/NzbDrone.Core/Instrumentation/LogConfiguration.cs @@ -9,12 +9,12 @@ namespace NzbDrone.Core.Instrumentation { public class LogConfiguration { - private readonly PathProvider _pathProvider; + private readonly EnviromentProvider _enviromentProvider; private readonly DatabaseTarget _databaseTarget; - public LogConfiguration(PathProvider pathProvider, DatabaseTarget databaseTarget) + public LogConfiguration(EnviromentProvider enviromentProvider, DatabaseTarget databaseTarget) { - _pathProvider = pathProvider; + _enviromentProvider = enviromentProvider; _databaseTarget = databaseTarget; } @@ -25,12 +25,13 @@ namespace NzbDrone.Core.Instrumentation LogManager.ThrowExceptions = false; } - LogManager.Configuration = new XmlLoggingConfiguration(_pathProvider.LogConfigFile, false); + LogManager.Configuration = new XmlLoggingConfiguration(_enviromentProvider.GetNlogConfigPath(), false); Common.LogConfiguration.RegisterConsoleLogger(LogLevel.Info, "NzbDrone.Web.MvcApplication"); Common.LogConfiguration.RegisterConsoleLogger(LogLevel.Info, "NzbDrone.Core.CentralDispatch"); LogManager.ConfigurationReloaded += ((s, e) => RegisterDatabaseLogger(_databaseTarget)); + Common.LogConfiguration.Reload(); } public static void RegisterDatabaseLogger(DatabaseTarget databaseTarget) diff --git a/NzbDrone.Core/Model/AuthenticationType.cs b/NzbDrone.Core/Model/AuthenticationType.cs deleted file mode 100644 index 0ffc02991..000000000 --- a/NzbDrone.Core/Model/AuthenticationType.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace NzbDrone.Core.Model -{ - public enum AuthenticationType - { - Anonymous = 0, - Windows = 1 - } -} diff --git a/NzbDrone.Core/NzbDrone.Core.csproj b/NzbDrone.Core/NzbDrone.Core.csproj index f1e127439..d63ebccc3 100644 --- a/NzbDrone.Core/NzbDrone.Core.csproj +++ b/NzbDrone.Core/NzbDrone.Core.csproj @@ -197,7 +197,6 @@ - @@ -219,7 +218,6 @@ - @@ -311,7 +309,7 @@ - + diff --git a/NzbDrone.Core/Providers/Core/DiskProvider.cs b/NzbDrone.Core/Providers/Core/ArchiveProvider.cs similarity index 100% rename from NzbDrone.Core/Providers/Core/DiskProvider.cs rename to NzbDrone.Core/Providers/Core/ArchiveProvider.cs diff --git a/NzbDrone.Core/Providers/Core/ConfigFileProvider.cs b/NzbDrone.Core/Providers/Core/ConfigFileProvider.cs deleted file mode 100644 index 25ffac54e..000000000 --- a/NzbDrone.Core/Providers/Core/ConfigFileProvider.cs +++ /dev/null @@ -1,124 +0,0 @@ -using System; -using System.IO; -using System.Linq; -using System.Xml.Linq; -using NzbDrone.Common; -using NzbDrone.Core.Model; - -namespace NzbDrone.Core.Providers.Core -{ - public class ConfigFileProvider - { - private readonly PathProvider _pathProvider; - - private readonly string _configFile; - public ConfigFileProvider(PathProvider pathProvider) - { - _pathProvider = pathProvider; - _configFile = _pathProvider.AppConfigFile; - } - - public virtual int Port - { - get { return GetValueInt("Port", 8989); } - set { SetValue("Port", value); } - } - - public virtual bool LaunchBrowser - { - get { return GetValueBoolean("LaunchBrowser", true); } - set { SetValue("LaunchBrowser", value); } - } - - public virtual AuthenticationType AuthenticationType - { - get { return (AuthenticationType)GetValueInt("AuthenticationType", 0); } - set { SetValue("AuthenticationType", (int)value); } - } - - public virtual string GetValue(string key, object defaultValue, string parent = null) - { - var xDoc = XDocument.Load(_configFile); - var config = xDoc.Descendants("Config").Single(); - - var parentContainer = config; - - if (!String.IsNullOrEmpty(parent)) - { - //Add the parent - if (config.Descendants(parent).Count() != 1) - { - SetValue(key, defaultValue, parent); - - //Reload the configFile - xDoc = XDocument.Load(_configFile); - config = xDoc.Descendants("Config").Single(); - } - - parentContainer = config.Descendants(parent).Single(); - } - - var valueHolder = parentContainer.Descendants(key).ToList(); - - if (valueHolder.Count() == 1) - return valueHolder.First().Value; - - //Save the value - SetValue(key, defaultValue, parent); - - //return the default value - return defaultValue.ToString(); - } - - public virtual int GetValueInt(string key, int defaultValue, string parent = null) - { - return Convert.ToInt32(GetValue(key, defaultValue, parent)); - } - - public virtual bool GetValueBoolean(string key, bool defaultValue, string parent = null) - { - return Convert.ToBoolean(GetValue(key, defaultValue, parent)); - } - - public virtual void SetValue(string key, object value, string parent = null) - { - var xDoc = XDocument.Load(_configFile); - var config = xDoc.Descendants("Config").Single(); - - var parentContainer = config; - - if (!String.IsNullOrEmpty(parent)) - { - //Add the parent container if it doesn't already exist - if (config.Descendants(parent).Count() != 1) - { - config.Add(new XElement(parent)); - } - - parentContainer = config.Descendants(parent).Single(); - } - - var keyHolder = parentContainer.Descendants(key); - - if (keyHolder.Count() != 1) - parentContainer.Add(new XElement(key, value)); - - else - parentContainer.Descendants(key).Single().Value = value.ToString(); - - xDoc.Save(_configFile); - } - - public virtual void CreateDefaultConfigFile() - { - if (!File.Exists(_configFile)) - { - var xDoc = new XDocument(new XDeclaration("1.0", "utf-8", "yes")); - - xDoc.Add(new XElement("Config")); - - xDoc.Save(_configFile); - } - } - } -} diff --git a/NzbDrone.Core/Providers/Jobs/BannerDownloadJob.cs b/NzbDrone.Core/Providers/Jobs/BannerDownloadJob.cs index 7d3942e9c..527e07ac0 100644 --- a/NzbDrone.Core/Providers/Jobs/BannerDownloadJob.cs +++ b/NzbDrone.Core/Providers/Jobs/BannerDownloadJob.cs @@ -17,20 +17,18 @@ namespace NzbDrone.Core.Providers.Jobs private readonly HttpProvider _httpProvider; private readonly DiskProvider _diskProvider; private readonly EnviromentProvider _enviromentProvider; - private readonly PathProvider _pathProvider; private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); private const string _bannerUrlPrefix = "http://www.thetvdb.com/banners/"; [Inject] public BannerDownloadJob(SeriesProvider seriesProvider, HttpProvider httpProvider, DiskProvider diskProvider, - EnviromentProvider enviromentProvider, PathProvider pathProvider) + EnviromentProvider enviromentProvider) { _seriesProvider = seriesProvider; _httpProvider = httpProvider; _diskProvider = diskProvider; _enviromentProvider = enviromentProvider; - _pathProvider = pathProvider; } public BannerDownloadJob() @@ -53,7 +51,7 @@ namespace NzbDrone.Core.Providers.Jobs Logger.Debug("Starting banner download job"); - _diskProvider.CreateDirectory(_pathProvider.BannerPath); + _diskProvider.CreateDirectory(_enviromentProvider.GetBannerPath()); if (targetId > 0) { @@ -77,7 +75,7 @@ namespace NzbDrone.Core.Providers.Jobs public virtual void DownloadBanner(ProgressNotification notification, Series series) { - var bannerFilename = Path.Combine(_pathProvider.BannerPath, series.SeriesId.ToString()) + ".jpg"; + var bannerFilename = Path.Combine(_enviromentProvider.GetBannerPath(), series.SeriesId.ToString()) + ".jpg"; notification.CurrentMessage = string.Format("Downloading banner for '{0}'", series.Title); diff --git a/NzbDrone.Core/Providers/TvDbProvider.cs b/NzbDrone.Core/Providers/TvDbProvider.cs index 7998e55ef..45dc3a09d 100644 --- a/NzbDrone.Core/Providers/TvDbProvider.cs +++ b/NzbDrone.Core/Providers/TvDbProvider.cs @@ -13,15 +13,17 @@ namespace NzbDrone.Core.Providers { public class TvDbProvider { + private readonly EnviromentProvider _enviromentProvider; private const string TVDB_APIKEY = "5D2D188E86E07F4F"; private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); private readonly TvdbHandler _handler; [Inject] - public TvDbProvider(PathProvider pathProvider) + public TvDbProvider(EnviromentProvider enviromentProvider) { - _handler = new TvdbHandler(new XmlCacheProvider(pathProvider.CacheFolder), TVDB_APIKEY); + _enviromentProvider = enviromentProvider; + _handler = new TvdbHandler(new XmlCacheProvider(_enviromentProvider.GetCacheFolder()), TVDB_APIKEY); } public TvDbProvider() diff --git a/NzbDrone.Core/Providers/UpdateProvider.cs b/NzbDrone.Core/Providers/UpdateProvider.cs index 720466e28..e9863b636 100644 --- a/NzbDrone.Core/Providers/UpdateProvider.cs +++ b/NzbDrone.Core/Providers/UpdateProvider.cs @@ -17,24 +17,20 @@ namespace NzbDrone.Core.Providers private readonly HttpProvider _httpProvider; private readonly ConfigProvider _configProvider; private readonly EnviromentProvider _enviromentProvider; - private readonly PathProvider _pathProvider; - private readonly DiskProvider _diskProvider; private readonly ArchiveProvider _archiveProvider; - private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); + private static readonly Logger logger = LogManager.GetCurrentClassLogger(); - private static readonly Regex ParseRegex = new Regex(@"(?:\>)(?NzbDrone.+?(?\d+\.\d+\.\d+\.\d+).+?)(?:\<\/A\>)", RegexOptions.IgnoreCase); + private static readonly Regex parseRegex = new Regex(@"(?:\>)(?NzbDrone.+?(?\d+\.\d+\.\d+\.\d+).+?)(?:\<\/A\>)", RegexOptions.IgnoreCase); [Inject] - public UpdateProvider(HttpProvider httpProvider, ConfigProvider configProvider, EnviromentProvider enviromentProvider, - PathProvider pathProvider, DiskProvider diskProvider, ArchiveProvider archiveProvider) + public UpdateProvider(HttpProvider httpProvider, ConfigProvider configProvider, + EnviromentProvider enviromentProvider, ArchiveProvider archiveProvider) { _httpProvider = httpProvider; _configProvider = configProvider; _enviromentProvider = enviromentProvider; - _pathProvider = pathProvider; - _diskProvider = diskProvider; _archiveProvider = archiveProvider; } @@ -47,7 +43,7 @@ namespace NzbDrone.Core.Providers { var updateList = new List(); var rawUpdateList = _httpProvider.DownloadString(_configProvider.UpdateUrl); - var matches = ParseRegex.Matches(rawUpdateList); + var matches = parseRegex.Matches(rawUpdateList); foreach (Match match in matches) { @@ -67,25 +63,25 @@ namespace NzbDrone.Core.Providers if (latestAvailable != null && latestAvailable.Version > _enviromentProvider.Version) { - Logger.Debug("An update is available ({0}) => ({1})", _enviromentProvider.Version, latestAvailable.Version); + logger.Debug("An update is available ({0}) => ({1})", _enviromentProvider.Version, latestAvailable.Version); return latestAvailable; } - Logger.Trace("No updates available"); + logger.Trace("No updates available"); return null; } public virtual void StartUpgrade(UpdatePackage updatePackage) { - var packageDestination = Path.Combine(_pathProvider.GetUpdateSandboxFolder(), updatePackage.FileName); + var packageDestination = Path.Combine(_enviromentProvider.GetUpdateSandboxFolder(), updatePackage.FileName); - Logger.Info("Downloading update package from [{0}] to [{1}]", updatePackage.Url, packageDestination); + logger.Info("Downloading update package from [{0}] to [{1}]", updatePackage.Url, packageDestination); _httpProvider.DownloadFile(updatePackage.Url, packageDestination); - Logger.Info("Download completed for update package from [{0}]", updatePackage.FileName); + logger.Info("Download completed for update package from [{0}]", updatePackage.FileName); - Logger.Info("Extracting Update package"); - _archiveProvider.ExtractArchive(packageDestination, _pathProvider.GetUpdateSandboxFolder()); - Logger.Info("Update package extracted successfully"); + logger.Info("Extracting Update package"); + _archiveProvider.ExtractArchive(packageDestination, _enviromentProvider.GetUpdateSandboxFolder()); + logger.Info("Update package extracted successfully"); } } diff --git a/NzbDrone.Test.Common/LoggingTest.cs b/NzbDrone.Test.Common/LoggingTest.cs index 5c8a13748..83acc938a 100644 --- a/NzbDrone.Test.Common/LoggingTest.cs +++ b/NzbDrone.Test.Common/LoggingTest.cs @@ -1,5 +1,6 @@ using NLog; using NLog.Config; +using NUnit.Framework; using NzbDrone.Common; namespace NzbDrone.Test.Common @@ -15,6 +16,7 @@ namespace NzbDrone.Test.Common LogConfiguration.RegisterUdpLogger(); RegisterExceptionVerification(); + LogConfiguration.Reload(); } } @@ -23,7 +25,19 @@ namespace NzbDrone.Test.Common var exceptionVerification = new ExceptionVerification(); LogManager.Configuration.AddTarget("ExceptionVerification", exceptionVerification); LogManager.Configuration.LoggingRules.Add(new LoggingRule("*", LogLevel.Trace, exceptionVerification)); - LogConfiguration.Reload(); + } + + [SetUp] + public void LoggingTestSetup() + { + InitLogging(); + ExceptionVerification.Reset(); + } + + [TearDown] + public void LoggingDownBase() + { + ExceptionVerification.AssertNoUnexcpectedLogs(); } } } diff --git a/NzbDrone.Test.Common/NzbDrone.Test.Common.csproj b/NzbDrone.Test.Common/NzbDrone.Test.Common.csproj index fba895fe7..71cdb191b 100644 --- a/NzbDrone.Test.Common/NzbDrone.Test.Common.csproj +++ b/NzbDrone.Test.Common/NzbDrone.Test.Common.csproj @@ -71,6 +71,7 @@ + diff --git a/NzbDrone.Test.Common/TestBase.cs b/NzbDrone.Test.Common/TestBase.cs new file mode 100644 index 000000000..ba3bba103 --- /dev/null +++ b/NzbDrone.Test.Common/TestBase.cs @@ -0,0 +1,68 @@ +using System.Linq; +using System.IO; +using AutoMoq; +using Moq; +using NUnit.Framework; +using NzbDrone.Common; + +namespace NzbDrone.Test.Common +{ + public class TestBase : LoggingTest + // ReSharper disable InconsistentNaming + { + protected AutoMoqer Mocker; + + protected string VirtualPath + { + get + { + var virtualPath = Path.Combine(TempFolder, "VirtualNzbDrone"); + if (!Directory.Exists(virtualPath)) Directory.CreateDirectory(virtualPath); + + return virtualPath; + } + } + + [SetUp] + public virtual void TestBaseSetup() + { + if (Directory.Exists(TempFolder)) + { + Directory.Delete(TempFolder, true); + } + + Directory.CreateDirectory(TempFolder); + + Mocker = new AutoMoqer(); + } + + protected virtual void WithStrictMocker() + { + Mocker = new AutoMoqer(MockBehavior.Strict); + } + + + protected void WithTempAsAppPath() + { + Mocker.GetMock() + .SetupGet(c => c.ApplicationPath) + .Returns(VirtualPath); + } + + + protected string TempFolder + { + get { return Path.Combine(Directory.GetCurrentDirectory(), "temp"); } + } + + protected string GetTestFilePath(string fileName) + { + return Path.Combine(@".\Files\", fileName); + } + + protected string ReadTestFile(string fileName) + { + return File.ReadAllText(GetTestFilePath(fileName)); + } + } +} diff --git a/NzbDrone.Update.Test/UpdateProviderStartTest.cs b/NzbDrone.Update.Test/UpdateProviderStartTest.cs index 699af817d..21d693558 100644 --- a/NzbDrone.Update.Test/UpdateProviderStartTest.cs +++ b/NzbDrone.Update.Test/UpdateProviderStartTest.cs @@ -18,7 +18,7 @@ namespace NzbDrone.Update.Test private const string BACKUP_FOLDER = @"C:\Temp\nzbdrone_update\nzbdrone_backup\"; private const string TARGET_FOLDER = @"C:\NzbDrone\"; - Mock _pathProvider; + Mock _enviromentProvider; [SetUp] @@ -26,9 +26,9 @@ namespace NzbDrone.Update.Test { mocker = new AutoMoqer(); - _pathProvider = mocker.GetMock(); + _enviromentProvider = mocker.GetMock(); - _pathProvider.SetupGet(c => c.SystemTemp).Returns(@"C:\Temp\"); + _enviromentProvider.SetupGet(c => c.SystemTemp).Returns(@"C:\Temp\"); mocker.GetMock() .Setup(c => c.FolderExists(UPDATE_FOLDER)) diff --git a/NzbDrone.Update.Test/UpdateProviderVerifyTest.cs b/NzbDrone.Update.Test/UpdateProviderVerifyTest.cs index 7c133869d..593ef0e2b 100644 --- a/NzbDrone.Update.Test/UpdateProviderVerifyTest.cs +++ b/NzbDrone.Update.Test/UpdateProviderVerifyTest.cs @@ -24,7 +24,7 @@ namespace NzbDrone.Update.Test mocker.GetMock() .Setup(c => c.StartUpPath).Returns(@"C:\Temp\NzbDrone_update\"); - mocker.GetMock() + mocker.GetMock() .Setup(c => c.SystemTemp).Returns(@"C:\Temp\"); } diff --git a/NzbDrone.Update/Providers/UpdateProvider.cs b/NzbDrone.Update/Providers/UpdateProvider.cs index 9dd5279fa..3d8b96742 100644 --- a/NzbDrone.Update/Providers/UpdateProvider.cs +++ b/NzbDrone.Update/Providers/UpdateProvider.cs @@ -11,16 +11,16 @@ namespace NzbDrone.Update.Providers private readonly DiskProvider _diskProvider; private readonly ServiceProvider _serviceProvider; private readonly ProcessProvider _processProvider; - private readonly PathProvider _pathProvider; + private readonly EnviromentProvider _enviromentProvider; private static readonly Logger logger = LogManager.GetCurrentClassLogger(); public UpdateProvider(DiskProvider diskProvider,ServiceProvider serviceProvider, - ProcessProvider processProvider, PathProvider pathProvider) + ProcessProvider processProvider, EnviromentProvider enviromentProvider) { _diskProvider = diskProvider; _serviceProvider = serviceProvider; _processProvider = processProvider; - _pathProvider = pathProvider; + _enviromentProvider = enviromentProvider; } private void Verify(string targetFolder) @@ -34,8 +34,8 @@ namespace NzbDrone.Update.Providers throw new DirectoryNotFoundException("Target folder doesn't exist " + targetFolder); logger.Info("Verifying Update Folder"); - if (!_diskProvider.FolderExists(_pathProvider.GetUpdatePackageFolder())) - throw new DirectoryNotFoundException("Update folder doesn't exist " + _pathProvider.GetUpdatePackageFolder()); + if (!_diskProvider.FolderExists(_enviromentProvider.GetUpdatePackageFolder())) + throw new DirectoryNotFoundException("Update folder doesn't exist " + _enviromentProvider.GetUpdatePackageFolder()); } @@ -62,14 +62,14 @@ namespace NzbDrone.Update.Providers } logger.Info("Creating backup of existing installation"); - _diskProvider.CopyDirectory(targetFolder, _pathProvider.GetUpdateBackUpFolder()); + _diskProvider.CopyDirectory(targetFolder, _enviromentProvider.GetUpdateBackUpFolder()); logger.Info("Copying update package to target"); try { - _diskProvider.CopyDirectory(_pathProvider.GetUpdatePackageFolder(), targetFolder); + _diskProvider.CopyDirectory(_enviromentProvider.GetUpdatePackageFolder(), targetFolder); } catch (Exception e) { @@ -85,7 +85,7 @@ namespace NzbDrone.Update.Providers private void RollBack(string targetFolder) { logger.Info("Attempting to rollback upgrade"); - _diskProvider.CopyDirectory(_pathProvider.GetUpdateBackUpFolder(), targetFolder); + _diskProvider.CopyDirectory(_enviromentProvider.GetUpdateBackUpFolder(), targetFolder); } diff --git a/NzbDrone.Web/Controllers/SettingsController.cs b/NzbDrone.Web/Controllers/SettingsController.cs index d7bea1647..23b6d83e1 100644 --- a/NzbDrone.Web/Controllers/SettingsController.cs +++ b/NzbDrone.Web/Controllers/SettingsController.cs @@ -4,6 +4,8 @@ using System.IO; using System.Linq; using System.Web.Mvc; using NLog; +using NzbDrone.Common; +using NzbDrone.Common.Model; using NzbDrone.Core.Helpers; using NzbDrone.Core.Model; using NzbDrone.Core.Model.Notification; diff --git a/NzbDrone.Web/Models/SystemSettingsModel.cs b/NzbDrone.Web/Models/SystemSettingsModel.cs index 19a17791d..c1ebfb5ee 100644 --- a/NzbDrone.Web/Models/SystemSettingsModel.cs +++ b/NzbDrone.Web/Models/SystemSettingsModel.cs @@ -1,11 +1,8 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; +using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.Linq; -using System.Web; using System.Web.Mvc; -using NzbDrone.Core.Model; +using NzbDrone.Common.Model; namespace NzbDrone.Web.Models { diff --git a/NzbDrone/ApplicationServer.cs b/NzbDrone/ApplicationServer.cs index 145869b5c..41ed6ce96 100644 --- a/NzbDrone/ApplicationServer.cs +++ b/NzbDrone/ApplicationServer.cs @@ -6,13 +6,14 @@ using Ninject; using NzbDrone.Common; using NzbDrone.Providers; + namespace NzbDrone { public class ApplicationServer : ServiceBase { private static readonly Logger Logger = LogManager.GetLogger("Host.App"); - private readonly ConfigProvider _configProvider; + private readonly ConfigFileProvider _configFileProvider; private readonly DebuggerProvider _debuggerProvider; private readonly EnviromentProvider _enviromentProvider; private readonly IISProvider _iisProvider; @@ -21,11 +22,11 @@ namespace NzbDrone private readonly WebClient _webClient; [Inject] - public ApplicationServer(ConfigProvider configProvider, WebClient webClient, IISProvider iisProvider, + public ApplicationServer(ConfigFileProvider configFileProvider, WebClient webClient, IISProvider iisProvider, DebuggerProvider debuggerProvider, EnviromentProvider enviromentProvider, ProcessProvider processProvider, MonitoringProvider monitoringProvider) { - _configProvider = configProvider; + _configFileProvider = configFileProvider; _webClient = webClient; _iisProvider = iisProvider; _debuggerProvider = debuggerProvider; @@ -51,7 +52,7 @@ namespace NzbDrone _debuggerProvider.Attach(); - if (_enviromentProvider.IsUserInteractive && _configProvider.LaunchBrowser) + if (_enviromentProvider.IsUserInteractive && _configFileProvider.LaunchBrowser) { try { diff --git a/NzbDrone/CentralDispatch.cs b/NzbDrone/CentralDispatch.cs index d6a262440..68c52fb77 100644 --- a/NzbDrone/CentralDispatch.cs +++ b/NzbDrone/CentralDispatch.cs @@ -29,7 +29,7 @@ namespace NzbDrone { _kernel = new StandardKernel(); _kernel.Bind().ToSelf().InSingletonScope(); - _kernel.Bind().ToSelf().InSingletonScope(); + _kernel.Bind().ToSelf().InSingletonScope(); _kernel.Bind().ToSelf().InSingletonScope(); _kernel.Bind().ToSelf().InSingletonScope(); _kernel.Bind().ToSelf().InSingletonScope(); @@ -45,7 +45,9 @@ namespace NzbDrone { LogConfiguration.RegisterConsoleLogger(LogLevel.Debug); LogConfiguration.RegisterUdpLogger(); - _kernel.Get().CreateDefaultConfigFile(); + LogConfiguration.RegisterExceptioneer(); + LogConfiguration.Reload(); + _kernel.Get().CreateDefaultConfigFile(); Logger.Info("Start-up Path:'{0}'", _kernel.Get().ApplicationPath); } } diff --git a/NzbDrone/Model/AuthenticationType.cs b/NzbDrone/Model/AuthenticationType.cs deleted file mode 100644 index 243154383..000000000 --- a/NzbDrone/Model/AuthenticationType.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace NzbDrone.Model -{ - public enum AuthenticationType - { - Anonymous = 0, - Windows = 1 - } -} diff --git a/NzbDrone/NzbDrone.csproj b/NzbDrone/NzbDrone.csproj index ff4dbf855..2b221c2d3 100644 --- a/NzbDrone/NzbDrone.csproj +++ b/NzbDrone/NzbDrone.csproj @@ -85,10 +85,8 @@ - - diff --git a/NzbDrone/Providers/IISProvider.cs b/NzbDrone/Providers/IISProvider.cs index 473893380..cb49b192b 100644 --- a/NzbDrone/Providers/IISProvider.cs +++ b/NzbDrone/Providers/IISProvider.cs @@ -12,15 +12,15 @@ namespace NzbDrone.Providers { private static readonly Logger IISLogger = LogManager.GetLogger("Host.IISExpress"); private static readonly Logger Logger = LogManager.GetLogger("Host.IISProvider"); - private readonly ConfigProvider _configProvider; + private readonly ConfigFileProvider _configFileProvider; private readonly ProcessProvider _processProvider; private readonly EnviromentProvider _enviromentProvider; [Inject] - public IISProvider(ConfigProvider configProvider, ProcessProvider processProvider, EnviromentProvider enviromentProvider) + public IISProvider(ConfigFileProvider configFileProvider, ProcessProvider processProvider, EnviromentProvider enviromentProvider) { - _configProvider = configProvider; + _configFileProvider = configFileProvider; _processProvider = processProvider; _enviromentProvider = enviromentProvider; } @@ -31,7 +31,7 @@ namespace NzbDrone.Providers public string AppUrl { - get { return string.Format("http://localhost:{0}/", _configProvider.PortNumber); } + get { return string.Format("http://localhost:{0}/", _configFileProvider.Port); } } public int IISProcessId { get; private set; } @@ -44,8 +44,8 @@ namespace NzbDrone.Providers var startInfo = new ProcessStartInfo(); - startInfo.FileName = _configProvider.IISExePath; - startInfo.Arguments = String.Format("/config:\"{0}\" /trace:i", _configProvider.IISConfigPath); + startInfo.FileName = _enviromentProvider.GetIISExe(); + startInfo.Arguments = String.Format("/config:\"{0}\" /trace:i", _enviromentProvider.GetIISExe()); startInfo.WorkingDirectory = _enviromentProvider.ApplicationPath; startInfo.UseShellExecute = false; @@ -59,7 +59,7 @@ namespace NzbDrone.Providers try { - _configProvider.UpdateIISConfig(_configProvider.IISConfigPath); + _configFileProvider.UpdateIISConfig(_enviromentProvider.GetIISConfigPath()); } catch (Exception e) { @@ -94,7 +94,7 @@ namespace NzbDrone.Providers foreach (var process in _processProvider.GetProcessByName("IISExpress")) { Logger.Info("[{0}]IIS Process found. Path:{1}", process.Id, process.StartPath); - if (NormalizePath(process.StartPath) == NormalizePath(_configProvider.IISExePath)) + if (NormalizePath(process.StartPath) == NormalizePath(_enviromentProvider.GetIISExe())) { Logger.Info("[{0}]Process is considered orphaned.", process.Id); _processProvider.Kill(process.Id); From 207550176cbb424d11dc929b99d383ff7942c6c0 Mon Sep 17 00:00:00 2001 From: "kay.one" Date: Sun, 13 Nov 2011 10:16:31 -0800 Subject: [PATCH 07/10] Removed assembly level fixtures --- NzbDrone.App.Test/CentralDispatchTests.cs | 3 ++- NzbDrone.App.Test/Fixtures.cs | 8 -------- NzbDrone.App.Test/MonitoringProviderTest.cs | 10 +++------- NzbDrone.App.Test/NzbDrone.App.Test.csproj | 1 - NzbDrone.App.Test/RouterTest.cs | 3 ++- NzbDrone.Common.Test/DiskProviderTests.cs | 3 ++- NzbDrone.Common.Test/EnviromentProviderTest.cs | 3 ++- NzbDrone.Common.Test/Fixtures.cs | 8 -------- NzbDrone.Common.Test/NzbDrone.Common.Test.csproj | 1 - NzbDrone.Common.Test/PathExtentionFixture.cs | 3 ++- NzbDrone.Common.Test/ProcessProviderTests.cs | 3 ++- NzbDrone.Common.Test/ServiceControllerTests.cs | 5 +++-- NzbDrone.Common.Test/WebClientTests.cs | 3 ++- NzbDrone.Common/LogConfiguration.cs | 4 ++++ NzbDrone.Common/ServiceProvider.cs | 8 ++++---- NzbDrone.Core.Test/CentralDispatchFixture.cs | 2 +- NzbDrone.Core/CentralDispatch.cs | 1 + NzbDrone.Core/Instrumentation/LogConfiguration.cs | 7 ++++++- NzbDrone.Update.Test/Fixtures.cs | 8 -------- NzbDrone.Update.Test/NzbDrone.Update.Test.csproj | 2 +- NzbDrone.Update.Test/UpdateProviderStartTest.cs | 5 ++++- NzbDrone.Update.Test/UpdateProviderVerifyTest.cs | 3 ++- 22 files changed, 43 insertions(+), 51 deletions(-) delete mode 100644 NzbDrone.App.Test/Fixtures.cs delete mode 100644 NzbDrone.Common.Test/Fixtures.cs delete mode 100644 NzbDrone.Update.Test/Fixtures.cs diff --git a/NzbDrone.App.Test/CentralDispatchTests.cs b/NzbDrone.App.Test/CentralDispatchTests.cs index 7cf1d74db..5b7ccd1c0 100644 --- a/NzbDrone.App.Test/CentralDispatchTests.cs +++ b/NzbDrone.App.Test/CentralDispatchTests.cs @@ -1,11 +1,12 @@ using FluentAssertions; using NUnit.Framework; using Ninject; +using NzbDrone.Test.Common; namespace NzbDrone.App.Test { [TestFixture] - public class CentralDispatchTests + public class CentralDispatchTests : TestBase { [Test] public void Kernel_can_get_kernel() diff --git a/NzbDrone.App.Test/Fixtures.cs b/NzbDrone.App.Test/Fixtures.cs deleted file mode 100644 index 4089933e0..000000000 --- a/NzbDrone.App.Test/Fixtures.cs +++ /dev/null @@ -1,8 +0,0 @@ -// ReSharper disable CheckNamespace -using NUnit.Framework; -using NzbDrone.Test.Common; - -[SetUpFixture] -public class Fixtures : LoggingTest -{ -} diff --git a/NzbDrone.App.Test/MonitoringProviderTest.cs b/NzbDrone.App.Test/MonitoringProviderTest.cs index 7b3bd0807..2fa024b7a 100644 --- a/NzbDrone.App.Test/MonitoringProviderTest.cs +++ b/NzbDrone.App.Test/MonitoringProviderTest.cs @@ -1,22 +1,18 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; +using System.Diagnostics; using System.Linq; -using System.Text; using AutoMoq; using FizzWare.NBuilder; -using FluentAssertions; using Moq; using NUnit.Framework; using NzbDrone.Common; using NzbDrone.Common.Model; -using NzbDrone.Model; using NzbDrone.Providers; +using NzbDrone.Test.Common; namespace NzbDrone.App.Test { [TestFixture] - public class MonitoringProviderTest + public class MonitoringProviderTest : TestBase { [Test] diff --git a/NzbDrone.App.Test/NzbDrone.App.Test.csproj b/NzbDrone.App.Test/NzbDrone.App.Test.csproj index 543832cf4..7fe0e878b 100644 --- a/NzbDrone.App.Test/NzbDrone.App.Test.csproj +++ b/NzbDrone.App.Test/NzbDrone.App.Test.csproj @@ -65,7 +65,6 @@ - diff --git a/NzbDrone.App.Test/RouterTest.cs b/NzbDrone.App.Test/RouterTest.cs index f528e9494..a15d34ab0 100644 --- a/NzbDrone.App.Test/RouterTest.cs +++ b/NzbDrone.App.Test/RouterTest.cs @@ -5,11 +5,12 @@ using Moq; using NUnit.Framework; using NzbDrone.Common; using NzbDrone.Model; +using NzbDrone.Test.Common; namespace NzbDrone.App.Test { [TestFixture] - public class RouterTest + public class RouterTest : TestBase { [TestCase(null, ApplicationMode.Console)] diff --git a/NzbDrone.Common.Test/DiskProviderTests.cs b/NzbDrone.Common.Test/DiskProviderTests.cs index 20f0d59ac..8729ae4b4 100644 --- a/NzbDrone.Common.Test/DiskProviderTests.cs +++ b/NzbDrone.Common.Test/DiskProviderTests.cs @@ -4,11 +4,12 @@ using System.IO; using System.Linq; using FluentAssertions; using NUnit.Framework; +using NzbDrone.Test.Common; namespace NzbDrone.Common.Test { [TestFixture] - public class DiskProviderTests + public class DiskProviderTests : TestBase { DirectoryInfo BinFolder; DirectoryInfo BinFolderCopy; diff --git a/NzbDrone.Common.Test/EnviromentProviderTest.cs b/NzbDrone.Common.Test/EnviromentProviderTest.cs index 9032ab740..d5157062d 100644 --- a/NzbDrone.Common.Test/EnviromentProviderTest.cs +++ b/NzbDrone.Common.Test/EnviromentProviderTest.cs @@ -4,11 +4,12 @@ using System; using System.IO; using FluentAssertions; using NUnit.Framework; +using NzbDrone.Test.Common; namespace NzbDrone.Common.Test { [TestFixture] - public class EnviromentProviderTest + public class EnviromentProviderTest : TestBase { readonly EnviromentProvider enviromentProvider = new EnviromentProvider(); diff --git a/NzbDrone.Common.Test/Fixtures.cs b/NzbDrone.Common.Test/Fixtures.cs deleted file mode 100644 index 4089933e0..000000000 --- a/NzbDrone.Common.Test/Fixtures.cs +++ /dev/null @@ -1,8 +0,0 @@ -// ReSharper disable CheckNamespace -using NUnit.Framework; -using NzbDrone.Test.Common; - -[SetUpFixture] -public class Fixtures : LoggingTest -{ -} diff --git a/NzbDrone.Common.Test/NzbDrone.Common.Test.csproj b/NzbDrone.Common.Test/NzbDrone.Common.Test.csproj index 705d95e02..d979c397e 100644 --- a/NzbDrone.Common.Test/NzbDrone.Common.Test.csproj +++ b/NzbDrone.Common.Test/NzbDrone.Common.Test.csproj @@ -65,7 +65,6 @@ - diff --git a/NzbDrone.Common.Test/PathExtentionFixture.cs b/NzbDrone.Common.Test/PathExtentionFixture.cs index 96c6342de..7a7905d96 100644 --- a/NzbDrone.Common.Test/PathExtentionFixture.cs +++ b/NzbDrone.Common.Test/PathExtentionFixture.cs @@ -2,11 +2,12 @@ using Moq; using NUnit.Framework; using NzbDrone.Common; +using NzbDrone.Test.Common; namespace NzbDrone.App.Test { [TestFixture] - public class PathExtentionFixture + public class PathExtentionFixture : TestBase { private EnviromentProvider GetEnviromentProvider() diff --git a/NzbDrone.Common.Test/ProcessProviderTests.cs b/NzbDrone.Common.Test/ProcessProviderTests.cs index a30cb00a0..9144eb7fc 100644 --- a/NzbDrone.Common.Test/ProcessProviderTests.cs +++ b/NzbDrone.Common.Test/ProcessProviderTests.cs @@ -3,11 +3,12 @@ using System.Diagnostics; using System.Linq; using FluentAssertions; using NUnit.Framework; +using NzbDrone.Test.Common; namespace NzbDrone.Common.Test { [TestFixture] - public class ProcessProviderTests + public class ProcessProviderTests : TestBase { private const string DummyProccessName = "NzbDrone.Test.Dummy"; ProcessProvider _processProvider; diff --git a/NzbDrone.Common.Test/ServiceControllerTests.cs b/NzbDrone.Common.Test/ServiceControllerTests.cs index 20e64fa61..9e3999bc0 100644 --- a/NzbDrone.Common.Test/ServiceControllerTests.cs +++ b/NzbDrone.Common.Test/ServiceControllerTests.cs @@ -3,11 +3,12 @@ using System.ServiceProcess; using FluentAssertions; using NUnit.Framework; +using NzbDrone.Test.Common; namespace NzbDrone.Common.Test { [TestFixture] - public class ServiceControllerTests + public class ServiceControllerTests:TestBase { private const string ALWAYS_INSTALLED_SERVICE = "SCardSvr"; //Smart Card private const string TEMP_SERVICE_NAME = "NzbDrone_Nunit"; //Smart Card @@ -74,7 +75,7 @@ namespace NzbDrone.Common.Test } [Test] - [Timeout(10000)] + //[Timeout(10000)] public void Should_be_able_to_start_and_stop_service() { serviceProvider.GetService(ALWAYS_INSTALLED_SERVICE).Status diff --git a/NzbDrone.Common.Test/WebClientTests.cs b/NzbDrone.Common.Test/WebClientTests.cs index 64613a730..f515ef941 100644 --- a/NzbDrone.Common.Test/WebClientTests.cs +++ b/NzbDrone.Common.Test/WebClientTests.cs @@ -1,11 +1,12 @@ // ReSharper disable InconsistentNaming using FluentAssertions; using NUnit.Framework; +using NzbDrone.Test.Common; namespace NzbDrone.Common.Test { [TestFixture] - public class WebClientTests + public class WebClientTests : TestBase { [Test] public void DownloadString_should_be_able_to_download_jquery() diff --git a/NzbDrone.Common/LogConfiguration.cs b/NzbDrone.Common/LogConfiguration.cs index 99dbb48c4..f23929611 100644 --- a/NzbDrone.Common/LogConfiguration.cs +++ b/NzbDrone.Common/LogConfiguration.cs @@ -86,8 +86,12 @@ namespace NzbDrone.Common public static void Reload() { + var sw = Stopwatch.StartNew(); LogManager.Configuration.Reload(); LogManager.ReconfigExistingLoggers(); + sw.Stop(); + + Console.WriteLine("Reload: " + sw.Elapsed.TotalSeconds); } } } diff --git a/NzbDrone.Common/ServiceProvider.cs b/NzbDrone.Common/ServiceProvider.cs index c086af759..97ff3c507 100644 --- a/NzbDrone.Common/ServiceProvider.cs +++ b/NzbDrone.Common/ServiceProvider.cs @@ -116,16 +116,16 @@ namespace NzbDrone.Common public virtual void Start(string serviceName) { - Logger.Info("Starting {0} Service..."); + Logger.Info("Starting {0} Service...", serviceName); var service = GetService(serviceName); if (service == null) { Logger.Warn("Unable to start '{0}' no service with that name exists.", serviceName); } - if (service.Status != ServiceControllerStatus.Paused || service.Status != ServiceControllerStatus.Stopped) + if (service.Status != ServiceControllerStatus.Paused && service.Status != ServiceControllerStatus.Stopped) { - Logger.Warn("Service is in a state that can't be started {0}", service.Status); + Logger.Warn("Service is in a state that can't be started. Current status: {0}", service.Status); } service.Start(); @@ -135,7 +135,7 @@ namespace NzbDrone.Common if (service.Status == ServiceControllerStatus.Running) { - Logger.Info("{0} has started successfully."); + Logger.Info("{0} has started successfully.", serviceName); } else { diff --git a/NzbDrone.Core.Test/CentralDispatchFixture.cs b/NzbDrone.Core.Test/CentralDispatchFixture.cs index 9f1cec65c..93d523d1a 100644 --- a/NzbDrone.Core.Test/CentralDispatchFixture.cs +++ b/NzbDrone.Core.Test/CentralDispatchFixture.cs @@ -105,7 +105,7 @@ namespace NzbDrone.Core.Test public void TearDownBase() { WebTimer.Stop(); - + } } } diff --git a/NzbDrone.Core/CentralDispatch.cs b/NzbDrone.Core/CentralDispatch.cs index 0d313883b..b07df60be 100644 --- a/NzbDrone.Core/CentralDispatch.cs +++ b/NzbDrone.Core/CentralDispatch.cs @@ -39,6 +39,7 @@ namespace NzbDrone.Core MigrationsHelper.Run(mainConnectionString, true); LogConfiguration.RegisterDatabaseLogger(Kernel.Get()); + LogConfiguration.Reload(); Kernel.Get().SetupDefaultProfiles(); Kernel.Get().SetupDefault(); diff --git a/NzbDrone.Core/Instrumentation/LogConfiguration.cs b/NzbDrone.Core/Instrumentation/LogConfiguration.cs index 60ecfec45..23be92ec5 100644 --- a/NzbDrone.Core/Instrumentation/LogConfiguration.cs +++ b/NzbDrone.Core/Instrumentation/LogConfiguration.cs @@ -31,13 +31,18 @@ namespace NzbDrone.Core.Instrumentation Common.LogConfiguration.RegisterConsoleLogger(LogLevel.Info, "NzbDrone.Core.CentralDispatch"); LogManager.ConfigurationReloaded += ((s, e) => RegisterDatabaseLogger(_databaseTarget)); - Common.LogConfiguration.Reload(); + } public static void RegisterDatabaseLogger(DatabaseTarget databaseTarget) { LogManager.Configuration.AddTarget("DbLogger", databaseTarget); LogManager.Configuration.LoggingRules.Add(new LoggingRule("*", LogLevel.Debug, databaseTarget)); + Reload(); + } + + public static void Reload() + { Common.LogConfiguration.Reload(); } } diff --git a/NzbDrone.Update.Test/Fixtures.cs b/NzbDrone.Update.Test/Fixtures.cs deleted file mode 100644 index 4089933e0..000000000 --- a/NzbDrone.Update.Test/Fixtures.cs +++ /dev/null @@ -1,8 +0,0 @@ -// ReSharper disable CheckNamespace -using NUnit.Framework; -using NzbDrone.Test.Common; - -[SetUpFixture] -public class Fixtures : LoggingTest -{ -} diff --git a/NzbDrone.Update.Test/NzbDrone.Update.Test.csproj b/NzbDrone.Update.Test/NzbDrone.Update.Test.csproj index ed8e742aa..9e69c58c2 100644 --- a/NzbDrone.Update.Test/NzbDrone.Update.Test.csproj +++ b/NzbDrone.Update.Test/NzbDrone.Update.Test.csproj @@ -48,6 +48,7 @@ ..\packages\Moq.4.0.10827\lib\NET40\Moq.dll + ..\packages\NUnit.2.5.10.11092\lib\nunit.framework.dll @@ -66,7 +67,6 @@ - diff --git a/NzbDrone.Update.Test/UpdateProviderStartTest.cs b/NzbDrone.Update.Test/UpdateProviderStartTest.cs index 21d693558..36805695b 100644 --- a/NzbDrone.Update.Test/UpdateProviderStartTest.cs +++ b/NzbDrone.Update.Test/UpdateProviderStartTest.cs @@ -5,12 +5,13 @@ using Moq; using NUnit.Framework; using NzbDrone.Common; using NzbDrone.Common.Model; +using NzbDrone.Test.Common; using NzbDrone.Update.Providers; namespace NzbDrone.Update.Test { [TestFixture] - class UpdateProviderStartTest + class UpdateProviderStartTest : TestBase { AutoMoqer mocker = new AutoMoqer(); @@ -109,6 +110,8 @@ namespace NzbDrone.Update.Test mocker.Resolve().Start(TARGET_FOLDER); + ExceptionVerification.ExcpectedFatals(1); + mocker.VerifyAllMocks(); } diff --git a/NzbDrone.Update.Test/UpdateProviderVerifyTest.cs b/NzbDrone.Update.Test/UpdateProviderVerifyTest.cs index 593ef0e2b..0ac07b5ca 100644 --- a/NzbDrone.Update.Test/UpdateProviderVerifyTest.cs +++ b/NzbDrone.Update.Test/UpdateProviderVerifyTest.cs @@ -6,12 +6,13 @@ using FluentAssertions; using Moq; using NUnit.Framework; using NzbDrone.Common; +using NzbDrone.Test.Common; using NzbDrone.Update.Providers; namespace NzbDrone.Update.Test { [TestFixture] - class UpdateProviderVerifyTest + class UpdateProviderVerifyTest : TestBase { AutoMoqer mocker = new AutoMoqer(); From 60d598f2c1d038fb1092feea2aa4712502a54e32 Mon Sep 17 00:00:00 2001 From: "kay.one" Date: Sun, 13 Nov 2011 11:15:40 -0800 Subject: [PATCH 08/10] More update tests --- .gitignore | 3 +- NzbDrone.Test.Common/TestBase.cs | 8 +- .../UpdateProviderStartTest.cs | 160 ++++++++++++------ 3 files changed, 119 insertions(+), 52 deletions(-) diff --git a/.gitignore b/.gitignore index f67b7748f..11bfc37d5 100644 --- a/.gitignore +++ b/.gitignore @@ -39,4 +39,5 @@ NzbDrone.Web/NzbDrone.Web.Publish.xml [Bb]anners *.orig _rawPackage/ -NzbDrone.zip \ No newline at end of file +NzbDrone.zip +NzbDrone.sln.DotSettings.user* \ No newline at end of file diff --git a/NzbDrone.Test.Common/TestBase.cs b/NzbDrone.Test.Common/TestBase.cs index ba3bba103..3c919270a 100644 --- a/NzbDrone.Test.Common/TestBase.cs +++ b/NzbDrone.Test.Common/TestBase.cs @@ -24,7 +24,7 @@ namespace NzbDrone.Test.Common } [SetUp] - public virtual void TestBaseSetup() + public void TestBaseSetup() { if (Directory.Exists(TempFolder)) { @@ -36,6 +36,12 @@ namespace NzbDrone.Test.Common Mocker = new AutoMoqer(); } + [TearDown] + public void TestBaseTearDown() + { + Mocker.VerifyAllMocks(); + } + protected virtual void WithStrictMocker() { Mocker = new AutoMoqer(MockBehavior.Strict); diff --git a/NzbDrone.Update.Test/UpdateProviderStartTest.cs b/NzbDrone.Update.Test/UpdateProviderStartTest.cs index 36805695b..a83e68815 100644 --- a/NzbDrone.Update.Test/UpdateProviderStartTest.cs +++ b/NzbDrone.Update.Test/UpdateProviderStartTest.cs @@ -1,5 +1,5 @@ -using System.IO; -using AutoMoq; +using System.Collections.Generic; +using System.IO; using FizzWare.NBuilder; using Moq; using NUnit.Framework; @@ -13,8 +13,6 @@ namespace NzbDrone.Update.Test [TestFixture] class UpdateProviderStartTest : TestBase { - AutoMoqer mocker = new AutoMoqer(); - private const string UPDATE_FOLDER = @"C:\Temp\nzbdrone_update\nzbdrone\"; private const string BACKUP_FOLDER = @"C:\Temp\nzbdrone_update\nzbdrone_backup\"; private const string TARGET_FOLDER = @"C:\NzbDrone\"; @@ -25,39 +23,53 @@ namespace NzbDrone.Update.Test [SetUp] public void Setup() { - mocker = new AutoMoqer(); - - _enviromentProvider = mocker.GetMock(); + + _enviromentProvider = Mocker.GetMock(); _enviromentProvider.SetupGet(c => c.SystemTemp).Returns(@"C:\Temp\"); - mocker.GetMock() + Mocker.GetMock() .Setup(c => c.FolderExists(UPDATE_FOLDER)) .Returns(true); - mocker.GetMock() + Mocker.GetMock() .Setup(c => c.FolderExists(TARGET_FOLDER)) .Returns(true); } - public void WithInstalledService() + private void WithInstalledService() { - mocker.GetMock() + Mocker.GetMock() .Setup(c => c.ServiceExist(ServiceProvider.NZBDRONE_SERVICE_NAME)) .Returns(true); } + private void WithServiceRunning(bool state) + { + Mocker.GetMock() + .Setup(c => c.IsServiceRunning(ServiceProvider.NZBDRONE_SERVICE_NAME)).Returns(state); + } + [Test] public void should_stop_nzbdrone_service_if_installed() { WithInstalledService(); //Act - mocker.Resolve().Start(TARGET_FOLDER); + Mocker.Resolve().Start(TARGET_FOLDER); //Assert - mocker.GetMock().Verify(c => c.Stop(ServiceProvider.NZBDRONE_SERVICE_NAME), Times.Once()); - mocker.VerifyAllMocks(); + Mocker.GetMock().Verify(c => c.Stop(ServiceProvider.NZBDRONE_SERVICE_NAME), Times.Once()); + } + + [Test] + public void should_not_stop_nzbdrone_service_if_service_isnt_installed() + { + //Act + Mocker.Resolve().Start(TARGET_FOLDER); + + //Assert + Mocker.GetMock().Verify(c => c.Stop(It.IsAny()), Times.Never()); } [Test] @@ -65,96 +77,144 @@ namespace NzbDrone.Update.Test { var proccesses = Builder.CreateListOfSize(2).Build(); - mocker.GetMock() + Mocker.GetMock() .Setup(c => c.GetProcessByName(ProcessProvider.NzbDroneProccessName)) .Returns(proccesses); //Act - mocker.Resolve().Start(TARGET_FOLDER); + Mocker.Resolve().Start(TARGET_FOLDER); //Assert - mocker.GetMock().Verify(c => c.Kill(proccesses[0].Id), Times.Once()); - mocker.GetMock().Verify(c => c.Kill(proccesses[1].Id), Times.Once()); - mocker.VerifyAllMocks(); + Mocker.GetMock().Verify(c => c.Kill(proccesses[0].Id), Times.Once()); + Mocker.GetMock().Verify(c => c.Kill(proccesses[1].Id), Times.Once()); + } + + [Test] + public void should_not_kill_nzbdrone_process_not_running() + { + Mocker.GetMock() + .Setup(c => c.GetProcessByName(ProcessProvider.NzbDroneProccessName)) + .Returns(new List()); + + //Act + Mocker.Resolve().Start(TARGET_FOLDER); + + //Assert + Mocker.GetMock().Verify(c => c.Kill(It.IsAny()), Times.Never()); } [Test] public void should_create_backup_of_current_installation() { - var diskprovider = mocker.GetMock() + Mocker.GetMock() .Setup(c => c.CopyDirectory(TARGET_FOLDER, BACKUP_FOLDER)); - mocker.Resolve().Start(TARGET_FOLDER); - - mocker.VerifyAllMocks(); + Mocker.Resolve().Start(TARGET_FOLDER); } [Test] public void should_copy_update_package_to_target() { - var diskprovider = mocker.GetMock() + Mocker.GetMock() .Setup(c => c.CopyDirectory(UPDATE_FOLDER, TARGET_FOLDER)); - mocker.Resolve().Start(TARGET_FOLDER); - - mocker.VerifyAllMocks(); + Mocker.Resolve().Start(TARGET_FOLDER); } [Test] public void should_restore_if_update_fails() { - var diskprovider = mocker.GetMock(); - diskprovider.Setup(c => c.CopyDirectory(BACKUP_FOLDER, TARGET_FOLDER)); - - diskprovider.Setup(c => c.CopyDirectory(UPDATE_FOLDER, TARGET_FOLDER)).Throws(new IOException()); + Mocker.GetMock() + .Setup(c => c.CopyDirectory(UPDATE_FOLDER, TARGET_FOLDER)) + .Throws(new IOException()); - mocker.Resolve().Start(TARGET_FOLDER); + //Act + Mocker.Resolve().Start(TARGET_FOLDER); + //Assert + Mocker.GetMock() + .Verify(c => c.CopyDirectory(BACKUP_FOLDER, TARGET_FOLDER), Times.Once()); ExceptionVerification.ExcpectedFatals(1); - - mocker.VerifyAllMocks(); } [Test] public void should_restart_service_if_service_was_running() { WithInstalledService(); + WithServiceRunning(true); - var serviceProvider = mocker.GetMock(); + //Act + Mocker.Resolve().Start(TARGET_FOLDER); - serviceProvider.Setup(c => c.IsServiceRunning(ServiceProvider.NZBDRONE_SERVICE_NAME)).Returns(true); + //Assert + VerifyServiceRestart(); + } + + [Test] + public void should_restart_process_if_service_was_not_running() + { + WithInstalledService(); + WithServiceRunning(false); //Act - mocker.Resolve().Start(TARGET_FOLDER); + Mocker.Resolve().Start(TARGET_FOLDER); //Assert - serviceProvider - .Verify(c => c.Start(ServiceProvider.NZBDRONE_SERVICE_NAME), Times.Once()); - - mocker.VerifyAllMocks(); + VerifyProcessRestart(); } [Test] - public void should_not_restart_service_if_service_was_not_running() + public void should_restart_service_if_service_was_running_and_update_fails() { WithInstalledService(); + WithServiceRunning(true); + + Mocker.GetMock() + .Setup(c => c.CopyDirectory(UPDATE_FOLDER, TARGET_FOLDER)) + .Throws(new IOException()); + + //Act + Mocker.Resolve().Start(TARGET_FOLDER); + + //Assert + VerifyServiceRestart(); + ExceptionVerification.ExcpectedFatals(1); + } - var serviceProvider = mocker.GetMock(); + [Test] + public void should_restart_process_if_service_was_not_running_and_update_fails() + { + WithInstalledService(); + WithServiceRunning(false); - serviceProvider.Setup(c => c.IsServiceRunning(ServiceProvider.NZBDRONE_SERVICE_NAME)) - .Returns(false); + Mocker.GetMock() + .Setup(c => c.CopyDirectory(UPDATE_FOLDER, TARGET_FOLDER)) + .Throws(new IOException()); //Act - mocker.Resolve().Start(TARGET_FOLDER); + Mocker.Resolve().Start(TARGET_FOLDER); //Assert - mocker.GetMock() - .Verify(c => c.Start(TARGET_FOLDER + "nzbdrone.exe"), Times.Once()); + VerifyProcessRestart(); + ExceptionVerification.ExcpectedFatals(1); + } + + private void VerifyServiceRestart() + { + Mocker.GetMock() + .Verify(c => c.Start(ServiceProvider.NZBDRONE_SERVICE_NAME), Times.Once()); - serviceProvider + Mocker.GetMock() .Verify(c => c.Start(It.IsAny()), Times.Never()); + } - mocker.VerifyAllMocks(); + private void VerifyProcessRestart() + { + Mocker.GetMock() + .Verify(c => c.Start(It.IsAny()), Times.Never()); + + Mocker.GetMock() + .Verify(c => c.Start(TARGET_FOLDER + "nzbdrone.exe"), Times.Once()); } } } From 883dffca80cd042bdc9fe7cdff5b811872095e12 Mon Sep 17 00:00:00 2001 From: "kay.one" Date: Sun, 13 Nov 2011 12:31:02 -0800 Subject: [PATCH 09/10] More update code. almost there. --- NzbDrone.Common/EnviromentProvider.cs | 14 +++- NzbDrone.Core/CentralDispatch.cs | 2 +- .../NzbDrone.Update.Test.csproj | 5 +- NzbDrone.Update.Test/ProgramFixture.cs | 72 ++++++++++++++++++ ...tTest.cs => UpdateProviderStartFixture.cs} | 2 +- ...Test.cs => UpdateProviderVerifyFixture.cs} | 2 +- NzbDrone.Update/Program.cs | 73 +++++++++++++++++-- NzbDrone.Update/Providers/UpdateProvider.cs | 10 ++- 8 files changed, 166 insertions(+), 14 deletions(-) create mode 100644 NzbDrone.Update.Test/ProgramFixture.cs rename NzbDrone.Update.Test/{UpdateProviderStartTest.cs => UpdateProviderStartFixture.cs} (99%) rename NzbDrone.Update.Test/{UpdateProviderVerifyTest.cs => UpdateProviderVerifyFixture.cs} (97%) diff --git a/NzbDrone.Common/EnviromentProvider.cs b/NzbDrone.Common/EnviromentProvider.cs index 3680860c0..25b055a84 100644 --- a/NzbDrone.Common/EnviromentProvider.cs +++ b/NzbDrone.Common/EnviromentProvider.cs @@ -63,7 +63,7 @@ namespace NzbDrone.Common } } - + public virtual string StartUpPath { get @@ -92,7 +92,19 @@ namespace NzbDrone.Common var fileLocation = Assembly.GetCallingAssembly().Location; return new FileInfo(fileLocation).CreationTime; } + } + + public virtual int NzbDroneProcessIdFromEnviroment + { + get + { + var id = Convert.ToInt32(Environment.GetEnvironmentVariable("NZBDRONE_PID")); + if (id == 0) + throw new InvalidOperationException("NZBDRONE_PID isn't a valid environment variable."); + + return id; + } } private static bool ContainsIIS(DirectoryInfo dir) diff --git a/NzbDrone.Core/CentralDispatch.cs b/NzbDrone.Core/CentralDispatch.cs index b07df60be..a3336f85e 100644 --- a/NzbDrone.Core/CentralDispatch.cs +++ b/NzbDrone.Core/CentralDispatch.cs @@ -120,7 +120,7 @@ namespace NzbDrone.Core { try { - var pid = Convert.ToInt32(Environment.GetEnvironmentVariable("NZBDRONE_PID")); + var pid = new EnviromentProvider().NzbDroneProcessIdFromEnviroment; Logger.Debug("Attaching to parent process ({0}) for automatic termination.", pid); diff --git a/NzbDrone.Update.Test/NzbDrone.Update.Test.csproj b/NzbDrone.Update.Test/NzbDrone.Update.Test.csproj index 9e69c58c2..8b40d13af 100644 --- a/NzbDrone.Update.Test/NzbDrone.Update.Test.csproj +++ b/NzbDrone.Update.Test/NzbDrone.Update.Test.csproj @@ -67,8 +67,9 @@ - - + + + diff --git a/NzbDrone.Update.Test/ProgramFixture.cs b/NzbDrone.Update.Test/ProgramFixture.cs new file mode 100644 index 000000000..d5421930c --- /dev/null +++ b/NzbDrone.Update.Test/ProgramFixture.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using FluentAssertions; +using Moq; +using NUnit.Framework; +using NzbDrone.Common; +using NzbDrone.Common.Model; +using NzbDrone.Test.Common; +using NzbDrone.Update.Providers; + +namespace NzbDrone.Update.Test +{ + [TestFixture] + public class ProgramFixture : TestBase + { + private Program _program; + + [SetUp] + public void Setup() + { + _program = Mocker.Resolve(); + } + + [Test] + public void should_throw_if_null_passed_in() + { + Assert.Throws(() => _program.Start(null)); + } + + [Test] + public void should_throw_if_less_than_two_arguments_arent_passed_in() + { + Assert.Throws(() => _program.Start(new[] { "" })); + } + + [Test] + public void should_throw_if_more_than_two_arguments_arent_passed_in() + { + Assert.Throws(() => _program.Start(new[] { "", "", "" })); + } + + [TestCase("d", "")] + [TestCase("", "")] + [TestCase("0", "")] + [TestCase("-1", "")] + [TestCase(" ", "")] + [TestCase(".", "")] + public void should_throw_if_first_arg_isnt_an_int(string arg1, string arg2) + { + Assert.Throws(() => _program.Start(new[] { arg1, arg2 })); + } + + [Test] + public void should_call_update_with_corret_path() + { + const string ProcessPath = @"C:\NzbDrone\nzbdrone.exe"; + + Mocker.GetMock().Setup(c => c.GetProcessById(12)) + .Returns(new ProcessInfo() { StartPath = ProcessPath }); + + //Act + _program.Start(new[] { "12", "" }); + + //Assert + Mocker.GetMock().Verify(c => c.Start(ProcessPath), Times.Once()); + } + + + } +} diff --git a/NzbDrone.Update.Test/UpdateProviderStartTest.cs b/NzbDrone.Update.Test/UpdateProviderStartFixture.cs similarity index 99% rename from NzbDrone.Update.Test/UpdateProviderStartTest.cs rename to NzbDrone.Update.Test/UpdateProviderStartFixture.cs index a83e68815..a6ea8e2eb 100644 --- a/NzbDrone.Update.Test/UpdateProviderStartTest.cs +++ b/NzbDrone.Update.Test/UpdateProviderStartFixture.cs @@ -11,7 +11,7 @@ using NzbDrone.Update.Providers; namespace NzbDrone.Update.Test { [TestFixture] - class UpdateProviderStartTest : TestBase + class UpdateProviderStartFixture : TestBase { private const string UPDATE_FOLDER = @"C:\Temp\nzbdrone_update\nzbdrone\"; private const string BACKUP_FOLDER = @"C:\Temp\nzbdrone_update\nzbdrone_backup\"; diff --git a/NzbDrone.Update.Test/UpdateProviderVerifyTest.cs b/NzbDrone.Update.Test/UpdateProviderVerifyFixture.cs similarity index 97% rename from NzbDrone.Update.Test/UpdateProviderVerifyTest.cs rename to NzbDrone.Update.Test/UpdateProviderVerifyFixture.cs index 0ac07b5ca..6ca63d193 100644 --- a/NzbDrone.Update.Test/UpdateProviderVerifyTest.cs +++ b/NzbDrone.Update.Test/UpdateProviderVerifyFixture.cs @@ -12,7 +12,7 @@ using NzbDrone.Update.Providers; namespace NzbDrone.Update.Test { [TestFixture] - class UpdateProviderVerifyTest : TestBase + class UpdateProviderVerifyFixture : TestBase { AutoMoqer mocker = new AutoMoqer(); diff --git a/NzbDrone.Update/Program.cs b/NzbDrone.Update/Program.cs index 01701488b..ecb1830ca 100644 --- a/NzbDrone.Update/Program.cs +++ b/NzbDrone.Update/Program.cs @@ -1,15 +1,78 @@ using System; -using System.Collections.Generic; using System.Linq; -using System.Text; +using NLog; +using NzbDrone.Common; +using NzbDrone.Update.Providers; namespace NzbDrone.Update { - class Program + public class Program { - static void Main(string[] args) + private readonly UpdateProvider _updateProvider; + private readonly ProcessProvider _processProvider; + + private static readonly Logger logger = LogManager.GetCurrentClassLogger(); + + public Program(UpdateProvider updateProvider, ProcessProvider processProvider) + { + _updateProvider = updateProvider; + _processProvider = processProvider; + } + + public static void Main(string[] args) + { + try + { + Console.WriteLine("Starting NzbDrone Update Client"); + + LogConfiguration.RegisterConsoleLogger(LogLevel.Trace); + LogConfiguration.RegisterUdpLogger(); + LogConfiguration.RegisterExceptioneer(); + LogConfiguration.Reload(); + + logger.Info("Initializing update application"); + + var enviromentProvider = new EnviromentProvider(); + var processProvider = new ProcessProvider(); + var serviceProvider = new ServiceProvider(); + var diskProvider = new DiskProvider(); + + var updateProvider = new UpdateProvider(diskProvider, serviceProvider, processProvider, enviromentProvider); + + new Program(updateProvider, processProvider).Start(args); + } + catch (Exception e) + { + logger.Fatal("An error has occurred while applying update.", e); + } + } + + public void Start(string[] args) + { + VerfityArguments(args); + int processId = ParseProcessId(args); + + string appPath = _processProvider.GetProcessById(processId).StartPath; + + logger.Info("Starting update process"); + _updateProvider.Start(appPath); + } + + private int ParseProcessId(string[] args) + { + int id = 0; + if (!Int32.TryParse(args[0], out id) || id <= 0) + { + throw new ArgumentOutOfRangeException("Invalid process id: " + args[0]); + } + + return id; + } + + private void VerfityArguments(string[] args) { - + if (args == null || args.Length != 2) + throw new ArgumentException("Wrong number of parameters were passed in."); } } } diff --git a/NzbDrone.Update/Providers/UpdateProvider.cs b/NzbDrone.Update/Providers/UpdateProvider.cs index 3d8b96742..275419e0e 100644 --- a/NzbDrone.Update/Providers/UpdateProvider.cs +++ b/NzbDrone.Update/Providers/UpdateProvider.cs @@ -14,7 +14,7 @@ namespace NzbDrone.Update.Providers private readonly EnviromentProvider _enviromentProvider; private static readonly Logger logger = LogManager.GetCurrentClassLogger(); - public UpdateProvider(DiskProvider diskProvider,ServiceProvider serviceProvider, + public UpdateProvider(DiskProvider diskProvider, ServiceProvider serviceProvider, ProcessProvider processProvider, EnviromentProvider enviromentProvider) { _diskProvider = diskProvider; @@ -23,6 +23,10 @@ namespace NzbDrone.Update.Providers _enviromentProvider = enviromentProvider; } + public UpdateProvider() + { + } + private void Verify(string targetFolder) { logger.Info("Verifying requirements before update..."); @@ -39,7 +43,7 @@ namespace NzbDrone.Update.Providers } - public void Start(string targetFolder) + public virtual void Start(string targetFolder) { Verify(targetFolder); bool isService = false; @@ -49,7 +53,7 @@ namespace NzbDrone.Update.Providers { if (_serviceProvider.IsServiceRunning(ServiceProvider.NZBDRONE_SERVICE_NAME)) { - isService = true; + isService = true; } _serviceProvider.Stop(ServiceProvider.NZBDRONE_SERVICE_NAME); } From 79b3a22c9ab23d9b0282469e61f186a40e5ceb12 Mon Sep 17 00:00:00 2001 From: "kay.one" Date: Sun, 13 Nov 2011 12:42:12 -0800 Subject: [PATCH 10/10] Fixed some exception logging where exceptions weren't logged. --- NzbDrone.Common/LogConfiguration.cs | 2 -- NzbDrone.Core/CentralDispatch.cs | 2 +- NzbDrone.Update/Program.cs | 2 +- NzbDrone.Update/Providers/UpdateProvider.cs | 2 +- NzbDrone/Providers/MonitoringProvider.cs | 2 +- 5 files changed, 4 insertions(+), 6 deletions(-) diff --git a/NzbDrone.Common/LogConfiguration.cs b/NzbDrone.Common/LogConfiguration.cs index f23929611..705c35f5b 100644 --- a/NzbDrone.Common/LogConfiguration.cs +++ b/NzbDrone.Common/LogConfiguration.cs @@ -90,8 +90,6 @@ namespace NzbDrone.Common LogManager.Configuration.Reload(); LogManager.ReconfigExistingLoggers(); sw.Stop(); - - Console.WriteLine("Reload: " + sw.Elapsed.TotalSeconds); } } } diff --git a/NzbDrone.Core/CentralDispatch.cs b/NzbDrone.Core/CentralDispatch.cs index a3336f85e..1d8e7d0a2 100644 --- a/NzbDrone.Core/CentralDispatch.cs +++ b/NzbDrone.Core/CentralDispatch.cs @@ -137,7 +137,7 @@ namespace NzbDrone.Core } catch (Exception e) { - Logger.Fatal(e); + Logger.FatalException("An error has occurred while dedicating to host.", e); } } diff --git a/NzbDrone.Update/Program.cs b/NzbDrone.Update/Program.cs index ecb1830ca..6816547ec 100644 --- a/NzbDrone.Update/Program.cs +++ b/NzbDrone.Update/Program.cs @@ -43,7 +43,7 @@ namespace NzbDrone.Update } catch (Exception e) { - logger.Fatal("An error has occurred while applying update.", e); + logger.FatalException("An error has occurred while applying update package.", e); } } diff --git a/NzbDrone.Update/Providers/UpdateProvider.cs b/NzbDrone.Update/Providers/UpdateProvider.cs index 275419e0e..004eab575 100644 --- a/NzbDrone.Update/Providers/UpdateProvider.cs +++ b/NzbDrone.Update/Providers/UpdateProvider.cs @@ -78,7 +78,7 @@ namespace NzbDrone.Update.Providers catch (Exception e) { RollBack(targetFolder); - logger.Fatal("Failed to copy upgrade package to target folder.", e); + logger.FatalException("Failed to copy upgrade package to target folder.", e); } finally { diff --git a/NzbDrone/Providers/MonitoringProvider.cs b/NzbDrone/Providers/MonitoringProvider.cs index 88ff9e887..f28f44230 100644 --- a/NzbDrone/Providers/MonitoringProvider.cs +++ b/NzbDrone/Providers/MonitoringProvider.cs @@ -117,7 +117,7 @@ namespace NzbDrone.Providers }.Submit(); } - Logger.Fatal("EPIC FAIL: {0}", excepion); + Logger.FatalException("EPIC FAIL: {0}", excepion); } } } \ No newline at end of file