mirror of
https://github.com/truewhile/MeBox.git
synced 2026-10-06 21:36:37 +08:00
Improve large library storage backends and scans
This commit is contained in:
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user