diff --git a/tests/lifecycle/bats/all-apps-lifecycle.bats b/tests/lifecycle/bats/all-apps-lifecycle.bats index fce49404..d35c4c6b 100644 --- a/tests/lifecycle/bats/all-apps-lifecycle.bats +++ b/tests/lifecycle/bats/all-apps-lifecycle.bats @@ -129,11 +129,21 @@ catalog_install_payload() { local fails="" id for id in $(target_apps); do [[ "$(app_state "$id")" == "running" ]] || continue # only cycle running apps - rpc_result package.stop "{\"id\":\"$id\"}" >/dev/null 2>&1 + # Each rpc_result must be allowed to fail without aborting the loop. + # rpc_result returns non-zero whenever the response carries .error, and + # under bats' errexit a bare call ends the test right there — so a single + # transient RPC hiccup killed the run BEFORE the $fails summary below could + # name the app. That is exactly what happened on 2026-08-08: the whole test + # died at package.stop with no indication of which of the ten targets it was + # (it was mempool, and the same call succeeded by hand moments later). + rpc_result package.stop "{\"id\":\"$id\"}" >/dev/null 2>&1 \ + || { fails+="$id:stop-rpc "; continue; } wait_state "$id" stopped 120 || { fails+="$id:stop "; } - rpc_result package.start "{\"id\":\"$id\"}" >/dev/null 2>&1 + rpc_result package.start "{\"id\":\"$id\"}" >/dev/null 2>&1 \ + || { fails+="$id:start-rpc "; continue; } wait_state "$id" running 240 || { fails+="$id:start "; continue; } - rpc_result package.restart "{\"id\":\"$id\"}" >/dev/null 2>&1 + rpc_result package.restart "{\"id\":\"$id\"}" >/dev/null 2>&1 \ + || { fails+="$id:restart-rpc "; continue; } wait_state "$id" running 240 || { fails+="$id:restart "; } done [[ -z "$fails" ]] || { echo "# lifecycle failures: $fails" >&3; false; }