55 lines
2.2 KiB
Python
55 lines
2.2 KiB
Python
#!/usr/bin/env python3
|
|
import json
|
|
import sys
|
|
import unittest
|
|
from pathlib import Path
|
|
from tempfile import TemporaryDirectory
|
|
|
|
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
|
|
|
from native_runner import compare_golden, run_entry
|
|
|
|
|
|
class NativeRunnerTests(unittest.TestCase):
|
|
def setUp(self):
|
|
self.directory = TemporaryDirectory()
|
|
self.root = Path(self.directory.name)
|
|
(self.root / "linuxcnc/tests/demo").mkdir(parents=True)
|
|
(self.root / "linuxcnc/tests/demo/test.sh").write_text("#!/bin/sh\nprintf 'ok\\n'\n", encoding="utf-8")
|
|
(self.root / "artifacts").mkdir()
|
|
|
|
def tearDown(self):
|
|
self.directory.cleanup()
|
|
|
|
def entry(self, portability="portable_candidate"):
|
|
return {
|
|
"test_source_id": "test:linuxcnc/tests/demo/test.sh",
|
|
"path": "linuxcnc/tests/demo/test.sh",
|
|
"command": "bash linuxcnc/tests/demo/test.sh",
|
|
"portability": portability,
|
|
"parse_status": "parsed",
|
|
"source_sha": "source",
|
|
}
|
|
|
|
def test_fixed_runner_emits_stable_content_hashes(self):
|
|
result = run_entry(self.root, self.entry(), self.root / "artifacts", 5)
|
|
self.assertEqual(result["status"], "passed")
|
|
self.assertEqual(result["stdout"], "ok\n")
|
|
self.assertEqual(result["cwd"], "linuxcnc/tests/demo")
|
|
self.assertRegex(result["result_sha256"], r"^[0-9a-f]{64}$")
|
|
|
|
def test_real_excluded_is_not_executed_without_override(self):
|
|
result = run_entry(self.root, self.entry("REAL-EXCLUDED"), self.root / "artifacts", 5)
|
|
self.assertEqual(result["status"], "REAL-EXCLUDED")
|
|
self.assertNotIn("exit_code", result)
|
|
|
|
def test_golden_comparison_is_explicit(self):
|
|
actual = {"status": "passed", "exit_code": 0}
|
|
self.assertEqual(compare_golden(actual, {"schema": "native-golden.v1", "expected": actual})["status"], "passed")
|
|
self.assertEqual(compare_golden(actual, {"schema": "native-golden.v1", "expected": {"exit_code": 1}})["status"], "different")
|
|
self.assertEqual(compare_golden(actual, {"schema": "unknown", "expected": actual})["status"], "blocked")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|