#!/usr/bin/env bash # Build unit tests, start lidar_manager_web on a temp data dir, run API smoke + pytest. set -euo pipefail ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" cd "$ROOT" PORT="${TEST_PORT:-18080}" BASE="http://127.0.0.1:${PORT}" BIN="${ROOT}/build/lidar_manager_web" DATA_DIR="$(mktemp -d)" SERVER_PID="" cleanup() { if [[ -n "$SERVER_PID" ]] && kill -0 "$SERVER_PID" 2>/dev/null; then kill "$SERVER_PID" 2>/dev/null || true wait "$SERVER_PID" 2>/dev/null || true fi rm -rf "$DATA_DIR" } trap cleanup EXIT echo "==> Configure & build (BUILD_TESTING=ON)" cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=ON cmake --build build -j echo "==> C++ unit tests (GTest)" ./build/lidar_manager_tests echo "==> Prepare isolated data directory" cp -a tests/fixtures/data/. "$DATA_DIR/" mkdir -p "$DATA_DIR/models" echo "==> Start server on port $PORT" "$BIN" "$PORT" "$ROOT/www" "$DATA_DIR/state.json" >"$DATA_DIR/server.log" 2>&1 & SERVER_PID=$! for i in $(seq 1 30); do if curl -sf "$BASE/api/health" >/dev/null 2>&1; then break fi if ! kill -0 "$SERVER_PID" 2>/dev/null; then echo "Server exited early:" >&2 cat "$DATA_DIR/server.log" >&2 || true exit 1 fi sleep 0.2 done if ! curl -sf "$BASE/api/health" >/dev/null 2>&1; then echo "Server did not become ready on $BASE" >&2 cat "$DATA_DIR/server.log" >&2 || true exit 1 fi echo "==> API smoke tests" chmod +x scripts/api-smoke.sh ./scripts/api-smoke.sh "$BASE" if command -v python3 >/dev/null 2>&1; then echo "==> Python integration tests (pytest)" if ! python3 -c "import pytest" 2>/dev/null; then python3 -m pip install --user -q -r tests/requirements.txt fi TEST_BASE_URL="$BASE" python3 -m pytest tests/test_api_integration.py -q else echo "==> Skipping pytest (python3 not found)" fi echo echo "All tests passed."