Files
douyin/tests/dy.net.Tests/SafeLocalMigrationFileTests.cs
T

64 lines
2.3 KiB
C#

using dy.net.storage;
using dy.net.Tests.TestInfrastructure;
namespace dy.net.Tests;
public class SafeLocalMigrationFileTests
{
[Fact]
public void TryResolve_AllowsRegularFileInsideConfiguredRoot()
{
using var temporary = new TemporaryDirectory();
var root = Path.Combine(temporary.Path, "media");
Directory.CreateDirectory(root);
var file = Path.Combine(root, "video.mp4");
File.WriteAllText(file, "media");
Assert.True(SafeLocalMigrationFile.TryResolve(file, new[] { root }, out var resolved, out var error), error);
Assert.Equal(Path.GetFullPath(file), resolved);
}
[Fact]
public void TryResolve_RejectsFileOutsideConfiguredRoot()
{
using var temporary = new TemporaryDirectory();
var root = Path.Combine(temporary.Path, "media");
Directory.CreateDirectory(root);
var outside = Path.Combine(temporary.Path, "outside.mp4");
File.WriteAllText(outside, "media");
Assert.False(SafeLocalMigrationFile.TryResolve(outside, new[] { root }, out _, out var error));
Assert.Contains("根目录", error);
}
[Fact]
public void TryResolve_RejectsSymbolicLink()
{
using var temporary = new TemporaryDirectory();
var root = Path.Combine(temporary.Path, "media");
Directory.CreateDirectory(root);
var target = Path.Combine(root, "target.mp4");
var link = Path.Combine(root, "link.mp4");
File.WriteAllText(target, "media");
File.CreateSymbolicLink(link, target);
Assert.False(SafeLocalMigrationFile.TryResolve(link, new[] { root }, out _, out var error));
Assert.Contains("符号链接", error);
}
[Fact]
public void TryResolve_RejectsConfiguredRootThatIsSymbolicLink()
{
using var temporary = new TemporaryDirectory();
var actualRoot = Path.Combine(temporary.Path, "actual-media");
var linkedRoot = Path.Combine(temporary.Path, "linked-media");
Directory.CreateDirectory(actualRoot);
Directory.CreateSymbolicLink(linkedRoot, actualRoot);
var file = Path.Combine(linkedRoot, "video.mp4");
File.WriteAllText(file, "media");
Assert.False(SafeLocalMigrationFile.TryResolve(file, new[] { linkedRoot }, out _, out var error));
Assert.Contains("符号链接", error);
}
}