Path calculations are now done using extension methods.

This commit is contained in:
kay.one 2011-11-12 21:19:19 -08:00
parent 18b10d45c6
commit 2e94e322f4
8 changed files with 71 additions and 45 deletions

View File

@ -45,6 +45,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="ConsoleProvider.cs" /> <Compile Include="ConsoleProvider.cs" />
<Compile Include="PathExtentions.cs" />
<Compile Include="PathProvider.cs" /> <Compile Include="PathProvider.cs" />
<Compile Include="DiskProvider.cs" /> <Compile Include="DiskProvider.cs" />
<Compile Include="EnviromentProvider.cs" /> <Compile Include="EnviromentProvider.cs" />

View File

@ -0,0 +1,39 @@
using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
namespace NzbDrone.Common
{
public static class PathExtentions
{
private const string WEB_FOLDER = "NzbDrone.Web\\";
private const string APP_DATA = "App_Data\\";
private const string LOG_CONFIG_FILE = "log.config";
private const string APP_CONFIG_FILE = "config.xml";
private const string NZBDRONE_DB_FILE = "nzbdrone.sdf";
private const string LOG_DB_FILE = "log.sdf";
private const string UPDATE_SANDBOX_FOLDER_NAME = "nzbdrone_update\\";
private const string UPDATE_PACKAGE_FOLDER_NAME = "nzbdrone\\";
private const string UPDATE_BACKUP_FOLDER_NAME = "nzbdrone_backup\\";
public static string GetUpdateSandboxFolder(this PathProvider pathProvider)
{
return Path.Combine(pathProvider.SystemTemp, UPDATE_SANDBOX_FOLDER_NAME);
}
public static string GetUpdateBackUpFolder(this PathProvider pathProvider)
{
return Path.Combine(pathProvider.GetUpdateSandboxFolder(), UPDATE_BACKUP_FOLDER_NAME);
}
public static string GetUpdatePackageFolder(this PathProvider pathProvider)
{
return Path.Combine(pathProvider.GetUpdateSandboxFolder(), UPDATE_PACKAGE_FOLDER_NAME);
}
}
}

View File

@ -103,20 +103,5 @@ namespace NzbDrone.Common
{ {
get { return Path.Combine(AppData, "Cache"); } get { return Path.Combine(AppData, "Cache"); }
} }
public virtual string UpdateSandboxFolder
{
get { return Path.Combine(SystemTemp, UPDATE_SANDBOX_FOLDER_NAME); }
}
public virtual string UpdatePackageFolder
{
get { return Path.Combine(UPDATE_SANDBOX_FOLDER_NAME, "NzbDrone"); }
}
public virtual string UpdateBackUpFolder
{
get { return Path.Combine(UpdateSandboxFolder, UPDATE_BACKUP_FOLDER_NAME); }
}
} }
} }

View File

@ -14,28 +14,23 @@ namespace NzbDrone.Core.Test.ProviderTests.UpdateProviderTests
internal class PreformUpdateFixture : TestBase internal class PreformUpdateFixture : TestBase
{ {
private string SandBoxPath;
private const string SANDBOX_FOLDER = @"C:\Temp\nzbdrone_update\";
[SetUp] [SetUp]
public void setup() public void setup()
{ {
WithStrictMocker(); WithStrictMocker();
Mocker.GetMock<PathProvider>()
.SetupGet(c => c.UpdateSandboxFolder).Returns(Path.Combine(TempFolder, "NzbDrone_update"));
SandBoxPath = Mocker.GetMock<PathProvider>().Object.UpdateSandboxFolder;
Mocker.GetMock<PathProvider>()
.SetupGet(c => c.UpdatePackageFolder).Returns(Path.Combine(SandBoxPath, "NzbDrone"));
} }
[Test] [Test]
public void Should_call_download_and_extract_using_correct_arguments() public void Should_call_download_and_extract_using_correct_arguments()
{ {
//Act Mocker.GetMock<PathProvider>().SetupGet(c => c.SystemTemp).Returns(@"C:\Temp\");
var updatePackage = new UpdatePackage var updatePackage = new UpdatePackage
{ {
FileName = "NzbDrone.kay.one.0.6.0.2031.zip", FileName = "NzbDrone.kay.one.0.6.0.2031.zip",
@ -43,12 +38,15 @@ namespace NzbDrone.Core.Test.ProviderTests.UpdateProviderTests
Version = new Version("0.6.0.2031") Version = new Version("0.6.0.2031")
}; };
var updateArchive = Path.Combine(SANDBOX_FOLDER, updatePackage.FileName);
Mocker.GetMock<HttpProvider>().Setup( Mocker.GetMock<HttpProvider>().Setup(
c => c.DownloadFile(updatePackage.Url, Path.Combine(SandBoxPath, updatePackage.FileName))); c => c.DownloadFile(updatePackage.Url, updateArchive));
Mocker.GetMock<ArchiveProvider>().Setup( Mocker.GetMock<ArchiveProvider>().Setup(
c => c.ExtractArchive(Path.Combine(SandBoxPath, updatePackage.FileName), SandBoxPath)); c => c.ExtractArchive(updateArchive, SANDBOX_FOLDER));
//Act
Mocker.Resolve<UpdateProvider>().StartUpgrade(updatePackage); Mocker.Resolve<UpdateProvider>().StartUpgrade(updatePackage);
} }
@ -56,7 +54,9 @@ namespace NzbDrone.Core.Test.ProviderTests.UpdateProviderTests
public void Should_download_and_extract_to_temp_folder() public void Should_download_and_extract_to_temp_folder()
{ {
var updateSubFolder = new DirectoryInfo(SandBoxPath); Mocker.GetMock<PathProvider>().SetupGet(c => c.SystemTemp).Returns(TempFolder);
var updateSubFolder = new DirectoryInfo(Mocker.GetMock<PathProvider>().Object.GetUpdateSandboxFolder());
var updatePackage = new UpdatePackage var updatePackage = new UpdatePackage
{ {

View File

@ -77,14 +77,14 @@ namespace NzbDrone.Core.Providers
public virtual void StartUpgrade(UpdatePackage updatePackage) public virtual void StartUpgrade(UpdatePackage updatePackage)
{ {
var packageDestination = Path.Combine(_pathProvider.UpdateSandboxFolder, updatePackage.FileName); var packageDestination = Path.Combine(_pathProvider.GetUpdateSandboxFolder(), updatePackage.FileName);
Logger.Info("Downloading update package from [{0}] to [{1}]", updatePackage.Url, packageDestination); Logger.Info("Downloading update package from [{0}] to [{1}]", updatePackage.Url, packageDestination);
_httpProvider.DownloadFile(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"); Logger.Info("Extracting Update package");
_archiveProvider.ExtractArchive(packageDestination, _pathProvider.UpdateSandboxFolder); _archiveProvider.ExtractArchive(packageDestination, _pathProvider.GetUpdateSandboxFolder());
Logger.Info("Update package extracted successfully"); Logger.Info("Update package extracted successfully");
} }

View File

@ -14,11 +14,11 @@ namespace NzbDrone.Update.Test
{ {
AutoMoqer mocker = new AutoMoqer(); AutoMoqer mocker = new AutoMoqer();
private const string UPDATE_FOLDER = @"C:\Temp\NzbDrone_update\NzbDrone"; private const string UPDATE_FOLDER = @"C:\Temp\nzbdrone_update\nzbdrone\";
private const string BACKUP_FOLDER = @"C:\Temp\NzbDrone_update\NzbDrone_Backup"; private const string BACKUP_FOLDER = @"C:\Temp\nzbdrone_update\nzbdrone_backup\";
private const string TARGET_FOLDER = @"C:\NzbDrone\"; private const string TARGET_FOLDER = @"C:\NzbDrone\";
Mock<PathProvider> _pathProvider = null; Mock<PathProvider> _pathProvider;
[SetUp] [SetUp]
@ -26,11 +26,9 @@ namespace NzbDrone.Update.Test
{ {
mocker = new AutoMoqer(); mocker = new AutoMoqer();
_pathProvider = mocker.GetMock<PathProvider>(); _pathProvider = mocker.GetMock<PathProvider>();
_pathProvider.SetupGet(c => c.UpdateBackUpFolder).Returns(BACKUP_FOLDER); _pathProvider.SetupGet(c => c.SystemTemp).Returns(@"C:\Temp\");
_pathProvider.SetupGet(c => c.UpdatePackageFolder).Returns(UPDATE_FOLDER);
mocker.GetMock<DiskProvider>() mocker.GetMock<DiskProvider>()
.Setup(c => c.FolderExists(UPDATE_FOLDER)) .Setup(c => c.FolderExists(UPDATE_FOLDER))

View File

@ -23,6 +23,9 @@ namespace NzbDrone.Update.Test
mocker.GetMock<EnviromentProvider>() mocker.GetMock<EnviromentProvider>()
.Setup(c => c.StartUpPath).Returns(@"C:\Temp\NzbDrone_update\"); .Setup(c => c.StartUpPath).Returns(@"C:\Temp\NzbDrone_update\");
mocker.GetMock<PathProvider>()
.Setup(c => c.SystemTemp).Returns(@"C:\Temp\");
} }
[TestCase(null)] [TestCase(null)]

View File

@ -23,19 +23,19 @@ namespace NzbDrone.Update.Providers
_pathProvider = pathProvider; _pathProvider = pathProvider;
} }
private void Verify(string installationFolder) private void Verify(string targetFolder)
{ {
logger.Info("Verifying requirements before update..."); logger.Info("Verifying requirements before update...");
if (String.IsNullOrWhiteSpace(installationFolder)) if (String.IsNullOrWhiteSpace(targetFolder))
throw new ArgumentException("Target folder can not be null or empty"); throw new ArgumentException("Target folder can not be null or empty");
if (!_diskProvider.FolderExists(installationFolder)) if (!_diskProvider.FolderExists(targetFolder))
throw new DirectoryNotFoundException("Target folder doesn't exist" + installationFolder); throw new DirectoryNotFoundException("Target folder doesn't exist " + targetFolder);
logger.Info("Verifying Update Folder"); logger.Info("Verifying Update Folder");
if (!_diskProvider.FolderExists(_pathProvider.UpdatePackageFolder)) if (!_diskProvider.FolderExists(_pathProvider.GetUpdatePackageFolder()))
throw new DirectoryNotFoundException("Update folder doesn't exist" + _pathProvider.UpdateSandboxFolder); throw new DirectoryNotFoundException("Update folder doesn't exist " + _pathProvider.GetUpdatePackageFolder());
} }
@ -62,14 +62,14 @@ namespace NzbDrone.Update.Providers
} }
logger.Info("Creating backup of existing installation"); logger.Info("Creating backup of existing installation");
_diskProvider.CopyDirectory(targetFolder, _pathProvider.UpdateBackUpFolder); _diskProvider.CopyDirectory(targetFolder, _pathProvider.GetUpdateBackUpFolder());
logger.Info("Copying update package to target"); logger.Info("Copying update package to target");
try try
{ {
_diskProvider.CopyDirectory(_pathProvider.UpdatePackageFolder, targetFolder); _diskProvider.CopyDirectory(_pathProvider.GetUpdatePackageFolder(), targetFolder);
} }
catch (Exception e) catch (Exception e)
{ {
@ -85,7 +85,7 @@ namespace NzbDrone.Update.Providers
private void RollBack(string targetFolder) private void RollBack(string targetFolder)
{ {
logger.Info("Attempting to rollback upgrade"); logger.Info("Attempting to rollback upgrade");
_diskProvider.CopyDirectory(_pathProvider.UpdateBackUpFolder, targetFolder); _diskProvider.CopyDirectory(_pathProvider.GetUpdateBackUpFolder(), targetFolder);
} }