test_health.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. from __future__ import annotations
  2. from datetime import timedelta
  3. from supply_infra.config import InfraSettings
  4. from supply_infra.pipeline.dates import china_now
  5. from supply_infra.pipeline.health import run_alert_level
  6. def _settings() -> InfraSettings:
  7. return InfraSettings(_env_file=None)
  8. def test_alert_level_escalates_against_next_schedule_deadline() -> None:
  9. settings = _settings()
  10. now = china_now()
  11. assert (
  12. run_alert_level(
  13. status="running",
  14. started_at=now - timedelta(hours=13),
  15. created_at=now - timedelta(hours=13),
  16. deadline_at=now + timedelta(hours=5),
  17. now=now,
  18. settings=settings,
  19. )
  20. == "warning"
  21. )
  22. assert (
  23. run_alert_level(
  24. status="running",
  25. started_at=now - timedelta(hours=1),
  26. created_at=now - timedelta(hours=1),
  27. deadline_at=now + timedelta(minutes=90),
  28. now=now,
  29. settings=settings,
  30. )
  31. == "critical"
  32. )
  33. assert (
  34. run_alert_level(
  35. status="blocked_previous_run",
  36. started_at=None,
  37. created_at=now - timedelta(hours=1),
  38. deadline_at=now + timedelta(minutes=20),
  39. now=now,
  40. settings=settings,
  41. )
  42. == "final_warning"
  43. )
  44. def test_terminal_run_has_no_duration_alert() -> None:
  45. now = china_now()
  46. assert (
  47. run_alert_level(
  48. status="failed",
  49. started_at=now - timedelta(days=2),
  50. created_at=now - timedelta(days=2),
  51. deadline_at=now - timedelta(days=1),
  52. now=now,
  53. settings=_settings(),
  54. )
  55. is None
  56. )
  57. def test_manual_run_without_deadline_only_uses_duration_warning() -> None:
  58. now = china_now()
  59. settings = _settings()
  60. assert (
  61. run_alert_level(
  62. status="running",
  63. started_at=now - timedelta(hours=1),
  64. created_at=now - timedelta(hours=1),
  65. deadline_at=None,
  66. now=now,
  67. settings=settings,
  68. )
  69. is None
  70. )
  71. assert (
  72. run_alert_level(
  73. status="running",
  74. started_at=now - timedelta(hours=13),
  75. created_at=now - timedelta(hours=13),
  76. deadline_at=None,
  77. now=now,
  78. settings=settings,
  79. )
  80. == "warning"
  81. )