Files
gps-denied-onboard/docker-compose.test.yml
Oleksandr Bezdieniezhnykh 38170b3499 [AZ-894] [AZ-895] e2e harnesses: enable BUILD_CSV_REPLAY_ADAPTER=ON
AZ-894 added the CSV adapter behind BUILD_CSV_REPLAY_ADAPTER; AZ-895
made the (video, CSV) path the primary replay surface. The two e2e
compose files (docker-compose.test.yml + docker-compose.test.jetson.yml)
were never updated to set the flag, so the airborne replay binary
inside the e2e-runner container hit FcAdapterConfigError as soon as
the composition root tried to construct CsvReplayFcAdapter.

Caught by a Jetson harness run (5 failures, all in
tests/e2e/replay/test_derkachi_1min.py, all with the same stack and
the same root cause). After this fix the Jetson run drops to 4
failures, all sharing the AZ-848 ESKF-divergence root cause — handled
in the follow-up commit.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-26 22:52:18 +03:00

89 lines
3.3 KiB
YAML

services:
companion:
extends:
file: docker-compose.yml
service: companion
environment:
LOG_LEVEL: INFO
operator-orchestrator:
extends:
file: docker-compose.yml
service: operator-orchestrator
mock-sat:
extends:
file: docker-compose.yml
service: mock-sat
db:
extends:
file: docker-compose.yml
service: db
e2e-runner:
build:
context: .
dockerfile: tests/e2e/Dockerfile
image: gps-denied-onboard/e2e-runner:dev
depends_on:
companion:
condition: service_healthy
mock-sat:
condition: service_healthy
db:
condition: service_healthy
environment:
# FullSystemConfig requires this full env set (see
# src/gps_denied_onboard/config/loader.py:_check_required_env).
# Values mirror the `companion` service in docker-compose.yml so
# the subprocess invoked by the replay tests can resolve identically.
GPS_DENIED_FC_PROFILE: ardupilot_plane
GPS_DENIED_TIER: "1"
DB_URL: postgresql://gps_denied:dev@db:5432/gps_denied
SATELLITE_PROVIDER_URL: http://mock-sat:5100
COMPANION_URL: http://companion:8080
CAMERA_CALIBRATION_PATH: /opt/tests/fixtures/calibration/adti26.json
LOG_LEVEL: INFO
LOG_SINK: console
INFERENCE_BACKEND: pytorch_fp16
FDR_PATH: /var/lib/gps-denied/fdr
TILE_CACHE_PATH: /var/lib/gps-denied/tiles
MAVLINK_SIGNING_KEY: /opt/tests/fixtures/mavlink_signing/dev_key
# Track-1 bootstrap harness: enable the heavy replay-pipeline tests
# in tests/e2e/replay/. AZ-602 / AZ-603 / AZ-604.
RUN_REPLAY_E2E: "1"
# Replay-mode build flags (Invariant 9; see
# _replay_branch.REPLAY_BUILD_FLAGS). All three must be ON for
# the replay path to construct — VideoFileFrameSource gates
# cv2.VideoCapture, TlogReplayFcAdapter gates pymavlink, and
# JsonlReplaySink gates the noop-transport sink. The Reality
# Gate e2e was originally validated only at the auto-sync
# layer (which fired before any of these three were touched);
# since AZ-611 lets tests bypass auto-sync, the next two
# gates surface — hence all three are required here.
BUILD_VIDEO_FILE_FRAME_SOURCE: "ON"
BUILD_TLOG_REPLAY_ADAPTER: "ON"
BUILD_REPLAY_SINK_JSONL: "ON"
# AZ-894 / AZ-895: the CSV-driven path is now the PRIMARY replay
# surface (auto-sync was deprecated). `_replay_branch._build_csv_bundle`
# constructs `CsvReplayFcAdapter`, which fails fast at __init__ when
# this flag is OFF — every test in tests/e2e/replay/ that runs the
# `replay_runner` fixture trips that gate without this line.
BUILD_CSV_REPLAY_ADAPTER: "ON"
volumes:
- ./tests:/opt/tests:ro
# Derkachi fixture (~60 s clip) consumed by the replay e2e suite.
# Mount path matches `tests/e2e/replay/conftest._derkachi_dir()`,
# which resolves to <repo-root>/_docs/00_problem/input_data/...
# where <repo-root> == /opt inside the container.
- ./_docs/00_problem/input_data:/opt/_docs/00_problem/input_data:ro
# Writable runtime dirs the SUT expects (FDR_PATH, TILE_CACHE_PATH).
- fdr-data:/var/lib/gps-denied/fdr
- tile-data:/var/lib/gps-denied/tiles
volumes:
db-data: {}
fdr-data: {}
tile-data: {}