titan-iac/scripts/tests/test_availability_rollup.py

53 lines
1.7 KiB
Python
Raw Normal View History

"""Unit tests for the Atlas availability publisher."""
import importlib.util
import json
from pathlib import Path
import pytest
def load_module():
"""Load the service-owned rollup module without packaging it."""
path = (
Path(__file__).resolve().parents[2]
/ "services/monitoring/scripts/availability_rollup.py"
)
spec = importlib.util.spec_from_file_location("availability_rollup", path)
module = importlib.util.module_from_spec(spec)
assert spec.loader is not None
spec.loader.exec_module(module)
return module
def test_parse_export_deduplicates_replay_boundaries() -> None:
"""Keep only the final value when replay chunks share a timestamp."""
mod = load_module()
lines = [
(json.dumps({"timestamps": [1000, 2000], "values": [2, 3]}) + "\n").encode(),
(json.dumps({"timestamps": [2000, 3000], "values": [3, 5]}) + "\n").encode(),
]
assert mod.parse_export(lines) == {1000: 2.0, 2000: 3.0, 3000: 5.0}
def test_calculate_availability_uses_all_server_failures() -> None:
"""Calculate one bounded successful-request ratio."""
mod = load_module()
assert mod.calculate_availability(1000, 2) == pytest.approx(0.998)
with pytest.raises(ValueError):
mod.calculate_availability(0, 0)
with pytest.raises(ValueError):
mod.calculate_availability(100, -1)
def test_render_metric_publishes_only_the_request_v4_series() -> None:
"""Render the single series selected by the Grafana panel."""
mod = load_module()
assert mod.render_metric(0.9995, 1234) == (
'atlas:availability:ratio_365d{definition="request-v4",scope="atlas",'
'rollup="yearly"} 0.999500000000 1234\n'
)