53 lines
2.0 KiB
Python
53 lines
2.0 KiB
Python
import contextlib
|
|
import io
|
|
import json
|
|
import unittest
|
|
from unittest.mock import patch
|
|
|
|
from scripts import run_maintenance_summary
|
|
|
|
|
|
class RunMaintenanceSummaryTests(unittest.TestCase):
|
|
def test_main_outputs_json_summary(self) -> None:
|
|
payload = {
|
|
"status": "healthy",
|
|
"blockers": [],
|
|
"warnings": [],
|
|
"maintenance_actions": {"automatic_actions": [], "operator_actions": []},
|
|
}
|
|
output = io.StringIO()
|
|
with patch("scripts.run_maintenance_summary.get_maintenance_summary", return_value=payload) as summary:
|
|
with contextlib.redirect_stdout(output):
|
|
exit_code = run_maintenance_summary.main(
|
|
env={
|
|
"MAINTENANCE_SUMMARY_OUTPUT_JSON": "1",
|
|
"MAINTENANCE_SUMMARY_INSTRUMENT_ID": "2",
|
|
"MAINTENANCE_SUMMARY_ALERT_LIMIT": "3",
|
|
"MAINTENANCE_SUMMARY_VISUAL_LIMIT": "4",
|
|
"MAINTENANCE_SUMMARY_INCIDENT_LIMIT": "5",
|
|
}
|
|
)
|
|
|
|
self.assertEqual(exit_code, 0)
|
|
summary.assert_called_once_with(instrument_id=2, alert_limit=3, visual_limit=4, incident_limit=5)
|
|
self.assertEqual(json.loads(output.getvalue())["status"], "healthy")
|
|
|
|
def test_main_returns_nonzero_when_blocked(self) -> None:
|
|
payload = {
|
|
"status": "blocked",
|
|
"blockers": ["runtime.current_blockers"],
|
|
"warnings": [],
|
|
"maintenance_actions": {"automatic_actions": [], "operator_actions": ["resolve_runtime_blockers"]},
|
|
}
|
|
output = io.StringIO()
|
|
with patch("scripts.run_maintenance_summary.get_maintenance_summary", return_value=payload):
|
|
with contextlib.redirect_stdout(output):
|
|
exit_code = run_maintenance_summary.main(env={})
|
|
|
|
self.assertEqual(exit_code, 2)
|
|
self.assertIn("runtime.current_blockers", output.getvalue())
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|