ThePirateRay/tests/test_public_evidence.py

49 lines
1.8 KiB
Python

import json
import re
import unittest
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
class PublicEvidenceTests(unittest.TestCase):
def test_public_evidence_matches_manifest_contract(self) -> None:
schema = json.loads(
(ROOT / "schemas" / "artifact-manifest.schema.json").read_text(encoding="utf-8")
)
required = set(schema["required"])
allowed = set(schema["properties"])
artifact_pattern = re.compile(schema["properties"]["artifact_id"]["pattern"])
digest_pattern = re.compile(schema["properties"]["sha256"]["pattern"])
classifications = set(schema["properties"]["classification"]["enum"])
lines = (ROOT / "evidence" / "public-installer-configs.jsonl").read_text(
encoding="utf-8"
).splitlines()
self.assertEqual(len(lines), 9)
for line in lines:
entry = json.loads(line)
self.assertFalse(required - set(entry))
self.assertFalse(set(entry) - allowed)
self.assertRegex(entry["artifact_id"], artifact_pattern)
self.assertRegex(entry["sha256"], digest_pattern)
self.assertEqual(entry["artifact_id"], f"sha256-{entry['sha256'][:20]}")
self.assertIn(entry["classification"], classifications)
self.assertNotIn("relative_path", entry)
self.assertNotIn("source_locator", entry)
def test_public_evidence_has_unique_content_ids(self) -> None:
entries = [
json.loads(line)
for line in (ROOT / "evidence" / "public-installer-configs.jsonl")
.read_text(encoding="utf-8")
.splitlines()
]
ids = [entry["artifact_id"] for entry in entries]
self.assertEqual(len(ids), len(set(ids)))
if __name__ == "__main__":
unittest.main()