From bd2553e126800209d8a9c07aaff3096505ea1409 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Thu, 23 Apr 2026 18:40:55 +0100 Subject: [PATCH] test: share gateway live env helpers --- .../gateway-codex-harness.live.test.ts | 53 ++--------------- .../gateway-trajectory-export.live.test.ts | 59 ++----------------- src/gateway/live-env-test-helpers.ts | 33 +++++++++++ 3 files changed, 43 insertions(+), 102 deletions(-) create mode 100644 src/gateway/live-env-test-helpers.ts diff --git a/src/gateway/gateway-codex-harness.live.test.ts b/src/gateway/gateway-codex-harness.live.test.ts index bbda3e5cdf0..1f088345a56 100644 --- a/src/gateway/gateway-codex-harness.live.test.ts +++ b/src/gateway/gateway-codex-harness.live.test.ts @@ -25,6 +25,7 @@ import { runOpenClawCliJson, type CronListJob, } from "./live-agent-probes.js"; +import { restoreLiveEnv, snapshotLiveEnv, type LiveEnvSnapshot } from "./live-env-test-helpers.js"; import { renderCatFacePngBase64 } from "./live-image-probe.js"; const LIVE = isLiveTestEnabled(); @@ -65,20 +66,6 @@ type CapturedAgentEvent = { sessionKey?: string; }; -type EnvSnapshot = { - agentRuntime?: string; - configPath?: string; - gatewayToken?: string; - openaiApiKey?: string; - openaiBaseUrl?: string; - skipBrowserControl?: string; - skipCanvas?: string; - skipChannels?: string; - skipCron?: string; - skipGmail?: string; - stateDir?: string; -}; - function resolveLiveTimeoutMs(raw: string | undefined, fallback: number): number { const parsed = raw ? Number(raw) : Number.NaN; return Number.isFinite(parsed) && parsed > 0 ? Math.floor(parsed) : fallback; @@ -109,42 +96,12 @@ async function subscribeCodexLiveDebugEvents(sessionKey: string): Promise<() => }); } -function snapshotEnv(): EnvSnapshot { - return { - agentRuntime: process.env.OPENCLAW_AGENT_RUNTIME, - configPath: process.env.OPENCLAW_CONFIG_PATH, - gatewayToken: process.env.OPENCLAW_GATEWAY_TOKEN, - openaiApiKey: process.env.OPENAI_API_KEY, - openaiBaseUrl: process.env.OPENAI_BASE_URL, - skipBrowserControl: process.env.OPENCLAW_SKIP_BROWSER_CONTROL_SERVER, - skipCanvas: process.env.OPENCLAW_SKIP_CANVAS_HOST, - skipChannels: process.env.OPENCLAW_SKIP_CHANNELS, - skipCron: process.env.OPENCLAW_SKIP_CRON, - skipGmail: process.env.OPENCLAW_SKIP_GMAIL_WATCHER, - stateDir: process.env.OPENCLAW_STATE_DIR, - }; +function snapshotEnv(): LiveEnvSnapshot { + return snapshotLiveEnv(); } -function restoreEnv(snapshot: EnvSnapshot): void { - restoreEnvVar("OPENCLAW_AGENT_RUNTIME", snapshot.agentRuntime); - restoreEnvVar("OPENCLAW_CONFIG_PATH", snapshot.configPath); - restoreEnvVar("OPENCLAW_GATEWAY_TOKEN", snapshot.gatewayToken); - restoreEnvVar("OPENAI_API_KEY", snapshot.openaiApiKey); - restoreEnvVar("OPENAI_BASE_URL", snapshot.openaiBaseUrl); - restoreEnvVar("OPENCLAW_SKIP_BROWSER_CONTROL_SERVER", snapshot.skipBrowserControl); - restoreEnvVar("OPENCLAW_SKIP_CANVAS_HOST", snapshot.skipCanvas); - restoreEnvVar("OPENCLAW_SKIP_CHANNELS", snapshot.skipChannels); - restoreEnvVar("OPENCLAW_SKIP_CRON", snapshot.skipCron); - restoreEnvVar("OPENCLAW_SKIP_GMAIL_WATCHER", snapshot.skipGmail); - restoreEnvVar("OPENCLAW_STATE_DIR", snapshot.stateDir); -} - -function restoreEnvVar(name: string, value: string | undefined): void { - if (value === undefined) { - delete process.env[name]; - return; - } - process.env[name] = value; +function restoreEnv(snapshot: LiveEnvSnapshot): void { + restoreLiveEnv(snapshot); } async function getFreeGatewayPort(): Promise { diff --git a/src/gateway/gateway-trajectory-export.live.test.ts b/src/gateway/gateway-trajectory-export.live.test.ts index 3e7c66adb0d..b1a4c7bda72 100644 --- a/src/gateway/gateway-trajectory-export.live.test.ts +++ b/src/gateway/gateway-trajectory-export.live.test.ts @@ -12,6 +12,7 @@ import { ensurePairedTestGatewayClientIdentity, getFreeGatewayPort, } from "./gateway-cli-backend.live-helpers.js"; +import { restoreLiveEnv, snapshotLiveEnv, type LiveEnvSnapshot } from "./live-env-test-helpers.js"; import { extractPayloadText } from "./test-helpers.agent-results.js"; const LIVE = isLiveTestEnabled(); @@ -23,22 +24,6 @@ const GATEWAY_CONNECT_TIMEOUT_MS = 60_000; const AGENT_REQUEST_TIMEOUT_MS = 180_000; const DEFAULT_CODEX_MODEL = "codex/gpt-5.4"; -type EnvSnapshot = { - agentRuntime?: string; - configPath?: string; - gatewayToken?: string; - openaiApiKey?: string; - openaiBaseUrl?: string; - skipBrowserControl?: string; - skipCanvas?: string; - skipChannels?: string; - skipCron?: string; - skipGmail?: string; - stateDir?: string; - trajectory?: string; - trajectoryDir?: string; -}; - function logLiveStep(step: string, details?: Record): void { if (!CODEX_HARNESS_DEBUG) { return; @@ -47,46 +32,12 @@ function logLiveStep(step: string, details?: Record): void { console.error(`[gateway-trajectory-live] ${step}${suffix}`); } -function snapshotEnv(): EnvSnapshot { - return { - agentRuntime: process.env.OPENCLAW_AGENT_RUNTIME, - configPath: process.env.OPENCLAW_CONFIG_PATH, - gatewayToken: process.env.OPENCLAW_GATEWAY_TOKEN, - openaiApiKey: process.env.OPENAI_API_KEY, - openaiBaseUrl: process.env.OPENAI_BASE_URL, - skipBrowserControl: process.env.OPENCLAW_SKIP_BROWSER_CONTROL_SERVER, - skipCanvas: process.env.OPENCLAW_SKIP_CANVAS_HOST, - skipChannels: process.env.OPENCLAW_SKIP_CHANNELS, - skipCron: process.env.OPENCLAW_SKIP_CRON, - skipGmail: process.env.OPENCLAW_SKIP_GMAIL_WATCHER, - stateDir: process.env.OPENCLAW_STATE_DIR, - trajectory: process.env.OPENCLAW_TRAJECTORY, - trajectoryDir: process.env.OPENCLAW_TRAJECTORY_DIR, - }; +function snapshotEnv(): LiveEnvSnapshot { + return snapshotLiveEnv(["OPENCLAW_TRAJECTORY", "OPENCLAW_TRAJECTORY_DIR"]); } -function restoreEnv(snapshot: EnvSnapshot): void { - restoreEnvVar("OPENCLAW_AGENT_RUNTIME", snapshot.agentRuntime); - restoreEnvVar("OPENCLAW_CONFIG_PATH", snapshot.configPath); - restoreEnvVar("OPENCLAW_GATEWAY_TOKEN", snapshot.gatewayToken); - restoreEnvVar("OPENAI_API_KEY", snapshot.openaiApiKey); - restoreEnvVar("OPENAI_BASE_URL", snapshot.openaiBaseUrl); - restoreEnvVar("OPENCLAW_SKIP_BROWSER_CONTROL_SERVER", snapshot.skipBrowserControl); - restoreEnvVar("OPENCLAW_SKIP_CANVAS_HOST", snapshot.skipCanvas); - restoreEnvVar("OPENCLAW_SKIP_CHANNELS", snapshot.skipChannels); - restoreEnvVar("OPENCLAW_SKIP_CRON", snapshot.skipCron); - restoreEnvVar("OPENCLAW_SKIP_GMAIL_WATCHER", snapshot.skipGmail); - restoreEnvVar("OPENCLAW_STATE_DIR", snapshot.stateDir); - restoreEnvVar("OPENCLAW_TRAJECTORY", snapshot.trajectory); - restoreEnvVar("OPENCLAW_TRAJECTORY_DIR", snapshot.trajectoryDir); -} - -function restoreEnvVar(name: string, value: string | undefined): void { - if (value === undefined) { - delete process.env[name]; - return; - } - process.env[name] = value; +function restoreEnv(snapshot: LiveEnvSnapshot): void { + restoreLiveEnv(snapshot); } async function writeLiveGatewayConfig(params: { diff --git a/src/gateway/live-env-test-helpers.ts b/src/gateway/live-env-test-helpers.ts new file mode 100644 index 00000000000..aa492b2b43f --- /dev/null +++ b/src/gateway/live-env-test-helpers.ts @@ -0,0 +1,33 @@ +const COMMON_LIVE_ENV_NAMES = [ + "OPENCLAW_AGENT_RUNTIME", + "OPENCLAW_CONFIG_PATH", + "OPENCLAW_GATEWAY_TOKEN", + "OPENAI_API_KEY", + "OPENAI_BASE_URL", + "OPENCLAW_SKIP_BROWSER_CONTROL_SERVER", + "OPENCLAW_SKIP_CANVAS_HOST", + "OPENCLAW_SKIP_CHANNELS", + "OPENCLAW_SKIP_CRON", + "OPENCLAW_SKIP_GMAIL_WATCHER", + "OPENCLAW_STATE_DIR", +] as const; + +export type LiveEnvSnapshot = Record; + +export function snapshotLiveEnv(extraNames: readonly string[] = []): LiveEnvSnapshot { + const snapshot: LiveEnvSnapshot = {}; + for (const name of [...COMMON_LIVE_ENV_NAMES, ...extraNames]) { + snapshot[name] = process.env[name]; + } + return snapshot; +} + +export function restoreLiveEnv(snapshot: LiveEnvSnapshot): void { + for (const [name, value] of Object.entries(snapshot)) { + if (value === undefined) { + delete process.env[name]; + } else { + process.env[name] = value; + } + } +}