#!/usr/bin/env python3 """Execute the installer's actual overlay against a stale disposable rootfs.""" import pathlib, subprocess, tempfile, shutil, unittest ROOT = pathlib.Path(__file__).resolve().parents[2] class DoctorOverlayTests(unittest.TestCase): def test_cached_rootfs_and_missing_payload(self): source = (ROOT / 'image-recipe/_archived/build-auto-installer-iso.sh').read_text() block = source.split('# BEGIN DOCTOR OVERLAY\n', 1)[1].split('# END DOCTOR OVERLAY', 1)[0] with tempfile.TemporaryDirectory() as temp: base = pathlib.Path(temp) target = base / 'target' media = base / 'media' payload = media / 'archipelago/scripts' payload.mkdir(parents=True) units = target / 'etc/systemd/system' units.mkdir(parents=True) for directory in ['opt/archipelago/scripts', 'home/archipelago/archy/scripts']: dest = target / directory dest.mkdir(parents=True) (dest / 'container-doctor.sh').write_text('UNSAFE OLD SCRIPT') files = [ROOT / 'scripts/container-doctor.sh', ROOT / 'image-recipe/configs/archipelago-doctor.service', ROOT / 'image-recipe/configs/archipelago-doctor.timer'] for path in files: shutil.copyfile(path, payload / path.name) script = block.replace('/mnt/target', str(target)) for _ in range(2): subprocess.run(['bash', '-c', script], env={'BOOT_MEDIA': str(media), 'PATH': '/usr/bin:/bin'}, check=True) for directory in ['opt/archipelago/scripts', 'home/archipelago/archy/scripts']: dest = target / directory / 'container-doctor.sh' self.assertEqual(dest.read_bytes(), files[0].read_bytes()) self.assertEqual(dest.stat().st_mode & 0o777, 0o755) for path in files[1:]: self.assertEqual((units / path.name).read_bytes(), path.read_bytes()) (payload / 'container-doctor.sh').unlink() failed = subprocess.run(['bash', '-c', script], env={'BOOT_MEDIA': str(media), 'PATH': '/usr/bin:/bin'}, capture_output=True) self.assertNotEqual(failed.returncode, 0, 'Missing safety overlay must fail installation') if __name__ == '__main__': unittest.main()