This commit is contained in:
2026-01-08 12:28:54 +00:00
commit d2a473c2bd
45 changed files with 3739 additions and 0 deletions

BIN
isotest/OVMF_VARS.fd Normal file

Binary file not shown.

72
isotest/run-test.sh Executable file
View File

@@ -0,0 +1,72 @@
#!/bin/bash
set -e
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
ISO_PATH="$SCRIPT_DIR/../isobuild/output/ecoos.iso"
DISK_PATH="$SCRIPT_DIR/test-disk.qcow2"
MONITOR_SOCK="$SCRIPT_DIR/qemu-monitor.sock"
SERIAL_LOG="$SCRIPT_DIR/serial.log"
# Check if ISO exists
if [ ! -f "$ISO_PATH" ]; then
echo "ERROR: ISO not found at $ISO_PATH"
echo "Run 'npm run build' first to create the ISO"
exit 1
fi
# Create test disk if not exists
if [ ! -f "$DISK_PATH" ]; then
echo "Creating test disk (20GB)..."
qemu-img create -f qcow2 "$DISK_PATH" 20G
fi
# Check if already running
if [ -f "$SCRIPT_DIR/qemu.pid" ]; then
PID=$(cat "$SCRIPT_DIR/qemu.pid")
if kill -0 "$PID" 2>/dev/null; then
echo "QEMU already running (PID: $PID)"
echo "Run 'npm run test:stop' to stop it first"
exit 1
fi
fi
echo "Starting QEMU with EcoOS ISO..."
# Check if KVM is available
KVM_OPTS=""
if [ -e /dev/kvm ] && [ -r /dev/kvm ] && [ -w /dev/kvm ]; then
KVM_OPTS="-enable-kvm -cpu host"
echo "Using KVM acceleration"
else
echo "KVM not available, using software emulation (slower)"
fi
# Start QEMU headless with VNC and serial console
> "$SERIAL_LOG" # Clear old log
qemu-system-x86_64 \
$KVM_OPTS \
-m 4G \
-smp 2 \
-bios /usr/share/qemu/OVMF.fd \
-drive file="$ISO_PATH",media=cdrom \
-drive file="$DISK_PATH",format=qcow2,if=virtio \
-vga qxl \
-display none \
-vnc :0 \
-serial unix:"$SCRIPT_DIR/serial.sock",server,nowait \
-monitor unix:"$MONITOR_SOCK",server,nowait \
-nic user,model=virtio-net-pci,hostfwd=tcp::3006-:3006,hostfwd=tcp::2222-:22 \
-daemonize \
-pidfile "$SCRIPT_DIR/qemu.pid"
echo ""
echo "=== EcoOS Test VM Started ==="
echo "PID: $(cat $SCRIPT_DIR/qemu.pid)"
echo "VNC: localhost:5900"
echo "Serial Log: $SERIAL_LOG"
echo "Management UI: http://localhost:3006"
echo ""
echo "Commands:"
echo " npm run test:screenshot - Take screenshot"
echo " npm run test:stop - Stop VM"
echo " tail -f $SERIAL_LOG - Watch serial console"

47
isotest/screenshot.sh Executable file
View File

@@ -0,0 +1,47 @@
#!/bin/bash
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
MONITOR_SOCK="$SCRIPT_DIR/qemu-monitor.sock"
SCREENSHOT_DIR="$SCRIPT_DIR/screenshots"
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
# Check if QEMU is running
if [ ! -S "$MONITOR_SOCK" ]; then
echo "ERROR: QEMU not running (no monitor socket)"
echo "Run 'npm run test' first to start the VM"
exit 1
fi
mkdir -p "$SCREENSHOT_DIR"
PPM_FILE="$SCREENSHOT_DIR/ecoos-$TIMESTAMP.ppm"
PNG_FILE="$SCREENSHOT_DIR/ecoos-$TIMESTAMP.png"
LATEST_FILE="$SCREENSHOT_DIR/latest.png"
echo "Taking screenshot..."
echo "screendump $PPM_FILE" | socat - UNIX-CONNECT:"$MONITOR_SOCK"
sleep 1
# Check if PPM was created
if [ ! -f "$PPM_FILE" ]; then
echo "ERROR: Screenshot failed"
exit 1
fi
# Convert to PNG if imagemagick is available
if command -v convert &> /dev/null; then
convert "$PPM_FILE" "$PNG_FILE"
rm "$PPM_FILE"
# Copy to latest.png
cp "$PNG_FILE" "$LATEST_FILE"
echo "Screenshot saved: $PNG_FILE"
echo "Also saved as: $LATEST_FILE"
else
echo "Screenshot saved: $PPM_FILE"
echo "(Install imagemagick to auto-convert to PNG)"
fi
# Keep only last 20 screenshots (excluding latest.png)
cd "$SCREENSHOT_DIR"
ls -t ecoos-*.png 2>/dev/null | tail -n +21 | xargs -r rm -f

17
isotest/stop.sh Executable file
View File

@@ -0,0 +1,17 @@
#!/bin/bash
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
if [ -f "$SCRIPT_DIR/qemu.pid" ]; then
PID=$(cat "$SCRIPT_DIR/qemu.pid")
if kill -0 "$PID" 2>/dev/null; then
echo "Stopping QEMU (PID: $PID)..."
kill "$PID"
sleep 1
fi
rm -f "$SCRIPT_DIR/qemu.pid"
rm -f "$SCRIPT_DIR/qemu-monitor.sock"
echo "QEMU stopped"
else
echo "QEMU not running (no PID file)"
fi