Files
Halloween/tests/instructions.md
T
2026-10-16 01:38:10 +02:00

7.7 KiB

Modul tests/

Automatische Tests prüfen die aktuelle Software ohne Pi-Hardware.

  • test_controller.py prüft Zustandswechsel, Stopp, Neustartvoraussetzungen und gespeicherten Modus mit kontrollierter Uhr und temporären Daten.

  • test_web.py prüft Demo-Bild und Webendpunkte über einen ASGI-Client.

  • test_event_store.py prüft dauerhafte Ereignisse, Profilzuordnung, Profil-Löschen, 30-Tage-Ablauf und die Erweiterung einer älteren Ereignistabelle.

  • Lokal ausführen: python3 -m unittest discover -s tests -v; für Webtests wird zusätzlich requirements-dev.txt benötigt.

  • Hardwareverhalten, echte Pi-Kamera, WLAN, SSH-Tunnel und Außeneinsatz nicht aus einem grünen Host-Test ableiten; diese Prüfungen getrennt berichten.

  • Tests für neue Sicherheits- oder Zustandsregeln an beobachtbarem Verhalten ausrichten, nicht bloß interne Implementierung spiegeln.

  • test_detection.py prüft Linienrichtung, Bestätigung, Flattern, Segmentgrenzen, Gruppenfreigabe, Sperrzeit, Neustart/Änderungen, Fehler-Watchdog, synchrone Frames und Konfigurations-API mit kontrollierter Uhr ohne Modell/Pi.

  • Echte NanoDet-Inferenz zusätzlich mit ausdrücklich installiertem Modell prüfen; ein grüner Geometrietest bestätigt keine Erkennungsqualität.

  • test_detection_model.py prüft atomare/identische Installation und Ablehnung falscher Downloads ohne Netzwerk. Optional HALLOWEEN_TEST_MODEL auf eine geprüfte ONNX-Datei setzen: Dann wird die echte Inferenz auf leerem Bild geprüft.

  • test_pi_update.py prüft echte temporäre Versions-/Datenverzeichnisse mit simuliertem systemd, Python-Paketsetup und HTTP-Ergebnis. Erfolgreichen Wechsel, Start-/HTTP-/Abhängigkeitsfehler, Rückfall samt Daten, alte flache Installation, Erstinstallation und Ablehnung fremder Units/manueller Server prüfen. Kein SSH, kein echter Dienst, kein Netzwerk und keine Hardware in diesen Tests.

  • test_motion.py nutzt synthetische JPEGs und optional OpenCV für echten Optical Flow. Vorwärts/gegenläufig/parallel, Pfeilumkehr, gedrehte Geometrie, Bildruhe/Lichtwechsel, Bereichsgrenzen und Bildlücken prüfen. Diensttests prüfen Bestätigung, Sperrzeit, Stopp, Methodenmigration, Persistenz, verworfene alte Inferenzfehler und modellfreie Verarbeitung. Ohne OpenCV werden die Bildtests übersprungen; kein Ersatz für den Nahbereichstest am Pi.

  • Nahbereichregression: kleiner 60x60-Bildausschnitt im 640x480-Frame, 2 Pixel Bewegung pro Bild; automatischen Trigger ohne manuelles Bereich-frei und Ablehnung der Gegenrichtung prüfen.

  • node tests/test_ui_status.js prüft den echten JS-Statusrenderer isoliert ohne Browser/Netzwerk: automatische Freigabe vs. manuelle Bereich-frei-Flagge, Vorrang von Stopp/Sequenz/Sperrzeit und wirkungslose Betriebsmodi.

  • test_event_images.py prüft automatisch zugeordnete JPEGs mit synthetischem Motiv: beschnittener privater Bereich, Dateirechte, Neustart, Migration alter Ereignisse, DB-/Dateifehler, sichere ID-Abrufe, Header für Löschen und Erhalt von Ereignis/Profil. Motion-Test prüft die exakten JPEG-Bytes des Trigger-Frames.

  • node tests/test_event_images_ui.js prüft Vorschau/Ansehen und bestätigtes Bildlöschen am echten JS-Renderer mit erfundenen Daten, ohne Browser oder Netz. Abgebrochene Bestätigung löscht nichts; Ereignis bleibt nach Bildlöschung sichtbar.

  • Update-Tests verlegen den festen Unitpfad nur in temporären Skriptkopien und simulieren sudo/runuser. Zweiten sudo-Aufruf stets ablehnen, damit Erfolg und Rückfall unabhängig von Passwort-Tickets geprüft werden. Abgelehnte Anmeldung, unprivilegierten Aufruf des internen Rootteils und unveränderte Daten prüfen. Kein echter root-/PAM-/systemd- oder Pi-Nachweis aus diesen Tests.

  • UploadConnectionTest simuliert ssh/rsync und prüft genau einen Master, denselben privaten Socket für alle Schritte, BatchMode auf Slaves, TTY für sudo sowie Aufräumen bei Erfolg/Verbindungs-/Transfer-/Aktivierungsfehlern und pure Vorschau. Dies bestätigt keine reale SSH-/Passwortanmeldung am Pi.

  • test_follow.py prüft synthetische Farbpunkte (auch Rot um die HSV-Grenze), Mehrdeutigkeit, Bildauswahl, Persistenz ohne Fotos, Pulsgrenzen/Geschwindigkeit, Richtungswechsel, alte Resultate/Sitzungen, Fehler-/Abbruchpfade, API-Interlock und I²C-Protokoll mit künstlichem Bus. Kein echter Pi oder Servo wird angesteuert.

  • Follow-Einrichttests prüfen Hold/Release, ablaufende Bewegungslease, verspätete Tastenbefehle, falsche/alte Sitzung, Grenzen jenseits gespeicherter Followwerte, absolute Pulsgrenzen, Richtungsumkehr und persistente Grenze mit Innenabstand.

  • test_pages.py prüft getrennte Seiten/Poller und unabhängige Grab-/Kamera- Bedienung. Vorschau darf parallel zur Automatik laufen; echte Bewegung bleibt gesperrt. Globale Abschaltung muss weiterhin beide Bereiche stoppen.

  • node tests/test_endpoints_ui.js prüft gespeicherte Werte vs. Speicherkandidaten, Freigabe der richtigen Seite, Richtungsumkehr und Schutz vor ungefragtem Speichern beim Start beziehungsweise alten Min-/Max-Formularwerten.

  • Endpunkt-UI-Test zusätzlich: eigene numerische Grenzspeicherung, Erhalt der Farb-/Richtungsparameter, Ablehnung von Nachführgrenzen außerhalb des Einrichtbereichs und Startblockade bei offenem Eingabeentwurf. Erweiterung des Einrichtbereichs explizit speichern.

  • Followtest: alte Konfiguration migrieren ohne Erweiterung; Einrichtgrenzen dauerhaft speichern, Jog dort begrenzen, Endpunkt mit Innenabstand übernehmen und Nachführung auf gespeicherte Endpunkte begrenzen. Keine echte Hardware.

  • Reine Dokumentationspflege: lokale Links/Anker, konsistente Revisionsangaben und git diff --check prüfen. Frühere Testzahlen als damaligen Prüfstand kennzeichnen; daraus keinen neuen Testlauf oder Pi-Test ableiten.

  • Startmitten: asymmetrische persistierte Endpunkte, beide Achsen getrennt, halbe µs aufgerundet, Richtungsumkehr, Bereiche außerhalb 1500 und gesperrte Achse prüfen. Beide Startmodi nutzen dieselbe Berechnung; Dienstkonstruktion bewegt nichts. Endpunktspeichern nutzt festen Sitzungsbezug ohne Bewegung, erneuter Start berechnet neu. JS prüft dieselbe Speicherfreigabe.

  • Mittelstellungsbutton: gezielte Service-/API-/JS-Tests für langsame Bewegung beider Achsen zu den zuletzt gespeicherten Endpunkten, Ziel ohne Überschwingen, unveränderte Konfiguration, Sitzungs-/Modussperre, Stopp und alte Sequenzen, Richtungsübernahme und Watchdog-Abbruch. Echte Servos bleiben ungetestet.

  • Nachführtempo: Altdateien mit 80 µs/s ohne Endpunktänderung migrieren; 80/400/800 bei 15/20 Auswertungen pro Sekunde, begrenztes Nachholen bei Bildlücken und FPS-/Laufzeitanzeige mit künstlicher Uhr prüfen. JS prüft ungespeichertes Tempo beim Start und Erhalt beim Endpunktspeichern.

  • test_camera.py prüft gemessene Producer-FPS und veraltete Frames mit künstlicher Uhr. Kein Nachweis der Picamera2-Konfiguration oder Pi-Leistung.

  • Suchtests: Opt-in/Altdateimigration, kein Suchen vor Erstfund oder in Vorschau, Schwenks mit Achsumkehr innerhalb asymmetrischer Follow-Endpunkte, Tempo, gesperrte Achse, endlicher Durchlauf und 60-s-Limit. Zwei aufeinanderfolgende Funde, Zwischenverlust, erneute Suche, expliziter Stopp sowie alle Watchdogs mit künstlicher Uhr/Treiber prüfen. JS: Suchoption speichern/bei Grenzänderung erhalten, Start mit ungespeicherter Option ablehnen. Keine echte Suchfahrt.

  • Zielverlust-Wartezustand: drei Minuten ohne Punkt bei gesunder Sitzung ohne Bewegungsbefehle, Wiederaufnahme nach zwei Funden, nach Suchende kein weiterer Durchlauf bis erneutem Fund. Farbe bleibt nach Halt/Dienstneukonstruktion erhalten, neue Farbwahl ersetzt sie. Fehlende Bilder/Heartbeat/Auswertung beenden weiterhin Sitzung/PWM; reine Abwesenheit des Punkts nicht.