64 lines
2.3 KiB
C#
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);
|
|
}
|
|
}
|