aboutsummaryrefslogtreecommitdiff
path: root/scripts/testing/run-test.sh
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/testing/run-test.sh')
-rwxr-xr-xscripts/testing/run-test.sh34
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"