From 2de988ae4b7d3d8fe512a0170a77f63fa8968157 Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Sun, 12 Apr 2026 16:55:44 +0100 Subject: [PATCH] test(gateway): share temp home env setup --- src/gateway/gateway.test.ts | 107 ++++++++++++++++-------------------- 1 file changed, 48 insertions(+), 59 deletions(-) diff --git a/src/gateway/gateway.test.ts b/src/gateway/gateway.test.ts index 09b6e85c445..ffb0cfc2348 100644 --- a/src/gateway/gateway.test.ts +++ b/src/gateway/gateway.test.ts @@ -23,6 +23,19 @@ let writeConfigFile: typeof import("../config/config.js").writeConfigFile; let resolveConfigPath: typeof import("../config/config.js").resolveConfigPath; const GATEWAY_E2E_TIMEOUT_MS = 90_000; let gatewayTestSeq = 0; +const GATEWAY_TEST_ENV_KEYS = [ + "HOME", + "OPENCLAW_STATE_DIR", + "OPENCLAW_CONFIG_PATH", + "OPENCLAW_GATEWAY_TOKEN", + "OPENCLAW_SKIP_CHANNELS", + "OPENCLAW_SKIP_GMAIL_WATCHER", + "OPENCLAW_SKIP_CRON", + "OPENCLAW_SKIP_CANVAS_HOST", + "OPENCLAW_SKIP_BROWSER_CONTROL_SERVER", + "OPENCLAW_SKIP_PROVIDERS", + "OPENCLAW_BUNDLED_PLUGINS_DIR", +] as const; function nextGatewayId(prefix: string): string { return `${prefix}-${process.pid}-${process.env.VITEST_POOL_ID ?? "0"}-${gatewayTestSeq++}`; @@ -72,6 +85,34 @@ async function readCounterWithRetry(filePath: string): Promise { throw new Error(`timed out waiting for counter file: ${filePath}`); } +async function setupGatewayTempHome(params: { prefix: string; minimalGateway?: boolean }) { + const envSnapshot = captureEnv([ + ...GATEWAY_TEST_ENV_KEYS, + ...(params.minimalGateway ? (["OPENCLAW_TEST_MINIMAL_GATEWAY"] as const) : []), + ]); + + const tempHome = await fs.mkdtemp(path.join(os.tmpdir(), params.prefix)); + process.env.HOME = tempHome; + process.env.OPENCLAW_STATE_DIR = path.join(tempHome, ".openclaw"); + delete process.env.OPENCLAW_CONFIG_PATH; + process.env.OPENCLAW_SKIP_CHANNELS = "1"; + process.env.OPENCLAW_SKIP_GMAIL_WATCHER = "1"; + process.env.OPENCLAW_SKIP_CRON = "1"; + process.env.OPENCLAW_SKIP_CANVAS_HOST = "1"; + process.env.OPENCLAW_SKIP_BROWSER_CONTROL_SERVER = "1"; + process.env.OPENCLAW_SKIP_PROVIDERS = "1"; + if (params.minimalGateway) { + process.env.OPENCLAW_TEST_MINIMAL_GATEWAY = "1"; + } else { + delete process.env.OPENCLAW_TEST_MINIMAL_GATEWAY; + } + + const workspaceDir = path.join(tempHome, "openclaw"); + await fs.mkdir(workspaceDir, { recursive: true }); + process.env.OPENCLAW_BUNDLED_PLUGINS_DIR = await createEmptyBundledPluginsDir(tempHome); + return { envSnapshot, tempHome, workspaceDir }; +} + describe("gateway e2e", () => { beforeEach(() => { clearRuntimeConfigSnapshot(); @@ -99,42 +140,15 @@ describe("gateway e2e", () => { "accepts a gateway agent request over ws and returns a run id", { timeout: GATEWAY_E2E_TIMEOUT_MS }, async () => { - const envSnapshot = captureEnv([ - "HOME", - "OPENCLAW_STATE_DIR", - "OPENCLAW_CONFIG_PATH", - "OPENCLAW_GATEWAY_TOKEN", - "OPENCLAW_SKIP_CHANNELS", - "OPENCLAW_SKIP_GMAIL_WATCHER", - "OPENCLAW_SKIP_CRON", - "OPENCLAW_SKIP_CANVAS_HOST", - "OPENCLAW_SKIP_BROWSER_CONTROL_SERVER", - "OPENCLAW_SKIP_PROVIDERS", - "OPENCLAW_BUNDLED_PLUGINS_DIR", - "OPENCLAW_TEST_MINIMAL_GATEWAY", - ]); - const { baseUrl: openaiBaseUrl, restore } = installOpenAiResponsesMock(); - - const tempHome = await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-gw-mock-home-")); - process.env.HOME = tempHome; - process.env.OPENCLAW_STATE_DIR = path.join(tempHome, ".openclaw"); - delete process.env.OPENCLAW_CONFIG_PATH; - process.env.OPENCLAW_SKIP_CHANNELS = "1"; - process.env.OPENCLAW_SKIP_GMAIL_WATCHER = "1"; - process.env.OPENCLAW_SKIP_CRON = "1"; - process.env.OPENCLAW_SKIP_CANVAS_HOST = "1"; - process.env.OPENCLAW_SKIP_BROWSER_CONTROL_SERVER = "1"; - process.env.OPENCLAW_SKIP_PROVIDERS = "1"; - process.env.OPENCLAW_TEST_MINIMAL_GATEWAY = "1"; + const { envSnapshot, tempHome, workspaceDir } = await setupGatewayTempHome({ + prefix: "openclaw-gw-mock-home-", + minimalGateway: true, + }); const token = nextGatewayId("test-token"); process.env.OPENCLAW_GATEWAY_TOKEN = token; - const workspaceDir = path.join(tempHome, "openclaw"); - await fs.mkdir(workspaceDir, { recursive: true }); - process.env.OPENCLAW_BUNDLED_PLUGINS_DIR = await createEmptyBundledPluginsDir(tempHome); - const configDir = path.join(tempHome, ".openclaw"); await fs.mkdir(configDir, { recursive: true }); const configPath = path.join(configDir, "openclaw.json"); @@ -207,37 +221,12 @@ describe("gateway e2e", () => { "does not reload workspace plugins when POST /tools/invoke rebuilds tools for the same workspace", { timeout: GATEWAY_E2E_TIMEOUT_MS }, async () => { - const envSnapshot = captureEnv([ - "HOME", - "OPENCLAW_STATE_DIR", - "OPENCLAW_CONFIG_PATH", - "OPENCLAW_GATEWAY_TOKEN", - "OPENCLAW_SKIP_CHANNELS", - "OPENCLAW_SKIP_GMAIL_WATCHER", - "OPENCLAW_SKIP_CRON", - "OPENCLAW_SKIP_CANVAS_HOST", - "OPENCLAW_SKIP_BROWSER_CONTROL_SERVER", - "OPENCLAW_SKIP_PROVIDERS", - "OPENCLAW_BUNDLED_PLUGINS_DIR", - ]); - - const tempHome = await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-gw-http-tools-home-")); - process.env.HOME = tempHome; - process.env.OPENCLAW_STATE_DIR = path.join(tempHome, ".openclaw"); - delete process.env.OPENCLAW_CONFIG_PATH; - process.env.OPENCLAW_SKIP_CHANNELS = "1"; - process.env.OPENCLAW_SKIP_GMAIL_WATCHER = "1"; - process.env.OPENCLAW_SKIP_CRON = "1"; - process.env.OPENCLAW_SKIP_CANVAS_HOST = "1"; - process.env.OPENCLAW_SKIP_BROWSER_CONTROL_SERVER = "1"; - process.env.OPENCLAW_SKIP_PROVIDERS = "1"; + const { envSnapshot, tempHome, workspaceDir } = await setupGatewayTempHome({ + prefix: "openclaw-gw-http-tools-home-", + }); const token = nextGatewayId("http-tools-token"); process.env.OPENCLAW_GATEWAY_TOKEN = token; - - const workspaceDir = path.join(tempHome, "openclaw"); - await fs.mkdir(workspaceDir, { recursive: true }); - process.env.OPENCLAW_BUNDLED_PLUGINS_DIR = await createEmptyBundledPluginsDir(tempHome); const registerCountPath = path.join(tempHome, "workspace-plugin-register-count.txt"); await writeWorkspacePlugin({ workspaceDir,