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 string[] seriesPaths) { Mocker.GetMock() .Setup(v => v.GetAllSeriesPaths()) .Returns(new Dictionary(seriesPaths.Select((value, i) => new KeyValuePair(i, value)))); } private void GivenExistingFolder(string folder) { Mocker.GetMock() .Setup(v => v.FolderExists(folder)) .Returns(true); } [Test] public void should_check_diskspace_for_series_folders() { GivenSeries(_seriesFolder); GivenExistingFolder(_seriesFolder); var freeSpace = Subject.GetFreeSpace(); freeSpace.Should().NotBeEmpty(); } [Test] public void should_check_diskspace_for_same_root_folder_only_once() { GivenSeries(_seriesFolder, _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(_seriesFolder); 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")] [TestCase("/etc/network")] 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(); } } }