diff options
Diffstat (limited to 'scripts/testing/run-test.sh')
| -rwxr-xr-x | scripts/testing/run-test.sh | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/scripts/testing/run-test.sh b/scripts/testing/run-test.sh index c0eaf50..18f4fdf 100755 --- a/scripts/testing/run-test.sh +++ b/scripts/testing/run-test.sh @@ -36,11 +36,11 @@ while [[ $# -gt 0 ]]; do shift ;; --script) - ARCHSETUP_SCRIPT="$2" + ARCHSETUP_SCRIPT="${2:?--script requires a value}" shift 2 ;; --snapshot) - SNAPSHOT_NAME="$2" + SNAPSHOT_NAME="${2:?--snapshot requires a value}" shift 2 ;; *) @@ -53,6 +53,28 @@ while [[ $# -gt 0 ]]; do esac done +# Failure-path cleanup. Normal completion (further down) sets CLEANUP_DONE=1 +# so the trap becomes a no-op. If we abort partway through, the trap is the +# safety net that stops a leaked QEMU and reverts the base disk. +CLEANUP_DONE=0 +BUNDLE_FILE="" +cleanup_run_test() { + [ "$CLEANUP_DONE" = "1" ] && return 0 + CLEANUP_DONE=1 + [ -n "$BUNDLE_FILE" ] && [ -f "$BUNDLE_FILE" ] && rm -f "$BUNDLE_FILE" + if [ "$KEEP_VM" = "true" ]; then + return 0 + fi + if declare -f stop_qemu >/dev/null 2>&1; then + stop_qemu 2>/dev/null || true + fi + if [ -n "${DISK_PATH:-}" ] && [ -n "${SNAPSHOT_NAME:-}" ] \ + && declare -f restore_snapshot >/dev/null 2>&1; then + restore_snapshot "$DISK_PATH" "$SNAPSHOT_NAME" 2>/dev/null || true + fi +} +trap cleanup_run_test EXIT + # Configuration TIMESTAMP=$(date +'%Y%m%d-%H%M%S') VM_IMAGES_DIR="$PROJECT_ROOT/vm-images" @@ -79,8 +101,8 @@ fi # Check disk exists if [ ! -f "$DISK_PATH" ]; then - fatal "Base disk not found: $DISK_PATH" info "Create it first: ./scripts/testing/create-base-vm.sh" + fatal "Base disk not found: $DISK_PATH" fi # Check if snapshot exists @@ -88,11 +110,11 @@ section "Preparing Test Environment" step "Checking for snapshot: $SNAPSHOT_NAME" if ! snapshot_exists "$DISK_PATH" "$SNAPSHOT_NAME"; then - fatal "Snapshot '$SNAPSHOT_NAME' not found on $DISK_PATH" info "Available snapshots:" list_snapshots "$DISK_PATH" info "" info "Create base VM with: ./scripts/testing/create-base-vm.sh" + fatal "Snapshot '$SNAPSHOT_NAME' not found on $DISK_PATH" fi success "Snapshot $SNAPSHOT_NAME exists" @@ -127,7 +149,6 @@ section "Simulating Git Clone" step "Creating shallow git clone on VM" info "This simulates: git clone --depth 1 <repo> /home/cjennings/code/archsetup" -# Create a temporary git bundle from current repo BUNDLE_FILE=$(mktemp) git -C "$PROJECT_ROOT" bundle create "$BUNDLE_FILE" HEAD >> "$LOGFILE" 2>&1 @@ -276,7 +297,7 @@ analyze_log_diff "$TEST_RESULTS_DIR" generate_issue_report "$TEST_RESULTS_DIR" "$ARCHZFS_INBOX" # Set validation result based on failure count -if [ $VALIDATION_FAILED -eq 0 ]; then +if [ "$VALIDATION_FAILED" -eq 0 ]; then TEST_PASSED=true else TEST_PASSED=false @@ -350,6 +371,7 @@ else warn "Failed to revert snapshot - VM may be in modified state" fi fi +CLEANUP_DONE=1 # Final summary section "Test Complete" |
