chore: reinitialize project with vite architecture
This commit is contained in:
58
tests/test_resilience.py
Normal file
58
tests/test_resilience.py
Normal file
@@ -0,0 +1,58 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""Tests for runtime resilience helper contracts."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import datetime, timedelta, timezone
|
||||
|
||||
from mes_dashboard.core.resilience import (
|
||||
build_recovery_recommendation,
|
||||
get_resilience_thresholds,
|
||||
summarize_restart_history,
|
||||
)
|
||||
|
||||
|
||||
def test_get_resilience_thresholds_from_env(monkeypatch):
|
||||
monkeypatch.setenv("RESILIENCE_RESTART_CHURN_WINDOW_SECONDS", "120")
|
||||
monkeypatch.setenv("RESILIENCE_RESTART_CHURN_THRESHOLD", "2")
|
||||
monkeypatch.setenv("RESILIENCE_POOL_SATURATION_WARNING", "0.8")
|
||||
|
||||
thresholds = get_resilience_thresholds()
|
||||
assert thresholds["restart_churn_window_seconds"] == 120
|
||||
assert thresholds["restart_churn_threshold"] == 2
|
||||
assert thresholds["pool_saturation_warning"] == 0.8
|
||||
|
||||
|
||||
def test_summarize_restart_history_counts_entries_in_window():
|
||||
now = datetime(2026, 2, 7, 12, 0, tzinfo=timezone.utc)
|
||||
history = [
|
||||
{"completed_at": (now - timedelta(seconds=30)).isoformat()},
|
||||
{"completed_at": (now - timedelta(seconds=90)).isoformat()},
|
||||
{"completed_at": (now - timedelta(seconds=700)).isoformat()},
|
||||
]
|
||||
|
||||
summary = summarize_restart_history(history, now=now, window_seconds=120, threshold=2)
|
||||
assert summary["count"] == 2
|
||||
assert summary["exceeded"] is True
|
||||
assert summary["window_seconds"] == 120
|
||||
assert summary["threshold"] == 2
|
||||
|
||||
|
||||
def test_build_recovery_recommendation_for_pool_churn_and_cooldown():
|
||||
recommendation = build_recovery_recommendation(
|
||||
degraded_reason="db_pool_saturated",
|
||||
pool_saturation=1.0,
|
||||
circuit_state="CLOSED",
|
||||
restart_churn_exceeded=True,
|
||||
cooldown_active=False,
|
||||
)
|
||||
assert recommendation["action"] == "throttle_and_investigate_queries"
|
||||
|
||||
cooldown_recommendation = build_recovery_recommendation(
|
||||
degraded_reason="db_pool_saturated",
|
||||
pool_saturation=1.0,
|
||||
circuit_state="CLOSED",
|
||||
restart_churn_exceeded=False,
|
||||
cooldown_active=True,
|
||||
)
|
||||
assert cooldown_recommendation["action"] == "wait_for_restart_cooldown"
|
||||
Reference in New Issue
Block a user