This commit is contained in:
@@ -1,123 +0,0 @@
|
|||||||
"""Tests des Verwaltungsfensters — nur die Logik, nicht die Oberfläche.
|
|
||||||
|
|
||||||
Die Oberfläche selbst (tkinter) ist ausgenommen; geprüft wird, was das Fenster
|
|
||||||
ANZEIGT: Zustand des Workers, Aufgabentexte, Log-Ausschnitt.
|
|
||||||
"""
|
|
||||||
|
|
||||||
import verwaltung
|
|
||||||
|
|
||||||
|
|
||||||
# --- Was Rippy über diesen Worker weiß --------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
CAPS = {"workers": [
|
|
||||||
{"name": "rippy-hauptworker", "online": True, "encoders": ["cpu-x265"],
|
|
||||||
"info": {"cpu_kerne": "4"}},
|
|
||||||
{"name": "tobisnicerpc", "online": False, "encoders": ["cpu-x265", "vce"],
|
|
||||||
"info": {"cpu_modell": "AMD Ryzen 7 9700X", "cpu_kerne": "16",
|
|
||||||
"cpu_simd": "avx512f"}},
|
|
||||||
]}
|
|
||||||
|
|
||||||
|
|
||||||
def test_zustand_findet_den_eigenen_worker():
|
|
||||||
z = verwaltung.worker_zustand(CAPS, "tobisnicerpc")
|
|
||||||
assert z["bekannt"] is True
|
|
||||||
assert z["online"] is False
|
|
||||||
assert z["encoders"] == ["cpu-x265", "vce"]
|
|
||||||
assert z["info"]["cpu_simd"] == "avx512f"
|
|
||||||
|
|
||||||
|
|
||||||
def test_zustand_bei_unbekanntem_worker():
|
|
||||||
z = verwaltung.worker_zustand(CAPS, "gibt-es-nicht")
|
|
||||||
assert z == {"bekannt": False, "online": False, "encoders": [], "info": {}}
|
|
||||||
|
|
||||||
|
|
||||||
def test_zustand_ohne_antwort_von_rippy():
|
|
||||||
"""Rippy nicht erreichbar → das Fenster muss trotzdem etwas sagen können."""
|
|
||||||
assert verwaltung.worker_zustand(None, "x")["bekannt"] is False
|
|
||||||
assert verwaltung.worker_zustand({}, "x")["bekannt"] is False
|
|
||||||
|
|
||||||
|
|
||||||
# --- Die Statuszeile --------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
def test_status_nennt_das_wirkliche_problem():
|
|
||||||
"""Drei Lagen, drei klare Sätze — nicht ein „unbekannt" für alles."""
|
|
||||||
unbekannt = verwaltung.worker_zustand(CAPS, "gibt-es-nicht")
|
|
||||||
text, farbe = verwaltung.status_text(unbekannt, None)
|
|
||||||
assert "kennt diesen Worker nicht" in text
|
|
||||||
assert farbe == verwaltung.ROSE
|
|
||||||
|
|
||||||
offline = verwaltung.worker_zustand(CAPS, "tobisnicerpc")
|
|
||||||
text, farbe = verwaltung.status_text(offline, None)
|
|
||||||
assert "NICHT erreichbar" in text
|
|
||||||
assert farbe == verwaltung.ROSE
|
|
||||||
|
|
||||||
online = verwaltung.worker_zustand(CAPS, "rippy-hauptworker")
|
|
||||||
text, farbe = verwaltung.status_text(online, None)
|
|
||||||
assert "bereit" in text
|
|
||||||
assert farbe == verwaltung.EMERALD
|
|
||||||
|
|
||||||
|
|
||||||
def test_status_zeigt_den_laufenden_job():
|
|
||||||
online = verwaltung.worker_zustand(CAPS, "rippy-hauptworker")
|
|
||||||
job = {"title": "Akira", "status": "transcoding", "progress": 42,
|
|
||||||
"eta_text": "noch ca. 3 h 07 min"}
|
|
||||||
text, farbe = verwaltung.status_text(online, job)
|
|
||||||
assert "Akira" in text and "42 %" in text and "3 h 07 min" in text
|
|
||||||
assert farbe == verwaltung.AMBER
|
|
||||||
|
|
||||||
|
|
||||||
# --- Aufgabenliste ----------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
def test_job_text_uebersetzt_die_status_woerter():
|
|
||||||
"""„transcoding" sagt einem Nicht-Entwickler nichts."""
|
|
||||||
assert verwaltung.job_text(
|
|
||||||
{"title": "Akira", "status": "transcoding", "progress": 7}
|
|
||||||
) == "Akira — komprimiert, 7 %"
|
|
||||||
assert verwaltung.job_text(
|
|
||||||
{"title": "Alien", "status": "completed"}) == "Alien — fertig"
|
|
||||||
assert verwaltung.job_text(
|
|
||||||
{"title": "Alien", "status": "failed"}) == "Alien — Fehler"
|
|
||||||
assert verwaltung.job_text(
|
|
||||||
{"title": "Alien", "status": "pending"}) == "Alien — wartet"
|
|
||||||
|
|
||||||
|
|
||||||
def test_job_text_ohne_titel_nimmt_die_kurze_id():
|
|
||||||
text = verwaltung.job_text(
|
|
||||||
{"id": "95afdc89-2426-4d44", "status": "failed"})
|
|
||||||
assert text == "95afdc89 — Fehler"
|
|
||||||
|
|
||||||
|
|
||||||
def test_job_text_haengt_keine_restzeit_an_fertige_jobs():
|
|
||||||
text = verwaltung.job_text(
|
|
||||||
{"title": "X", "status": "completed", "progress": 100,
|
|
||||||
"eta_text": "noch ca. 5 min"})
|
|
||||||
assert "5 min" not in text
|
|
||||||
assert "%" not in text
|
|
||||||
|
|
||||||
|
|
||||||
# --- Log-Ausschnitt ---------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
def test_letzte_zeilen_schneidet_hinten_ab():
|
|
||||||
import io as _io
|
|
||||||
|
|
||||||
inhalt = "\n".join(f"Zeile {i}" for i in range(500))
|
|
||||||
zeilen = verwaltung.letzte_zeilen(
|
|
||||||
"egal", anzahl=5, oeffnen=lambda p: _io.StringIO(inhalt))
|
|
||||||
assert zeilen == ["Zeile 495", "Zeile 496", "Zeile 497", "Zeile 498", "Zeile 499"]
|
|
||||||
|
|
||||||
|
|
||||||
def test_letzte_zeilen_ohne_datei_ist_leer():
|
|
||||||
def kaputt(p):
|
|
||||||
raise OSError("keine Datei")
|
|
||||||
|
|
||||||
assert verwaltung.letzte_zeilen("gibts-nicht", oeffnen=kaputt) == []
|
|
||||||
|
|
||||||
|
|
||||||
def test_hole_ohne_adresse_fragt_nicht():
|
|
||||||
"""Ohne RIPPY_TRAY_HOST darf nichts versucht werden — sonst hängt das
|
|
||||||
Fenster beim Öffnen am Timeout."""
|
|
||||||
assert verwaltung.hole("/jobs", host="") is None
|
|
||||||
Reference in New Issue
Block a user