Improve large library storage backends and scans

This commit is contained in:
ShukeBta
2026-06-15 18:16:34 +08:00
parent c9e6adf041
commit a5bf4bfdd4
36 changed files with 2340 additions and 93 deletions
+30
View File
@@ -1,8 +1,10 @@
package service
import (
"errors"
"os"
"path/filepath"
"strings"
"testing"
)
@@ -74,6 +76,34 @@ func TestTransferFileHardlinkSharesInodeAndKeepsSource(t *testing.T) {
}
}
func TestTransferFileHardlinkDoesNotFallBackToCopy(t *testing.T) {
dir := t.TempDir()
src := writeTemp(t, dir, "src.mkv", "payload")
dst := filepath.Join(dir, "dst.mkv")
origLinkFile := linkFile
linkFile = func(_, _ string) error {
return errors.New("simulated cross-device link")
}
t.Cleanup(func() {
linkFile = origLinkFile
})
err := transferFile(src, dst, TransferHardlink)
if err == nil {
t.Fatal("hardlink failure should be reported instead of falling back to copy")
}
if !strings.Contains(err.Error(), "hardlink failed") {
t.Fatalf("hardlink error = %q, want hardlink failure context", err.Error())
}
if _, statErr := os.Stat(dst); !os.IsNotExist(statErr) {
t.Fatalf("hardlink failure should not create copied dst, stat err = %v", statErr)
}
if b, readErr := os.ReadFile(src); readErr != nil || string(b) != "payload" {
t.Fatalf("hardlink failure should keep source unchanged, content=%q err=%v", b, readErr)
}
}
func TestTransferFileSymlinkKeepsSource(t *testing.T) {
dir := t.TempDir()
src := writeTemp(t, dir, "src.mkv", "payload")