88 lines
2.9 KiB
Python
88 lines
2.9 KiB
Python
#!/usr/bin/env python3
|
|
|
|
import importlib.util
|
|
import sys
|
|
import unittest
|
|
from pathlib import Path
|
|
|
|
|
|
PROJECT_ROOT = Path(__file__).resolve().parents[1]
|
|
MODULE_PATH = PROJECT_ROOT / "tools" / "performance-baseline.py"
|
|
SPEC = importlib.util.spec_from_file_location(
|
|
"performance_baseline",
|
|
MODULE_PATH,
|
|
)
|
|
MODULE = importlib.util.module_from_spec(SPEC)
|
|
assert SPEC.loader is not None
|
|
sys.modules[SPEC.name] = MODULE
|
|
SPEC.loader.exec_module(MODULE)
|
|
|
|
|
|
class StatisticsTests(unittest.TestCase):
|
|
def test_percentile_interpolates_sorted_values(self):
|
|
self.assertEqual(MODULE.percentile([40, 10, 30, 20], 50), 25)
|
|
self.assertEqual(MODULE.percentile([10, 20], 95), 19.5)
|
|
|
|
def test_percentile_rejects_empty_samples(self):
|
|
with self.assertRaisesRegex(ValueError, "at least one"):
|
|
MODULE.percentile([], 50)
|
|
|
|
def test_summary_exposes_required_latency_percentiles(self):
|
|
value = MODULE.summarize_ms([1.0, 2.0, 3.0, 20.0])
|
|
self.assertEqual(value["samples"], 4)
|
|
self.assertEqual(value["p50_ms"], 2.5)
|
|
self.assertEqual(value["max_ms"], 20.0)
|
|
|
|
|
|
class TelemetryAnalysisTests(unittest.TestCase):
|
|
def test_prefixed_telemetry_line_is_parsed(self):
|
|
value = MODULE.parse_telemetry_line(
|
|
'2026-10-14 INFO telemetry '
|
|
'{"name":"ocr.scan","status":"ok","elapsed_ms":12.5}'
|
|
)
|
|
self.assertEqual(value["name"], "ocr.scan")
|
|
self.assertEqual(value["elapsed_ms"], 12.5)
|
|
|
|
def test_unrelated_or_invalid_lines_are_ignored(self):
|
|
self.assertIsNone(MODULE.parse_telemetry_line("ordinary log line"))
|
|
self.assertIsNone(MODULE.parse_telemetry_line("telemetry not-json"))
|
|
self.assertIsNone(MODULE.parse_telemetry_line('{"elapsed_ms":12}'))
|
|
|
|
def test_summary_ranks_stages_by_p95_and_counts_statuses(self):
|
|
records = [
|
|
{
|
|
"name": "edge.ack.prepared",
|
|
"status": "ok",
|
|
"elapsed_ms": 2.0,
|
|
"event_hash": "event-a",
|
|
},
|
|
{
|
|
"name": "edge.ack.prepared",
|
|
"status": "ok",
|
|
"elapsed_ms": 4.0,
|
|
"event_hash": "event-b",
|
|
},
|
|
{
|
|
"name": "ocr.scan",
|
|
"status": "ok",
|
|
"elapsed_ms": 5000.0,
|
|
},
|
|
{
|
|
"name": "ocr.scan",
|
|
"status": "error",
|
|
"elapsed_ms": "private-invalid-value",
|
|
},
|
|
]
|
|
|
|
value = MODULE.summarize_telemetry(records)
|
|
|
|
self.assertEqual(value["records"], 4)
|
|
self.assertEqual(value["events"], 2)
|
|
self.assertEqual(value["stages"][0]["name"], "ocr.scan")
|
|
self.assertEqual(value["stages"][1]["name"], "edge.ack.prepared")
|
|
self.assertEqual(value["statuses"]["ocr.scan:error"], 1)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|