Files
App/scripts/run-tests.sh
HiepLM fbc0c11be2
Some checks failed
Test / test (push) Has been cancelled
Test lần 2
2026-06-13 13:58:38 +07:00

81 lines
2.1 KiB
Bash
Executable File

#!/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=""
# Dọn server test cũ trên cùng port (nếu còn).
if command -v fuser >/dev/null 2>&1; then
fuser -k "${PORT}/tcp" 2>/dev/null || true
elif command -v lsof >/dev/null 2>&1; then
PIDS="$(lsof -ti "tcp:${PORT}" 2>/dev/null || true)"
[[ -n "$PIDS" ]] && kill $PIDS 2>/dev/null || true
fi
sleep 0.2
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."