Platform Integration Test
Status & scope
- Module:
tests/test_platform_integration.py - Milestone: Phase 3
Purpose
End-to-end test proving prism (the cost-lens engine; axonis-prism, ex-axonis-lens) runs through the platform stack. Stubbed ES replaces UDS. Validates: parse → resolve sources → run_lens → evidence block → serialization → block schema compliance.
Test Architecture
test_platform_integration.py
├── StubUDSAdapter ← returns canned data for uds:// sources
├── test_traversal_e2e ← lens YAML → route → evidence
├── test_threat_e2e ← lens YAML → risk surface → evidence
├── test_observation_e2e ← lens YAML → coverage → evidence
├── test_temporal_e2e ← lens YAML → action windows → evidence
├── test_entity_output_compose ← correlation:// (parallax entity output) → cost layer → evidence
├── test_composition_e2e ← threat → traversal composition → evidence
├── test_coa_comparison ← 3 COAs → comparison → ranked → evidence
├── test_evidence_schema ← evidence block matches DES block schema
└── test_serialization_rt ← LensResult → JSON → LensResult roundtrip
StubUDSAdapter
class StubUDSAdapter(SourceAdapter):
"""Returns canned data for uds:// sources. No ES required."""
def __init__(self, fixture_dir: str):
self.fixtures = load_fixtures(fixture_dir)
def resolve(self, uri: str) -> Any:
# uds://bio_case → fixtures/bio_case.json
key = uri.replace("uds://", "")
return self.fixtures[key]
Test Fixtures
tests/fixtures/platform/
traversal_lens.yaml ← Lens spec for route
threat_lens.yaml ← Lens spec for risk surface
observation_lens.yaml ← Lens spec for coverage
temporal_lens.yaml ← Lens spec for action windows
compose_entity_lens.yaml ← cost lens with a correlation:// layer (consumes entity output)
stub_data/
road_graph.json ← Small graph (20 nodes)
threat_overlay.json ← 10x10 risk grid
tle_subset.json ← 3 satellite TLEs
entity_output.json ← canned parallax entity-lens result for the correlation source
What This Proves
| Assertion | Why It Matters |
|---|---|
run_lens() accepts pack-parsed specs |
Cortex can call it |
| Stubbed sources work identically | Can test without ES |
| Evidence blocks have valid hashes | DES block schema compliance |
| Serialization roundtrips cleanly | REST transport works |
| All 4 cost lens types execute | Cost-lens engine covers its full type set (entity lenses are parallax's) |
| Entity output composes as a cost layer | The sanctioned cross-engine seam (correlation source) works |
| Composition resolves and executes | Multi-lens scenarios work |
| COA comparison ranks correctly | Decision support works |
File Layout
tests/
test_platform_integration.py
fixtures/platform/
*.yaml, stub_data/*.json
DO NOT
- Require ES, Cortex, or any platform service to run
- Test cortex or beacon code — this tests prism (the cost-lens engine) only
- Skip evidence validation — every test verifies hashes
Depends on: component.prism.packaging, component.prism.source-adapters
Required by: component.prism.platform-integration