AtlatestRepositorysigil-websocket
sigil-websocket / tree / test / integrationtest-native-websocket-upgrade-timeout.mjs
1
import net from "node:net";2
import path from "node:path";3
import { fileURLToPath } from "node:url";4
import { spawn } from "node:child_process";6
const here = path.dirname(fileURLToPath(import.meta.url));7
const repo = path.resolve(here, "../..");8
const server = net.createServer((socket) => {9
// Consume the request but deliberately never send the HTTP 101 response.10
socket.on("data", () => {});11
});12
await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve));13
const port = server.address().port;15
const dependencyRoots = [16
"sigil-stdlib", "sigil-socket", "sigil-tls", "sigil-crypto",17
].map((name) => path.join(repo, ".sigil", "deps", name, "src"));18
const args = [19
"-L", path.join(repo, "build/dev/lib"),20
...dependencyRoots.flatMap((root) => ["-L", root]),21
path.join(here, "native-upgrade-timeout-client.sgl"),22
];23
const child = spawn("sigil", args, {24
cwd: repo,25
env: { ...process.env, SIGIL_WS_TEST_PORT: String(port) },26
stdio: ["ignore", "pipe", "pipe"],27
});28
let stdout = "";29
let stderr = "";30
child.stdout.on("data", (chunk) => { stdout += chunk; });31
child.stderr.on("data", (chunk) => { stderr += chunk; });32
const watchdog = setTimeout(() => child.kill("SIGKILL"), 3000);33
const status = await new Promise((resolve) => child.on("close", resolve));34
clearTimeout(watchdog);35
server.close();37
if (status !== 0 || !stdout.includes("native-websocket-upgrade-timeout-ok")) {38
throw new Error(`native timeout client failed (${status})\nstdout:\n${stdout}\nstderr:\n${stderr}`);39
}40
console.log("native-websocket-upgrade-timeout-integration-ok");