Files
gps-denied-onboard/tests/unit/test_logging_smoke.py
T
Oleksandr Bezdieniezhnykh 8e71f6c002 [AZ-266] [AZ-269] [AZ-277] [AZ-280] Cross-cutting log/config + SE3/SHA256 helpers
AZ-266: schema-compliant JSON logging entrypoint, level normalisation,
handler-topology guard, format-error fallback (log_record_schema v1.0.0).
AZ-269: env > YAML > defaults config loader, frozen Config dataclass,
missing-var fail-fast with pointer to .env.example, component-block registry.
AZ-277: GTSAM-backed SE3Utils (matrix<->SE3 + exp/log/adjoint) with strict
orthogonality, dtype, and bottom-row contract enforcement.
AZ-280: atomicwrites-backed write_atomic + independent verify +
order-deterministic aggregate_hash; sidecar format strictness.
pyproject.toml pins gtsam>=4.2,<5.0 and atomicwrites>=1.4,<2.0
(named-backend deps per the AZ-277 / AZ-280 contracts).
139 unit tests pass (44 new). Review verdict: PASS_WITH_WARNINGS;
findings are perf-NFR + journald deferrals, no blocking issues.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-11 01:33:42 +03:00

42 lines
1.1 KiB
Python

"""Structured logging smoke — AZ-263 AC-7 (schema-compliant per AZ-266)."""
import io
import json
import logging
from gps_denied_onboard.logging import get_logger
from gps_denied_onboard.logging.structured import JsonFormatter
def test_get_logger_returns_logger_instance() -> None:
# Act
logger = get_logger("test.smoke")
# Assert
assert isinstance(logger, logging.Logger)
def test_log_lines_are_single_json_objects() -> None:
# Arrange
stream = io.StringIO()
handler = logging.StreamHandler(stream)
handler.setFormatter(JsonFormatter())
logger = logging.getLogger("test.json.unit")
logger.handlers = [handler]
logger.setLevel(logging.DEBUG)
logger.propagate = False
# Act
logger.error(
"hello world",
extra={"kind": "test.smoke", "kv": {"event": "smoke", "value": 42}},
)
# Assert
line = stream.getvalue().strip().splitlines()[-1]
payload = json.loads(line)
assert payload["level"] == "ERROR"
assert payload["msg"] == "hello world"
assert payload["kind"] == "test.smoke"
assert payload["kv"] == {"event": "smoke", "value": 42}