



























@@ -118,6 +118,8 @@ describe("docker build helper", () => {
118118expect(helper).toContain("OPENCLAW_TESTBOX");
119119expect(e2eImageHelper).toContain("docker_build_on_missing_enabled");
120120expect(e2eImageHelper).toContain("Docker image not available; building");
121+expect(e2eImageHelper).toContain('docker_e2e_docker_cmd image inspect "$image_name"');
122+expect(e2eImageHelper).toContain('docker_e2e_docker_cmd pull "$image_name"');
121123expect(liveBuild).toContain("docker image inspect");
122124expect(liveBuild).toContain("docker pull");
123125expect(liveBuild).toContain("Live-test image not available; building");
@@ -131,6 +133,65 @@ describe("docker build helper", () => {
131133);
132134});
133135136+it("keeps reused Docker image probes behind the timeout-aware helper", () => {
137+const workDir = mkdtempSync(join(tmpdir(), "openclaw-docker-image-reuse-timeout-"));
138+139+try {
140+const rootDir = process.cwd();
141+const script = `
142+set -euo pipefail
143+ROOT_DIR=${shellQuote(rootDir)}
144+TMPDIR=${shellQuote(workDir)}
145+export ROOT_DIR TMPDIR
146+export DOCKER_COMMAND_TIMEOUT=3s
147+export OPENCLAW_SKIP_DOCKER_BUILD=1
148+149+mkdir -p "$TMPDIR/bin"
150+cat >"$TMPDIR/bin/timeout" <<'SH'
151+#!/usr/bin/env bash
152+printf "%s|%s\\n" "$1" "$2 $3 $4" >>"$TMPDIR/timeout-seen"
153+shift
154+"$@"
155+SH
156+chmod +x "$TMPDIR/bin/timeout"
157+export PATH="$TMPDIR/bin:$PATH"
158+159+docker() {
160+ printf "%s\\n" "$*" >>"$TMPDIR/docker-seen"
161+ case "$1 $2" in
162+ "image inspect")
163+ return 1
164+ ;;
165+ "pull openclaw-reuse-image")
166+ return 0
167+ ;;
168+ *)
169+ return 9
170+ ;;
171+ esac
172+}
173+export -f docker
174+175+source "$ROOT_DIR/scripts/lib/docker-e2e-image.sh"
176+177+docker_e2e_build_or_reuse \\
178+ openclaw-reuse-image \\
179+ reuse-timeout-proof \\
180+ "$ROOT_DIR/scripts/e2e/Dockerfile" \\
181+ "$ROOT_DIR" \\
182+ functional
183+184+test "$(grep -c '^3s|' "$TMPDIR/timeout-seen")" = "2"
185+grep -q '^image inspect openclaw-reuse-image$' "$TMPDIR/docker-seen"
186+grep -q '^pull openclaw-reuse-image$' "$TMPDIR/docker-seen"
187+`;
188+189+execFileSync("bash", ["-lc", script], { encoding: "utf8" });
190+} finally {
191+rmSync(workDir, { recursive: true, force: true });
192+}
193+});
194+134195it("removes functional Docker build package inputs after the build", () => {
135196const workDir = mkdtempSync(join(tmpdir(), "openclaw-docker-build-cleanup-"));
136197此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。