From 4c8545ad530c55639b184ef42604c552eb2d4efd Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 23:02:42 +0000 Subject: [PATCH] test(browser): dedupe relay probe server scaffolding --- src/browser/extension-relay-auth.test.ts | 156 ++++++++++++----------- 1 file changed, 80 insertions(+), 76 deletions(-) diff --git a/src/browser/extension-relay-auth.test.ts b/src/browser/extension-relay-auth.test.ts index 55727d847..bf57226cb 100644 --- a/src/browser/extension-relay-auth.test.ts +++ b/src/browser/extension-relay-auth.test.ts @@ -1,4 +1,5 @@ import { createServer } from "node:http"; +import type { AddressInfo } from "node:net"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; import { probeAuthenticatedOpenClawRelay, @@ -6,6 +7,24 @@ import { } from "./extension-relay-auth.js"; import { getFreePort } from "./test-port.js"; +async function withRelayServer( + handler: Parameters[0], + run: (params: { port: number }) => Promise, +) { + const port = await getFreePort(); + const server = createServer(handler); + await new Promise((resolve, reject) => { + server.listen(port, "127.0.0.1", () => resolve()); + server.once("error", reject); + }); + try { + const actualPort = (server.address() as AddressInfo).port; + await run({ port: actualPort }); + } finally { + await new Promise((resolve) => server.close(() => resolve())); + } +} + describe("extension-relay-auth", () => { const TEST_GATEWAY_TOKEN = "test-gateway-token"; let prevGatewayToken: string | undefined; @@ -33,88 +52,73 @@ describe("extension-relay-auth", () => { }); it("accepts authenticated openclaw relay probe responses", async () => { - const port = await getFreePort(); - const token = resolveRelayAuthTokenForPort(port); let seenToken: string | undefined; - const server = createServer((req, res) => { - if (!req.url?.startsWith("/json/version")) { - res.writeHead(404); - res.end("not found"); - return; - } - const header = req.headers["x-openclaw-relay-token"]; - seenToken = Array.isArray(header) ? header[0] : header; - res.writeHead(200, { "Content-Type": "application/json" }); - res.end(JSON.stringify({ Browser: "OpenClaw/extension-relay" })); - }); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", () => resolve()); - server.once("error", reject); - }); - try { - const ok = await probeAuthenticatedOpenClawRelay({ - baseUrl: `http://127.0.0.1:${port}`, - relayAuthHeader: "x-openclaw-relay-token", - relayAuthToken: token, - }); - expect(ok).toBe(true); - expect(seenToken).toBe(token); - } finally { - await new Promise((resolve) => server.close(() => resolve())); - } + await withRelayServer( + (req, res) => { + if (!req.url?.startsWith("/json/version")) { + res.writeHead(404); + res.end("not found"); + return; + } + const header = req.headers["x-openclaw-relay-token"]; + seenToken = Array.isArray(header) ? header[0] : header; + res.writeHead(200, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ Browser: "OpenClaw/extension-relay" })); + }, + async ({ port }) => { + const token = resolveRelayAuthTokenForPort(port); + const ok = await probeAuthenticatedOpenClawRelay({ + baseUrl: `http://127.0.0.1:${port}`, + relayAuthHeader: "x-openclaw-relay-token", + relayAuthToken: token, + }); + expect(ok).toBe(true); + expect(seenToken).toBe(token); + }, + ); }); it("rejects unauthenticated probe responses", async () => { - const port = await getFreePort(); - const server = createServer((req, res) => { - if (!req.url?.startsWith("/json/version")) { - res.writeHead(404); - res.end("not found"); - return; - } - res.writeHead(401); - res.end("Unauthorized"); - }); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", () => resolve()); - server.once("error", reject); - }); - try { - const ok = await probeAuthenticatedOpenClawRelay({ - baseUrl: `http://127.0.0.1:${port}`, - relayAuthHeader: "x-openclaw-relay-token", - relayAuthToken: "irrelevant", - }); - expect(ok).toBe(false); - } finally { - await new Promise((resolve) => server.close(() => resolve())); - } + await withRelayServer( + (req, res) => { + if (!req.url?.startsWith("/json/version")) { + res.writeHead(404); + res.end("not found"); + return; + } + res.writeHead(401); + res.end("Unauthorized"); + }, + async ({ port }) => { + const ok = await probeAuthenticatedOpenClawRelay({ + baseUrl: `http://127.0.0.1:${port}`, + relayAuthHeader: "x-openclaw-relay-token", + relayAuthToken: "irrelevant", + }); + expect(ok).toBe(false); + }, + ); }); it("rejects probe responses with wrong browser identity", async () => { - const port = await getFreePort(); - const server = createServer((req, res) => { - if (!req.url?.startsWith("/json/version")) { - res.writeHead(404); - res.end("not found"); - return; - } - res.writeHead(200, { "Content-Type": "application/json" }); - res.end(JSON.stringify({ Browser: "FakeRelay" })); - }); - await new Promise((resolve, reject) => { - server.listen(port, "127.0.0.1", () => resolve()); - server.once("error", reject); - }); - try { - const ok = await probeAuthenticatedOpenClawRelay({ - baseUrl: `http://127.0.0.1:${port}`, - relayAuthHeader: "x-openclaw-relay-token", - relayAuthToken: "irrelevant", - }); - expect(ok).toBe(false); - } finally { - await new Promise((resolve) => server.close(() => resolve())); - } + await withRelayServer( + (req, res) => { + if (!req.url?.startsWith("/json/version")) { + res.writeHead(404); + res.end("not found"); + return; + } + res.writeHead(200, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ Browser: "FakeRelay" })); + }, + async ({ port }) => { + const ok = await probeAuthenticatedOpenClawRelay({ + baseUrl: `http://127.0.0.1:${port}`, + relayAuthHeader: "x-openclaw-relay-token", + relayAuthToken: "irrelevant", + }); + expect(ok).toBe(false); + }, + ); }); });