mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-09 17:44:33 +00:00
test(browser): dedupe relay probe server scaffolding
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
import { createServer } from "node:http";
|
import { createServer } from "node:http";
|
||||||
|
import type { AddressInfo } from "node:net";
|
||||||
import { afterEach, beforeEach, describe, expect, it } from "vitest";
|
import { afterEach, beforeEach, describe, expect, it } from "vitest";
|
||||||
import {
|
import {
|
||||||
probeAuthenticatedOpenClawRelay,
|
probeAuthenticatedOpenClawRelay,
|
||||||
@@ -6,6 +7,24 @@ import {
|
|||||||
} from "./extension-relay-auth.js";
|
} from "./extension-relay-auth.js";
|
||||||
import { getFreePort } from "./test-port.js";
|
import { getFreePort } from "./test-port.js";
|
||||||
|
|
||||||
|
async function withRelayServer(
|
||||||
|
handler: Parameters<typeof createServer>[0],
|
||||||
|
run: (params: { port: number }) => Promise<void>,
|
||||||
|
) {
|
||||||
|
const port = await getFreePort();
|
||||||
|
const server = createServer(handler);
|
||||||
|
await new Promise<void>((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<void>((resolve) => server.close(() => resolve()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
describe("extension-relay-auth", () => {
|
describe("extension-relay-auth", () => {
|
||||||
const TEST_GATEWAY_TOKEN = "test-gateway-token";
|
const TEST_GATEWAY_TOKEN = "test-gateway-token";
|
||||||
let prevGatewayToken: string | undefined;
|
let prevGatewayToken: string | undefined;
|
||||||
@@ -33,10 +52,9 @@ describe("extension-relay-auth", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("accepts authenticated openclaw relay probe responses", async () => {
|
it("accepts authenticated openclaw relay probe responses", async () => {
|
||||||
const port = await getFreePort();
|
|
||||||
const token = resolveRelayAuthTokenForPort(port);
|
|
||||||
let seenToken: string | undefined;
|
let seenToken: string | undefined;
|
||||||
const server = createServer((req, res) => {
|
await withRelayServer(
|
||||||
|
(req, res) => {
|
||||||
if (!req.url?.startsWith("/json/version")) {
|
if (!req.url?.startsWith("/json/version")) {
|
||||||
res.writeHead(404);
|
res.writeHead(404);
|
||||||
res.end("not found");
|
res.end("not found");
|
||||||
@@ -46,12 +64,9 @@ describe("extension-relay-auth", () => {
|
|||||||
seenToken = Array.isArray(header) ? header[0] : header;
|
seenToken = Array.isArray(header) ? header[0] : header;
|
||||||
res.writeHead(200, { "Content-Type": "application/json" });
|
res.writeHead(200, { "Content-Type": "application/json" });
|
||||||
res.end(JSON.stringify({ Browser: "OpenClaw/extension-relay" }));
|
res.end(JSON.stringify({ Browser: "OpenClaw/extension-relay" }));
|
||||||
});
|
},
|
||||||
await new Promise<void>((resolve, reject) => {
|
async ({ port }) => {
|
||||||
server.listen(port, "127.0.0.1", () => resolve());
|
const token = resolveRelayAuthTokenForPort(port);
|
||||||
server.once("error", reject);
|
|
||||||
});
|
|
||||||
try {
|
|
||||||
const ok = await probeAuthenticatedOpenClawRelay({
|
const ok = await probeAuthenticatedOpenClawRelay({
|
||||||
baseUrl: `http://127.0.0.1:${port}`,
|
baseUrl: `http://127.0.0.1:${port}`,
|
||||||
relayAuthHeader: "x-openclaw-relay-token",
|
relayAuthHeader: "x-openclaw-relay-token",
|
||||||
@@ -59,14 +74,13 @@ describe("extension-relay-auth", () => {
|
|||||||
});
|
});
|
||||||
expect(ok).toBe(true);
|
expect(ok).toBe(true);
|
||||||
expect(seenToken).toBe(token);
|
expect(seenToken).toBe(token);
|
||||||
} finally {
|
},
|
||||||
await new Promise<void>((resolve) => server.close(() => resolve()));
|
);
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it("rejects unauthenticated probe responses", async () => {
|
it("rejects unauthenticated probe responses", async () => {
|
||||||
const port = await getFreePort();
|
await withRelayServer(
|
||||||
const server = createServer((req, res) => {
|
(req, res) => {
|
||||||
if (!req.url?.startsWith("/json/version")) {
|
if (!req.url?.startsWith("/json/version")) {
|
||||||
res.writeHead(404);
|
res.writeHead(404);
|
||||||
res.end("not found");
|
res.end("not found");
|
||||||
@@ -74,26 +88,21 @@ describe("extension-relay-auth", () => {
|
|||||||
}
|
}
|
||||||
res.writeHead(401);
|
res.writeHead(401);
|
||||||
res.end("Unauthorized");
|
res.end("Unauthorized");
|
||||||
});
|
},
|
||||||
await new Promise<void>((resolve, reject) => {
|
async ({ port }) => {
|
||||||
server.listen(port, "127.0.0.1", () => resolve());
|
|
||||||
server.once("error", reject);
|
|
||||||
});
|
|
||||||
try {
|
|
||||||
const ok = await probeAuthenticatedOpenClawRelay({
|
const ok = await probeAuthenticatedOpenClawRelay({
|
||||||
baseUrl: `http://127.0.0.1:${port}`,
|
baseUrl: `http://127.0.0.1:${port}`,
|
||||||
relayAuthHeader: "x-openclaw-relay-token",
|
relayAuthHeader: "x-openclaw-relay-token",
|
||||||
relayAuthToken: "irrelevant",
|
relayAuthToken: "irrelevant",
|
||||||
});
|
});
|
||||||
expect(ok).toBe(false);
|
expect(ok).toBe(false);
|
||||||
} finally {
|
},
|
||||||
await new Promise<void>((resolve) => server.close(() => resolve()));
|
);
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it("rejects probe responses with wrong browser identity", async () => {
|
it("rejects probe responses with wrong browser identity", async () => {
|
||||||
const port = await getFreePort();
|
await withRelayServer(
|
||||||
const server = createServer((req, res) => {
|
(req, res) => {
|
||||||
if (!req.url?.startsWith("/json/version")) {
|
if (!req.url?.startsWith("/json/version")) {
|
||||||
res.writeHead(404);
|
res.writeHead(404);
|
||||||
res.end("not found");
|
res.end("not found");
|
||||||
@@ -101,20 +110,15 @@ describe("extension-relay-auth", () => {
|
|||||||
}
|
}
|
||||||
res.writeHead(200, { "Content-Type": "application/json" });
|
res.writeHead(200, { "Content-Type": "application/json" });
|
||||||
res.end(JSON.stringify({ Browser: "FakeRelay" }));
|
res.end(JSON.stringify({ Browser: "FakeRelay" }));
|
||||||
});
|
},
|
||||||
await new Promise<void>((resolve, reject) => {
|
async ({ port }) => {
|
||||||
server.listen(port, "127.0.0.1", () => resolve());
|
|
||||||
server.once("error", reject);
|
|
||||||
});
|
|
||||||
try {
|
|
||||||
const ok = await probeAuthenticatedOpenClawRelay({
|
const ok = await probeAuthenticatedOpenClawRelay({
|
||||||
baseUrl: `http://127.0.0.1:${port}`,
|
baseUrl: `http://127.0.0.1:${port}`,
|
||||||
relayAuthHeader: "x-openclaw-relay-token",
|
relayAuthHeader: "x-openclaw-relay-token",
|
||||||
relayAuthToken: "irrelevant",
|
relayAuthToken: "irrelevant",
|
||||||
});
|
});
|
||||||
expect(ok).toBe(false);
|
expect(ok).toBe(false);
|
||||||
} finally {
|
},
|
||||||
await new Promise<void>((resolve) => server.close(() => resolve()));
|
);
|
||||||
}
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user