Files
am-deduper/tests/test_exact.py
T

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