Files
wehub-resource-sync e0e362d700
SDK Tests / SDK CI (push) Blocked by required conditions
SDK Tests / changes (push) Successful in 2m29s
Real E2E Tests / changes (push) Successful in 2m29s
SDK Tests / Python SDK Tests (sandbox) (push) Waiting to run
SDK Tests / CLI Quality (push) Waiting to run
SDK Tests / CLI Tests (push) Waiting to run
SDK Tests / Python SDK Quality (code-interpreter) (push) Waiting to run
SDK Tests / Python SDK Quality (sandbox) (push) Waiting to run
SDK Tests / Python SDK Tests (code-interpreter) (push) Waiting to run
SDK Tests / JavaScript SDK Quality And Tests (code-interpreter) (push) Waiting to run
SDK Tests / JavaScript SDK Quality And Tests (sandbox) (push) Waiting to run
SDK Tests / Kotlin SDK Quality And Tests (sandbox) (push) Waiting to run
SDK Tests / Kotlin SDK Quality And Tests (code-interpreter) (push) Waiting to run
SDK Tests / C# SDK Quality And Tests (code-interpreter) (push) Waiting to run
SDK Tests / C# SDK Quality And Tests (sandbox) (push) Waiting to run
SDK Tests / Go SDK Quality And Tests (push) Waiting to run
Deploy Docs Pages / build (push) Has been cancelled
Deploy Docs Pages / deploy (push) Has been cancelled
Real E2E Tests / JavaScript E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Python E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Java E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / C# E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Go E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Real E2E CI (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:39:33 +08:00

162 lines
4.7 KiB
Bash
Executable File

#!/bin/bash
# Smoke test: build execd image, extract execd+bwrap, verify bwrap works.
#
# Prerequisites: docker
#
# Usage:
# bash components/execd/tests/smoke_bwrap.sh
#
# Exit 0 on success, non-zero on failure.
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
REPO_ROOT="$(cd "${SCRIPT_DIR}/../../.." && pwd)"
SMOKE_DIR="${REPO_ROOT}/_smoke_bwrap"
IMAGE="execd-bwrap-smoke:test"
cleanup() {
echo ">> Cleaning up..."
rm -rf "${SMOKE_DIR}"
docker rmi -f "${IMAGE}" 2>/dev/null || true
}
trap cleanup EXIT
echo "========================================="
echo " Smoke Test: execd + bwrap Docker Image"
echo "========================================="
# -------------------------------------------------------------------
# Step 1: Build Docker image
# -------------------------------------------------------------------
echo ""
echo ">> Step 1: Building Docker image '${IMAGE}'..."
cd "${REPO_ROOT}"
docker build \
-f components/execd/Dockerfile \
-t "${IMAGE}" \
--build-arg VERSION=smoke-test \
.
echo ">> Image built."
# -------------------------------------------------------------------
# Step 2: Extract binaries from image
# -------------------------------------------------------------------
echo ""
echo ">> Step 2: Extracting execd and bwrap from image..."
mkdir -p "${SMOKE_DIR}"
docker run --rm \
--entrypoint "" \
-v "${SMOKE_DIR}:/out" \
"${IMAGE}" \
sh -c 'cp /execd /usr/local/bin/bwrap /out/ && chmod +x /out/execd /out/bwrap'
echo ">> Extracted:"
ls -lh "${SMOKE_DIR}/execd" "${SMOKE_DIR}/bwrap"
# -------------------------------------------------------------------
# Step 3: Verify bwrap is static
# -------------------------------------------------------------------
echo ""
echo ">> Step 3: Checking bwrap is statically linked..."
if command -v ldd &>/dev/null; then
if ldd "${SMOKE_DIR}/bwrap" 2>&1 | grep -q "not a dynamic executable"; then
echo ">> bwrap is statically linked. ✓"
elif ldd "${SMOKE_DIR}/bwrap" 2>&1 | grep -q "statically linked"; then
echo ">> bwrap is statically linked. ✓"
else
echo ">> WARNING: bwrap appears dynamically linked:"
ldd "${SMOKE_DIR}/bwrap" 2>&1 || true
fi
else
file "${SMOKE_DIR}/bwrap" || true
fi
# -------------------------------------------------------------------
# Step 4: Smoke test bwrap
# -------------------------------------------------------------------
echo ""
echo ">> Step 4: bwrap --version..."
"${SMOKE_DIR}/bwrap" --version 2>&1 || true
echo ""
echo ">> Step 4b: bwrap namespace smoke test (requires root)..."
if sudo -n "${SMOKE_DIR}/bwrap" \
--ro-bind / / \
--proc /proc \
--dev /dev \
--tmpfs /tmp \
-- sh -c 'echo "PID in namespace: $$"' 2>&1; then
echo ">> bwrap namespace smoke test PASSED. ✓"
else
echo ">> bwrap namespace smoke test SKIPPED (no root or userns disabled)."
echo ">> This is OK — execd runs as root inside sandbox containers."
fi
# -------------------------------------------------------------------
# Step 5: Smoke test execd with isolation probe
# -------------------------------------------------------------------
echo ""
echo ">> Step 5: execd isolation probe..."
EXECD="${SMOKE_DIR}/execd"
BWRAP_DIR="${SMOKE_DIR}"
# Put bwrap on PATH for execd to find.
export PATH="${BWRAP_DIR}:${PATH}"
# Start execd in background, capture output.
# Write a minimal isolation config for the smoke test.
SMOKE_ISO_CONFIG="${SMOKE_DIR}/isolation.toml"
cat > "${SMOKE_ISO_CONFIG}" <<'TOML'
upper_root = "/tmp/execd-smoke-isolation"
TOML
"${EXECD}" \
--port 44773 \
--access-token "" \
--isolation-config "${SMOKE_ISO_CONFIG}" \
--log-level 7 \
&
EXECD_PID=$!
# Wait for execd to start.
for i in $(seq 1 30); do
if curl -s http://localhost:44773/ping >/dev/null 2>&1; then
echo ">> execd started (PID ${EXECD_PID})."
break
fi
if ! kill -0 "${EXECD_PID}" 2>/dev/null; then
echo ">> execd failed to start. ✗"
exit 1
fi
sleep 0.2
done
# Ping.
echo ""
echo ">> Step 5b: GET /ping..."
curl -s http://localhost:44773/ping
echo ""
# Isolation probe logged at startup (available=false without bwrap in sandbox).
# Full probe test via /v1/isolated/capabilities deferred to Phase 2.
echo ""
echo ">> Step 5c: isolation probe logged at startup. ✓"
# Shut down execd.
kill "${EXECD_PID}" 2>/dev/null || true
wait "${EXECD_PID}" 2>/dev/null || true
echo ">> execd stopped."
# -------------------------------------------------------------------
# Summary
# -------------------------------------------------------------------
echo ""
echo "========================================="
echo " Smoke Test PASSED"
echo "========================================="
echo " bwrap: static binary, namespace works"
echo " execd: starts, serves /ping"
echo " image: ${IMAGE}"
echo ""