import hashlib import importlib.util import tempfile import unittest from pathlib import Path MODULE_PATH = Path(__file__).parents[2] / "autoinstall/offline/validate-python-runtime-profile.py" SPEC = importlib.util.spec_from_file_location("validate_python_runtime_profile", MODULE_PATH) MODULE = importlib.util.module_from_spec(SPEC) assert SPEC.loader SPEC.loader.exec_module(MODULE) class PythonRuntimeProfileTests(unittest.TestCase): def test_accepts_required_wheel_with_matching_digest(self): with tempfile.TemporaryDirectory() as directory: wheel = Path(directory) / "torch-cpu.whl" wheel.write_bytes(b"cpu") contract = {"profiles": {"cpu-only": { "required": {wheel.name: hashlib.sha256(b"cpu").hexdigest()}, "forbidden_filename_patterns": ["cu12"], }}} self.assertEqual(MODULE.validate(contract, "cpu-only", Path(directory)), []) def test_rejects_forbidden_gpu_wheel_and_digest_mismatch(self): with tempfile.TemporaryDirectory() as directory: root = Path(directory) (root / "torch-cpu.whl").write_bytes(b"changed") (root / "nvidia_cuda_cu12.whl").write_bytes(b"gpu") contract = {"profiles": {"cpu-only": { "required": {"torch-cpu.whl": hashlib.sha256(b"cpu").hexdigest()}, "forbidden_filename_patterns": ["nvidia_", "cu12"], }}} errors = MODULE.validate(contract, "cpu-only", root) self.assertTrue(any("forbidden pattern" in error for error in errors)) self.assertIn("digest mismatch: torch-cpu.whl", errors) if __name__ == "__main__": unittest.main()