





















@@ -35,6 +35,7 @@ const ONBOARD_DOCKER_E2E_PATH = "scripts/e2e/onboard-docker.sh";
3535const KITCHEN_SINK_PLUGIN_DOCKER_E2E_PATH = "scripts/e2e/kitchen-sink-plugin-docker.sh";
3636const KITCHEN_SINK_RPC_DOCKER_E2E_PATH = "scripts/e2e/kitchen-sink-rpc-docker.sh";
3737const CODEX_ON_DEMAND_DOCKER_E2E_PATH = "scripts/e2e/codex-on-demand-docker.sh";
38+const MCP_CODE_MODE_GATEWAY_DOCKER_E2E_PATH = "scripts/e2e/mcp-code-mode-gateway-docker.sh";
3839const MCP_CODE_MODE_GATEWAY_LIVE_DOCKER_E2E_PATH =
3940"scripts/e2e/mcp-code-mode-gateway-live-docker.sh";
4041const CODEX_MEDIA_PATH_SCENARIO_PATH = "scripts/e2e/lib/codex-media-path/scenario.sh";
@@ -2732,6 +2733,27 @@ output="$(cat "$sampler_log")"
27322733expect(result.stderr).not.toContain("OPENAI_API_KEY is required");
27332734});
273427352736+it.each([
2737+[MCP_CODE_MODE_GATEWAY_DOCKER_E2E_PATH, "OPENCLAW_MCP_CODE_MODE_GATEWAY_PORT", "1e3"],
2738+[MCP_CODE_MODE_GATEWAY_DOCKER_E2E_PATH, "OPENCLAW_MCP_CODE_MODE_MOCK_PORT", "65536"],
2739+[MCP_CODE_MODE_GATEWAY_LIVE_DOCKER_E2E_PATH, "OPENCLAW_MCP_CODE_MODE_LIVE_GATEWAY_PORT", "0"],
2740+])(
2741+"rejects invalid MCP code-mode Docker ports before Docker setup",
2742+(scriptPath, envName, value) => {
2743+const result = spawnSync("bash", [scriptPath], {
2744+encoding: "utf8",
2745+env: {
2746+ ...process.env,
2747+[envName]: value,
2748+},
2749+});
2750+2751+expect(result.status).toBe(2);
2752+expect(result.stderr).toContain(`invalid ${envName}: ${value}`);
2753+expect(result.stderr).not.toContain("OPENAI_API_KEY was not available");
2754+},
2755+);
2756+27352757it("forwards every kitchen-sink RPC runtime env knob into Docker", () => {
27362758const runner = readFileSync(KITCHEN_SINK_RPC_DOCKER_E2E_PATH, "utf8");
27372759const walk = readFileSync("scripts/e2e/kitchen-sink-rpc-walk.mjs", "utf8");
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。