# Test Environment ## Runtime Requirements | Requirement | Specification | |-------------|--------------| | Python | 3.10+ | | OS | Linux or macOS (POSIX filesystem paths) | | GPU | Optional — ONNX inference falls back to CPUExecutionProvider | | Disk | Temp directory for fixture data (~500MB for augmentation output) | | Network | Not required (all tests are offline) | ## Execution Modes Tests MUST be runnable in two ways: ### 1. Local (no Docker) — primary mode Run directly on the host machine. Required for macOS development where Docker has GPU/performance limitations. ```bash scripts/run-tests-local.sh ``` ### 2. Docker — CI/portable mode Run inside a container for reproducible CI environments (Linux-based CI runners). ```bash docker compose -f docker-compose.test.yml up --build --abort-on-container-exit ``` Both modes run the same pytest suite; the only difference is the runtime environment. ## Dependencies All test dependencies are a subset of the production `requirements.txt` plus pytest: | Package | Purpose | |---------|---------| | pytest | Test runner | | albumentations | Augmentation tests | | opencv-python-headless | Image I/O (headless — no GUI) | | numpy | Array operations | | onnxruntime | ONNX inference (CPU fallback) | | cryptography | Encryption tests | | msgpack | Annotation queue message tests | | PyYAML | Config/YAML generation tests | ## Fixture Data | Fixture | Location | Size | |---------|----------|------| | 100 annotated images | `_docs/00_problem/input_data/dataset/images/` | ~50MB | | 100 YOLO labels | `_docs/00_problem/input_data/dataset/labels/` | ~10KB | | ONNX model | `_docs/00_problem/input_data/azaion.onnx` | 81MB | | Class definitions | `classes.json` (project root) | 2KB | ## Test Isolation - Each test creates a temporary directory (via `tmp_path` pytest fixture) for filesystem operations - No tests modify the actual `/azaion/` directory structure - No tests require running external services (RabbitMQ, Azaion API, S3 CDN) - Constants paths are patched/overridden to point to temp directories during tests ## Excluded (Require External Services) | Component | Service Required | Reason for Exclusion | |-----------|-----------------|---------------------| | API upload/download | Azaion REST API | No mock server; real API has auth | | CDN upload/download | S3-compatible CDN | No mock S3; real CDN has credentials | | Queue consumption | RabbitMQ Streams | No mock broker; rstream requires live connection | | TensorRT inference | NVIDIA GPU + TensorRT | Hardware-specific; cannot run in CI without GPU |