Files
rippy/docker/worker/test_detection.py
T
Hitonabi 780d114fe4 Etappe 10: Worker rippt wirklich — MakeMKV 1.18.4 + ioctl-Disc-Erkennung
Vorher: Dockerfile unbaubar (makepkg ist ein Arch-Paket, existiert in Debian
nicht) und KEIN einziges Ripping-Tool im Image — jeder Rip endete sofort.
Disc-Erkennung via `file -L` konnte auf Block-Devices strukturell nie etwas
erkennen; ihr Test mockte sich die Ausgabe passend.

- makemkv-oss/bin 1.18.4 multi-stage (bookworm-gepinnt), EULA via
  tmp/eula_accepted, Beta-Key aus MAKEMKV_APP_KEY (entrypoint.sh)
- makemkvcon-Aufruf + PRGV-Parsing laut makemkv.com/developers/usage.txt
  (AGENTS Regel D), HandBrake raus aus dem Ripp-Pfad (KONZEPT: lossless=Muss)
- detection.py: CDROM_DISC_STATUS + BLKGETSIZE64 (cd/dvd/bluray), pure
  classify() mit ehrlichen Tests
- tasks.py: rip_disc als einziger Celery-Task, schreibt Status/Fortschritt
  nach Postgres (db.py), Ausgabe auf /app/media (Volume) statt totem /output

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 15:02:13 +02:00

40 lines
1.1 KiB
Python

"""Tests für detection.py — die pure Zuordnung classify().
Der Vorgänger (`file -L` auf ein Block-Device) konnte strukturell nie etwas
erkennen; sein Test mockte sich die file-Ausgabe passend zurecht. Hier wird
nur echte, deterministische Logik getestet — die ioctl-Aufrufe selbst sind
dünne Kernel-Durchreichen und werden im E2E-Test mit echter Disc bewiesen.
"""
from detection import (
BLURAY_MIN_BYTES,
CDS_AUDIO,
CDS_DATA_1,
CDS_MIXED,
classify,
)
def test_audio_cd():
assert classify(CDS_AUDIO, 700 * 1024**2) == "cd"
def test_mixed_mode_zaehlt_als_cd():
assert classify(CDS_MIXED, 700 * 1024**2) == "cd"
def test_dvd_unter_schwelle():
# DVD9 = ~8,5 GB — liegt unter der 10-GB-Blu-ray-Schwelle
assert classify(CDS_DATA_1, 8 * 1024**3) == "dvd"
def test_bluray_ab_schwelle():
# BD-SL = 25 GB
assert classify(CDS_DATA_1, 25 * 1024**3) == "bluray"
assert classify(CDS_DATA_1, BLURAY_MIN_BYTES) == "bluray"
def test_unbekannter_status():
assert classify(999, 5 * 1024**3) == "unknown"
assert classify(0, 0) == "unknown"