You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Lidarr/src/NzbDrone.Mono.Test/DiskProviderTests/SymlinkResolverFixture.cs

54 lines
1.7 KiB

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<SymbolicLinkResolver>
{
[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);
}
}
}