@@ -1114,6 +1114,40 @@ OPENCLAW_DOCKER_E2E_DISABLE_RESOURCE_LIMITS=1 docker_e2e_docker_cmd run demo
|
1114 | 1114 | } |
1115 | 1115 | }); |
1116 | 1116 | |
| 1117 | +it("rejects invalid Docker run pids limits before invoking docker", () => { |
| 1118 | +const workDir = mkdtempSync(join(tmpdir(), "openclaw-docker-resource-pids-")); |
| 1119 | + |
| 1120 | +try { |
| 1121 | +const rootDir = process.cwd(); |
| 1122 | +const script = ` |
| 1123 | +set -euo pipefail |
| 1124 | +ROOT_DIR=${shellQuote(rootDir)} |
| 1125 | +TMPDIR=${shellQuote(workDir)} |
| 1126 | +export ROOT_DIR TMPDIR |
| 1127 | + |
| 1128 | +docker() { |
| 1129 | + printf invoked >"$TMPDIR/docker-seen" |
| 1130 | +} |
| 1131 | +export -f docker |
| 1132 | + |
| 1133 | +source "$ROOT_DIR/scripts/lib/docker-e2e-container.sh" |
| 1134 | + |
| 1135 | +set +e |
| 1136 | +OPENCLAW_DOCKER_E2E_PIDS_LIMIT=many docker_e2e_docker_cmd run demo 2>"$TMPDIR/stderr" |
| 1137 | +status="$?" |
| 1138 | +set -e |
| 1139 | + |
| 1140 | +[[ "$status" = "2" ]] |
| 1141 | +[[ "$(<"$TMPDIR/stderr")" = *"invalid OPENCLAW_DOCKER_E2E_PIDS_LIMIT: many"* ]] |
| 1142 | +[[ ! -e "$TMPDIR/docker-seen" ]] |
| 1143 | +`; |
| 1144 | + |
| 1145 | +execFileSync("bash", ["-lc", script], { encoding: "utf8" }); |
| 1146 | +} finally { |
| 1147 | +rmSync(workDir, { recursive: true, force: true }); |
| 1148 | +} |
| 1149 | +}); |
| 1150 | + |
1117 | 1151 | for (const [shellSignal, expectedStatus] of [ |
1118 | 1152 | ["TERM", "143"], |
1119 | 1153 | ["HUP", "129"], |
@@ -1324,6 +1358,48 @@ stderr="$(<"$TMPDIR/stderr")"
|
1324 | 1358 | } |
1325 | 1359 | }); |
1326 | 1360 | |
| 1361 | +it("rejects invalid package-backed Docker run pids limits before invoking docker", () => { |
| 1362 | +const workDir = mkdtempSync(join(tmpdir(), "openclaw-docker-package-pids-")); |
| 1363 | + |
| 1364 | +try { |
| 1365 | +const rootDir = process.cwd(); |
| 1366 | +const script = ` |
| 1367 | +set -euo pipefail |
| 1368 | +ROOT_DIR=${shellQuote(rootDir)} |
| 1369 | +TMPDIR=${shellQuote(workDir)} |
| 1370 | +export ROOT_DIR TMPDIR |
| 1371 | + |
| 1372 | +dirname() { |
| 1373 | + /usr/bin/dirname "$@" |
| 1374 | +} |
| 1375 | + |
| 1376 | +docker_e2e_docker_cmd() { |
| 1377 | + return 0 |
| 1378 | +} |
| 1379 | + |
| 1380 | +docker() { |
| 1381 | + printf invoked >"$TMPDIR/docker-seen" |
| 1382 | +} |
| 1383 | +export -f docker_e2e_docker_cmd docker |
| 1384 | + |
| 1385 | +source "$ROOT_DIR/scripts/lib/docker-e2e-package.sh" |
| 1386 | + |
| 1387 | +set +e |
| 1388 | +OPENCLAW_DOCKER_E2E_PIDS_LIMIT=many docker_e2e_docker_run_cmd run demo 2>"$TMPDIR/stderr" |
| 1389 | +status="$?" |
| 1390 | +set -e |
| 1391 | + |
| 1392 | +[[ "$status" = "2" ]] |
| 1393 | +[[ "$(<"$TMPDIR/stderr")" = *"invalid OPENCLAW_DOCKER_E2E_PIDS_LIMIT: many"* ]] |
| 1394 | +[[ ! -e "$TMPDIR/docker-seen" ]] |
| 1395 | +`; |
| 1396 | + |
| 1397 | +execFileSync("bash", ["-lc", script], { encoding: "utf8" }); |
| 1398 | +} finally { |
| 1399 | +rmSync(workDir, { recursive: true, force: true }); |
| 1400 | +} |
| 1401 | +}); |
| 1402 | + |
1327 | 1403 | it("uses gtimeout for package-backed Docker runs without the shared timeout helper", () => { |
1328 | 1404 | const workDir = mkdtempSync(join(tmpdir(), "openclaw-docker-package-gtimeout-")); |
1329 | 1405 | |
|