refactor(test): streamline env setup in auth and gateway e2e

This commit is contained in:
Peter Steinberger
2026-02-21 18:22:23 +00:00
parent a410dad602
commit 2d7d00ef8e
2 changed files with 64 additions and 70 deletions

View File

@@ -2,7 +2,7 @@ import fs from "node:fs/promises";
import os from "node:os"; import os from "node:os";
import path from "node:path"; import path from "node:path";
import { afterEach, describe, expect, it, vi } from "vitest"; import { afterEach, describe, expect, it, vi } from "vitest";
import { captureEnv } from "../test-utils/env.js"; import { withEnvAsync } from "../test-utils/env.js";
import { import {
type AuthProfileStore, type AuthProfileStore,
ensureAuthProfileStore, ensureAuthProfileStore,
@@ -11,7 +11,6 @@ import {
import { CHUTES_TOKEN_ENDPOINT } from "./chutes-oauth.js"; import { CHUTES_TOKEN_ENDPOINT } from "./chutes-oauth.js";
describe("auth-profiles (chutes)", () => { describe("auth-profiles (chutes)", () => {
let envSnapshot: ReturnType<typeof captureEnv> | undefined;
let tempDir: string | null = null; let tempDir: string | null = null;
afterEach(async () => { afterEach(async () => {
@@ -20,23 +19,20 @@ describe("auth-profiles (chutes)", () => {
await fs.rm(tempDir, { recursive: true, force: true }); await fs.rm(tempDir, { recursive: true, force: true });
tempDir = null; tempDir = null;
} }
envSnapshot?.restore();
envSnapshot = undefined;
}); });
it("refreshes expired Chutes OAuth credentials", async () => { it("refreshes expired Chutes OAuth credentials", async () => {
envSnapshot = captureEnv([
"OPENCLAW_STATE_DIR",
"OPENCLAW_AGENT_DIR",
"PI_CODING_AGENT_DIR",
"CHUTES_CLIENT_ID",
]);
tempDir = await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-chutes-")); tempDir = await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-chutes-"));
process.env.OPENCLAW_STATE_DIR = tempDir; const agentDir = path.join(tempDir, "agents", "main", "agent");
process.env.OPENCLAW_AGENT_DIR = path.join(tempDir, "agents", "main", "agent"); await withEnvAsync(
process.env.PI_CODING_AGENT_DIR = process.env.OPENCLAW_AGENT_DIR; {
OPENCLAW_STATE_DIR: tempDir,
const authProfilePath = path.join(tempDir, "agents", "main", "agent", "auth-profiles.json"); OPENCLAW_AGENT_DIR: agentDir,
PI_CODING_AGENT_DIR: agentDir,
CHUTES_CLIENT_ID: undefined,
},
async () => {
const authProfilePath = path.join(agentDir, "auth-profiles.json");
await fs.mkdir(path.dirname(authProfilePath), { recursive: true }); await fs.mkdir(path.dirname(authProfilePath), { recursive: true });
const store: AuthProfileStore = { const store: AuthProfileStore = {
@@ -82,5 +78,7 @@ describe("auth-profiles (chutes)", () => {
profiles?: Record<string, { access?: string }>; profiles?: Record<string, { access?: string }>;
}; };
expect(persisted.profiles?.["chutes:default"]?.access).toBe("at_new"); expect(persisted.profiles?.["chutes:default"]?.access).toBe("at_new");
},
);
}); });
}); });

View File

@@ -9,7 +9,7 @@ import { resolveCanvasHostUrl } from "../infra/canvas-host-url.js";
import { GatewayLockError } from "../infra/gateway-lock.js"; import { GatewayLockError } from "../infra/gateway-lock.js";
import { getActivePluginRegistry, setActivePluginRegistry } from "../plugins/runtime.js"; import { getActivePluginRegistry, setActivePluginRegistry } from "../plugins/runtime.js";
import { createOutboundTestPlugin } from "../test-utils/channel-plugins.js"; import { createOutboundTestPlugin } from "../test-utils/channel-plugins.js";
import { captureEnv } from "../test-utils/env.js"; import { withEnvAsync } from "../test-utils/env.js";
import { createTempHomeEnv } from "../test-utils/temp-home.js"; import { createTempHomeEnv } from "../test-utils/temp-home.js";
import { GATEWAY_CLIENT_MODES, GATEWAY_CLIENT_NAMES } from "../utils/message-channel.js"; import { GATEWAY_CLIENT_MODES, GATEWAY_CLIENT_NAMES } from "../utils/message-channel.js";
import { createRegistry } from "./server.e2e-registry-helpers.js"; import { createRegistry } from "./server.e2e-registry-helpers.js";
@@ -263,15 +263,12 @@ describe("gateway server models + voicewake", () => {
describe("gateway server misc", () => { describe("gateway server misc", () => {
test("hello-ok advertises the gateway port for canvas host", async () => { test("hello-ok advertises the gateway port for canvas host", async () => {
const envSnapshot = captureEnv(["OPENCLAW_CANVAS_HOST_PORT", "OPENCLAW_GATEWAY_TOKEN"]); await withEnvAsync({ OPENCLAW_GATEWAY_TOKEN: "secret" }, async () => {
try {
process.env.OPENCLAW_GATEWAY_TOKEN = "secret";
testTailnetIPv4.value = "100.64.0.1"; testTailnetIPv4.value = "100.64.0.1";
testState.gatewayBind = "lan"; testState.gatewayBind = "lan";
const canvasPort = await getFreePort(); const canvasPort = await getFreePort();
testState.canvasHostPort = canvasPort; testState.canvasHostPort = canvasPort;
process.env.OPENCLAW_CANVAS_HOST_PORT = String(canvasPort); await withEnvAsync({ OPENCLAW_CANVAS_HOST_PORT: String(canvasPort) }, async () => {
const testPort = await getFreePort(); const testPort = await getFreePort();
const canvasHostUrl = resolveCanvasHostUrl({ const canvasHostUrl = resolveCanvasHostUrl({
canvasPort, canvasPort,
@@ -279,9 +276,8 @@ describe("gateway server misc", () => {
localAddress: "127.0.0.1", localAddress: "127.0.0.1",
}); });
expect(canvasHostUrl).toBe(`http://100.64.0.1:${canvasPort}`); expect(canvasHostUrl).toBe(`http://100.64.0.1:${canvasPort}`);
} finally { });
envSnapshot.restore(); });
}
}); });
test("send dedupes by idempotencyKey", { timeout: 60_000 }, async () => { test("send dedupes by idempotencyKey", { timeout: 60_000 }, async () => {