patx/relay-lang

// Self-contained local validation: an isolated MongoDB and only the chosen test command.
import { spawn } from "node:child_process";
import { mkdtemp, open } from "node:fs/promises";
import { createServer } from "node:net";
import { tmpdir } from "node:os";
import { join } from "node:path";
import { setTimeout as delay } from "node:timers/promises";
import assert from "node:assert/strict";

const mode = process.argv[2] || "integration";
assert(["integration", "soak", "mongo-tests"].includes(mode), "Expected integration, soak or mongo-tests");
const probe = createServer();
await new Promise(resolve => probe.listen(0, "127.0.0.1", resolve));
const port = probe.address().port;
await new Promise(resolve => probe.close(resolve));
const directory = await mkdtemp(join(tmpdir(), "relay-validation-"));
const log = await open(join(directory, "mongo.jsonl"), "w");
const mongo = spawn("mongod", ["--dbpath", directory, "--bind_ip", "127.0.0.1", "--port", String(port), "--nounixsocket", "--quiet"], { stdio: ["ignore", log.fd, log.fd] });
const stopped = new Promise(resolve => mongo.on("exit", resolve));
try {
  let connected = false;
  for (let i = 0; i < 100 && mongo.exitCode === null; i++) {
    const { connect } = await import("node:net");
    connected = await new Promise(resolve => {
      const socket = connect(port, "127.0.0.1");
      socket.once("connect", () => { socket.destroy(); resolve(true); });
      socket.once("error", () => resolve(false));
    });
    if (connected) break;
    await delay(100);
  }
  assert(connected, `MongoDB did not start; see ${directory}/mongo.jsonl`);
  const command = mode === "mongo-tests" ? "cargo" : process.execPath;
  const args = mode === "mongo-tests" ? ["test", "--locked", "mongodb_sessions_are_shared_versioned_and_expiring", "--", "--ignored", "--nocapture"]
    : mode === "soak" ? ["tools/soak.mjs", process.argv[3] || "3600"] : ["tools/integration.mjs"];
  const uri = `mongodb://127.0.0.1:${port}`;
  const child = spawn(command, args, { env: { ...process.env, RELAY_TEST_MONGO_URI: uri, RELAY_MONGO_URI: uri }, stdio: "inherit" });
  const code = await new Promise(resolve => child.on("exit", code => resolve(code)));
  process.exitCode = code ?? 1;
} finally {
  if (mongo.exitCode === null) mongo.kill("SIGTERM");
  await stopped;
  await log.close();
  console.log(`Isolated MongoDB stopped. Test data and logs: ${directory}`);
}