47 lines
1.6 KiB
Python
47 lines
1.6 KiB
Python
import contextlib
|
|
import io
|
|
import json
|
|
import unittest
|
|
from unittest.mock import patch
|
|
|
|
from scripts import run_unattended_harness
|
|
|
|
|
|
class RunUnattendedHarnessTests(unittest.TestCase):
|
|
def test_main_outputs_json_report(self) -> None:
|
|
payload = {
|
|
"status": "passed",
|
|
"passed_checks": ["policy_suppression"],
|
|
"warnings": [],
|
|
"blockers": [],
|
|
}
|
|
output = io.StringIO()
|
|
with patch("scripts.run_unattended_harness.run_unattended_harness", return_value=payload) as harness:
|
|
with contextlib.redirect_stdout(output):
|
|
exit_code = run_unattended_harness.main(
|
|
env={"UNATTENDED_HARNESS_OUTPUT_JSON": "1", "UNATTENDED_HARNESS_INSTRUMENT_ID": "2"}
|
|
)
|
|
|
|
self.assertEqual(exit_code, 0)
|
|
harness.assert_called_once_with(instrument_id=2)
|
|
self.assertEqual(json.loads(output.getvalue())["status"], "passed")
|
|
|
|
def test_main_returns_nonzero_for_blockers(self) -> None:
|
|
payload = {
|
|
"status": "blocked",
|
|
"passed_checks": [],
|
|
"warnings": [],
|
|
"blockers": ["runtime_environment"],
|
|
}
|
|
output = io.StringIO()
|
|
with patch("scripts.run_unattended_harness.run_unattended_harness", return_value=payload):
|
|
with contextlib.redirect_stdout(output):
|
|
exit_code = run_unattended_harness.main(env={})
|
|
|
|
self.assertEqual(exit_code, 2)
|
|
self.assertIn("runtime_environment", output.getvalue())
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|