39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
from pathlib import Path
|
|
|
|
from am_deduper.db import connect
|
|
from am_deduper.exact import exact_dedupe
|
|
from am_deduper.scanner import scan
|
|
|
|
|
|
def test_exact_dedupe_creates_hardlink(tmp_path: Path):
|
|
root = tmp_path / "AllMusic"
|
|
(root / "admin").mkdir(parents=True)
|
|
(root / "alice").mkdir(parents=True)
|
|
a = root / "admin" / "song.flac"
|
|
b = root / "alice" / "song.flac"
|
|
data = b"fake flac content" * 10000
|
|
a.write_bytes(data)
|
|
b.write_bytes(data)
|
|
db = root / ".dedupe" / "dedupe.db"
|
|
assert scan(root, db) == 2
|
|
actions = exact_dedupe(db, root)
|
|
assert len(actions) == 1
|
|
assert a.stat().st_ino == b.stat().st_ino
|
|
|
|
|
|
def test_deleting_one_hardlink_keeps_data(tmp_path: Path):
|
|
root = tmp_path / "AllMusic"
|
|
(root / "admin").mkdir(parents=True)
|
|
(root / "alice").mkdir(parents=True)
|
|
a = root / "admin" / "song.flac"
|
|
b = root / "alice" / "song.flac"
|
|
a.write_bytes(b"same" * 1000)
|
|
b.write_bytes(a.read_bytes())
|
|
db = root / ".dedupe" / "dedupe.db"
|
|
scan(root, db)
|
|
exact_dedupe(db, root)
|
|
inode = a.stat().st_ino
|
|
b.unlink()
|
|
assert a.exists() and a.stat().st_ino == inode
|
|
assert a.read_bytes() == b"same" * 1000
|