Добавил логи

This commit is contained in:
2026-06-14 19:37:09 +03:00
parent d4bf8a8cad
commit 81ed58ecff
28 changed files with 379 additions and 121 deletions
+59 -1
View File
@@ -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")