63 lines
3.2 KiB
Python
63 lines
3.2 KiB
Python
#!/usr/bin/env python3
|
|
"""Negative runner checks stop before any native process/audio initialization."""
|
|
from pathlib import Path
|
|
import subprocess
|
|
import sys
|
|
import tempfile
|
|
import unittest
|
|
|
|
ROOT = Path(__file__).resolve().parents[1]
|
|
|
|
class EnvironmentRestartRunnerTests(unittest.TestCase):
|
|
def invoke(self, profile, *extra):
|
|
return subprocess.run([sys.executable, str(ROOT/'tools/headless_workbench.py'),
|
|
'--compat', str(profile/'missing-prefix'), '--profile', str(profile),
|
|
'--smoke', 'environment-restart', '--project', 'core', '--rounds', '2',
|
|
*extra], text=True, capture_output=True)
|
|
|
|
def test_requires_two_core_rounds(self):
|
|
with tempfile.TemporaryDirectory() as directory:
|
|
for extra in [('--rounds','1'), ('--rounds','3'), ('--project','chat')]:
|
|
with self.subTest(extra=extra):
|
|
result = self.invoke(Path(directory), *extra)
|
|
self.assertNotEqual(result.returncode, 0)
|
|
self.assertIn('requires --project core --rounds 2', result.stderr)
|
|
|
|
def test_every_existing_fixture_file_is_refused_and_preserved(self):
|
|
for name in ['erri-environment-restart.json', 'erri-environment-restart.json.bak',
|
|
'erri-environment-restart.json.tmp', 'erri-environment-restart-round.json']:
|
|
with self.subTest(name=name), tempfile.TemporaryDirectory() as directory:
|
|
profile = Path(directory)
|
|
path = profile/name
|
|
path.write_text('prior evidence')
|
|
result = self.invoke(profile)
|
|
self.assertNotEqual(result.returncode, 0)
|
|
self.assertIn('fixture paths must not preexist', result.stderr)
|
|
self.assertEqual(path.read_text(), 'prior evidence')
|
|
|
|
def test_broken_fixture_symlink_is_refused(self):
|
|
with tempfile.TemporaryDirectory() as directory:
|
|
profile = Path(directory)
|
|
(profile/'erri-environment-restart.json').symlink_to(profile/'missing-target')
|
|
result = self.invoke(profile)
|
|
self.assertIn('fixture paths must not preexist', result.stderr)
|
|
self.assertTrue((profile/'erri-environment-restart.json').is_symlink())
|
|
|
|
def test_empty_fixture_reaches_existing_prefix_guard_without_side_effects(self):
|
|
with tempfile.TemporaryDirectory() as directory:
|
|
profile = Path(directory)
|
|
result = self.invoke(profile)
|
|
self.assertNotEqual(result.returncode, 0)
|
|
self.assertIn('must be a disposable cloned prefix', result.stderr)
|
|
self.assertEqual(list(profile.iterdir()), [])
|
|
|
|
def test_existing_environment_outcome_does_not_acquire_restart_path_policy(self):
|
|
with tempfile.TemporaryDirectory() as directory:
|
|
profile = Path(directory)
|
|
(profile/'erri-environment-restart.json').write_text('prior evidence')
|
|
result = self.invoke(profile, '--smoke', 'environment', '--rounds', '1')
|
|
self.assertIn('must be a disposable cloned prefix', result.stderr)
|
|
self.assertNotIn('fixture paths must not preexist', result.stderr)
|
|
|
|
if __name__ == '__main__': unittest.main()
|