Nothing to see here, move along
at main 122 lines 3.4 kB view raw
1#!/usr/bin/env bash 2set -euo pipefail 3 4SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 5ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" 6 7TARGET_DIR="$ROOT/target/x86_64-lancer-none/debug" 8KERNEL_BIN="$TARGET_DIR/lancer-kernel" 9ISO_DIR="$ROOT/target/iso-integration" 10ISO_FILE="$ROOT/target/lancer-integration.iso" 11LIMINE_DIR="$ROOT/target/limine" 12OVMF_VARS="$ROOT/target/ovmf/OVMF_VARS_4M.fd" 13OVMF_CODE="/usr/share/OVMF/OVMF_CODE_4M.fd" 14NVME_DISK="$ROOT/target/nvme-integration.img" 15 16BOOT_MODULES=( 17 "lancer-init:init" 18 "lancer-serial-driver:serial" 19 "lancer-nvme-driver:nvme" 20 "lancer-lancerfs:lancerfs" 21 "lancer-fstest:fstest" 22) 23 24echo "=== Lancer Integration Tests ===" 25 26echo "Building workspace" 27cargo build --manifest-path "$ROOT/Cargo.toml" --workspace 28 29echo "Formatting NVMe disk image" 30rm -f "$NVME_DISK" 31cd /tmp 32cargo run --manifest-path "$ROOT/Cargo.toml" -p lancer-lancerfs --no-default-features --features host --target x86_64-unknown-linux-gnu --bin mkfs_host -- "$NVME_DISK" 64M 33cd "$ROOT" 34 35echo "Creating ISO" 36rm -rf "$ISO_DIR" 37mkdir -p "$ISO_DIR/boot/limine" "$ISO_DIR/EFI/BOOT" 38cp "$KERNEL_BIN" "$ISO_DIR/boot/kernel" 39for entry in "${BOOT_MODULES[@]}"; do 40 bin="${entry%%:*}" 41 name="${entry##*:}" 42 src="$TARGET_DIR/${bin}" 43 if [ -f "$src" ]; then 44 cp "$src" "$ISO_DIR/boot/${name}" 45 else 46 echo "WARNING: binary $src not found, skipping" 47 fi 48done 49 50cat > "$ISO_DIR/boot/limine/limine.conf" <<'LIMINEEOF' 51timeout: 0 52serial: yes 53verbose: yes 54 55/Lancer Integration Test 56 protocol: limine 57 kernel_path: boot():/boot/kernel 58 module_path: boot():/boot/init 59 module_path: boot():/boot/serial 60 module_path: boot():/boot/nvme 61 module_path: boot():/boot/lancerfs 62 module_path: boot():/boot/fstest 63LIMINEEOF 64 65cp "$LIMINE_DIR/limine-bios.sys" "$ISO_DIR/boot/limine/" 66cp "$LIMINE_DIR/limine-bios-cd.bin" "$ISO_DIR/boot/limine/" 67cp "$LIMINE_DIR/limine-uefi-cd.bin" "$ISO_DIR/boot/limine/" 68cp "$LIMINE_DIR/BOOTX64.EFI" "$ISO_DIR/EFI/BOOT/" 69cp "$LIMINE_DIR/BOOTIA32.EFI" "$ISO_DIR/EFI/BOOT/" 70xorriso -as mkisofs \ 71 -b boot/limine/limine-bios-cd.bin \ 72 -no-emul-boot -boot-load-size 4 -boot-info-table \ 73 --efi-boot boot/limine/limine-uefi-cd.bin \ 74 -efi-boot-part --efi-boot-image --protective-msdos-label \ 75 "$ISO_DIR" -o "$ISO_FILE" 76"$LIMINE_DIR/limine" bios-install "$ISO_FILE" 77 78mkdir -p "$(dirname "$OVMF_VARS")" 79cp /usr/share/OVMF/OVMF_VARS_4M.fd "$OVMF_VARS" 80 81echo "Booting QEMU with NVMe + IOMMU" 82set +e 83timeout 120s qemu-system-x86_64 \ 84 -M q35,accel=kvm:tcg,kernel-irqchip=split \ 85 -cpu host \ 86 -m 512M \ 87 -drive if=pflash,format=raw,readonly=on,file="$OVMF_CODE" \ 88 -drive if=pflash,format=raw,file="$OVMF_VARS" \ 89 -cdrom "$ISO_FILE" \ 90 -device intel-iommu,intremap=on,caching-mode=on \ 91 -drive file="$NVME_DISK",if=none,id=nvm,format=raw \ 92 -device nvme,serial=lancernvme,drive=nvm \ 93 -serial stdio \ 94 -display none \ 95 -no-reboot \ 96 -device isa-debug-exit,iobase=0x501,iosize=0x04 \ 97 < /dev/null 2>&1 98QEMU_EXIT=$? 99set -e 100 101case $QEMU_EXIT in 102 33) 103 echo "" 104 echo "INTEGRATION TESTS PASSED" 105 exit 0 106 ;; 107 35) 108 echo "" 109 echo "INTEGRATION TESTS FAILED" 110 exit 1 111 ;; 112 124|137) 113 echo "" 114 echo "TIMEOUT" 115 exit 1 116 ;; 117 *) 118 echo "" 119 echo "UNEXPECTED EXIT CODE: $QEMU_EXIT" 120 exit 1 121 ;; 122esac