#!/bin/bash # SPDX-License-Identifier: BSD-3-Clause # Copyright (c) 2026 Open-IOV contributors # Comprehensive Test Suite for Open-IOV vGPU-IO # Runs all validation tests in sequence set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" OPEN_IOV_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" echo "=== Open-IOV vGPU-IO Comprehensive Test Suite ===" echo "Open-IOV root: $OPEN_IOV_ROOT" echo "Date: $(date)" echo "" # Check if we're root if [ "$EUID" -ne 0 ]; then echo "ERROR: This script must be run as root" exit 1 fi # Parse arguments RUN_KERNEL_TESTS=true RUN_GUEST_TESTS=true RUN_CUDA_TESTS=true RUN_GRAPHICS_TESTS=true RUN_WINDOWS_TESTS=false while [[ $# -gt 0 ]]; do case $1 in --kernel-only) RUN_GUEST_TESTS=false RUN_CUDA_TESTS=false RUN_GRAPHICS_TESTS=false shift ;; --guest-only) RUN_KERNEL_TESTS=false RUN_CUDA_TESTS=false RUN_GRAPHICS_TESTS=false shift ;; --no-windows) RUN_WINDOWS_TESTS=false shift ;; --windows) RUN_WINDOWS_TESTS=true shift ;; *) echo "Unknown option: $1" echo "Usage: $0 [--kernel-only] [--guest-only] [--no-windows] [--windows]" exit 1 ;; esac done RESULTS=() # Test 1: Kernel GSP Emulation Tests if [ "$RUN_KERNEL_TESTS" = true ]; then echo "" echo "========================================" echo "TEST 1: Kernel GSP Emulation Unit Tests" echo "========================================" if "$SCRIPT_DIR/test_gsp_emu.sh"; then RESULTS+=("Kernel GSP Emulation: PASS") else RESULTS+=("Kernel GSP Emulation: FAIL") fi fi # Test 2: Guest Driver Integration if [ "$RUN_GUEST_TESTS" = true ]; then echo "" echo "========================================" echo "TEST 2: Guest Driver Integration" echo "========================================" if "$SCRIPT_DIR/test_guest_driver.sh"; then RESULTS+=("Guest Driver Integration: PASS") else RESULTS+=("Guest Driver Integration: FAIL") fi fi # Test 3: CUDA Workloads if [ "$RUN_CUDA_TESTS" = true ]; then echo "" echo "========================================" echo "TEST 3: CUDA Workload Validation" echo "========================================" if "$SCRIPT_DIR/test_cuda_workloads.sh"; then RESULTS+=("CUDA Workloads: PASS") else RESULTS+=("CUDA Workloads: FAIL") fi fi # Test 4: Graphics Workloads if [ "$RUN_GRAPHICS_TESTS" = true ]; then echo "" echo "========================================" echo "TEST 4: Graphics Workload Validation" echo "========================================" if "$SCRIPT_DIR/test_graphics_workloads.sh"; then RESULTS+=("Graphics Workloads: PASS") else RESULTS+=("Graphics Workloads: FAIL") fi fi # Test 5: Windows Guest (optional) if [ "$RUN_WINDOWS_TESTS" = true ]; then echo "" echo "========================================" echo "TEST 5: Windows Guest Validation" echo "========================================" if "$SCRIPT_DIR/test_windows_guest.sh"; then RESULTS+=("Windows Guest: PASS") else RESULTS+=("Windows Guest: FAIL") fi fi # Summary echo "" echo "========================================" echo "TEST SUMMARY" echo "========================================" for result in "${RESULTS[@]}"; do echo " $result" done # Check for failures FAIL_COUNT=0 for result in "${RESULTS[@]}"; do if [[ "$result" == *"FAIL"* ]]; then FAIL_COUNT=$((FAIL_COUNT + 1)) fi done echo "" if [ $FAIL_COUNT -eq 0 ]; then echo "ALL TESTS PASSED ✓" exit 0 else echo "$FAIL_COUNT TEST(S) FAILED ✗" exit 1 fi