43 lines
1.8 KiB
Python
43 lines
1.8 KiB
Python
#!/usr/bin/env python3
|
|
"""Exercise menu reloads after successful and partially failed updates."""
|
|
from pathlib import Path
|
|
import os
|
|
import subprocess
|
|
import tempfile
|
|
import unittest
|
|
|
|
ROOT = Path(__file__).resolve().parents[1]
|
|
|
|
|
|
class MenuUpdateTests(unittest.TestCase):
|
|
def test_reload_after_success_or_failure(self):
|
|
source = (ROOT / 'proxmenu-scripts.sh').read_text()
|
|
function = source.split('TAPM_INSTALL_MENU_UPDATE() {', 1)[1].split('\n}\n', 1)[0]
|
|
for status in (0, 1):
|
|
with self.subTest(update_status=status), tempfile.TemporaryDirectory() as directory:
|
|
launcher = Path(directory) / 'run.sh'
|
|
log = Path(directory) / 'calls'
|
|
launcher.write_text('''#!/bin/bash
|
|
if [[ "${1:-}" == update ]]; then
|
|
echo update >> "$TEST_LOG"
|
|
exit "$TEST_STATUS"
|
|
fi
|
|
echo reload >> "$TEST_LOG"
|
|
''')
|
|
launcher.chmod(0o700)
|
|
script = 'ENTER2CONTINUE() { echo pause >> "$TEST_LOG"; }\n'
|
|
script += 'TAPM_INSTALL_MENU_UPDATE() {' + function.replace(
|
|
'/opt/idssys/ta-proxmenu/run.sh', '"' + str(launcher) + '"') + '\n}\n'
|
|
script += 'TAPM_INSTALL_MENU_UPDATE\necho stale-menu >> "$TEST_LOG"\n'
|
|
result = subprocess.run(['bash', '-c', script], capture_output=True, text=True,
|
|
env=dict(os.environ, TEST_LOG=str(log), TEST_STATUS=str(status)))
|
|
self.assertEqual(result.returncode, 0, result.stderr)
|
|
self.assertEqual(log.read_text().splitlines(),
|
|
['update', 'reload'] if status == 0 else ['update', 'pause', 'reload'])
|
|
if status:
|
|
self.assertIn('reported failures', result.stdout)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|