From 84d8cb0826ef27973ba00c735237e4deda762e6c Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Mon, 20 Apr 2026 20:36:09 +0100 Subject: [PATCH] test: share browser security mock --- .../browser-security-runtime.test-helper.ts | 16 ++++++++++++++++ extensions/browser/src/browser/cdp.test.ts | 16 +--------------- .../browser/client-fetch.loopback-auth.test.ts | 16 +--------------- ...-session.create-page.navigation-guard.test.ts | 16 +--------------- ...pw-tools-core.snapshot.navigate-guard.test.ts | 16 +--------------- .../server-context.existing-session.test.ts | 16 +--------------- 6 files changed, 21 insertions(+), 75 deletions(-) create mode 100644 extensions/browser/src/browser/browser-security-runtime.test-helper.ts diff --git a/extensions/browser/src/browser/browser-security-runtime.test-helper.ts b/extensions/browser/src/browser/browser-security-runtime.test-helper.ts new file mode 100644 index 00000000000..e41785b3fca --- /dev/null +++ b/extensions/browser/src/browser/browser-security-runtime.test-helper.ts @@ -0,0 +1,16 @@ +import { vi } from "vitest"; + +vi.mock("openclaw/plugin-sdk/browser-security-runtime", async () => { + const actual = await vi.importActual< + typeof import("openclaw/plugin-sdk/browser-security-runtime") + >("openclaw/plugin-sdk/browser-security-runtime"); + const lookupFn = async (_hostname: string, options?: { all?: boolean }) => { + const result = { address: "93.184.216.34", family: 4 }; + return options?.all === true ? [result] : result; + }; + return { + ...actual, + resolvePinnedHostnameWithPolicy: (hostname: string, params: object = {}) => + actual.resolvePinnedHostnameWithPolicy(hostname, { ...params, lookupFn: lookupFn as never }), + }; +}); diff --git a/extensions/browser/src/browser/cdp.test.ts b/extensions/browser/src/browser/cdp.test.ts index d44d4bf075a..3832900dbce 100644 --- a/extensions/browser/src/browser/cdp.test.ts +++ b/extensions/browser/src/browser/cdp.test.ts @@ -3,27 +3,13 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import { type WebSocket, WebSocketServer } from "ws"; import { SsrFBlockedError } from "../infra/net/ssrf.js"; import { rawDataToString } from "../infra/ws.js"; +import "./browser-security-runtime.test-helper.js"; import { isDirectCdpWebSocketEndpoint, isWebSocketUrl } from "./cdp.helpers.js"; import { createTargetViaCdp, evaluateJavaScript, normalizeCdpWsUrl, snapshotAria } from "./cdp.js"; import { parseHttpUrl } from "./config.js"; import { BrowserCdpEndpointBlockedError } from "./errors.js"; import { InvalidBrowserNavigationUrlError } from "./navigation-guard.js"; -vi.mock("openclaw/plugin-sdk/browser-security-runtime", async () => { - const actual = await vi.importActual< - typeof import("openclaw/plugin-sdk/browser-security-runtime") - >("openclaw/plugin-sdk/browser-security-runtime"); - const lookupFn = async (_hostname: string, options?: { all?: boolean }) => { - const result = { address: "93.184.216.34", family: 4 }; - return options?.all === true ? [result] : result; - }; - return { - ...actual, - resolvePinnedHostnameWithPolicy: (hostname: string, params: object = {}) => - actual.resolvePinnedHostnameWithPolicy(hostname, { ...params, lookupFn: lookupFn as never }), - }; -}); - describe("cdp", () => { let httpServer: ReturnType | null = null; let wsServer: WebSocketServer | null = null; diff --git a/extensions/browser/src/browser/client-fetch.loopback-auth.test.ts b/extensions/browser/src/browser/client-fetch.loopback-auth.test.ts index c9dac3ddf65..fb7aa15ae14 100644 --- a/extensions/browser/src/browser/client-fetch.loopback-auth.test.ts +++ b/extensions/browser/src/browser/client-fetch.loopback-auth.test.ts @@ -1,21 +1,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import "./browser-security-runtime.test-helper.js"; import type { BrowserDispatchResponse } from "./routes/dispatcher.js"; -vi.mock("openclaw/plugin-sdk/browser-security-runtime", async () => { - const actual = await vi.importActual< - typeof import("openclaw/plugin-sdk/browser-security-runtime") - >("openclaw/plugin-sdk/browser-security-runtime"); - const lookupFn = async (_hostname: string, options?: { all?: boolean }) => { - const result = { address: "93.184.216.34", family: 4 }; - return options?.all === true ? [result] : result; - }; - return { - ...actual, - resolvePinnedHostnameWithPolicy: (hostname: string, params: object = {}) => - actual.resolvePinnedHostnameWithPolicy(hostname, { ...params, lookupFn: lookupFn as never }), - }; -}); - vi.mock("openclaw/plugin-sdk/ssrf-runtime", async () => { const actual = await vi.importActual( "openclaw/plugin-sdk/ssrf-runtime", diff --git a/extensions/browser/src/browser/pw-session.create-page.navigation-guard.test.ts b/extensions/browser/src/browser/pw-session.create-page.navigation-guard.test.ts index 947c02af9ed..fb4142daad1 100644 --- a/extensions/browser/src/browser/pw-session.create-page.navigation-guard.test.ts +++ b/extensions/browser/src/browser/pw-session.create-page.navigation-guard.test.ts @@ -1,6 +1,7 @@ import { chromium } from "playwright-core"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import { SsrFBlockedError } from "../infra/net/ssrf.js"; +import "./browser-security-runtime.test-helper.js"; import * as chromeModule from "./chrome.js"; import { BrowserTabNotFoundError } from "./errors.js"; import { InvalidBrowserNavigationUrlError } from "./navigation-guard.js"; @@ -15,21 +16,6 @@ import { listPagesViaPlaywright, } from "./pw-session.js"; -vi.mock("openclaw/plugin-sdk/browser-security-runtime", async () => { - const actual = await vi.importActual< - typeof import("openclaw/plugin-sdk/browser-security-runtime") - >("openclaw/plugin-sdk/browser-security-runtime"); - const lookupFn = async (_hostname: string, options?: { all?: boolean }) => { - const result = { address: "93.184.216.34", family: 4 }; - return options?.all === true ? [result] : result; - }; - return { - ...actual, - resolvePinnedHostnameWithPolicy: (hostname: string, params: object = {}) => - actual.resolvePinnedHostnameWithPolicy(hostname, { ...params, lookupFn: lookupFn as never }), - }; -}); - const connectOverCdpSpy = vi.spyOn(chromium, "connectOverCDP"); const getChromeWebSocketUrlSpy = vi.spyOn(chromeModule, "getChromeWebSocketUrl"); diff --git a/extensions/browser/src/browser/pw-tools-core.snapshot.navigate-guard.test.ts b/extensions/browser/src/browser/pw-tools-core.snapshot.navigate-guard.test.ts index 8fcc8542519..530097481da 100644 --- a/extensions/browser/src/browser/pw-tools-core.snapshot.navigate-guard.test.ts +++ b/extensions/browser/src/browser/pw-tools-core.snapshot.navigate-guard.test.ts @@ -1,5 +1,6 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import { SsrFBlockedError } from "../infra/net/ssrf.js"; +import "./browser-security-runtime.test-helper.js"; import { InvalidBrowserNavigationUrlError } from "./navigation-guard.js"; import { getPwToolsCoreSessionMocks, @@ -7,21 +8,6 @@ import { setPwToolsCoreCurrentPage, } from "./pw-tools-core.test-harness.js"; -vi.mock("openclaw/plugin-sdk/browser-security-runtime", async () => { - const actual = await vi.importActual< - typeof import("openclaw/plugin-sdk/browser-security-runtime") - >("openclaw/plugin-sdk/browser-security-runtime"); - const lookupFn = async (_hostname: string, options?: { all?: boolean }) => { - const result = { address: "93.184.216.34", family: 4 }; - return options?.all === true ? [result] : result; - }; - return { - ...actual, - resolvePinnedHostnameWithPolicy: (hostname: string, params: object = {}) => - actual.resolvePinnedHostnameWithPolicy(hostname, { ...params, lookupFn: lookupFn as never }), - }; -}); - installPwToolsCoreTestHooks(); const mod = await import("./pw-tools-core.snapshot.js"); diff --git a/extensions/browser/src/browser/server-context.existing-session.test.ts b/extensions/browser/src/browser/server-context.existing-session.test.ts index 2ebe0265b31..21cb01ce12b 100644 --- a/extensions/browser/src/browser/server-context.existing-session.test.ts +++ b/extensions/browser/src/browser/server-context.existing-session.test.ts @@ -1,22 +1,8 @@ import fs from "node:fs"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import "./browser-security-runtime.test-helper.js"; import type { BrowserServerState } from "./server-context.js"; -vi.mock("openclaw/plugin-sdk/browser-security-runtime", async () => { - const actual = await vi.importActual< - typeof import("openclaw/plugin-sdk/browser-security-runtime") - >("openclaw/plugin-sdk/browser-security-runtime"); - const lookupFn = async (_hostname: string, options?: { all?: boolean }) => { - const result = { address: "93.184.216.34", family: 4 }; - return options?.all === true ? [result] : result; - }; - return { - ...actual, - resolvePinnedHostnameWithPolicy: (hostname: string, params: object = {}) => - actual.resolvePinnedHostnameWithPolicy(hostname, { ...params, lookupFn: lookupFn as never }), - }; -}); - vi.mock("./chrome-mcp.js", () => ({ closeChromeMcpSession: vi.fn(async () => true), ensureChromeMcpAvailable: vi.fn(async () => {}),