mirror of
https://github.com/azaion/detections.git
synced 2026-06-21 12:51:08 +00:00
89 lines
2.5 KiB
Bash
Executable File
89 lines
2.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
PROFILE="${E2E_PROFILE:-cpu}"
|
|
case "$PROFILE" in
|
|
cpu)
|
|
DETECTIONS_SERVICE="detections"
|
|
;;
|
|
gpu)
|
|
DETECTIONS_SERVICE="detections-gpu"
|
|
;;
|
|
jetson)
|
|
DETECTIONS_SERVICE="detections-jetson"
|
|
;;
|
|
*)
|
|
echo "ERROR: unsupported E2E_PROFILE=$PROFILE (expected: cpu, gpu, jetson)"
|
|
exit 2
|
|
;;
|
|
esac
|
|
|
|
COMPOSE="docker compose -f docker-compose.test.yml --profile $PROFILE"
|
|
LOG_TAIL="${E2E_LOG_TAIL:-100}"
|
|
|
|
mkdir -p results logs
|
|
chmod 777 results logs
|
|
|
|
if [[ -d fixtures/classes.json ]]; then
|
|
rm -rf fixtures/classes.json
|
|
fi
|
|
if [[ ! -f fixtures/classes.json && -f ../classes.json ]]; then
|
|
cp ../classes.json fixtures/classes.json
|
|
fi
|
|
if [[ ! -f fixtures/classes.json ]]; then
|
|
echo "ERROR: e2e/fixtures/classes.json is missing"
|
|
exit 1
|
|
fi
|
|
|
|
RUNNER_ENV_ARGS=(-e E2E_PROFILE="$PROFILE")
|
|
if [[ "$PROFILE" == "jetson" ]]; then
|
|
RUNNER_ENV_ARGS+=(
|
|
-e E2E_WAIT_FOR_ENGINE_ENABLED="${E2E_WAIT_FOR_ENGINE_ENABLED:-0}"
|
|
-e E2E_ENGINE_WAIT_TIMEOUT="${E2E_ENGINE_WAIT_TIMEOUT:-900}"
|
|
)
|
|
fi
|
|
|
|
usage() {
|
|
echo "Usage: $0 <test_path> [pytest_args...]"
|
|
echo ""
|
|
echo "Examples:"
|
|
echo " $0 tests/test_video.py # run all tests in file"
|
|
echo " $0 tests/test_video.py::test_ft_p_10_frame_sampling_ac1 # run single test"
|
|
echo " $0 tests/test_video.py -k 'frame_sampling' # run by keyword"
|
|
echo ""
|
|
echo "Environment:"
|
|
echo " E2E_PROFILE=cpu|gpu|jetson compose profile to run (default: cpu)"
|
|
echo ""
|
|
echo "Flags -v -x -s are always included."
|
|
exit 1
|
|
}
|
|
|
|
[[ $# -lt 1 ]] && usage
|
|
|
|
$COMPOSE down -v --remove-orphans || true
|
|
$COMPOSE up -d --build "$DETECTIONS_SERVICE"
|
|
echo "--- Waiting for detections service to become healthy..."
|
|
for i in $(seq 1 60); do
|
|
if $COMPOSE exec -T "$DETECTIONS_SERVICE" python3 -c "import urllib.request; urllib.request.urlopen('http://localhost:8080/health')" 2>/dev/null; then
|
|
echo "--- Detections service is healthy"
|
|
break
|
|
fi
|
|
if [[ "$i" == "60" ]]; then
|
|
echo "ERROR: detections service did not become healthy"
|
|
$COMPOSE logs "$DETECTIONS_SERVICE" --tail "$LOG_TAIL"
|
|
exit 1
|
|
fi
|
|
sleep 2
|
|
done
|
|
|
|
echo "--- Running: pytest $* -v -x -s --csv=/results/report.csv"
|
|
set +e
|
|
$COMPOSE run --rm --build --no-deps "${RUNNER_ENV_ARGS[@]}" e2e-runner pytest "$@" -v -x -s --csv=/results/report.csv
|
|
EXIT_CODE=$?
|
|
set -e
|
|
|
|
echo "--- Test finished with exit code $EXIT_CODE"
|
|
echo "--- Detections logs (last $LOG_TAIL lines):"
|
|
$COMPOSE logs "$DETECTIONS_SERVICE" --tail "$LOG_TAIL"
|
|
exit $EXIT_CODE
|