Files

54 lines
2.4 KiB
Python

import json
from pathlib import Path
import tempfile
import unittest
from aaisa.config import Config
from aaisa.artifacts import classify
from aaisa.models import Severity
from aaisa.reporters import json_report, sarif_report
from aaisa.scanner import Scanner
class ScannerTests(unittest.TestCase):
def test_threat_model_is_not_misclassified_as_model_metadata(self) -> None:
self.assertEqual(classify(Path("THREAT_MODEL.md")), "document")
self.assertEqual(classify(Path("model-card.yaml")), "model-metadata")
def test_scan_hashes_artifacts_and_skips_symlinks(self) -> None:
with tempfile.TemporaryDirectory() as directory:
root = Path(directory)
(root / "safe.txt").write_text("ordinary content\n", encoding="utf-8")
try:
(root / "outside-link").symlink_to(Path(directory).parent)
except OSError:
pass
report = Scanner(Config(minimum_severity=Severity.INFO)).scan(root)
self.assertEqual([item["path"] for item in report.artifacts], ["safe.txt"])
self.assertEqual(len(report.artifacts[0]["sha256"]), 64)
def test_oversize_artifact_is_an_error(self) -> None:
with tempfile.TemporaryDirectory() as directory:
path = Path(directory) / "large.txt"
path.write_text("x" * 20, encoding="utf-8")
report = Scanner(Config(max_file_bytes=10)).scan(Path(directory))
self.assertEqual(report.artifacts, [])
self.assertEqual(report.errors[0]["path"], "large.txt")
def test_reports_are_machine_readable(self) -> None:
with tempfile.TemporaryDirectory() as directory:
path = Path(directory) / "requirements.txt"
path.write_text("requests>=2\n", encoding="utf-8")
report = Scanner().scan(Path(directory))
json_payload = json.loads(json_report(report))
sarif_payload = json.loads(sarif_report(report))
self.assertEqual(json_payload["schema_version"], "1.0.0")
self.assertEqual(len(json_payload["findings"][0]["fingerprint"]), 64)
self.assertEqual(sarif_payload["version"], "2.1.0")
self.assertEqual(sarif_payload["runs"][0]["results"][0]["ruleId"], "AAISA-DEPENDENCY-001")
self.assertEqual(len(sarif_payload["runs"][0]["results"][0]["partialFingerprints"]["aaisa/v1"]), 64)
if __name__ == "__main__":
unittest.main()