50 lines
1.5 KiB
TypeScript
50 lines
1.5 KiB
TypeScript
import { afterEach, beforeEach, describe, expect, it } from "vitest";
|
|
import { captureEnv } from "../test-utils/env.js";
|
|
import {
|
|
ensureChromeExtensionRelayServer,
|
|
stopChromeExtensionRelayServer,
|
|
} from "./extension-relay.js";
|
|
import { getFreePort } from "./test-port.js";
|
|
|
|
describe("chrome extension relay bindHost coordination", () => {
|
|
let cdpUrl = "";
|
|
let envSnapshot: ReturnType<typeof captureEnv>;
|
|
|
|
beforeEach(() => {
|
|
envSnapshot = captureEnv(["OPENCLAW_GATEWAY_TOKEN"]);
|
|
process.env.OPENCLAW_GATEWAY_TOKEN = "test-gateway-token";
|
|
});
|
|
|
|
afterEach(async () => {
|
|
if (cdpUrl) {
|
|
await stopChromeExtensionRelayServer({ cdpUrl }).catch(() => {});
|
|
cdpUrl = "";
|
|
}
|
|
envSnapshot.restore();
|
|
});
|
|
|
|
it("rebinds the relay when concurrent callers request different bind hosts", async () => {
|
|
const port = await getFreePort();
|
|
cdpUrl = `http://127.0.0.1:${port}`;
|
|
|
|
const [first, second] = await Promise.all([
|
|
ensureChromeExtensionRelayServer({ cdpUrl }),
|
|
ensureChromeExtensionRelayServer({ cdpUrl, bindHost: "0.0.0.0" }),
|
|
]);
|
|
|
|
const settled = await ensureChromeExtensionRelayServer({
|
|
cdpUrl,
|
|
bindHost: "0.0.0.0",
|
|
});
|
|
|
|
expect(first.port).toBe(port);
|
|
expect(second.port).toBe(port);
|
|
expect(second).not.toBe(first);
|
|
expect(second.bindHost).toBe("0.0.0.0");
|
|
expect(settled).toBe(second);
|
|
|
|
const res = await fetch(`http://127.0.0.1:${port}/`);
|
|
expect(res.status).toBe(200);
|
|
});
|
|
});
|