Files
Nexus/tests/test_agent_recovery_dedup.py
T
2026-07-08 22:31:31 +08:00

39 lines
1.3 KiB
Python

"""Recovery detection must emit one notification per metric, not per Redis entry."""
from server.api.agent import _alert_metric_key, _detect_recovery
def test_alert_metric_key_parses_legacy_and_new_formats():
assert _alert_metric_key("mem") == "mem"
assert _alert_metric_key("mem:92.1") == "mem"
assert _alert_metric_key("cpu:85.0") == "cpu"
assert _alert_metric_key("") is None
def test_detect_recovery_dedupes_legacy_metric_value_entries():
thresholds = {"cpu": 80, "mem": 80, "disk": 80}
prev_alerts = {"mem:88.0", "mem:91.2", "mem:93.5"}
system_info = {"mem_usage": 55.0}
recoveries = _detect_recovery(system_info, prev_alerts, thresholds)
assert recoveries == [("mem", 55.0)]
def test_detect_recovery_one_per_metric_when_multiple_metrics():
thresholds = {"cpu": 80, "mem": 80, "disk": 80}
prev_alerts = {"cpu:90.0", "mem:88.0", "mem:92.0"}
system_info = {"cpu_usage": 40.0, "mem_usage": 50.0}
recoveries = _detect_recovery(system_info, prev_alerts, thresholds)
assert sorted(recoveries) == [("cpu", 40.0), ("mem", 50.0)]
def test_detect_recovery_skips_still_alerting_metric():
thresholds = {"cpu": 80, "mem": 80, "disk": 80}
prev_alerts = {"mem:88.0", "mem:91.0"}
system_info = {"mem_usage": 85.0}
assert _detect_recovery(system_info, prev_alerts, thresholds) == []