Skip to content

Commit b06dc17

Browse files
committed
refactor: share gateway e2e test setup
1 parent 7967a35 commit b06dc17

1 file changed

Lines changed: 50 additions & 89 deletions

File tree

src/gateway/gateway.test.ts

Lines changed: 50 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,31 @@ async function createEmptyBundledPluginsDir(tempHome: string): Promise<string> {
4747
return bundledPluginsDir;
4848
}
4949

50+
async function createGatewayConfigPath(tempHome: string): Promise<string> {
51+
const configPath = path.join(tempHome, ".openclaw", "openclaw.json");
52+
await fs.mkdir(path.dirname(configPath), { recursive: true });
53+
return configPath;
54+
}
55+
56+
async function removeGatewayTempHome(tempHome: string): Promise<void> {
57+
await fs.rm(tempHome, {
58+
recursive: true,
59+
force: true,
60+
maxRetries: 10,
61+
retryDelay: 50,
62+
});
63+
}
64+
65+
async function startLoopbackTokenGateway(token: string) {
66+
const port = await getFreeGatewayPort();
67+
const server = await startGatewayServer(port, {
68+
bind: "loopback",
69+
auth: { mode: "token", token },
70+
controlUiEnabled: false,
71+
});
72+
return { port, server };
73+
}
74+
5075
async function writeWorkspacePlugin(params: {
5176
workspaceDir: string;
5277
id: string;
@@ -130,24 +155,19 @@ async function setupGatewayTempHome(params: { prefix: string; minimalGateway?: b
130155
return { envSnapshot, tempHome, workspaceDir };
131156
}
132157

158+
function resetGatewayTestState(): void {
159+
clearRuntimeConfigSnapshot();
160+
clearConfigCache();
161+
clearSessionStoreCacheForTest();
162+
resetAgentRunContextForTest();
163+
clearAllBootstrapSnapshots();
164+
clearGatewaySubagentRuntime();
165+
}
166+
133167
describe("gateway e2e", () => {
134-
beforeEach(() => {
135-
clearRuntimeConfigSnapshot();
136-
clearConfigCache();
137-
clearSessionStoreCacheForTest();
138-
resetAgentRunContextForTest();
139-
clearAllBootstrapSnapshots();
140-
clearGatewaySubagentRuntime();
141-
});
168+
beforeEach(resetGatewayTestState);
142169

143-
afterEach(() => {
144-
clearRuntimeConfigSnapshot();
145-
clearConfigCache();
146-
clearSessionStoreCacheForTest();
147-
resetAgentRunContextForTest();
148-
clearAllBootstrapSnapshots();
149-
clearGatewaySubagentRuntime();
150-
});
170+
afterEach(resetGatewayTestState);
151171

152172
beforeAll(async () => {
153173
({ createConfigIO } = await import("../config/config.js"));
@@ -166,9 +186,7 @@ describe("gateway e2e", () => {
166186
const token = nextGatewayId("test-token");
167187
process.env.OPENCLAW_GATEWAY_TOKEN = token;
168188

169-
const configDir = path.join(tempHome, ".openclaw");
170-
await fs.mkdir(configDir, { recursive: true });
171-
const configPath = path.join(configDir, "openclaw.json");
189+
const configPath = await createGatewayConfigPath(tempHome);
172190
const mockProvider = buildMockOpenAiResponsesProvider(openaiBaseUrl);
173191

174192
const cfg = {
@@ -222,12 +240,7 @@ describe("gateway e2e", () => {
222240
} finally {
223241
await disconnectGatewayClient(client);
224242
await server.close({ reason: "mock openai test complete" });
225-
await fs.rm(tempHome, {
226-
recursive: true,
227-
force: true,
228-
maxRetries: 10,
229-
retryDelay: 50,
230-
});
243+
await removeGatewayTempHome(tempHome);
231244
restore();
232245
envSnapshot.restore();
233246
}
@@ -264,9 +277,7 @@ module.exports = {
264277
`.trimStart(),
265278
});
266279

267-
const configDir = path.join(tempHome, ".openclaw");
268-
await fs.mkdir(configDir, { recursive: true });
269-
const configPath = path.join(configDir, "openclaw.json");
280+
const configPath = await createGatewayConfigPath(tempHome);
270281
const cfg = {
271282
agents: {
272283
defaults: { workspace: workspaceDir },
@@ -280,12 +291,7 @@ module.exports = {
280291
await fs.writeFile(configPath, `${JSON.stringify(cfg, null, 2)}\n`);
281292
process.env.OPENCLAW_CONFIG_PATH = configPath;
282293

283-
const port = await getFreeGatewayPort();
284-
const server = await startGatewayServer(port, {
285-
bind: "loopback",
286-
auth: { mode: "token", token },
287-
controlUiEnabled: false,
288-
});
294+
const { port, server } = await startLoopbackTokenGateway(token);
289295

290296
try {
291297
const beforeCount = await readCounterWithRetry(registerCountPath);
@@ -314,12 +320,7 @@ module.exports = {
314320
expect(afterCount).toBe(beforeCount);
315321
} finally {
316322
await server.close({ reason: "http tools workspace test complete" });
317-
await fs.rm(tempHome, {
318-
recursive: true,
319-
force: true,
320-
maxRetries: 10,
321-
retryDelay: 50,
322-
});
323+
await removeGatewayTempHome(tempHome);
323324
envSnapshot.restore();
324325
}
325326
},
@@ -329,38 +330,14 @@ module.exports = {
329330
"runs wizard over ws and writes auth token config",
330331
{ timeout: GATEWAY_E2E_TIMEOUT_MS },
331332
async () => {
332-
const envSnapshot = captureEnv([
333-
"HOME",
334-
"OPENCLAW_STATE_DIR",
335-
"OPENCLAW_CONFIG_PATH",
336-
"OPENCLAW_GATEWAY_TOKEN",
337-
"OPENCLAW_SKIP_CHANNELS",
338-
"OPENCLAW_SKIP_GMAIL_WATCHER",
339-
"OPENCLAW_SKIP_CRON",
340-
"OPENCLAW_SKIP_CANVAS_HOST",
341-
"OPENCLAW_SKIP_BROWSER_CONTROL_SERVER",
342-
"OPENCLAW_SKIP_PROVIDERS",
343-
"OPENCLAW_BUNDLED_PLUGINS_DIR",
344-
"OPENCLAW_DISABLE_BUNDLED_PLUGINS",
345-
"OPENCLAW_TEST_MINIMAL_GATEWAY",
346-
]);
347-
348-
process.env.OPENCLAW_SKIP_CHANNELS = "1";
349-
process.env.OPENCLAW_SKIP_GMAIL_WATCHER = "1";
350-
process.env.OPENCLAW_SKIP_CRON = "1";
351-
process.env.OPENCLAW_SKIP_CANVAS_HOST = "1";
352-
process.env.OPENCLAW_SKIP_BROWSER_CONTROL_SERVER = "1";
353-
process.env.OPENCLAW_SKIP_PROVIDERS = "1";
354-
process.env.OPENCLAW_TEST_MINIMAL_GATEWAY = "1";
333+
const { envSnapshot, tempHome } = await setupGatewayTempHome({
334+
prefix: "openclaw-wizard-home-",
335+
minimalGateway: true,
336+
});
355337
delete process.env.OPENCLAW_GATEWAY_TOKEN;
356338

357-
const tempHome = await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-wizard-home-"));
358-
const configPath = path.join(tempHome, ".openclaw", "openclaw.json");
359-
process.env.HOME = tempHome;
360-
process.env.OPENCLAW_STATE_DIR = path.join(tempHome, ".openclaw");
339+
const configPath = await createGatewayConfigPath(tempHome);
361340
process.env.OPENCLAW_CONFIG_PATH = configPath;
362-
process.env.OPENCLAW_BUNDLED_PLUGINS_DIR = await createEmptyBundledPluginsDir(tempHome);
363-
process.env.OPENCLAW_DISABLE_BUNDLED_PLUGINS = "1";
364341
clearRuntimeConfigSnapshot();
365342
clearConfigCache();
366343

@@ -465,12 +442,7 @@ module.exports = {
465442
expect(resToken.ok).toBe(true);
466443
} finally {
467444
await server2.close({ reason: "wizard auth verify" });
468-
await fs.rm(tempHome, {
469-
recursive: true,
470-
force: true,
471-
maxRetries: 10,
472-
retryDelay: 50,
473-
});
445+
await removeGatewayTempHome(tempHome);
474446
envSnapshot.restore();
475447
}
476448
},
@@ -497,7 +469,7 @@ module.exports = {
497469
]);
498470

499471
const tempHome = await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-minimal-gateway-home-"));
500-
const configPath = path.join(tempHome, ".openclaw", "openclaw.json");
472+
const configPath = await createGatewayConfigPath(tempHome);
501473
const bundledPluginsDir = path.join(tempHome, "openclaw-test-no-bundled-extensions");
502474
process.env.HOME = tempHome;
503475
process.env.OPENCLAW_STATE_DIR = path.join(tempHome, ".openclaw");
@@ -514,19 +486,13 @@ module.exports = {
514486

515487
const token = nextGatewayId("minimal-token");
516488
process.env.OPENCLAW_GATEWAY_TOKEN = token;
517-
await fs.mkdir(path.dirname(configPath), { recursive: true });
518489
await fs.mkdir(bundledPluginsDir, { recursive: true });
519490
await fs.writeFile(
520491
configPath,
521492
`${JSON.stringify({ gateway: { auth: { mode: "token", token } } }, null, 2)}\n`,
522493
);
523494

524-
const port = await getFreeGatewayPort();
525-
const server = await startGatewayServer(port, {
526-
bind: "loopback",
527-
auth: { mode: "token", token },
528-
controlUiEnabled: false,
529-
});
495+
const { server } = await startLoopbackTokenGateway(token);
530496

531497
try {
532498
const parsed = JSON.parse(await fs.readFile(configPath, "utf8")) as {
@@ -536,12 +502,7 @@ module.exports = {
536502
expect(parsed.plugins?.entries?.discord).toBeUndefined();
537503
} finally {
538504
await server.close({ reason: "minimal gateway auto-enable verify" });
539-
await fs.rm(tempHome, {
540-
recursive: true,
541-
force: true,
542-
maxRetries: 10,
543-
retryDelay: 50,
544-
});
505+
await removeGatewayTempHome(tempHome);
545506
envSnapshot.restore();
546507
}
547508
},

0 commit comments

Comments
 (0)