Add audited response apply rehearsal
This commit is contained in:
parent
51d52b5229
commit
0b010df514
11 changed files with 198 additions and 28 deletions
|
|
@ -4,7 +4,7 @@ import json
|
|||
import os
|
||||
import tempfile
|
||||
import unittest
|
||||
from contextlib import redirect_stdout
|
||||
from contextlib import redirect_stderr, redirect_stdout
|
||||
from pathlib import Path
|
||||
|
||||
from enodia_sentinel import incident, respond
|
||||
|
|
@ -155,6 +155,34 @@ class TestRespondPlan(unittest.TestCase):
|
|||
finally:
|
||||
os.environ.pop("ENODIA_LOG_DIR", None)
|
||||
|
||||
def test_apply_requires_dry_run_and_audits_rehearsal(self):
|
||||
os.environ["ENODIA_LOG_DIR"] = str(self.tmp)
|
||||
try:
|
||||
with redirect_stdout(io.StringIO()):
|
||||
self.assertEqual(main(["respond", "plan", self.iid]), 0)
|
||||
plan_path = next((self.tmp / "response-plans").glob("*.json"))
|
||||
|
||||
err = io.StringIO()
|
||||
with redirect_stderr(err):
|
||||
code = main(["respond", "apply", str(plan_path)])
|
||||
self.assertEqual(code, 2)
|
||||
self.assertIn("not implemented", err.getvalue())
|
||||
|
||||
buf = io.StringIO()
|
||||
with redirect_stdout(buf):
|
||||
code = main(["respond", "apply", str(plan_path),
|
||||
"--dry-run", "--json"])
|
||||
self.assertEqual(code, 0)
|
||||
output = json.loads(buf.getvalue())
|
||||
self.assertFalse(output["executed"])
|
||||
self.assertEqual(output["audit"]["event"], "response_apply_rehearsed")
|
||||
self.assertEqual(output["plan"]["plan_path"], str(plan_path))
|
||||
audit = (self.tmp / "response-audit.log").read_text().splitlines()
|
||||
self.assertEqual(json.loads(audit[-1])["event"],
|
||||
"response_apply_rehearsed")
|
||||
finally:
|
||||
os.environ.pop("ENODIA_LOG_DIR", None)
|
||||
|
||||
def test_cli_requires_incident_id(self):
|
||||
os.environ["ENODIA_LOG_DIR"] = str(self.tmp)
|
||||
try:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue