From 866d327f0bad3a0730801a22654bac45e02ee14b Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Mon, 20 Jul 2026 23:40:56 -0500 Subject: fix(test): harden four VM-framework paths from the S5 audit init_vm_paths suffixed the disk and NVRAM by FS_PROFILE but left PID_FILE, MONITOR_SOCK, and SERIAL_LOG shared. A concurrent btrfs and zfs run read each other's PID file, so the second run's stop logic could kill the first run's VM. All runtime paths now carry the suffix. kill_qemu sent kill -9 and returned without waiting, so the force-kill fallback could run qemu-img snapshot against a qcow2 the dying qemu still held locked (the restore failed silently behind || true, leaving the base image dirty). It now reaps or polls the process to death before returning. debug-vm.sh hardcoded the btrfs base-disk name, so FS_PROFILE=zfs booted the wrong base or fatalled. It now takes DISK_PATH from init_vm_paths. Both runners reported a completion-marker grep as "ArchSetup Exit Code," but the installer runs detached with set -e off, so its real exit status was never captured -- a run that errored mid-way and still reached its last line reported exit 0. The flag is now ARCHSETUP_COMPLETED with the report labeled honestly; Testinfra stays the pass/fail authority. --- scripts/testing/run-test.sh | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'scripts/testing/run-test.sh') diff --git a/scripts/testing/run-test.sh b/scripts/testing/run-test.sh index f962df3..a5c3691 100755 --- a/scripts/testing/run-test.sh +++ b/scripts/testing/run-test.sh @@ -280,15 +280,17 @@ done if [ $POLL_COUNT -ge $MAX_POLLS ]; then error "ArchSetup timed out after 150 minutes" - ARCHSETUP_EXIT_CODE=124 + ARCHSETUP_COMPLETED=timeout else - # Get exit code from the remote log - step "Retrieving archsetup exit status..." - ARCHSETUP_EXIT_CODE=$(vm_exec "$ROOT_PASSWORD" \ - "grep -q 'ARCHSETUP_EXECUTION_COMPLETE' /var/log/archsetup-*.log 2>/dev/null && echo 0 || echo 1" \ + # The installer runs detached with set -e off, so its real exit status + # is unavailable here; the completion marker only proves the script ran + # to its last line. Testinfra below is the actual pass/fail authority. + step "Checking for the archsetup completion marker..." + ARCHSETUP_COMPLETED=$(vm_exec "$ROOT_PASSWORD" \ + "grep -q 'ARCHSETUP_EXECUTION_COMPLETE' /var/log/archsetup-*.log 2>/dev/null && echo yes || echo no" \ 2>/dev/null) - if [ "$ARCHSETUP_EXIT_CODE" = "0" ]; then + if [ "$ARCHSETUP_COMPLETED" = "yes" ]; then success "ArchSetup completed successfully" else error "ArchSetup may have encountered errors (check logs)" @@ -370,7 +372,7 @@ VM Configuration: SSH: localhost:$SSH_PORT Results: - ArchSetup Exit Code: $ARCHSETUP_EXIT_CODE + ArchSetup Completed: $ARCHSETUP_COMPLETED (completion marker, not the installer's exit code) Validation: $(if $TEST_PASSED; then echo "PASSED"; else echo "FAILED"; fi) Validation Summary: @@ -424,7 +426,7 @@ CLEANUP_DONE=1 # Final summary section "Test Complete" -if [ "$ARCHSETUP_EXIT_CODE" = "0" ] && $TEST_PASSED; then +if [ "$ARCHSETUP_COMPLETED" = "yes" ] && $TEST_PASSED; then success "TEST PASSED" exit 0 else -- cgit v1.2.3