using System.IO; using FluentAssertions; using Mono.Unix; using NUnit.Framework; using NzbDrone.Mono.Disk; using NzbDrone.Test.Common; namespace NzbDrone.Mono.Test.DiskProviderTests { [TestFixture] [Platform(Exclude = "Win")] public class SymbolicLinkResolverFixture : TestBase { [Test] public void should_follow_nested_symlinks() { var rootDir = GetTempFilePath(); var tempDir1 = Path.Combine(rootDir, "dir1"); var tempDir2 = Path.Combine(rootDir, "dir2"); var subDir1 = Path.Combine(tempDir1, "subdir1"); var file1 = Path.Combine(tempDir2, "file1"); var file2 = Path.Combine(tempDir2, "file2"); Directory.CreateDirectory(tempDir1); Directory.CreateDirectory(tempDir2); File.WriteAllText(file2, "test"); new UnixSymbolicLinkInfo(subDir1).CreateSymbolicLinkTo("../dir2"); new UnixSymbolicLinkInfo(file1).CreateSymbolicLinkTo("file2"); var realPath = Subject.GetCompleteRealPath(Path.Combine(subDir1, "file1")); realPath.Should().Be(file2); } [Test] public void should_throw_on_infinite_loop() { var rootDir = GetTempFilePath(); var tempDir1 = Path.Combine(rootDir, "dir1"); var subDir1 = Path.Combine(tempDir1, "subdir1"); var file1 = Path.Combine(tempDir1, "file1"); Directory.CreateDirectory(tempDir1); new UnixSymbolicLinkInfo(subDir1).CreateSymbolicLinkTo("../../dir1/subdir1/baddir"); var realPath = Subject.GetCompleteRealPath(file1); realPath.Should().Be(file1); } } }