#!/bin/bash # test-storage-qemu.sh — bounded storage driver validation in QEMU # Phase 5.1 of CHANGELOG-DRIVER-IMPROVEMENT-PLAN.md set -euo pipefail IMAGE="${1:-build/x86_64/redbear-mini/harddrive.img}" QEMU="${QEMU:-qemu-system-x86_64}" OVMF_CODE="${OVMF_CODE:-/usr/share/edk2/x64/OVMF_CODE.4m.fd}" OVMF_VARS="${OVMF_VARS:-build/x86_64/redbear-mini/fw_vars.bin}" TIMEOUT="${TIMEOUT:-90}" SERIAL_LOG="/tmp/rbos-storage-test-$$.log" [ -f "$IMAGE" ] || { echo "FAIL: image not found: $IMAGE"; exit 1; } cp "$OVMF_VARS" /tmp/fw_vars_test.bin 2>/dev/null || cp /usr/share/edk2/x64/OVMF_VARS.4m.fd /tmp/fw_vars_test.bin echo "=== Storage Driver Validation ===" echo "Image: $IMAGE" echo "" timeout "$TIMEOUT" "$QEMU" -M q35 -m 2G -smp 2 \ -drive file="$IMAGE",format=raw \ -drive if=pflash,format=raw,readonly=on,file="$OVMF_CODE" \ -drive if=pflash,format=raw,file=/tmp/fw_vars_test.bin \ -serial file:"$SERIAL_LOG" -display none -no-reboot \ -netdev user,id=net0 -device virtio-net-pci,netdev=net0 \ -d guest_errors 2>/dev/null & QEMU_PID=$! sleep $((TIMEOUT - 10)) PASS=0 grep -q 'AHCI.*Serial:' "$SERIAL_LOG" && echo "PASS: AHCI disk detected" && PASS=$((PASS+1)) || echo "FAIL: AHCI disk not detected" grep -q 'switchroot' "$SERIAL_LOG" && echo "PASS: switchroot to /usr" && PASS=$((PASS+1)) || echo "FAIL: no switchroot" kill $QEMU_PID 2>/dev/null; wait $QEMU_PID 2>/dev/null echo "" echo "=== Results: $PASS/2 checks passed ===" rm -f /tmp/fw_vars_test.bin "$SERIAL_LOG" [ $PASS -ge 2 ] && exit 0 || exit 1