Files
LangBot/tools/test_regression_gate.py
T

41 lines
1.6 KiB
Python

"""A gate must fail closed on timeout, missing verdict, and inner failure."""
import os
from pathlib import Path
import sys
import tempfile
import unittest
from regression_gate import supervise
class GateTest(unittest.TestCase):
def test_success_records_elapsed_time_and_resources(self):
with tempfile.TemporaryDirectory() as directory:
output = Path(directory) / 'gate'
code = (
'from pathlib import Path; import json; '
f'p=Path({str(output / "suite")!r}); p.mkdir(); '
'(p/"summary.json").write_text(json.dumps({"passed":True,"requests":1}))'
)
result = supervise([sys.executable, '-c', code], output, 5, {'test': os.getpid()})
self.assertTrue(result['passed'])
self.assertLess(result['elapsed_seconds'], 5)
self.assertGreater(result['resource_peaks']['test']['rss_bytes'], 0)
def test_timeout_is_failed_without_retry(self):
with tempfile.TemporaryDirectory() as directory:
result = supervise([sys.executable, '-c', 'import time; time.sleep(30)'], Path(directory) / 'gate', 0.1, {})
self.assertFalse(result['passed'])
self.assertTrue(result['timed_out'])
self.assertLess(result['elapsed_seconds'], 2)
def test_zero_exit_without_business_verdict_is_failed(self):
with tempfile.TemporaryDirectory() as directory:
result = supervise([sys.executable, '-c', 'pass'], Path(directory) / 'gate', 5, {})
self.assertFalse(result['passed'])
if __name__ == '__main__':
unittest.main()