Files
gps-denied-onboard/_docs/02_document/components/09_validation_harness/description.md
T

2.5 KiB

Validation Harness

1. High-Level Overview

Purpose: Drive black-box replay, public dataset, SITL, Jetson, and representative validation through the runtime's public interfaces.

Architectural Pattern: Test harness / scenario runner.

Upstream dependencies: Test data fixtures, public datasets, SITL, Jetson environment.

Downstream consumers: CI/CD pipeline, release evidence review.

2. Internal Interfaces

Interface: ScenarioRunner

Method Input Output Async Error Types
run_scenario ScenarioRequest ScenarioReport Yes FixtureInvalid, RuntimeFailed, ThresholdFailed
validate_fixture FixtureRequest FixtureValidationReport No FixtureInvalid

Input DTOs:

ScenarioRequest:
  scenario_id: string
  execution_environment: enum(replay, sitl, jetson, representative)
  fixture_paths: list[string]

Output DTOs:

ScenarioReport:
  scenario_id: string
  result: enum(pass, fail, blocked)
  metrics: object
  artifacts: list[path]
  failure_reason: string optional

3. Data Access Patterns

Reads versioned fixtures and writes reports. Does not import runtime internals.

4. Implementation Details

State Management: Per-run temporary directories and report aggregation.

Key Dependencies:

Library Purpose
pytest or equivalent Test orchestration
pymavlink/log parser SITL and output validation
Docker/compose runner Replay/SITL environment

Error Handling Strategy:

  • Fixture gaps are reported as blocked, not passed.
  • Threshold failures include metrics and artifacts.

5. Caveats & Edge Cases

Known limitations:

  • Public datasets are not final acceptance evidence unless representative and license-compatible.
  • Missing synchronized target data remains a final acceptance blocker.

6. Dependency Graph

Must be implemented after: public interfaces are defined.

Can be implemented in parallel with: runtime components using mocks/fixtures only after interfaces are stable.

Blocks: CI/release gates.

7. Logging Strategy

Log Level When Example
ERROR Runtime/test process fails scenario_failed id=... reason=...
WARN Fixture blocked fixture_blocked missing=...
INFO Scenario complete scenario_complete id=... result=pass

Log format: Test report CSV/Markdown plus structured runner logs.

Log storage: test-results/.