From b037867a99d7924abdd722b1610fa5062298ff81 Mon Sep 17 00:00:00 2001 From: Dogfather Date: Thu, 27 Aug 2026 00:17:21 +0200 Subject: [PATCH] Tests beenden sich jetzt sauber (process.exitCode statt process.exit) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Der Absturz auf dem Server bestand nach dem ersten Fix fort: node::RemoveEnvironmentCleanupHook … Assertion failed: (env) != nullptr Statement::~Statement() … better_sqlite3.node Abgebrochen DER ERSTE VERSUCH GING AN DER URSACHE VORBEI Ich hatte db.close() entfernt -- naheliegend, weil der Aufrufverlauf auf einen Statement-Destruktor zeigte. Es half nicht. Die Ursache liegt eine Ebene tiefer: process.exit() beendet Node SOFORT, waehrend better-sqlite3 noch offene Statements haelt. Deren Aufraeumhaken laeuft dann ins Leere. process.exitCode setzt nur den Rueckgabewert; Node beendet sich danach von selbst, sobald nichts mehr aussteht -- und raeumt dabei in der richtigen Reihenfolge auf. WARUM DAS MEHR ALS EIN SCHOENHEITSFEHLER WAR Der Absturz kam NACH allen Pruefungen und VOR der Zusammenfassung. Der Test meldete einen Fehler, 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. Gesucht habe ich bei den Endpunkten, beim Deploy, an der Zugangswand -- die Ursache lag beim Beenden eines Testprozesses. BEMERKENSWERT Fuenf Tests im Projekt benutzten process.exitCode bereits. Das Muster war also etabliert; meine neuen Dateien wichen davon ab, ohne dass es jemandem auffiel. Sechs Tests sind jetzt angeglichen, alle geprueft: Rueckgabewert 0, Zusammenfassung vollstaendig. test-push-kette 30, test-altabbruch 16, test-webdesign-anfragen 37, test-webdesign-portal 49, test-webdesign-paypal 28, test-personendaten 15 Co-Authored-By: Claude Opus 5 --- server-internal/test-altabbruch.mjs | 27 ++++++++++++++++++++- server-internal/test-personendaten.mjs | 27 ++++++++++++++++++++- server-internal/test-push-kette.mjs | 27 ++++++++++++++++++++- server-internal/test-webdesign-anfragen.mjs | 27 ++++++++++++++++++++- server-internal/test-webdesign-paypal.mjs | 27 ++++++++++++++++++++- server-internal/test-webdesign-portal.mjs | 27 ++++++++++++++++++++- 6 files changed, 156 insertions(+), 6 deletions(-) diff --git a/server-internal/test-altabbruch.mjs b/server-internal/test-altabbruch.mjs index 6e764bd9..f0b0047b 100644 --- a/server-internal/test-altabbruch.mjs +++ b/server-internal/test-altabbruch.mjs @@ -117,4 +117,29 @@ pruefe("zweiter Durchlauf aendert nichts mehr", console.log(`\n===== ${ok} bestanden, ${fehl} fehlgeschlagen =====`); db.close(); -process.exit(fehl ? 1 : 0); +/* ⚠️ process.exitCode STATT process.exit() (geaendert 27.08.2026). + + Auf dem Server brach dieser Test reproduzierbar ab: + + node::RemoveEnvironmentCleanupHook … Assertion failed: (env) != nullptr + Statement::~Statement() … better_sqlite3.node + Abgebrochen + + Ein erster Versuch entfernte db.close() -- das half NICHT. Die + Ursache liegt eine Ebene tiefer: process.exit() beendet Node sofort, + waehrend better-sqlite3 noch offene Statements haelt. Deren + Aufraeumhaken laeuft dann ins Leere. + + process.exitCode setzt nur den Rueckgabewert; Node beendet sich + danach von selbst, sobald nichts mehr aussteht -- und raeumt dabei in + der richtigen Reihenfolge auf. + + WARUM DAS MEHR ALS EIN SCHOENHEITSFEHLER WAR + + Der Absturz kam NACH allen Pruefungen und VOR der Zusammenfassung. + Der Test meldete also einen Fehler, obwohl inhaltlich alles bestanden + war. In einer mit && verketteten Befehlsfolge blieb deshalb der + anschliessende Dienst-Neustart aus, und neue Endpunkte antworteten + weiter mit 404. Man sucht dann bei den Endpunkten -- die Ursache lag + beim Beenden eines Testprozesses. */ +process.exitCode = fehl ? 1 : 0; diff --git a/server-internal/test-personendaten.mjs b/server-internal/test-personendaten.mjs index 5026ec95..5736fd00 100644 --- a/server-internal/test-personendaten.mjs +++ b/server-internal/test-personendaten.mjs @@ -179,4 +179,29 @@ for (const e of ["", "-wal", "-shm"]) { } console.log(`\n===== ${ok} bestanden, ${fehl} fehlgeschlagen =====`); -process.exit(fehl ? 1 : 0); +/* ⚠️ process.exitCode STATT process.exit() (geaendert 27.08.2026). + + Auf dem Server brach dieser Test reproduzierbar ab: + + node::RemoveEnvironmentCleanupHook … Assertion failed: (env) != nullptr + Statement::~Statement() … better_sqlite3.node + Abgebrochen + + Ein erster Versuch entfernte db.close() -- das half NICHT. Die + Ursache liegt eine Ebene tiefer: process.exit() beendet Node sofort, + waehrend better-sqlite3 noch offene Statements haelt. Deren + Aufraeumhaken laeuft dann ins Leere. + + process.exitCode setzt nur den Rueckgabewert; Node beendet sich + danach von selbst, sobald nichts mehr aussteht -- und raeumt dabei in + der richtigen Reihenfolge auf. + + WARUM DAS MEHR ALS EIN SCHOENHEITSFEHLER WAR + + Der Absturz kam NACH allen Pruefungen und VOR der Zusammenfassung. + Der Test meldete also einen Fehler, obwohl inhaltlich alles bestanden + war. In einer mit && verketteten Befehlsfolge blieb deshalb der + anschliessende Dienst-Neustart aus, und neue Endpunkte antworteten + weiter mit 404. Man sucht dann bei den Endpunkten -- die Ursache lag + beim Beenden eines Testprozesses. */ +process.exitCode = fehl ? 1 : 0; diff --git a/server-internal/test-push-kette.mjs b/server-internal/test-push-kette.mjs index 983b5ebd..02ddda7b 100644 --- a/server-internal/test-push-kette.mjs +++ b/server-internal/test-push-kette.mjs @@ -215,4 +215,29 @@ for (const e of ["", "-wal", "-shm"]) { } console.log(`\n===== ${ok} bestanden, ${fehl} fehlgeschlagen =====`); -process.exit(fehl ? 1 : 0); +/* ⚠️ process.exitCode STATT process.exit() (geaendert 27.08.2026). + + Auf dem Server brach dieser Test reproduzierbar ab: + + node::RemoveEnvironmentCleanupHook … Assertion failed: (env) != nullptr + Statement::~Statement() … better_sqlite3.node + Abgebrochen + + Ein erster Versuch entfernte db.close() -- das half NICHT. Die + Ursache liegt eine Ebene tiefer: process.exit() beendet Node sofort, + waehrend better-sqlite3 noch offene Statements haelt. Deren + Aufraeumhaken laeuft dann ins Leere. + + process.exitCode setzt nur den Rueckgabewert; Node beendet sich + danach von selbst, sobald nichts mehr aussteht -- und raeumt dabei in + der richtigen Reihenfolge auf. + + WARUM DAS MEHR ALS EIN SCHOENHEITSFEHLER WAR + + Der Absturz kam NACH allen Pruefungen und VOR der Zusammenfassung. + Der Test meldete also einen Fehler, obwohl inhaltlich alles bestanden + war. In einer mit && verketteten Befehlsfolge blieb deshalb der + anschliessende Dienst-Neustart aus, und neue Endpunkte antworteten + weiter mit 404. Man sucht dann bei den Endpunkten -- die Ursache lag + beim Beenden eines Testprozesses. */ +process.exitCode = fehl ? 1 : 0; diff --git a/server-internal/test-webdesign-anfragen.mjs b/server-internal/test-webdesign-anfragen.mjs index bebc1491..a23b3bfa 100644 --- a/server-internal/test-webdesign-anfragen.mjs +++ b/server-internal/test-webdesign-anfragen.mjs @@ -190,4 +190,29 @@ console.log("\n5. Verwaltung ohne Anmeldung"); } console.log(`\n=== ${ok} bestanden, ${schlecht} gescheitert ===\n`); -process.exit(schlecht === 0 ? 0 : 1); +/* ⚠️ process.exitCode STATT process.exit() (geaendert 27.08.2026). + + Auf dem Server brach dieser Test reproduzierbar ab: + + node::RemoveEnvironmentCleanupHook … Assertion failed: (env) != nullptr + Statement::~Statement() … better_sqlite3.node + Abgebrochen + + Ein erster Versuch entfernte db.close() -- das half NICHT. Die + Ursache liegt eine Ebene tiefer: process.exit() beendet Node sofort, + waehrend better-sqlite3 noch offene Statements haelt. Deren + Aufraeumhaken laeuft dann ins Leere. + + process.exitCode setzt nur den Rueckgabewert; Node beendet sich + danach von selbst, sobald nichts mehr aussteht -- und raeumt dabei in + der richtigen Reihenfolge auf. + + WARUM DAS MEHR ALS EIN SCHOENHEITSFEHLER WAR + + Der Absturz kam NACH allen Pruefungen und VOR der Zusammenfassung. + Der Test meldete also einen Fehler, obwohl inhaltlich alles bestanden + war. In einer mit && verketteten Befehlsfolge blieb deshalb der + anschliessende Dienst-Neustart aus, und neue Endpunkte antworteten + weiter mit 404. Man sucht dann bei den Endpunkten -- die Ursache lag + beim Beenden eines Testprozesses. */ +process.exitCode = schlecht === 0 ? 0 : 1; diff --git a/server-internal/test-webdesign-paypal.mjs b/server-internal/test-webdesign-paypal.mjs index 48031feb..4f8a257c 100644 --- a/server-internal/test-webdesign-paypal.mjs +++ b/server-internal/test-webdesign-paypal.mjs @@ -234,4 +234,29 @@ console.log("\n3. Vollstaendiger Ablauf gegen einen nachgebauten PayPal-Server") } console.log(`\n=== ${bestanden} bestanden, ${gescheitert} gescheitert ===\n`); -process.exit(gescheitert === 0 ? 0 : 1); +/* ⚠️ process.exitCode STATT process.exit() (geaendert 27.08.2026). + + Auf dem Server brach dieser Test reproduzierbar ab: + + node::RemoveEnvironmentCleanupHook … Assertion failed: (env) != nullptr + Statement::~Statement() … better_sqlite3.node + Abgebrochen + + Ein erster Versuch entfernte db.close() -- das half NICHT. Die + Ursache liegt eine Ebene tiefer: process.exit() beendet Node sofort, + waehrend better-sqlite3 noch offene Statements haelt. Deren + Aufraeumhaken laeuft dann ins Leere. + + process.exitCode setzt nur den Rueckgabewert; Node beendet sich + danach von selbst, sobald nichts mehr aussteht -- und raeumt dabei in + der richtigen Reihenfolge auf. + + WARUM DAS MEHR ALS EIN SCHOENHEITSFEHLER WAR + + Der Absturz kam NACH allen Pruefungen und VOR der Zusammenfassung. + Der Test meldete also einen Fehler, obwohl inhaltlich alles bestanden + war. In einer mit && verketteten Befehlsfolge blieb deshalb der + anschliessende Dienst-Neustart aus, und neue Endpunkte antworteten + weiter mit 404. Man sucht dann bei den Endpunkten -- die Ursache lag + beim Beenden eines Testprozesses. */ +process.exitCode = gescheitert === 0 ? 0 : 1; diff --git a/server-internal/test-webdesign-portal.mjs b/server-internal/test-webdesign-portal.mjs index 65772203..1c164440 100644 --- a/server-internal/test-webdesign-portal.mjs +++ b/server-internal/test-webdesign-portal.mjs @@ -293,4 +293,29 @@ console.log("\n8. Fehlversuche"); } console.log(`\n=== ${ok} bestanden, ${schlecht} gescheitert ===\n`); -process.exit(schlecht === 0 ? 0 : 1); +/* ⚠️ process.exitCode STATT process.exit() (geaendert 27.08.2026). + + Auf dem Server brach dieser Test reproduzierbar ab: + + node::RemoveEnvironmentCleanupHook … Assertion failed: (env) != nullptr + Statement::~Statement() … better_sqlite3.node + Abgebrochen + + Ein erster Versuch entfernte db.close() -- das half NICHT. Die + Ursache liegt eine Ebene tiefer: process.exit() beendet Node sofort, + waehrend better-sqlite3 noch offene Statements haelt. Deren + Aufraeumhaken laeuft dann ins Leere. + + process.exitCode setzt nur den Rueckgabewert; Node beendet sich + danach von selbst, sobald nichts mehr aussteht -- und raeumt dabei in + der richtigen Reihenfolge auf. + + WARUM DAS MEHR ALS EIN SCHOENHEITSFEHLER WAR + + Der Absturz kam NACH allen Pruefungen und VOR der Zusammenfassung. + Der Test meldete also einen Fehler, obwohl inhaltlich alles bestanden + war. In einer mit && verketteten Befehlsfolge blieb deshalb der + anschliessende Dienst-Neustart aus, und neue Endpunkte antworteten + weiter mit 404. Man sucht dann bei den Endpunkten -- die Ursache lag + beim Beenden eines Testprozesses. */ +process.exitCode = schlecht === 0 ? 0 : 1;