SIENTIAPDE-2202
SIENTIAPDE-2202 Add gateway end-to-end test suite (e2e/) End-to-end suite at the repo root, following the Laborious/Orchestrator pattern: numbered scenarios per topic in e2e/scenarios.md (1:1 with test_scenario_* functions), scenario inputs as JSON, Postgres DDL mirrored from production, `integration` marker, excluded from the default pytest run. Every dependency runs for real: MongoDB, Redis, PostgreSQL, MinIO and NATS via testcontainers, OPC UA servers in process (asyncua). Pods are built from the environment like ingestor/app.py and driven one loop iteration at a time. 69 scenarios across 7 topics: slot leasing and failover, subscription reads, NATS writes and write_status (incl. the SIENTIAPDE-2202 timestamp/quality matrix, checked on the server and on the wire), gRPC ReadTag, active reads, client certificates/security, pod lifecycle. Replaces tests/functional (legacy slot v1 tests, fully commented out) and tests/functional/test_write_e2e.py (now scenarios 3.1.x). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -17,9 +17,9 @@ pip install -r requirements.txt -r requirements-dev.txt
|
||||
./run_local.sh # loads .env, runs python -m ingestor.app
|
||||
./run_coverage.sh # pytest --cov=ingestor --cov-report=html, opens report
|
||||
|
||||
pytest # all tests
|
||||
pytest # unit tests (testpaths = tests)
|
||||
pytest tests/unit # unit only
|
||||
pytest tests/functional # functional only (spins up real-ish clients, see conftest.py)
|
||||
pytest e2e/ -o testpaths=e2e -m integration # E2E (Docker: testcontainers + in-process OPC servers)
|
||||
pytest tests/unit/test_ingestor.py::TestClass::test_name # single test
|
||||
pytest --cov=ingestor --cov-report=html # coverage report -> htmlcov/
|
||||
|
||||
@@ -72,6 +72,6 @@ Env vars documented in README ("Configuration" section) and `.env.example`. Nota
|
||||
## Testing notes
|
||||
|
||||
- `tests/unit/managers/` mirrors `ingestor/managers/` 1:1.
|
||||
- `tests/functional/` exercises more end-to-end paths against `conftest.py` fixtures.
|
||||
- `e2e/` is the end-to-end suite (Laborious/Orchestrator pattern): real MongoDB/Redis/Postgres/MinIO/NATS via testcontainers, in-process asyncua servers, pods built like `app.py` (`e2e/helpers.Pod`). Scenarios are numbered by topic in `e2e/scenarios.md`, 1:1 with `test_scenario_<n>_<n>_<n>_*` — keep both in sync. Marked `integration`, not collected by the default `pytest`.
|
||||
- Coverage config (`pyproject.toml` / `.coveragerc`) excludes `ingestor/app.py` (thin entrypoint, signal wiring) — don't chase coverage there.
|
||||
- `ruff` complexity cap is `max-complexity = 15` (mccabe) — factor out branches in manager methods before that.
|
||||
|
||||
Reference in New Issue
Block a user