/** * Prueft die Bewertung der Internet-Kette gegen konstruierte Faelle mit von * Hand ermitteltem Sollwert. * * Warum ueberhaupt: der Browser-Mock liefert fuer DNS und HTTPS immer den * guten Fall, dort ist die Kette also IMMER gruen. Genau die Faelle, wegen * derer das Werkzeug gebaut wurde (Gateway still, DNS tot, Anmeldeseite), * kommen im Mock nicht vor. * * Start: node tools/pruefe-kette.mjs * (laedt die TS-Datei direkt — Node 22.6+ entfernt die Typannotationen selbst; * deshalb darf kette-bewertung.ts keinen Laufzeit-Import enthalten) */ const { bewerteKette } = await import('../src/lib/tools/internet/kette-bewertung.ts'); const anschlussOk = { name: 'Anschluss', ok: true, detail: 'LAN (Kabel) eth0, IP 192.168.1.42/24' }; const gwOk = { name: 'Gateway', ok: true, detail: '192.168.1.1 antwortet in 2 ms', stillErlaubt: true }; const gwStill = { name: 'Gateway', ok: false, detail: 'antwortet auf keines von 4 Paketen', stillErlaubt: true }; const gwUnbekannt = { name: 'Gateway', ok: null, detail: 'kein Standard-Gateway gemeldet', stillErlaubt: true }; const dnsOk = { name: 'Namensauflösung', ok: true, detail: 'www.google.de → 142.250.185.67 (23 ms)' }; const dnsTot = { name: 'Namensauflösung', ok: false, detail: 'nicht auflösbar (UnknownHostException)' }; const httpsOk = { name: 'HTTPS-Abruf', ok: true, detail: 'HTTP 204 in 58 ms' }; const httpsTot = { name: 'HTTPS-Abruf', ok: false, detail: 'kein Verbindungsaufbau (timeout)' }; const faelle = [ { name: 'Alles in Ordnung', stufen: [anschlussOk, gwOk, dnsOk, httpsOk], portal: false, system: true, soll: { status: 0, glied: '' }, }, { name: 'Gateway antwortet nicht auf Ping, Internet geht -> GRUEN mit Hinweis', stufen: [anschlussOk, gwStill, dnsOk, httpsOk], portal: false, system: true, soll: { status: 0, glied: '', hinweisEnthaelt: 'Werkseinstellung' }, }, { name: 'Gateway tot UND alles danach tot -> Fehlerglied Gateway', stufen: [anschlussOk, gwStill, dnsTot, httpsTot], portal: false, system: false, soll: { status: 2, glied: 'Gateway' }, }, { name: 'Gateway ok, DNS tot -> Fehlerglied Namensaufloesung', stufen: [anschlussOk, gwOk, dnsTot, httpsTot], portal: false, system: false, soll: { status: 2, glied: 'Namensauflösung' }, }, { name: 'DNS ok, HTTPS tot -> Fehlerglied HTTPS-Abruf', stufen: [anschlussOk, gwOk, dnsOk, httpsTot], portal: false, system: false, soll: { status: 2, glied: 'HTTPS-Abruf' }, }, { name: 'Umleitung auf Anmeldeseite -> GELB "Anmeldeseite", NICHT rot "HTTPS tot"', stufen: [anschlussOk, gwOk, dnsOk, { name: 'HTTPS-Abruf', ok: false, detail: 'HTTP 302 → Portal' }], portal: true, system: false, soll: { status: 1, glied: 'Anmeldeseite', hinweisEnthaelt: 'Gäste-WLAN' }, }, { name: 'Portal nur ueber das Systemflag erkannt -> GELB Anmeldeseite', stufen: [anschlussOk, gwOk, dnsOk, httpsOk], portal: true, system: false, soll: { status: 1, glied: 'Anmeldeseite' }, }, { name: 'Alles ok, aber Android bestaetigt die Verbindung nicht -> GELB', stufen: [anschlussOk, gwOk, dnsOk, httpsOk], portal: false, system: false, soll: { status: 1, glied: '', hinweisEnthaelt: 'gefilterte' }, }, { name: 'Kein Anschluss (keine IP) -> NICHT MESSBAR, keine Aussage ueber das Kundennetz', stufen: [{ name: 'Anschluss', ok: null, detail: 'keine IP-Adresse' }], portal: false, system: undefined, soll: { status: 3, glied: 'Anschluss' }, }, { name: 'Kein Gateway gemeldet, Rest geht -> GRUEN mit Hinweis "nicht geprueft"', stufen: [anschlussOk, gwUnbekannt, dnsOk, httpsOk], portal: false, system: true, soll: { status: 0, glied: '', hinweisEnthaelt: 'nicht geprüft' }, }, { name: 'Systemurteil unbekannt (aeltere Android-Version) -> GRUEN, kein Gelb aus Unwissen', stufen: [anschlussOk, gwOk, dnsOk, httpsOk], portal: false, system: undefined, soll: { status: 0, glied: '' }, }, ]; let fehler = 0; for (const f of faelle) { const r = bewerteKette(f.stufen, f.portal, f.system); let ok = r.status === f.soll.status && r.fehlerglied === f.soll.glied; if (f.soll.hinweisEnthaelt && !(r.hinweis || '').includes(f.soll.hinweisEnthaelt)) ok = false; if (!ok) fehler++; console.log(`${ok ? 'OK ' : 'FEHL'} ${f.name}`); console.log(` status=${r.status} (soll ${f.soll.status}) glied="${r.fehlerglied}" (soll "${f.soll.glied}")`); console.log(` Label: ${r.label}`); if (r.hinweis) console.log(` Hinweis: ${r.hinweis.slice(0, 120)}`); console.log(); } console.log(fehler === 0 ? 'ALLE FAELLE KORREKT' : `${fehler} FEHLER`); process.exit(fehler === 0 ? 0 : 1);