K8: record blocked owner review and release evidence
This commit is contained in:
54
scripts/test_license_source_closure.py
Normal file
54
scripts/test_license_source_closure.py
Normal file
@@ -0,0 +1,54 @@
|
||||
import json
|
||||
import sys
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
||||
|
||||
from generate_release_closure import generate
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
REPORT = ROOT / "coverage/license-closure.report.json"
|
||||
INDEX = ROOT / "coverage/license-source-index.jsonl"
|
||||
DECISION = ROOT / "docs/linuxcnc-web-wasm-license-decision.md"
|
||||
|
||||
|
||||
class LicenseSourceClosureTests(unittest.TestCase):
|
||||
def test_entry_closure_contract_and_explicit_implementation_blocker(self):
|
||||
report = json.loads(REPORT.read_text(encoding="utf-8"))
|
||||
self.assertEqual(report["schema"], "release-license-closure.v1")
|
||||
self.assertEqual(report["status"], "blocked")
|
||||
self.assertEqual(report["entry_closure"]["entries"], 8053)
|
||||
self.assertEqual(report["entry_closure"]["source_hash_status"], {"verified": 8053})
|
||||
self.assertEqual(report["entry_closure"]["owner_status"], {"assigned": 8053})
|
||||
self.assertEqual(report["entry_closure"]["license_status"], {"blocked_unassigned": 57, "scoped_declared": 7996})
|
||||
self.assertTrue(report["entry_closure"]["all_entries_have_owner"])
|
||||
self.assertTrue(report["entry_closure"]["all_entries_have_evidence_status"])
|
||||
self.assertEqual(report["upstream_declarations"]["matched_entries"], 7996)
|
||||
self.assertEqual(report["implementation_license"]["entries"], 57)
|
||||
self.assertEqual(report["implementation_license"]["decision"], "unassigned_and_blocked")
|
||||
self.assertEqual(report["blockers"], ["wasm_web_license_not_declared"])
|
||||
self.assertTrue(DECISION.is_file())
|
||||
|
||||
def test_index_is_complete_and_deterministic(self):
|
||||
rows = [json.loads(line) for line in INDEX.read_text(encoding="utf-8").splitlines() if line.strip()]
|
||||
self.assertEqual(len(rows), 8053)
|
||||
self.assertEqual(len({row["id"] for row in rows}), 8053)
|
||||
self.assertEqual(rows, sorted(rows, key=lambda row: row["id"]))
|
||||
self.assertTrue(all(row["source_hash_status"] == "verified" for row in rows))
|
||||
self.assertTrue(all(row["owner"] and row["evidence_status"] == "complete" for row in rows))
|
||||
self.assertEqual(sum(row["closure_status"] == "verified_scoped" for row in rows), 7996)
|
||||
self.assertEqual(sum(row["license_status"] == "blocked_unassigned" for row in rows), 57)
|
||||
self.assertTrue(all(row["license_spdx"] for row in rows if row["source_root"] == "linuxcnc"))
|
||||
self.assertTrue(all(row["license_spdx"] is None for row in rows if row["source_root"] in {"wasm-core", "web"}))
|
||||
|
||||
def test_generation_is_deterministic(self):
|
||||
before = {path: path.read_bytes() for path in (REPORT, INDEX)}
|
||||
generate(ROOT, ROOT / "coverage")
|
||||
after = {path: path.read_bytes() for path in (REPORT, INDEX)}
|
||||
self.assertEqual(before, after)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user