Files
detections/run-tests.sh
T
Oleksandr Bezdieniezhnykh 8ce40a9385 Add AIAvailabilityStatus and AIRecognitionConfig classes for AI model management
- Introduced `AIAvailabilityStatus` class to manage the availability status of AI models, including methods for setting status and logging messages.
- Added `AIRecognitionConfig` class to encapsulate configuration parameters for AI recognition, with a static method for creating instances from dictionaries.
- Implemented enums for AI availability states to enhance clarity and maintainability.
- Updated related Cython files to support the new classes and ensure proper type handling.

These changes aim to improve the structure and functionality of the AI model management system, facilitating better status tracking and configuration handling.
2026-03-31 05:49:51 +03:00

70 lines
2.0 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
ROOT="$(cd "$(dirname "$0")" && pwd)"
FIXTURES="$ROOT/e2e/fixtures"
LOADER_PORT=8080
ANNOTATIONS_PORT=8081
DETECTIONS_PORT=8000
PIDS=()
cleanup() {
for pid in "${PIDS[@]+"${PIDS[@]}"}"; do
kill "$pid" 2>/dev/null || true
done
wait 2>/dev/null
}
trap cleanup EXIT
echo "Building Cython extensions ..."
python setup.py build_ext --inplace
for port in $LOADER_PORT $ANNOTATIONS_PORT $DETECTIONS_PORT; do
if lsof -ti :"$port" >/dev/null 2>&1; then
echo "Killing stale process on port $port ..."
lsof -ti :"$port" | xargs kill -9 2>/dev/null || true
sleep 1
fi
done
echo "Starting mock-loader on :$LOADER_PORT ..."
MODELS_ROOT="$FIXTURES" \
python -m gunicorn --bind "0.0.0.0:$LOADER_PORT" --workers 1 --timeout 120 \
'e2e.mocks.loader.app:app' >/dev/null 2>&1 &
PIDS+=($!)
echo "Starting mock-annotations on :$ANNOTATIONS_PORT ..."
python -m gunicorn --bind "0.0.0.0:$ANNOTATIONS_PORT" --workers 1 --timeout 120 \
'e2e.mocks.annotations.app:app' >/dev/null 2>&1 &
PIDS+=($!)
echo "Starting detections service on :$DETECTIONS_PORT ..."
LOADER_URL="http://localhost:$LOADER_PORT" \
ANNOTATIONS_URL="http://localhost:$ANNOTATIONS_PORT" \
PYTHONPATH="$ROOT/src" \
python -m uvicorn main:app --host 0.0.0.0 --port "$DETECTIONS_PORT" \
--log-level warning >/dev/null 2>&1 &
PIDS+=($!)
echo "Waiting for services ..."
for url in \
"http://localhost:$DETECTIONS_PORT/health" \
"http://localhost:$LOADER_PORT/mock/status" \
"http://localhost:$ANNOTATIONS_PORT/mock/status"; do
for i in $(seq 1 30); do
if curl -sf "$url" >/dev/null 2>&1; then break; fi
if [ "$i" -eq 30 ]; then echo "ERROR: $url not ready" >&2; exit 1; fi
sleep 1
done
done
echo "All services ready. Running tests ..."
echo ""
BASE_URL="http://localhost:$DETECTIONS_PORT" \
MOCK_LOADER_URL="http://localhost:$LOADER_PORT" \
MOCK_ANNOTATIONS_URL="http://localhost:$ANNOTATIONS_PORT" \
MEDIA_DIR="$FIXTURES" \
python -m pytest e2e/tests/ -v --tb=short "$@"