44 lines
1.6 KiB
Python
44 lines
1.6 KiB
Python
import tempfile
|
|
import unittest
|
|
|
|
from redflare.core.models import Finding
|
|
from redflare.core.models import Target
|
|
from redflare.core.storage import RunStore, deduplicate_findings, target_run_id
|
|
|
|
|
|
class StorageTests(unittest.TestCase):
|
|
def test_target_run_name_is_human_readable(self):
|
|
value = target_run_id([Target("https://example.test", "example.test", "https", 443)])
|
|
self.assertRegex(value, r"^scan_example\.test_\d{8}_\d{6}$")
|
|
|
|
def test_run_folders_do_not_collide(self):
|
|
with tempfile.TemporaryDirectory() as directory:
|
|
first = RunStore(directory, "run_test")
|
|
second = RunStore(directory, "run_test")
|
|
self.assertNotEqual(first.root, second.root)
|
|
self.assertTrue(first.root.is_dir())
|
|
self.assertTrue(second.root.is_dir())
|
|
|
|
def test_corroborated_header_findings_are_deduplicated(self):
|
|
common = {
|
|
"run_id": "run_test",
|
|
"target": "https://example.test",
|
|
"severity": "low",
|
|
"confidence": 0.95,
|
|
"description": "missing headers",
|
|
}
|
|
findings = [
|
|
Finding(module="http_headers", category="security-headers", title="Missing headers", **common),
|
|
Finding(module="gatekeeper", category="browser-security-headers", title="Browser missing headers", **common),
|
|
]
|
|
deduplicated = deduplicate_findings(findings)
|
|
self.assertEqual(len(deduplicated), 1)
|
|
self.assertEqual(
|
|
deduplicated[0].evidence["corroborated_by"],
|
|
["gatekeeper", "http_headers"],
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|