Files
archy/tests/regression/iso-qualified-web-ui.py
T

39 lines
2.2 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
"""Exercise the ISO builder's actual payload-selection branches, without a build."""
import os
import pathlib
import subprocess
import tempfile
ROOT = pathlib.Path(__file__).resolve().parents[2]
source = (ROOT / 'image-recipe/_archived/build-auto-installer-iso.sh').read_text()
capture = source.split('WEBUI_CAPTURED=0', 1)[1].split('# Include AIUI web app', 1)[0]
select = source.split('AIUI_SRC=""', 1)[1].split('if [ -n "$AIUI_SRC" ]; then', 1)[0]
program = 'set -eu\nWEBUI_CAPTURED=0\n' + capture + '\nAIUI_SRC=""\n' + select + '\nprintf "%s\\n" "$AIUI_SRC"\n'
with tempfile.TemporaryDirectory(prefix='archy-iso-qualified-ui-') as tmp:
base = pathlib.Path(tmp)
qualified = base / 'qualified'
(qualified / 'aiui').mkdir(parents=True)
(qualified / 'index.html').write_text('qualified-dashboard')
(qualified / 'aiui/index.html').write_text('qualified-aiui')
(qualified / 'aiui/BUILD-INFO').write_text('commit=fixture')
for label, path, success in [('qualified', qualified, True), ('missing', base / 'absent', False), ('partial', base / 'partial', False)]:
out = base / 'outputs' / label / 'installer'
(out / 'web-ui').mkdir(parents=True)
if label == 'partial':
path.mkdir(exist_ok=True)
(path / 'index.html').write_text('incomplete')
result = subprocess.run(['bash', '-c', program], env=os.environ | {
'ARCHIPELAGO_WEB_UI': str(path), 'ARCH_DIR': str(out),
'BUILD_FROM_SOURCE': '0', 'DEV_SERVER': 'localhost', 'SCRIPT_DIR': str(base),
}, capture_output=True, text=True)
assert (result.returncode == 0) == success, (label, result.stdout, result.stderr)
if success:
assert (out / 'web-ui/index.html').read_text() == 'qualified-dashboard'
assert (out / 'web-ui/aiui/index.html').read_text() == 'qualified-aiui'
assert result.stdout.strip().splitlines()[-1] == str(qualified / 'aiui')
assert not (out / 'web-ui/archipelago-runtime').exists()
else:
assert not list((out / 'web-ui').iterdir()), 'invalid payload silently fell back to a live node'
print('PASS ISO payload selection:', label)