diff --git a/src/docker-setup.e2e.test-support.ts b/src/docker-setup.e2e.test-support.ts index 37fe8b0cff74..1a491d4f56a2 100644 --- a/src/docker-setup.e2e.test-support.ts +++ b/src/docker-setup.e2e.test-support.ts @@ -68,6 +68,21 @@ if [[ "\${1:-}" == "build" ]]; then echo "build DOCKER_BUILDKIT=\${DOCKER_BUILDKIT:-} $*" >>"$log" exit 0 fi +if [[ "\${1:-}" == "run" ]]; then + echo "run $*" >>"$log" + args=("$@") + for ((i = 0; i + 3 < \${#args[@]}; i++)); do + if [[ "\${args[$i]}" == "--entrypoint" && "\${args[$((i + 1))]}" == "node" ]]; then + for ((j = i + 2; j + 1 < \${#args[@]}; j++)); do + if [[ "\${args[$j]}" == "-e" ]]; then + node -e "\${args[$((j + 1))]}" "\${args[@]:$((j + 2))}" + exit $? + fi + done + fi + done + exit 0 +fi if [[ "\${1:-}" == "compose" ]]; then if [[ -n "$fail_match" && "$*" == *"$fail_match"* ]]; then echo "compose-fail $*" >>"$log" diff --git a/src/docker-setup.e2e.test.ts b/src/docker-setup.e2e.test.ts index 32154fde7561..0212b1e9a59f 100644 --- a/src/docker-setup.e2e.test.ts +++ b/src/docker-setup.e2e.test.ts @@ -807,7 +807,7 @@ describe("scripts/docker/setup.sh", () => { expect(result.stderr).toContain("OPENCLAW_HOME_VOLUME must match"); }); - it("rejects OPENCLAW_TZ values that are not present in zoneinfo", () => { + it("rejects OPENCLAW_TZ values that are unsupported by the runtime image", () => { const activeSandbox = requireSandbox(sandbox); const result = runDockerSetup(activeSandbox, { @@ -815,7 +815,7 @@ describe("scripts/docker/setup.sh", () => { }); expect(result.status).not.toBe(0); - expect(result.stderr).toContain("OPENCLAW_TZ must match a timezone in /usr/share/zoneinfo"); + expect(result.stderr).toContain("OPENCLAW_TZ must be supported by openclaw:local"); }); it("skips onboarding when OPENCLAW_SKIP_ONBOARDING is set", async () => { diff --git a/src/gateway/gateway.test.ts b/src/gateway/gateway.test.ts index 3832a6b34789..31176e8da3b4 100644 --- a/src/gateway/gateway.test.ts +++ b/src/gateway/gateway.test.ts @@ -8,7 +8,6 @@ import { clearConfigCache, clearRuntimeConfigSnapshot, getRuntimeConfig, - getRuntimeConfigSnapshotMetadata, writeConfigFile, } from "../config/config.js"; import { resetConfigOverrides, setConfigOverride } from "../config/runtime-overrides.js"; @@ -345,10 +344,11 @@ describe("gateway e2e", () => { callerAuthOverride.rateLimit!.maxAttempts = 99; callerTailscaleOverride.serviceName = "svc:mutated"; } - await writeConfigFile({ + const nextLoggingSource = { ...initialConfig, logging: { level: "debug" }, - }); + } satisfies OpenClawConfig; + await writeConfigFile(nextLoggingSource); await expect .poll(() => getRuntimeConfig().logging?.level, { timeout: 5_000, interval: 50 }) .toBe("debug"); @@ -362,8 +362,7 @@ describe("gateway e2e", () => { expect(getRuntimeConfig().channels?.whatsapp?.allowFrom).toEqual(["*"]); const sourceBeforePolicyEdit = (await configIO.readConfigFileSnapshot()).sourceConfig; - const revisionBeforePolicyEdit = getRuntimeConfigSnapshotMetadata()?.revision ?? -1; - await writeConfigFile({ + const nextPolicySource = { ...sourceBeforePolicyEdit, channels: { ...sourceBeforePolicyEdit.channels, @@ -372,13 +371,8 @@ describe("gateway e2e", () => { dmPolicy: "disabled", }, }, - }); - await expect - .poll(() => getRuntimeConfigSnapshotMetadata()?.revision ?? -1, { - timeout: 5_000, - interval: 50, - }) - .toBeGreaterThan(revisionBeforePolicyEdit); + } satisfies OpenClawConfig; + await writeConfigFile(nextPolicySource); const persistedPolicyEdit = JSON.parse( await fs.readFile(configPath, "utf-8"), ) as OpenClawConfig; @@ -386,21 +380,16 @@ describe("gateway e2e", () => { expect(getRuntimeConfig().channels?.whatsapp?.dmPolicy).toBe("open"); const sourceBeforeUnrelatedWrite = (await configIO.readConfigFileSnapshot()).sourceConfig; - const revisionBeforeUnrelatedWrite = getRuntimeConfigSnapshotMetadata()?.revision ?? -1; - await writeConfigFile({ + const nextUnrelatedSource = { ...sourceBeforeUnrelatedWrite, ui: { assistant: { name: "unrelated-managed-write" } }, - }); - await expect - .poll(() => getRuntimeConfigSnapshotMetadata()?.revision ?? -1, { - timeout: 5_000, - interval: 50, - }) - .toBeGreaterThan(revisionBeforeUnrelatedWrite); + } satisfies OpenClawConfig; + await writeConfigFile(nextUnrelatedSource); const persistedAfterUnrelatedWrite = JSON.parse( await fs.readFile(configPath, "utf-8"), ) as OpenClawConfig; expect(persistedAfterUnrelatedWrite.channels?.whatsapp?.dmPolicy).toBe("disabled"); + expect(persistedAfterUnrelatedWrite.ui?.assistant?.name).toBe("unrelated-managed-write"); } const reconnected = await connectGatewayClient({ @@ -588,7 +577,7 @@ describe("gateway e2e", () => { }, // The request below runs sessionKey "agent:dev:mock-openai"; the // gateway rejects session keys whose agent id is not declared. - list: [{ id: "dev", default: true }], + entries: { dev: { default: true } }, }, models: { mode: "replace", @@ -674,7 +663,7 @@ module.exports = { const cfg = { agents: { defaults: { workspace: workspaceDir }, - list: [{ id: "main", default: true, tools: { allow: ["agents_list"] } }], + entries: { main: { default: true, tools: { allow: ["agents_list"] } } }, }, plugins: { allow: ["http-probe"],