diff --git a/NzbDrone.Common/DiskProvider.cs b/NzbDrone.Common/DiskProvider.cs index 8eccf98f9..77920b144 100644 --- a/NzbDrone.Common/DiskProvider.cs +++ b/NzbDrone.Common/DiskProvider.cs @@ -193,6 +193,9 @@ namespace NzbDrone.Common 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 19a92cb8d..0ed439520 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 be2b61fd4..b538a3576 100644 --- a/NzbDrone.Core.Test/ProviderTests/PostDownloadProviderTests/ProcessDownloadFixture.cs +++ b/NzbDrone.Core.Test/ProviderTests/PostDownloadProviderTests/ProcessDownloadFixture.cs @@ -49,6 +49,10 @@ namespace NzbDrone.Core.Test.ProviderTests.PostDownloadProviderTests 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 @@ namespace NzbDrone.Core.Test.ProviderTests.PostDownloadProviderTests 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 @@ namespace NzbDrone.Core.Test.ProviderTests.PostDownloadProviderTests .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 @@ namespace NzbDrone.Core.Test.ProviderTests.PostDownloadProviderTests .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 @@ namespace NzbDrone.Core.Test.ProviderTests.PostDownloadProviderTests //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 7ea58ed98..e0e4ef874 100644 --- a/NzbDrone.Core/Providers/PostDownloadProvider.cs +++ b/NzbDrone.Core/Providers/PostDownloadProvider.cs @@ -81,6 +81,12 @@ namespace NzbDrone.Core.Providers 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 @@ namespace NzbDrone.Core.Providers 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));