mirror of
https://github.com/azaion/gps-denied-onboard.git
synced 2026-06-21 08:31:13 +00:00
c3650d979d
Provide deterministic geometry/time-sync helpers and structured config, error, health, and telemetry primitives for downstream runtime components. Co-authored-by: Cursor <cursoragent@cursor.com>
66 lines
2.0 KiB
Python
66 lines
2.0 KiB
Python
from shared.config import validate_runtime_profile
|
|
from shared.errors import ErrorEnvelope, ResultEnvelope
|
|
from shared.telemetry import HealthEvent, MetricsLabels
|
|
|
|
|
|
def test_missing_production_cache_dir_returns_readiness_failure() -> None:
|
|
# Arrange
|
|
payload = {
|
|
"environment": "production",
|
|
"config_dir": "/etc/gps-denied-onboard",
|
|
"fdr_dir": "/var/lib/gps-denied/fdr",
|
|
"database_url": "postgresql://localhost/gpsd",
|
|
"mavlink_url": "serial:/dev/ttyTHS1:921600",
|
|
"camera_source": "hardware",
|
|
"signing_key_ref": "secret-ref",
|
|
}
|
|
|
|
# Act
|
|
result = validate_runtime_profile("runtime", payload)
|
|
|
|
# Assert
|
|
assert result.ok is False
|
|
assert result.error is not None
|
|
assert result.error.component == "runtime"
|
|
assert result.error.category == "configuration"
|
|
assert result.error.severity == "critical"
|
|
assert result.error.retryable is False
|
|
|
|
|
|
def test_dependency_error_envelope_has_required_structured_fields() -> None:
|
|
# Act
|
|
result = ResultEnvelope.failure(
|
|
ErrorEnvelope(
|
|
component="tile_manager",
|
|
category="dependency",
|
|
message="postgis unavailable",
|
|
severity="error",
|
|
retryable=True,
|
|
cause="connection refused",
|
|
)
|
|
)
|
|
|
|
# Assert
|
|
assert result.ok is False
|
|
assert result.error is not None
|
|
assert result.error.component == "tile_manager"
|
|
assert result.error.category == "dependency"
|
|
assert result.error.severity == "error"
|
|
assert result.error.retryable is True
|
|
|
|
|
|
def test_health_event_and_metrics_labels_are_fdr_safe_metadata() -> None:
|
|
# Act
|
|
health = HealthEvent(
|
|
component="runtime",
|
|
timestamp_ns=1,
|
|
liveness="alive",
|
|
readiness="ready",
|
|
dependency_state={"postgis": "ready"},
|
|
)
|
|
labels = MetricsLabels(component="runtime", action="startup", status="ok")
|
|
|
|
# Assert
|
|
assert health.dependency_state["postgis"] == "ready"
|
|
assert labels.status == "ok"
|