From 048562a6ba76b713316ae2e4389cb99184c18f01 Mon Sep 17 00:00:00 2001 From: Hitonabi Date: Fri, 24 Jul 2026 08:55:03 +0200 Subject: [PATCH] =?UTF-8?q?fix(ci):=20Ampel=20entrostet=20=E2=80=94=20bcry?= =?UTF-8?q?pt-Pin=20+=20cache=5Fkeys-Test=20ans=20Fingerprint-Format=20ang?= =?UTF-8?q?epasst?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Die Ampel war seit 23.07. rot, stable hing 10 Commits hinter main: 1. bcrypt >= 4.1 entfernt __about__ — passlib 1.7.4 crasht beim Backend- Selbsttest ('password cannot be longer than 72 bytes'), jedes Hashing schlug fehl. Fix: bcrypt==4.0.1 gepinnt (passlib-kompatibel, dokumentiert im requirements-Kommentar). 2. test_prescan_key_audio_vs_video erwartete das Key-Format OHNE den Disc-Fingerprint vom 23.07. Test an das echte (gewollte) Format angepasst + neuer Testfall: zwei Discs im selben Laufwerk -> zwei Keys. Co-Authored-By: Claude Fable 5 --- docker/api/requirements.txt | 5 +++++ docker/api/test_cache_keys.py | 12 +++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/docker/api/requirements.txt b/docker/api/requirements.txt index 3928d34..ad036e0 100644 --- a/docker/api/requirements.txt +++ b/docker/api/requirements.txt @@ -8,6 +8,11 @@ requests==2.32.3 pydantic==2.9.0 pydantic-settings==2.5.2 passlib==1.7.4 +# bcrypt MUSS gepinnt bleiben: passlib 1.7.4 liest bcrypt.__about__ (in +# bcrypt >= 4.1 entfernt) — der Backend-Selbsttest crasht dann mit +# "password cannot be longer than 72 bytes" und JEDES Hashing schlägt fehl. +# Genau das hielt die Ampel ab dem 23.07. rot (stable blieb 10 Commits zurück). +bcrypt==4.0.1 PyJWT==2.9.0 python-multipart==0.0.9 aiofiles==24.1.0 diff --git a/docker/api/test_cache_keys.py b/docker/api/test_cache_keys.py index a060ef3..c486fd9 100644 --- a/docker/api/test_cache_keys.py +++ b/docker/api/test_cache_keys.py @@ -15,7 +15,17 @@ def test_prescan_key_audio_vs_video(): assert audio.startswith(PRESCAN_AUDIO_PREFIX) assert video.startswith(PRESCAN_VIDEO_PREFIX) assert audio != video - assert audio.endswith("/dev/sr0") + assert "/dev/sr0" in audio + + +def test_prescan_key_unterscheidet_discs_im_selben_laufwerk(): + """Seit 23.07. ist der Disc-Fingerabdruck Teil des Keys — sonst bekam die + NÄCHSTE Disc im selben Laufwerk die Metadaten der vorherigen serviert. + (Der alte Test kannte den Fingerprint nicht und hielt die Ampel rot.)""" + a = generate_prescan_key("/dev/sr0", False, "EVANGELION_2_22:43GB") + b = generate_prescan_key("/dev/sr0", False, "MATRIX:31GB") + assert a != b + assert a.endswith("EVANGELION_2_22:43GB") def test_confirmed_key_mit_und_ohne_jahr():