using System.Collections.Generic; using System.IO; using System.Linq; using FluentAssertions; using Moq; using NUnit.Framework; using NzbDrone.Common.Disk; using NzbDrone.Core.DiskSpace; using NzbDrone.Core.Music; using NzbDrone.Core.RootFolders; using NzbDrone.Core.Test.Framework; using NzbDrone.Test.Common; namespace NzbDrone.Core.Test.DiskSpace { [TestFixture] public class DiskSpaceServiceFixture : CoreTest { private RootFolder _rootDir; private string _artistFolder1; private string _artistFolder2; [SetUp] public void SetUp() { _rootDir = new RootFolder { Path = @"G:\fasdlfsdf".AsOsAgnostic() }; _artistFolder1 = Path.Combine(_rootDir.Path, "artist1"); _artistFolder2 = Path.Combine(_rootDir.Path, "artist2"); Mocker.GetMock() .Setup(x => x.All()) .Returns(new List() { _rootDir }); Mocker.GetMock() .Setup(v => v.FolderExists(_rootDir.Path)) .Returns(true); 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); GivenArtist(); } private void GivenArtist(params Artist[] artist) { Mocker.GetMock() .Setup(v => v.GetAllArtists()) .Returns(artist.ToList()); } private void GivenExistingFolder(string folder) { Mocker.GetMock() .Setup(v => v.FolderExists(folder)) .Returns(true); } [Test] public void should_check_diskspace_for_artist_folders() { GivenArtist(new Artist { Path = _artistFolder1 }); GivenExistingFolder(_artistFolder1); var freeSpace = Subject.GetFreeSpace(); freeSpace.Should().NotBeEmpty(); } [Test] public void should_check_diskspace_for_same_root_folder_only_once() { GivenArtist(new Artist { Path = _artistFolder1 }, new Artist { Path = _artistFolder2 }); GivenExistingFolder(_artistFolder1); GivenExistingFolder(_artistFolder2); var freeSpace = Subject.GetFreeSpace(); freeSpace.Should().HaveCount(1); Mocker.GetMock() .Verify(v => v.GetAvailableSpace(It.IsAny()), Times.Once()); } [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 }); Mocker.GetMock() .Setup(x => x.All()) .Returns(new List()); var freeSpace = Subject.GetFreeSpace(); freeSpace.Should().BeEmpty(); } } }