























@@ -5,6 +5,7 @@ import { runInNewContext } from "node:vm";
55import { describe, expect, it } from "vitest";
6677const SCRIPT_PATH = "scripts/test-install-sh-docker.sh";
8+const INSTALL_E2E_DOCKER_PATH = "scripts/test-install-sh-e2e-docker.sh";
89const INSTALL_E2E_RUNNER_PATH = "scripts/docker/install-sh-e2e/run.sh";
910const DOCKER_SETUP_PATH = "scripts/docker/setup.sh";
1011const PODMAN_SETUP_PATH = "scripts/podman/setup.sh";
@@ -470,6 +471,55 @@ describe("test-install-sh-docker", () => {
470471});
471472472473describe("install-sh E2E runner", () => {
474+it("normalizes Docker wrapper timing and toggle knobs before forwarding", () => {
475+const wrapper = readFileSync(INSTALL_E2E_DOCKER_PATH, "utf8");
476+477+expect(wrapper).toContain(
478+'AGENT_TURN_TIMEOUT_SECONDS="$(\n docker_e2e_read_positive_int_env OPENCLAW_INSTALL_E2E_AGENT_TURN_TIMEOUT_SECONDS 300\n)"',
479+);
480+expect(wrapper).toContain(
481+'OPENAI_PROVIDER_TIMEOUT_SECONDS="$(\n docker_e2e_read_positive_int_env OPENCLAW_INSTALL_E2E_OPENAI_PROVIDER_TIMEOUT_SECONDS "$AGENT_TURN_TIMEOUT_SECONDS"\n)"',
482+);
483+expect(wrapper).toContain(
484+'AGENT_TURNS_PARALLEL="$(read_boolean_env OPENCLAW_INSTALL_E2E_AGENT_TURNS_PARALLEL 1)"',
485+);
486+expect(wrapper).toContain(
487+'AGENT_TOOL_SMOKE="$(read_boolean_env OPENCLAW_INSTALL_E2E_AGENT_TOOL_SMOKE 1)"',
488+);
489+expect(wrapper).toContain(
490+'-e OPENCLAW_INSTALL_E2E_OPENAI_PROVIDER_TIMEOUT_SECONDS="$OPENAI_PROVIDER_TIMEOUT_SECONDS"',
491+);
492+expect(wrapper).toContain(
493+'-e OPENCLAW_INSTALL_E2E_AGENT_TURN_TIMEOUT_SECONDS="$AGENT_TURN_TIMEOUT_SECONDS"',
494+);
495+expect(wrapper).toContain(
496+'-e OPENCLAW_INSTALL_E2E_AGENT_TURNS_PARALLEL="$AGENT_TURNS_PARALLEL"',
497+);
498+expect(wrapper).toContain('-e OPENCLAW_INSTALL_E2E_AGENT_TOOL_SMOKE="$AGENT_TOOL_SMOKE"');
499+expect(wrapper).not.toContain(
500+'OPENCLAW_INSTALL_E2E_OPENAI_PROVIDER_TIMEOUT_SECONDS="${OPENCLAW_INSTALL_E2E_OPENAI_PROVIDER_TIMEOUT_SECONDS:-}"',
501+);
502+});
503+504+it.each([
505+["turn timeout", "OPENCLAW_INSTALL_E2E_AGENT_TURN_TIMEOUT_SECONDS", "300s"],
506+["provider timeout", "OPENCLAW_INSTALL_E2E_OPENAI_PROVIDER_TIMEOUT_SECONDS", "1e3"],
507+["parallel toggle", "OPENCLAW_INSTALL_E2E_AGENT_TURNS_PARALLEL", "2"],
508+["tool smoke toggle", "OPENCLAW_INSTALL_E2E_AGENT_TOOL_SMOKE", "false"],
509+])("rejects invalid install E2E Docker %s before image build", (_label, envName, value) => {
510+const result = spawnSync("bash", [INSTALL_E2E_DOCKER_PATH], {
511+encoding: "utf8",
512+env: {
513+ ...process.env,
514+[envName]: value,
515+},
516+});
517+518+expect(result.status).toBe(2);
519+expect(result.stderr).toContain(`invalid ${envName}: ${value}`);
520+expect(result.stdout).not.toContain("==> Build image:");
521+});
522+473523it("validates agent timing and toggle knobs before running provider setup", () => {
474524const script = readFileSync(INSTALL_E2E_RUNNER_PATH, "utf8");
475525此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。