diff --git a/server-internal/test-personendaten.mjs b/server-internal/test-personendaten.mjs index 84ff4295..5026ec95 100644 --- a/server-internal/test-personendaten.mjs +++ b/server-internal/test-personendaten.mjs @@ -142,8 +142,41 @@ for (const l of v.loeschbar) console.log(` ${l.anzahl}x ${l.was}`); console.log(" bleibt:"); for (const b of v.bleibt) console.log(` ${b.anzahl}x ${b.was} — ${b.grund}, frei ab ${b.freiAb}`); -db.close(); -for (const e of ["", "-wal", "-shm"]) fs.rmSync(TEST_DB + e, { force: true }); +/* ⚠️ KEIN db.close() vor process.exit() (geaendert 26.08.2026). + + Auf dem Server brach dieser Test genau hier ab: + + node::RemoveEnvironmentCleanupHook … Assertion failed: (env) != nullptr + Statement::~Statement() … better_sqlite3.node + Abgebrochen + + better-sqlite3 raeumt seine Statements ueber einen Aufraeumhaken ab. + Wird die Verbindung unmittelbar vor dem Prozessende geschlossen, + laeuft dieser Haken ins Leere -- Node bricht mit einer Assertion ab, + und zwar NACH allen Pruefungen, aber VOR der Zusammenfassung. + + Die Folge war schlimmer als der Absturz selbst: Der Test lieferte + einen Fehlercode, obwohl inhaltlich alles bestanden war. In einer + mit && verketteten Befehlsfolge blieb deshalb der anschliessende + Dienst-Neustart aus, und die neuen Endpunkte antworteten weiter mit + 404. Man sucht dann den Fehler bei den Endpunkten statt beim + Aufraeumen einer Testdatenbank. + + Node schliesst die Verbindung beim Beenden ohnehin. Die Testdateien + werden vorher entfernt; bleibt unter Windows eine gesperrte Datei + zurueck, faengt das rmSync mit force ab. */ +// (db.close() entfernt) +/* Aufraeumen darf nicht ueber den Testausgang entscheiden. + + Ohne db.close() (siehe oben) haelt der Prozess die Datei noch offen. + Unter Windows scheitert das Loeschen dann mit EBUSY -- und "force" + hilft dagegen nicht, es unterdrueckt nur "Datei nicht gefunden". + Ein Test, der an seinem eigenen Aufraeumen scheitert, meldet einen + Fehler, den es fachlich nicht gibt. Beim naechsten Start wird die + Datei ohnehin neu angelegt. */ +for (const e of ["", "-wal", "-shm"]) { + try { fs.rmSync(TEST_DB + e, { force: true }); } catch { /* beim naechsten Lauf */ } +} console.log(`\n===== ${ok} bestanden, ${fehl} fehlgeschlagen =====`); process.exit(fehl ? 1 : 0); diff --git a/server-internal/test-push-kette.mjs b/server-internal/test-push-kette.mjs index 6e9f0573..983b5ebd 100644 --- a/server-internal/test-push-kette.mjs +++ b/server-internal/test-push-kette.mjs @@ -178,10 +178,41 @@ P.geraetAbmelden(ENDPUNKT); pruefe("ohne Geraet wirkt keine Meldung mehr", P.stand().wirktMeldung === false); dienst.close(); -db.close(); -fs.rmSync(TEST_DB, { force: true }); -fs.rmSync(TEST_DB + "-wal", { force: true }); -fs.rmSync(TEST_DB + "-shm", { force: true }); +/* ⚠️ KEIN db.close() vor process.exit() (geaendert 26.08.2026). + + Auf dem Server brach dieser Test genau hier ab: + + node::RemoveEnvironmentCleanupHook … Assertion failed: (env) != nullptr + Statement::~Statement() … better_sqlite3.node + Abgebrochen + + better-sqlite3 raeumt seine Statements ueber einen Aufraeumhaken ab. + Wird die Verbindung unmittelbar vor dem Prozessende geschlossen, + laeuft dieser Haken ins Leere -- Node bricht mit einer Assertion ab, + und zwar NACH allen Pruefungen, aber VOR der Zusammenfassung. + + Die Folge war schlimmer als der Absturz selbst: Der Test lieferte + einen Fehlercode, obwohl inhaltlich alles bestanden war. In einer + mit && verketteten Befehlsfolge blieb deshalb der anschliessende + Dienst-Neustart aus, und die neuen Endpunkte antworteten weiter mit + 404. Man sucht dann den Fehler bei den Endpunkten statt beim + Aufraeumen einer Testdatenbank. + + Node schliesst die Verbindung beim Beenden ohnehin. Die Testdateien + werden vorher entfernt; bleibt unter Windows eine gesperrte Datei + zurueck, faengt das rmSync mit force ab. */ +// (db.close() entfernt) +/* Aufraeumen darf nicht ueber den Testausgang entscheiden. + + Ohne db.close() (siehe oben) haelt der Prozess die Datei noch offen. + Unter Windows scheitert das Loeschen dann mit EBUSY -- und "force" + hilft dagegen nicht, es unterdrueckt nur "Datei nicht gefunden". + Ein Test, der an seinem eigenen Aufraeumen scheitert, meldet einen + Fehler, den es fachlich nicht gibt. Beim naechsten Start wird die + Datei ohnehin neu angelegt. */ +for (const e of ["", "-wal", "-shm"]) { + try { fs.rmSync(TEST_DB + e, { force: true }); } catch { /* beim naechsten Lauf */ } +} console.log(`\n===== ${ok} bestanden, ${fehl} fehlgeschlagen =====`); process.exit(fehl ? 1 : 0);