50 lines
2.4 KiB
Python
50 lines
2.4 KiB
Python
"""Exercise the actual workflow's narrow corruption guard, without starting CI."""
|
|
import os
|
|
from pathlib import Path
|
|
import shutil
|
|
import subprocess
|
|
import tempfile
|
|
import unittest
|
|
|
|
WORKFLOW = Path(__file__).resolve().parents[1] / '.gitea/workflows/ci-deploy.yml'
|
|
BASH = str(Path('C:/Program Files/Git/bin/bash.exe')) if os.name == 'nt' else shutil.which('bash')
|
|
|
|
|
|
class BrowserRuntimeRetryTests(unittest.TestCase):
|
|
def permits_retry(self, log):
|
|
text = WORKFLOW.read_text(encoding='utf-8')
|
|
end = text.index(' echo "Browser runtime source appears corrupted')
|
|
start = text.rfind('\n if ', 0, end) + 1
|
|
guard = text[start:end]
|
|
self.assertTrue(guard.strip().startswith('if '))
|
|
with tempfile.TemporaryDirectory() as folder:
|
|
fixture = Path(folder) / 'smoke.log'
|
|
fixture.write_text(log, encoding='utf-8')
|
|
result = subprocess.run([BASH, '-c', guard + '\nexit 0\nelse\nexit 1\nfi'],
|
|
env={**os.environ, 'smoke_log': fixture.as_posix()}, capture_output=True, text=True)
|
|
self.assertIn(result.returncode, [0, 1], result.stderr)
|
|
return result.returncode == 0
|
|
|
|
def test_captured_playwright_source_corruption(self):
|
|
self.assertTrue(self.permits_retry('/workspace/node_modules/playwright-core/lib/utilsBundle.js:35841\n'
|
|
'const { items }$= this;\nSyntaxError: Missing initializer in destructuring declaration'))
|
|
|
|
def test_existing_axe_source_corruption(self):
|
|
self.assertTrue(self.permits_retry('AxeBuilder.analyze\npage.evaluate: ReferenceError: invalid runtime source'))
|
|
|
|
def test_application_assertion_stays_terminal(self):
|
|
self.assertFalse(self.permits_retry('expect(region).not.toBeVisible() failed'))
|
|
|
|
def test_browser_crash_alone_stays_terminal(self):
|
|
self.assertFalse(self.permits_retry('Error: page.evaluate: Target crashed'))
|
|
|
|
def test_user_javascript_syntax_error_stays_terminal(self):
|
|
self.assertFalse(self.permits_retry('src/example.js:1\nconst { items }$= this;\nSyntaxError: Missing initializer in destructuring declaration'))
|
|
|
|
def test_incomplete_signature_stays_terminal(self):
|
|
self.assertFalse(self.permits_retry('node_modules/playwright-core/lib/utilsBundle.js:35841\nSyntaxError: Missing initializer in destructuring declaration'))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|