#!/usr/bin/env python3 # SPDX-License-Identifier: GPL-3.0-or-later """Phase-1.0BE repository guardrails.""" import argparse, hashlib, json, subprocess from pathlib import Path import unittest parser = argparse.ArgumentParser() parser.add_argument("--root", type=Path, required=True) parser.add_argument("--retroarch-root", type=Path) args = parser.parse_args() class Phase10BEGuardrails(unittest.TestCase): @classmethod def setUpClass(cls) -> None: cls.data = json.loads((args.root / "manifests/retroarch/phase-1.0be-fake-only-sdl-materializer.json").read_text(encoding="utf-8")) def test_parent_and_optional_source_binding(self) -> None: parent = args.root / "manifests/retroarch/phase-1.0bd-dormant-sdl-materializer-policy.json" bind = self.data["source_bindings"] self.assertEqual(hashlib.sha256(parent.read_bytes()).hexdigest(), bind["phase10bd_manifest_sha256"]) if args.retroarch_root: def git(*values: str) -> str: return subprocess.run(["git", *values], cwd=args.retroarch_root, check=True, capture_output=True, text=True).stdout.strip() self.assertEqual(git("rev-parse", "HEAD"), bind["retroarch_commit"]) self.assertEqual(git("rev-parse", bind["remote_ref"]), bind["retroarch_commit"]) paths = {"makefile": "Makefile.ps5", "adapter": "tools/phase10be_sdl_materializer_fake_adapter.py", "validator": "tools/validate_ps5_phase10be.py", "tests": "tests/test_ps5_phase10be_fake_materializer.py", "source_doc": "docs/ps5-phase10be-fake-sdl-materializer.md"} for key, source in paths.items(): self.assertEqual(git("rev-parse", f'{bind["retroarch_commit"]}:{source}'), bind[f"{key}_blob"]) def test_fake_only_and_live_gates(self) -> None: props = self.data["properties"] self.assertTrue(props["exact_fake_type_only"]) self.assertEqual(props["ordered_operations"], 9) for key in ("process_capability", "filesystem_capability", "network_capability", "retroarch_build_capability", "device_capability"): self.assertFalse(props[key]) auth = self.data["authorizations"] self.assertTrue(auth["live_adapter_source_reassessment_authorized"]) for key, value in auth.items(): if key != "live_adapter_source_reassessment_authorized": self.assertFalse(value, key) if __name__ == "__main__": unittest.main(argv=[__file__])