from __future__ import annotations import unittest from backend.observability_utils import RequestMetricsRegistry, elapsed_ms, make_request_id class ObservabilityUtilsTests(unittest.TestCase): def test_make_request_id_returns_short_hex_token(self) -> None: request_id = make_request_id() self.assertEqual(len(request_id), 12) int(request_id, 16) def test_request_metrics_registry_tracks_counts_and_errors(self) -> None: registry = RequestMetricsRegistry() registry.record("/api/ping", 200, 10.0) registry.record("/api/ping", 503, 30.0) snapshot = registry.snapshot() self.assertEqual(snapshot["total_requests"], 2) self.assertEqual(snapshot["total_errors"], 1) self.assertEqual(snapshot["routes"]["/api/ping"]["avg_duration_ms"], 20.0) self.assertEqual(snapshot["routes"]["/api/ping"]["last_status_code"], 503) def test_elapsed_ms_is_non_negative(self) -> None: value = elapsed_ms(0.0) self.assertGreaterEqual(value, 0.0) if __name__ == "__main__": unittest.main()