Skip to content

Commit 38c7546

Browse files
openstack_test: pre-count LB serial expected; hard-fail resolve mismatch
In-loop expected++ under the OTE serial shell stays at 1 and false-fails resolvable!=expected after clean amphora runs (nightly edc5d1). Pre-count from the filtered list like serial coda. Also fail in rescue when resolvable!=expected so block/rescue cannot soft-recover a real mismatch. Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent f1f2943 commit 38c7546

1 file changed

Lines changed: 22 additions & 6 deletions

File tree

‎collection/stages/roles/openstack_test/tasks/run_openstack_test.yml‎

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -251,11 +251,17 @@
251251
set -o pipefail
252252
: > {{ openstack_test_log_path }}
253253
py_exit=0
254-
expected=0
255254
resolve="{{ openstack_test_ote_resolve_script }}"
255+
# Pre-count from the list file (do not increment in-loop; in-loop
256+
# expected stays wrong under /bin/sh and false-fails
257+
# resolvable!=expected after a clean LB serial run; same fix as coda).
258+
expected="$(grep -cve '^[[:space:]]*$' {{ tests_to_run_path }} || true)"
259+
if [ "${expected:-0}" -eq 0 ]; then
260+
echo "ote serial: empty filtered test list (expected=0); failing"
261+
exit 1
262+
fi
256263
while IFS= read -r test || [[ -n "$test" ]]; do
257264
[[ -z "${test// }" ]] && continue
258-
expected=$((expected + 1))
259265
tmp=$(mktemp)
260266
# OTE often exits non-zero on pass/skip (Deserializaion Error on
261267
# leading I... klog). Ignore per-test rc; end-of-suite resolver is
@@ -265,10 +271,6 @@
265271
cat "$tmp" >> {{ openstack_test_log_path }}
266272
rm -f "$tmp"
267273
done < {{ tests_to_run_path }}
268-
if [ "$expected" -eq 0 ]; then
269-
echo "ote serial: empty filtered test list (expected=0); failing"
270-
exit 1
271-
fi
272274
python3 "$resolve" junit \
273275
"{{ openstack_test_log_path }}" "{{ openstack_test_junit_path }}" || py_exit=$?
274276
failed_count=$(python3 "$resolve" count \
@@ -539,6 +541,20 @@
539541
must_gather_suffix: "openstack-tests"
540542
when: (number_of_failed_tests | default('0')) | int > 0
541543

544+
# Hard-fail incomplete/inflated resolve so block/rescue cannot soft-recover
545+
# a resolvable!=expected gate miss (UNSTABLE alone still clears the block).
546+
- name: Fail when OTE resolvable count does not match expected
547+
ansible.builtin.fail:
548+
msg: >-
549+
openstack-test resolvable={{ number_of_resolvable_tests | default('0') }}
550+
!= expected={{ number_of_expected_tests | default('0') }}
551+
(incomplete or inflated resolve; cannot soft-recover)
552+
when:
553+
- openstack_test_use_ote | bool
554+
- >
555+
(number_of_resolvable_tests | default('0')) | int
556+
!= (number_of_expected_tests | default('0')) | int
557+
542558
# Serial coda after the main batch (or filtered serial) suite.
543559
- name: Run serial-coda tests after main suite
544560
ansible.builtin.include_tasks: run_machines_leak_cluster_serial.yml

0 commit comments

Comments
 (0)