From b5e196fcefa1cfab28a2ffd39109c78c8c9efe0b Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Fri, 19 Oct 2012 23:46:12 -0700 Subject: [PATCH] Skip import when Series.Path doesn't exist --- NzbDrone.Common/DiskProvider.cs | 3 +++ .../DiskProviderTests/FreeDiskSpaceTest.cs | 14 +++++----- .../ProcessDownloadFixture.cs | 27 +++++++++++++++++++ .../Providers/PostDownloadProvider.cs | 12 +++++++++ 4 files changed, 50 insertions(+), 6 deletions(-) diff --git a/NzbDrone.Common/DiskProvider.cs b/NzbDrone.Common/DiskProvider.cs index 8eccf98f98..77920b144d 100644 --- a/NzbDrone.Common/DiskProvider.cs +++ b/NzbDrone.Common/DiskProvider.cs @@ -193,6 +193,9 @@ public virtual void InheritFolderPermissions(string filename) public virtual ulong FreeDiskSpace(DirectoryInfo directoryInfo) { + if (!directoryInfo.Exists) + throw new DirectoryNotFoundException(); + ulong freeBytesAvailable; ulong totalNumberOfBytes; ulong totalNumberOfFreeBytes; diff --git a/NzbDrone.Core.Test/ProviderTests/DiskProviderTests/FreeDiskSpaceTest.cs b/NzbDrone.Core.Test/ProviderTests/DiskProviderTests/FreeDiskSpaceTest.cs index 19a92cb8db..0ed4395208 100644 --- a/NzbDrone.Core.Test/ProviderTests/DiskProviderTests/FreeDiskSpaceTest.cs +++ b/NzbDrone.Core.Test/ProviderTests/DiskProviderTests/FreeDiskSpaceTest.cs @@ -18,18 +18,20 @@ namespace NzbDrone.Core.Test.ProviderTests.DiskProviderTests public class FreeDiskSpaceTest : CoreTest { [Test] - public void FreeDiskSpace() + public void should_return_free_disk_space() { - //Setup - - - //Act var di = new DirectoryInfo(Directory.GetCurrentDirectory()); var result = Mocker.Resolve().FreeDiskSpace(di); - //Asert //Checks to ensure that the free space on the first is greater than 0 (It should be in 99.99999999999999% of cases... I hope) result.Should().BeGreaterThan(0); } + + [Test] + public void should_throw_if_directoy_does_not_exist() + { + var di = new DirectoryInfo(@"Z:\NOT_A_REAL_PATH\DOES_NOT_EXIST"); + Assert.Throws(() => Mocker.Resolve().FreeDiskSpace(di)); + } } } diff --git a/NzbDrone.Core.Test/ProviderTests/PostDownloadProviderTests/ProcessDownloadFixture.cs b/NzbDrone.Core.Test/ProviderTests/PostDownloadProviderTests/ProcessDownloadFixture.cs index be2b61fd45..b538a35760 100644 --- a/NzbDrone.Core.Test/ProviderTests/PostDownloadProviderTests/ProcessDownloadFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/PostDownloadProviderTests/ProcessDownloadFixture.cs @@ -49,6 +49,10 @@ private void WithValidSeries() Mocker.GetMock() .Setup(c => c.FindSeries(It.IsAny())) .Returns(fakeSeries); + + Mocker.GetMock() + .Setup(c => c.FolderExists(fakeSeries.Path)) + .Returns(true); } private void WithImportableFiles() @@ -295,6 +299,7 @@ public void when_files_are_imported_and_folder_is_small_enough_dir_should_be_del Mocker.GetMock().Setup(s => s.MoveEpisodeFile(It.IsAny(), true)).Returns(new EpisodeFile()); Mocker.GetMock().Setup(s => s.GetDirectorySize(droppedFolder.FullName)).Returns(Constants.IgnoreFileSize - 1.Megabytes()); Mocker.GetMock().Setup(s => s.DeleteFolder(droppedFolder.FullName, true)); + Mocker.GetMock().Setup(s => s.FolderExists(fakeSeries.Path)).Returns(true); Mocker.GetMock().Setup(s => s.CreateForEpisodeFiles(It.IsAny>())); //Act @@ -316,6 +321,7 @@ public void all_imported_files_should_be_moved() .Build().ToList(); Mocker.GetMock().Setup(s => s.FindSeries(It.IsAny())).Returns(fakeSeries); + Mocker.GetMock().Setup(s => s.FolderExists(fakeSeries.Path)).Returns(true); Mocker.GetMock().Setup(s => s.Scan(fakeSeries, droppedFolder.FullName)).Returns(fakeEpisodeFiles); //Act @@ -345,6 +351,10 @@ public void should_logError_and_return_if_size_exceeds_free_space() .Setup(s => s.GetDirectorySize(downloadName.FullName)) .Returns(10); + Mocker.GetMock() + .Setup(s => s.FolderExists(series.Path)) + .Returns(true); + Mocker.GetMock() .Setup(s => s.FreeDiskSpace(new DirectoryInfo(series.Path))) .Returns(9); @@ -407,5 +417,22 @@ public void should_process_if_free_disk_space_equals_size() //Assert Mocker.GetMock().Verify(c => c.Scan(fakeSeries, downloadName.FullName), Times.Once()); } + + [Test] + public void should_return_if_series_path_does_not_exist() + { + var downloadName = new DirectoryInfo(@"C:\Test\Drop\30.Rock.S01E01.Pilot"); + + WithValidSeries(); + + Mocker.GetMock() + .Setup(s => s.FolderExists(fakeSeries.Path)) + .Returns(false); + + Mocker.Resolve().ProcessDownload(downloadName); + + Mocker.GetMock().Verify(c => c.GetDirectorySize(It.IsAny()), Times.Never()); + ExceptionVerification.ExpectedWarns(1); + } } } \ No newline at end of file diff --git a/NzbDrone.Core/Providers/PostDownloadProvider.cs b/NzbDrone.Core/Providers/PostDownloadProvider.cs index 7ea58ed98c..e0e4ef8749 100644 --- a/NzbDrone.Core/Providers/PostDownloadProvider.cs +++ b/NzbDrone.Core/Providers/PostDownloadProvider.cs @@ -81,6 +81,12 @@ public virtual void ProcessDownload(DirectoryInfo subfolderInfo) return; } + if (!_diskProvider.FolderExists(series.Path)) + { + Logger.Warn("Series Folder doesn't exist: {0}", series.Path); + return; + } + var size = _diskProvider.GetDirectorySize(subfolderInfo.FullName); var freeSpace = _diskProvider.FreeDiskSpace(new DirectoryInfo(series.Path)); @@ -138,6 +144,12 @@ public virtual void ProcessVideoFile(string videoFile) return; } + if (!_diskProvider.FolderExists(series.Path)) + { + Logger.Warn("Series Folder doesn't exist: {0}", series.Path); + return; + } + var size = _diskProvider.GetSize(videoFile); var freeSpace = _diskProvider.FreeDiskSpace(new DirectoryInfo(series.Path));