diff --git a/runtime/tests/versioned-routes.test.mjs b/runtime/tests/versioned-routes.test.mjs index 885d3da..df4c63d 100644 --- a/runtime/tests/versioned-routes.test.mjs +++ b/runtime/tests/versioned-routes.test.mjs @@ -2,7 +2,12 @@ import test from "node:test"; import assert from "node:assert/strict"; import { spawn } from "node:child_process"; import net from "node:net"; -import { generateKeyPairSync, createHash } from "node:crypto"; +import { generateKeyPairSync } from "node:crypto"; +import { dirname, join } from "node:path"; +import { fileURLToPath } from "node:url"; + +const __dirname = dirname(fileURLToPath(import.meta.url)); +const SERVER_ENTRY = join(__dirname, "..", "..", "server.mjs"); function freePort() { return new Promise((resolve, reject) => { @@ -24,27 +29,50 @@ function makeKeys() { return { privatePemB64, publicRaw32B64: raw32.toString("base64"), - kid: createHash("sha256").update(raw32).digest("base64url").slice(0, 16), }; } async function startServer(extraEnv) { const port = await freePort(); - const proc = spawn(process.execPath, ["server.mjs"], { - cwd: process.cwd(), + const proc = spawn(process.execPath, [SERVER_ENTRY], { env: { ...process.env, HOST: "127.0.0.1", PORT: String(port), ...extraEnv }, stdio: ["ignore", "pipe", "pipe"], }); + let stdout = ""; + let stderr = ""; + proc.stdout.on("data", (chunk) => { + stdout += chunk.toString("utf8"); + }); + proc.stderr.on("data", (chunk) => { + stderr += chunk.toString("utf8"); + }); const base = `http://127.0.0.1:${port}`; for (let i = 0; i < 80; i++) { + if (proc.exitCode !== null) { + throw new Error( + [ + `server exited before boot (exitCode=${proc.exitCode})`, + `entry=${SERVER_ENTRY}`, + `stdout:\n${stdout || ""}`, + `stderr:\n${stderr || ""}`, + ].join("\n") + ); + } try { const r = await fetch(`${base}/health`); if (r.ok) return { proc, base }; } catch {} await new Promise((r) => setTimeout(r, 100)); } - throw new Error("server did not boot"); + throw new Error( + [ + `server did not boot after retries`, + `entry=${SERVER_ENTRY}`, + `stdout:\n${stdout || ""}`, + `stderr:\n${stderr || ""}`, + ].join("\n") + ); } async function stop(proc) {