67 lines
3.3 KiB
Markdown
67 lines
3.3 KiB
Markdown
|
|
# test/
|
|||
|
|
|
|||
|
|
Test harnesses for veilor-os ISO builds.
|
|||
|
|
|
|||
|
|
## Files
|
|||
|
|
|
|||
|
|
| File | Purpose |
|
|||
|
|
|------|---------|
|
|||
|
|
| `run-vm.sh` | Manual smoke test — boot the latest ISO interactively in QEMU/KVM. SSH key injection via cloud-init seed + monitor sendkey fallback for live-image login. |
|
|||
|
|
| `auto-install.sh` | **Autonomous** end-to-end install test. Boots ISO, drives the gum installer via QEMU monitor `sendkey`, waits for anaconda to finish + reboot, SSHs into the installed system, runs validation checklist. Prints PASS/FAIL summary. |
|
|||
|
|
| `auto-install-keymap.sh` | Sourced helper. Provides `km_send_str`, `km_send_chord`, `km_send_key`, `km_screendump`, `km_wait_socket`, etc. Reusable by other automation. |
|
|||
|
|
| `boot-checklist.md` | Manual post-install checklist (run on a real spare laptop). |
|
|||
|
|
|
|||
|
|
## Running the autonomous installer test
|
|||
|
|
|
|||
|
|
```sh
|
|||
|
|
./test/auto-install.sh build/out/veilor-os-*.iso
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Hardcoded inputs (deterministic — do not edit during a test run):
|
|||
|
|
- Disk: first `/dev/vda` (the only disk in QEMU)
|
|||
|
|
- Hostname: `veilor` (installer hardcoded since v0.5.4)
|
|||
|
|
- LUKS passphrase: `testpass1234`
|
|||
|
|
- Admin password: `adminpass1234`
|
|||
|
|
- Locale: `en_GB.UTF-8`
|
|||
|
|
|
|||
|
|
Expected runtime: 20–30 minutes wall clock (anaconda dominates).
|
|||
|
|
|
|||
|
|
### Outputs
|
|||
|
|
|
|||
|
|
- `/tmp/veilor-auto-install.log` — full driver log
|
|||
|
|
- `/tmp/veilor-auto-install-NN-<step>.png` — milestone screenshots
|
|||
|
|
- `/tmp/veilor-auto-install-final-ssh.txt` — final SSH session capture (uname/lsblk/cmdline/failed units)
|
|||
|
|
|
|||
|
|
### Exit codes
|
|||
|
|
|
|||
|
|
- `0` — all validation checks passed
|
|||
|
|
- `1` — any failure (anaconda crashed, SSH never came up, validation check failed)
|
|||
|
|
- `2` — preflight failure (missing tool, bad ISO arg, missing OVMF)
|
|||
|
|
|
|||
|
|
### Prerequisites
|
|||
|
|
|
|||
|
|
- `qemu-system-x86_64`, `qemu-img`, `socat`, `ssh`, `ssh-keygen`
|
|||
|
|
- `edk2-ovmf` (OVMF UEFI firmware at `/usr/share/edk2/ovmf/OVMF_{CODE,VARS}.fd`)
|
|||
|
|
- `mkisofs` or `xorriso` (for cloud-init seed ISO; harness falls back to TTY1 driving if seed cannot be built or cloud-init does not run on the installed system)
|
|||
|
|
- `convert` from ImageMagick (optional — converts PPM screendumps to PNG; harness keeps PPM if absent)
|
|||
|
|
- KVM access (`/dev/kvm` readable by the user)
|
|||
|
|
|
|||
|
|
### What it validates
|
|||
|
|
|
|||
|
|
Post-install on the booted system:
|
|||
|
|
- `/etc/os-release` → `NAME=veilor-os`
|
|||
|
|
- `hostnamectl --static` → `veilor`
|
|||
|
|
- `systemctl is-active` → `active` for `sshd fail2ban usbguard tuned auditd firewalld chronyd sddm`
|
|||
|
|
- `getenforce` → `Enforcing` (preferred) or `Permissive` (acceptable for v0.5.x)
|
|||
|
|
- `lsblk -f` shows `crypto_LUKS` + `btrfs`
|
|||
|
|
- `/etc/crypttab` has a LUKS entry
|
|||
|
|
- `getent passwd admin` returns the user
|
|||
|
|
- `/usr/local/bin/{veilor-power,veilor-doctor,veilor-update}` are present and executable
|
|||
|
|
- `/proc/cmdline` contains `init_on_alloc=1`
|
|||
|
|
|
|||
|
|
### Troubleshooting
|
|||
|
|
|
|||
|
|
- **Stuck at boot banner**: ISO didn't autostart `veilor-installer` on tty1. Check `serial.log` and `auto-install-vm-NN-*.png` screenshots. The harness aborts after 5 minutes of identical screen frames.
|
|||
|
|
- **SSH never up**: cloud-init may not have run on the installed system (no `cidata` mount). The harness falls back to TTY1 driving — typing the LUKS passphrase, logging in as admin, and hand-injecting the SSH key. If both paths fail, validation cannot proceed.
|
|||
|
|
- **`screendump` produces unreadable PPM**: install ImageMagick (`dnf install ImageMagick`) so the harness converts to PNG.
|