using System; using System.Collections.Generic; using System.Linq; using System.Text; using FluentAssertions; using Moq; using NUnit.Framework; using NzbDrone.Common.Disk; using NzbDrone.Core.Configuration; using NzbDrone.Core.DiskSpace; using NzbDrone.Core.Test.Framework; using NzbDrone.Core.Tv; using NzbDrone.Test.Common; namespace NzbDrone.Core.Test.DiskSpace { [TestFixture] public class DiskSpaceServiceFixture : CoreTest { private string _seriesFolder; private string _seriesFolder2; private string _droneFactoryFolder; [SetUp] public void SetUp() { _seriesFolder = @"G:\fasdlfsdf\series".AsOsAgnostic(); _seriesFolder2 = @"G:\fasdlfsdf\series2".AsOsAgnostic(); _droneFactoryFolder = @"G:\dronefactory".AsOsAgnostic(); Mocker.GetMock() .Setup(v => v.GetMounts()) .Returns(new List()); Mocker.GetMock() .Setup(v => v.GetPathRoot(It.IsAny())) .Returns(@"G:\".AsOsAgnostic()); Mocker.GetMock() .Setup(v => v.GetAvailableSpace(It.IsAny())) .Returns(0); Mocker.GetMock() .Setup(v => v.GetTotalSize(It.IsAny())) .Returns(0); GivenSeries(); } private void GivenSeries(params Series[] series) { Mocker.GetMock() .Setup(v => v.GetAllSeries()) .Returns(series.ToList()); } private void GivenExistingFolder(string folder) { Mocker.GetMock() .Setup(v => v.FolderExists(folder)) .Returns(true); } [Test] public void should_check_diskspace_for_series_folders() { GivenSeries(new Series { Path = _seriesFolder }); GivenExistingFolder(_seriesFolder); var freeSpace = Subject.GetFreeSpace(); freeSpace.Should().NotBeEmpty(); } [Test] public void should_check_diskspace_for_same_root_folder_only_once() { GivenSeries(new Series { Path = _seriesFolder }, new Series { Path = _seriesFolder2 }); GivenExistingFolder(_seriesFolder); GivenExistingFolder(_seriesFolder2); var freeSpace = Subject.GetFreeSpace(); freeSpace.Should().HaveCount(1); Mocker.GetMock() .Verify(v => v.GetAvailableSpace(It.IsAny()), Times.Once()); } [Test] public void should_not_check_diskspace_for_missing_series_folders() { GivenSeries(new Series { Path = _seriesFolder }); var freeSpace = Subject.GetFreeSpace(); freeSpace.Should().BeEmpty(); Mocker.GetMock() .Verify(v => v.GetAvailableSpace(It.IsAny()), Times.Never()); } [Test] public void should_check_diskspace_for_dronefactory_folder() { Mocker.GetMock() .SetupGet(v => v.DownloadedEpisodesFolder) .Returns(_droneFactoryFolder); GivenExistingFolder(_droneFactoryFolder); var freeSpace = Subject.GetFreeSpace(); freeSpace.Should().NotBeEmpty(); } [Test] public void should_not_check_diskspace_for_missing_dronefactory_folder() { Mocker.GetMock() .SetupGet(v => v.DownloadedEpisodesFolder) .Returns(_droneFactoryFolder); var freeSpace = Subject.GetFreeSpace(); freeSpace.Should().BeEmpty(); Mocker.GetMock() .Verify(v => v.GetAvailableSpace(It.IsAny()), Times.Never()); } [TestCase("/boot")] [TestCase("/var/lib/rancher")] [TestCase("/var/lib/rancher/volumes")] [TestCase("/var/lib/kubelet")] [TestCase("/var/lib/docker")] [TestCase("/some/place/docker/aufs")] public void should_not_check_diskspace_for_irrelevant_mounts(string path) { var mount = new Mock(); mount.SetupGet(v => v.RootDirectory).Returns(path); mount.SetupGet(v => v.DriveType).Returns(System.IO.DriveType.Fixed); Mocker.GetMock() .Setup(v => v.GetMounts()) .Returns(new List { mount.Object }); var freeSpace = Subject.GetFreeSpace(); freeSpace.Should().BeEmpty(); } } }