Добавил логи
This commit is contained in:
@@ -5,6 +5,7 @@ import (
|
||||
"errors"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"syscall"
|
||||
"testing"
|
||||
)
|
||||
|
||||
@@ -30,7 +31,7 @@ func newFixture(t *testing.T) fixture {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
l, err := New(Config{MoviesDir: movies, SeriesDir: series})
|
||||
l, err := New(Config{MoviesDir: movies, SeriesDir: series}, nil)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -251,6 +252,63 @@ func TestUndo_Idempotent(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestCopyFile_DuplicatesContentAndKeepsSource(t *testing.T) {
|
||||
dir := t.TempDir()
|
||||
src := filepath.Join(dir, "src.mkv")
|
||||
dst := filepath.Join(dir, "sub", "dst.mkv")
|
||||
if err := os.MkdirAll(filepath.Dir(dst), 0o755); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := os.WriteFile(src, []byte("payload"), 0o640); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if err := copyFile(src, dst); err != nil {
|
||||
t.Fatalf("copyFile: %v", err)
|
||||
}
|
||||
|
||||
got, err := os.ReadFile(dst)
|
||||
if err != nil || string(got) != "payload" {
|
||||
t.Fatalf("dst content = %q, err = %v", got, err)
|
||||
}
|
||||
// Источник цел и это отдельный inode (копия, не хардлинк).
|
||||
si, _ := os.Stat(src)
|
||||
di, _ := os.Stat(dst)
|
||||
if os.SameFile(si, di) {
|
||||
t.Error("dst must be a distinct copy, not a hardlink")
|
||||
}
|
||||
if di.Mode().Perm() != 0o640 {
|
||||
t.Errorf("dst mode = %v, want source mode 0640", di.Mode().Perm())
|
||||
}
|
||||
// Временные файлы копирования подчищены.
|
||||
entries, _ := os.ReadDir(filepath.Dir(dst))
|
||||
for _, e := range entries {
|
||||
if len(e.Name()) >= 14 && e.Name()[:14] == ".jellybit-copy" {
|
||||
t.Errorf("leftover temp file: %s", e.Name())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestHardlinkUnsupported(t *testing.T) {
|
||||
cases := []struct {
|
||||
err error
|
||||
want bool
|
||||
}{
|
||||
{syscall.EXDEV, true},
|
||||
{syscall.ENOTSUP, true},
|
||||
{syscall.EOPNOTSUPP, true},
|
||||
{syscall.EPERM, true},
|
||||
{syscall.ENOENT, false},
|
||||
{os.ErrExist, false},
|
||||
{errors.New("random"), false},
|
||||
}
|
||||
for _, tc := range cases {
|
||||
if got := hardlinkUnsupported(tc.err); got != tc.want {
|
||||
t.Errorf("hardlinkUnsupported(%v) = %v, want %v", tc.err, got, tc.want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestUndo_RefusesOutsideLibrary(t *testing.T) {
|
||||
f := newFixture(t)
|
||||
outside := filepath.Join(f.downloads, "victim.mkv")
|
||||
|
||||
Reference in New Issue
Block a user