From 6e046a505d107d3f2d3c983e2ed1bfbc51ec739b Mon Sep 17 00:00:00 2001 From: Danny Date: Fri, 20 Mar 2026 09:24:01 +0100 Subject: [PATCH] wip --- tests/run-tests.sh | 68 +++++++++++++++++++++++++--------------------- 1 file changed, 37 insertions(+), 31 deletions(-) diff --git a/tests/run-tests.sh b/tests/run-tests.sh index 375d487..2d6bf78 100755 --- a/tests/run-tests.sh +++ b/tests/run-tests.sh @@ -873,46 +873,52 @@ if [ "$QUICK_MODE" = false ] && [ -n "${OVMF_PATH:-}" ] && [ -f "${ISO}" ]; then HAS_KERNEL=false [ -f "${PROJECT_ROOT}/kernel/vmlinuz" ] && HAS_KERNEL=true - INITRD_FLAGS="" - [ -f "${PROJECT_ROOT}/src/iso/initramfs.cpio.gz" ] && \ - INITRD_FLAGS="-initrd ${PROJECT_ROOT}/src/iso/initramfs.cpio.gz" + # Build QEMU command as an array for correct quoting + QEMU_CMD=(qemu-system-x86_64) + [ -n "$KVM_FLAG" ] && QEMU_CMD+=($KVM_FLAG) + QEMU_CMD+=(-m 2G -smp 2) if [ "$HAS_KERNEL" = true ]; then echo " Using direct kernel boot (kernel + initramfs)..." - timeout 60 qemu-system-x86_64 \ - ${KVM_FLAG} \ - -m 2G \ - -smp 2 \ - -kernel "${PROJECT_ROOT}/kernel/vmlinuz" \ - ${INITRD_FLAGS} \ - -append "console=ttyS0,115200n8" \ - -cdrom "$ISO" \ - -drive file="$QEMU_DISK",format=qcow2,if=virtio \ - -nographic \ - -serial mon:stdio \ - -no-reboot \ - 2>"${LOG_DIR}/qemu-stderr.log" | head -200 > "${LOG_DIR}/qemu-output.log" & - QEMU_PID=$! + QEMU_CMD+=(-kernel "${PROJECT_ROOT}/kernel/vmlinuz") + if [ -f "${PROJECT_ROOT}/src/iso/initramfs.cpio.gz" ]; then + QEMU_CMD+=(-initrd "${PROJECT_ROOT}/src/iso/initramfs.cpio.gz") + fi + QEMU_CMD+=(-append "console=ttyS0,115200n8 loglevel=7") else echo " Using UEFI ISO boot (no compiled kernel found)..." - timeout 60 qemu-system-x86_64 \ - ${KVM_FLAG} \ - -m 2G \ - -smp 2 \ - ${OVMF_FLAGS} \ - -cdrom "$ISO" \ - -drive file="$QEMU_DISK",format=qcow2,if=virtio \ - -nographic \ - -serial mon:stdio \ - -no-reboot \ - 2>"${LOG_DIR}/qemu-stderr.log" | head -200 > "${LOG_DIR}/qemu-output.log" & - QEMU_PID=$! + QEMU_CMD+=(${OVMF_FLAGS}) fi - sleep 60 - kill $QEMU_PID 2>/dev/null + QEMU_CMD+=(-cdrom "$ISO") + QEMU_CMD+=(-drive "file=$QEMU_DISK,format=qcow2,if=virtio") + QEMU_CMD+=(-nographic -no-reboot) + + # Debug: show the QEMU command + echo " QEMU: ${QEMU_CMD[*]}" >&2 + + # Run QEMU with timeout, capture serial output directly to file + # -nographic routes serial to stdio automatically + timeout 30 "${QEMU_CMD[@]}" > "${LOG_DIR}/qemu-output.log" 2>"${LOG_DIR}/qemu-stderr.log" & + QEMU_PID=$! + + # Wait for QEMU to finish (timeout handles the time limit) wait $QEMU_PID 2>/dev/null + # Debug: dump log sizes and first/last lines + echo " Output log: $(wc -l < "${LOG_DIR}/qemu-output.log" 2>/dev/null || echo 0) lines, $(wc -c < "${LOG_DIR}/qemu-output.log" 2>/dev/null || echo 0) bytes" >&2 + echo " Stderr log: $(wc -l < "${LOG_DIR}/qemu-stderr.log" 2>/dev/null || echo 0) lines" >&2 + if [ -s "${LOG_DIR}/qemu-output.log" ]; then + echo " First 3 lines of output:" >&2 + head -3 "${LOG_DIR}/qemu-output.log" >&2 + echo " Last 3 lines of output:" >&2 + tail -3 "${LOG_DIR}/qemu-output.log" >&2 + else + echo " WARNING: qemu-output.log is empty!" >&2 + echo " Stderr:" >&2 + head -10 "${LOG_DIR}/qemu-stderr.log" >&2 + fi + # Check if we got kernel boot messages if grep -qi "linux version\|darkforge\|kernel" "${LOG_DIR}/qemu-output.log" 2>/dev/null; then record_test "qemu.kernel_boots" "pass"