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.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.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/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/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/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/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 b928d92fc..7fe0e878b 100644 --- a/NzbDrone.App.Test/NzbDrone.App.Test.csproj +++ b/NzbDrone.App.Test/NzbDrone.App.Test.csproj @@ -65,11 +65,8 @@ - - - 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.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/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 bf72a48ee..d979c397e 100644 --- a/NzbDrone.Common.Test/NzbDrone.Common.Test.csproj +++ b/NzbDrone.Common.Test/NzbDrone.Common.Test.csproj @@ -61,9 +61,10 @@ + + - diff --git a/NzbDrone.Common.Test/PathExtentionFixture.cs b/NzbDrone.Common.Test/PathExtentionFixture.cs new file mode 100644 index 000000000..7a7905d96 --- /dev/null +++ b/NzbDrone.Common.Test/PathExtentionFixture.cs @@ -0,0 +1,53 @@ +using FluentAssertions; +using Moq; +using NUnit.Framework; +using NzbDrone.Common; +using NzbDrone.Test.Common; + +namespace NzbDrone.App.Test +{ + [TestFixture] + public class PathExtentionFixture : TestBase + { + + 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.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/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/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/EnviromentProvider.cs b/NzbDrone.Common/EnviromentProvider.cs index 6ff76153f..25b055a84 100644 --- a/NzbDrone.Common/EnviromentProvider.cs +++ b/NzbDrone.Common/EnviromentProvider.cs @@ -63,7 +63,7 @@ namespace NzbDrone.Common } } - + public virtual string StartUpPath { get @@ -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; } @@ -84,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.Common/LogConfiguration.cs b/NzbDrone.Common/LogConfiguration.cs index 716b18edd..705c35f5b 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,23 +69,27 @@ 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); + } } } public static void Reload() { + var sw = Stopwatch.StartNew(); LogManager.Configuration.Reload(); LogManager.ReconfigExistingLoggers(); + sw.Stop(); } } } 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 55c76cf7e..b7461ac7b 100644 --- a/NzbDrone.Common/NzbDrone.Common.csproj +++ b/NzbDrone.Common/NzbDrone.Common.csproj @@ -42,15 +42,14 @@ - - - - + + - + + diff --git a/NzbDrone.Common/PathExtentions.cs b/NzbDrone.Common/PathExtentions.cs new file mode 100644 index 000000000..3e6ff95a2 --- /dev/null +++ b/NzbDrone.Common/PathExtentions.cs @@ -0,0 +1,93 @@ +using System.IO; + +namespace NzbDrone.Common +{ + public static class PathExtentions + { + 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"; + + 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 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(enviromentProvider.GetAppDataPath(), LOG_DB_FILE); + } + + public static string GetBannerPath(this EnviromentProvider enviromentProvider) + { + return Path.Combine(enviromentProvider.GetWebRoot(), "Content", "Images", "Banners"); + } + + public static string GetCacheFolder(this EnviromentProvider enviromentProvider) + { + 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 9925e72b5..000000000 --- a/NzbDrone.Common/PathProvider.cs +++ /dev/null @@ -1,111 +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"; - - public const string UPDATE_SANDBOX_FOLDER_NAME = "nzbdrone_update"; - - 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"); } - } - - public string UpdateSandboxFolder - { - get { return Path.Combine(SystemTemp, UPDATE_SANDBOX_FOLDER_NAME); } - } - } -} \ No newline at end of file diff --git a/NzbDrone.Common/ServiceProvider.cs b/NzbDrone.Common/ServiceProvider.cs index bf22ca256..97ff3c507 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) { @@ -106,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(); @@ -125,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 cc1895813..93d523d1a 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/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 3f37ffe38..2e3f0922f 100644 --- a/NzbDrone.Core.Test/JobTests/BannerDownloadJobTest.cs +++ b/NzbDrone.Core.Test/JobTests/BannerDownloadJobTest.cs @@ -11,20 +11,19 @@ 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 { [TestFixture] // ReSharper disable InconsistentNaming - public class BannerDownloadJobTest : TestBase + public class BannerDownloadJobTest : CoreTest { [SetUp] public void Setup() { WithStrictMocker(); - WithTempAsStartUpPath(); + WithTempAsAppPath(); } [Test] @@ -91,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"); @@ -104,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 2c2103b61..60256ab1d 100644 --- a/NzbDrone.Core.Test/ProviderTests/DiskProviderTests/ExtractArchiveFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/DiskProviderTests/ExtractArchiveFixture.cs @@ -7,15 +7,15 @@ 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() { - 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..e7a27d4a6 100644 --- a/NzbDrone.Core.Test/ProviderTests/DiskProviderTests/FreeDiskSpaceTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/DiskProviderTests/FreeDiskSpaceTest.cs @@ -7,13 +7,14 @@ using AutoMoq; using FluentAssertions; using Moq; using NUnit.Framework; +using NzbDrone.Common; using NzbDrone.Core.Providers.Core; 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 1a63cc487..b58b59e84 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; @@ -13,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 9f37f54f0..a34adfda1 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; @@ -16,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 edfa1ac69..e92fb5dbd 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; @@ -15,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 8a8655838..c9f3b70d6 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; @@ -17,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 9c52f8fa8..17cf3d018 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; @@ -15,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 a6d09601d..8dfe0e488 100644 --- a/NzbDrone.Core.Test/ProviderTests/UpdateProviderTests/PreformUpdateFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/UpdateProviderTests/PreformUpdateFixture.cs @@ -1,36 +1,36 @@ 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 + internal class PreformUpdateFixture : CoreTest { - private AutoMoqer _mocker = null; + + + private const string SANDBOX_FOLDER = @"C:\Temp\nzbdrone_update\"; [SetUp] public void setup() { - _mocker = new AutoMoqer(MockBehavior.Strict); - _mocker.GetMock() - .SetupGet(c => c.SystemTemp).Returns(TempFolder); + WithStrictMocker(); + + } [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", @@ -38,21 +38,25 @@ 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))); + var updateArchive = Path.Combine(SANDBOX_FOLDER, updatePackage.FileName); + + Mocker.GetMock().Setup( + c => c.DownloadFile(updatePackage.Url, updateArchive)); - _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(updateArchive, SANDBOX_FOLDER)); - _mocker.Resolve().PreformUpdate(updatePackage); + //Act + 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)); + Mocker.GetMock().SetupGet(c => c.SystemTemp).Returns(TempFolder); + + var updateSubFolder = new DirectoryInfo(Mocker.GetMock().Object.GetUpdateSandboxFolder()); 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.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 373ee940d..435792ea4 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 { @@ -37,6 +39,7 @@ namespace NzbDrone.Core MigrationsHelper.Run(mainConnectionString, true); LogConfiguration.RegisterDatabaseLogger(Kernel.Get()); + LogConfiguration.Reload(); Kernel.Get().SetupDefaultProfiles(); Kernel.Get().SetupDefault(); @@ -118,7 +121,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); @@ -135,7 +138,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.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..23be92ec5 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,18 +25,24 @@ 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)); + } 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.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 bb6fc96ef..7d1cb566c 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 - @@ -212,7 +198,6 @@ - @@ -236,7 +221,6 @@ - @@ -329,7 +313,7 @@ - + diff --git a/NzbDrone.Core/Providers/Core/ArchiveProvider.cs b/NzbDrone.Core/Providers/Core/ArchiveProvider.cs new file mode 100644 index 000000000..aa2de9abf --- /dev/null +++ b/NzbDrone.Core/Providers/Core/ArchiveProvider.cs @@ -0,0 +1,25 @@ +using System.Linq; +using Ionic.Zip; +using NLog; + +namespace NzbDrone.Core.Providers.Core +{ + public class ArchiveProvider + { + private static readonly Logger logger = LogManager.GetCurrentClassLogger(); + + + public virtual void ExtractArchive(string compressedFile, string destination) + { + logger.Trace("Extracting archive [{0}] to [{1}]", compressedFile, destination); + + using (ZipFile zipFile = ZipFile.Read(compressedFile)) + { + zipFile.ExtractAll(destination); + } + + logger.Trace("Extraction complete."); + } + + } +} \ No newline at end of file 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/Core/DiskProvider.cs b/NzbDrone.Core/Providers/Core/DiskProvider.cs deleted file mode 100644 index 4fe32a0f7..000000000 --- a/NzbDrone.Core/Providers/Core/DiskProvider.cs +++ /dev/null @@ -1,122 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Runtime.InteropServices; -using Ionic.Zip; -using NLog; - -namespace NzbDrone.Core.Providers.Core -{ - 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) - { - 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); - } - - public virtual void ExtractArchive(string compressedFile, string destination) - { - Logger.Trace("Extracting archive [{0}] to [{1}]", compressedFile, destination); - - using (ZipFile zipFile = ZipFile.Read(compressedFile)) - { - zipFile.ExtractAll(destination); - } - - 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..527e07ac0 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 { @@ -18,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() @@ -54,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) { @@ -78,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/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/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 dab67ad13..e9863b636 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 { @@ -18,23 +17,21 @@ 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 static readonly Logger Logger = LogManager.GetCurrentClassLogger(); + 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); + 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) + public UpdateProvider(HttpProvider httpProvider, ConfigProvider configProvider, + EnviromentProvider enviromentProvider, ArchiveProvider archiveProvider) { _httpProvider = httpProvider; _configProvider = configProvider; _enviromentProvider = enviromentProvider; - _pathProvider = pathProvider; - _diskProvider = diskProvider; + _archiveProvider = archiveProvider; } public UpdateProvider() @@ -46,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) { @@ -66,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 PreformUpdate(UpdatePackage updatePackage) + public virtual void StartUpgrade(UpdatePackage updatePackage) { - var packageDestination = Path.Combine(_pathProvider.UpdateSandboxFolder, 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"); - _diskProvider.ExtractArchive(packageDestination, _pathProvider.UpdateSandboxFolder); - 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.Core.Test/Framework/TestBase.cs b/NzbDrone.Test.Common/TestBase.cs similarity index 51% rename from NzbDrone.Core.Test/Framework/TestBase.cs rename to NzbDrone.Test.Common/TestBase.cs index 351c9cf0d..3c919270a 100644 --- a/NzbDrone.Core.Test/Framework/TestBase.cs +++ b/NzbDrone.Test.Common/TestBase.cs @@ -1,35 +1,16 @@ -using System.IO; +using System.Linq; +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 +namespace NzbDrone.Test.Common { 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 AutoMoqer Mocker; protected string VirtualPath { @@ -43,11 +24,8 @@ namespace NzbDrone.Core.Test.Framework } [SetUp] - public virtual void SetupBase() + public void TestBaseSetup() { - InitLogging(); - - ExceptionVerification.Reset(); if (Directory.Exists(TempFolder)) { Directory.Delete(TempFolder, true); @@ -55,41 +33,26 @@ namespace NzbDrone.Core.Test.Framework 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() + [TearDown] + public void TestBaseTearDown() { - Db = MockLib.GetEmptyDatabase(); - Mocker.SetConstant(Db); + Mocker.VerifyAllMocks(); } - [TearDown] - public void TearDownBase() + protected virtual void WithStrictMocker() { - ExceptionVerification.AssertNoUnexcpectedLogs(); Mocker = new AutoMoqer(MockBehavior.Strict); - WebTimer.Stop(); } - protected void WithTempAsStartUpPath() + protected void WithTempAsAppPath() { Mocker.GetMock() .SetupGet(c => c.ApplicationPath) .Returns(VirtualPath); - - Mocker.Resolve(); } 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..8b40d13af 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,9 +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/UpdateProviderStartFixture.cs b/NzbDrone.Update.Test/UpdateProviderStartFixture.cs new file mode 100644 index 000000000..a6ea8e2eb --- /dev/null +++ b/NzbDrone.Update.Test/UpdateProviderStartFixture.cs @@ -0,0 +1,220 @@ +using System.Collections.Generic; +using System.IO; +using FizzWare.NBuilder; +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 UpdateProviderStartFixture : TestBase + { + 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 _enviromentProvider; + + + [SetUp] + public void Setup() + { + + _enviromentProvider = Mocker.GetMock(); + + _enviromentProvider.SetupGet(c => c.SystemTemp).Returns(@"C:\Temp\"); + + Mocker.GetMock() + .Setup(c => c.FolderExists(UPDATE_FOLDER)) + .Returns(true); + + Mocker.GetMock() + .Setup(c => c.FolderExists(TARGET_FOLDER)) + .Returns(true); + } + + private void WithInstalledService() + { + 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); + + //Assert + 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] + public void should_kill_nzbdrone_process_if_running() + { + var proccesses = Builder.CreateListOfSize(2).Build(); + + Mocker.GetMock() + .Setup(c => c.GetProcessByName(ProcessProvider.NzbDroneProccessName)) + .Returns(proccesses); + + //Act + 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()); + } + + [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() + { + Mocker.GetMock() + .Setup(c => c.CopyDirectory(TARGET_FOLDER, BACKUP_FOLDER)); + + Mocker.Resolve().Start(TARGET_FOLDER); + } + + [Test] + public void should_copy_update_package_to_target() + { + Mocker.GetMock() + .Setup(c => c.CopyDirectory(UPDATE_FOLDER, TARGET_FOLDER)); + + Mocker.Resolve().Start(TARGET_FOLDER); + } + + [Test] + public void should_restore_if_update_fails() + { + Mocker.GetMock() + .Setup(c => c.CopyDirectory(UPDATE_FOLDER, TARGET_FOLDER)) + .Throws(new IOException()); + + //Act + Mocker.Resolve().Start(TARGET_FOLDER); + + //Assert + Mocker.GetMock() + .Verify(c => c.CopyDirectory(BACKUP_FOLDER, TARGET_FOLDER), Times.Once()); + ExceptionVerification.ExcpectedFatals(1); + } + + [Test] + public void should_restart_service_if_service_was_running() + { + WithInstalledService(); + WithServiceRunning(true); + + //Act + Mocker.Resolve().Start(TARGET_FOLDER); + + //Assert + VerifyServiceRestart(); + } + + [Test] + public void should_restart_process_if_service_was_not_running() + { + WithInstalledService(); + WithServiceRunning(false); + + //Act + Mocker.Resolve().Start(TARGET_FOLDER); + + //Assert + VerifyProcessRestart(); + } + + [Test] + 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); + } + + [Test] + public void should_restart_process_if_service_was_not_running_and_update_fails() + { + WithInstalledService(); + WithServiceRunning(false); + + Mocker.GetMock() + .Setup(c => c.CopyDirectory(UPDATE_FOLDER, TARGET_FOLDER)) + .Throws(new IOException()); + + //Act + Mocker.Resolve().Start(TARGET_FOLDER); + + //Assert + VerifyProcessRestart(); + ExceptionVerification.ExcpectedFatals(1); + } + + private void VerifyServiceRestart() + { + Mocker.GetMock() + .Verify(c => c.Start(ServiceProvider.NZBDRONE_SERVICE_NAME), Times.Once()); + + Mocker.GetMock() + .Verify(c => c.Start(It.IsAny()), Times.Never()); + } + + 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()); + } + } +} diff --git a/NzbDrone.Update.Test/UpdateProviderStartTest.cs b/NzbDrone.Update.Test/UpdateProviderStartTest.cs deleted file mode 100644 index 920f89a2f..000000000 --- a/NzbDrone.Update.Test/UpdateProviderStartTest.cs +++ /dev/null @@ -1,55 +0,0 @@ -using AutoMoq; -using FizzWare.NBuilder; -using Moq; -using NUnit.Framework; -using NzbDrone.Common; -using NzbDrone.Common.Model; -using NzbDrone.Update.Providers; - -namespace NzbDrone.Update.Test -{ - [TestFixture] - class UpdateProviderStartTest - { - AutoMoqer mocker = new AutoMoqer(); - - [SetUp] - public void Setup() - { - mocker = new AutoMoqer(); - } - - [Test] - public void should_stop_nzbdrone_service_if_installed() - { - mocker.GetMock() - .Setup(c => c.ServiceExist(ServiceProvider.NZBDRONE_SERVICE_NAME)) - .Returns(true); - - //Act - mocker.Resolve().Start(null); - - //Assert - mocker.GetMock().Verify(c => c.Stop(ServiceProvider.NZBDRONE_SERVICE_NAME), Times.Once()); - mocker.VerifyAllMocks(); - } - - [Test] - public void should_kill_nzbdrone_process_if_running() - { - var proccesses = Builder.CreateListOfSize(2).Build(); - - mocker.GetMock() - .Setup(c => c.GetProcessByName(ProcessProvider.NzbDroneProccessName)) - .Returns(proccesses); - - //Act - mocker.Resolve().Start(null); - - //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(); - } - } -} diff --git a/NzbDrone.Update.Test/UpdateProviderVerifyTest.cs b/NzbDrone.Update.Test/UpdateProviderVerifyFixture.cs similarity index 66% rename from NzbDrone.Update.Test/UpdateProviderVerifyTest.cs rename to NzbDrone.Update.Test/UpdateProviderVerifyFixture.cs index 1e4d833d2..6ca63d193 100644 --- a/NzbDrone.Update.Test/UpdateProviderVerifyTest.cs +++ b/NzbDrone.Update.Test/UpdateProviderVerifyFixture.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 UpdateProviderVerifyFixture : TestBase { AutoMoqer mocker = new AutoMoqer(); @@ -23,30 +24,33 @@ 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)] [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 +61,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/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/Program.cs b/NzbDrone.Update/Program.cs index 01701488b..6816547ec 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.FatalException("An error has occurred while applying update package.", 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 b92f2d302..004eab575 100644 --- a/NzbDrone.Update/Providers/UpdateProvider.cs +++ b/NzbDrone.Update/Providers/UpdateProvider.cs @@ -9,64 +9,100 @@ namespace NzbDrone.Update.Providers public class UpdateProvider { private readonly DiskProvider _diskProvider; - private readonly EnviromentProvider _enviromentProvider; private readonly ServiceProvider _serviceProvider; private readonly ProcessProvider _processProvider; - private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); + private readonly EnviromentProvider _enviromentProvider; + private static readonly Logger logger = LogManager.GetCurrentClassLogger(); - public UpdateProvider(DiskProvider diskProvider, EnviromentProvider enviromentProvider, - ServiceProvider serviceProvider, ProcessProvider processProvider) + public UpdateProvider(DiskProvider diskProvider, ServiceProvider serviceProvider, + ProcessProvider processProvider, EnviromentProvider enviromentProvider) { _diskProvider = diskProvider; - _enviromentProvider = enviromentProvider; _serviceProvider = serviceProvider; _processProvider = processProvider; + _enviromentProvider = enviromentProvider; + } + + public UpdateProvider() + { } - public void Verify(string targetFolder) + private void Verify(string targetFolder) { - Logger.Info("Verifying requirements before update..."); + logger.Info("Verifying requirements before update..."); if (String.IsNullOrWhiteSpace(targetFolder)) throw new ArgumentException("Target folder can not be null or empty"); if (!_diskProvider.FolderExists(targetFolder)) - throw new DirectoryNotFoundException("Target folder doesn't exist" + targetFolder); + throw new DirectoryNotFoundException("Target folder doesn't exist " + targetFolder); - var sandboxFolder = Path.Combine(_enviromentProvider.StartUpPath, "nzbdrone_update"); - - Logger.Info("Verifying Update Folder"); - if (!_diskProvider.FolderExists(sandboxFolder)) - throw new DirectoryNotFoundException("Update folder doesn't exist" + sandboxFolder); + logger.Info("Verifying Update Folder"); + if (!_diskProvider.FolderExists(_enviromentProvider.GetUpdatePackageFolder())) + throw new DirectoryNotFoundException("Update folder doesn't exist " + _enviromentProvider.GetUpdatePackageFolder()); } - public void Start(string installationFolder) + public virtual void Start(string targetFolder) { - Logger.Info("Stopping all running services"); + 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); } - 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"); + _diskProvider.CopyDirectory(targetFolder, _enviromentProvider.GetUpdateBackUpFolder()); - //Create backup of current folder - //Copy update folder on top of the existing folder + logger.Info("Copying update package to target"); - //Happy: Cleanup - //Happy: Start Service, Process? + try + { + _diskProvider.CopyDirectory(_enviromentProvider.GetUpdatePackageFolder(), targetFolder); + } + catch (Exception e) + { + RollBack(targetFolder); + logger.FatalException("Failed to copy upgrade package to target folder.", e); + } + finally + { + StartNzbDrone(isService, targetFolder); + } + } + + private void RollBack(string targetFolder) + { + logger.Info("Attempting to rollback upgrade"); + _diskProvider.CopyDirectory(_enviromentProvider.GetUpdateBackUpFolder(), targetFolder); + } - //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/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 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/SettingsController.cs b/NzbDrone.Web/Controllers/SettingsController.cs index 1e7f907be..66cde8881 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/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; 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.Web/NzbDrone.Web.csproj b/NzbDrone.Web/NzbDrone.Web.csproj index 1b9b57c58..6a35ebace 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/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 ba239aa30..2b221c2d3 100644 --- a/NzbDrone/NzbDrone.csproj +++ b/NzbDrone/NzbDrone.csproj @@ -57,19 +57,13 @@ NzbDrone.AppMain - - True - True True - - False - ..\Libraries\Exceptioneer.WindowsFormsClient.dll - + ..\packages\Ninject.2.2.1.4\lib\net40-Full\Ninject.dll @@ -77,13 +71,9 @@ ..\packages\NLog.2.0.0.2000\lib\net40\NLog.dll - - - - @@ -95,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); diff --git a/NzbDrone/Providers/MonitoringProvider.cs b/NzbDrone/Providers/MonitoringProvider.cs index 087052110..f28f44230 100644 --- a/NzbDrone/Providers/MonitoringProvider.cs +++ b/NzbDrone/Providers/MonitoringProvider.cs @@ -107,17 +107,17 @@ 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); + Logger.FatalException("EPIC FAIL: {0}", excepion); } } } \ No newline at end of file