86 lines
2.6 KiB
Bash
86 lines
2.6 KiB
Bash
|
|
#!/usr/bin/env bash
|
|||
|
|
# tests/lifecycle/run-20x.sh — loop the lifecycle harness N times.
|
|||
|
|
#
|
|||
|
|
# Each iteration: setup-teardown → run.sh (with the same args you'd pass
|
|||
|
|
# to run.sh) → setup-teardown. Tallies pass/fail per iteration and prints a
|
|||
|
|
# summary at the end. Returns non-zero if any iteration failed.
|
|||
|
|
#
|
|||
|
|
# Env:
|
|||
|
|
# ARCHY_ITERATIONS (default: 20)
|
|||
|
|
# ARCHY_FAIL_FAST=1 stop on first failed iteration
|
|||
|
|
# plus everything run.sh / lib/rpc.bash respects
|
|||
|
|
# (ARCHY_PASSWORD, ARCHY_HOST, ARCHY_SCHEME, ARCHY_ALLOW_DESTRUCTIVE,
|
|||
|
|
# ARCHY_ALLOW_CASCADE_DESTRUCTIVE, ARCHY_ALLOW_NOAUTH)
|
|||
|
|
#
|
|||
|
|
# Usage:
|
|||
|
|
# tests/lifecycle/run-20x.sh # 20× full bats/ suite
|
|||
|
|
# ARCHY_ITERATIONS=5 tests/lifecycle/run-20x.sh # 5× full suite
|
|||
|
|
# tests/lifecycle/run-20x.sh bitcoin-knots # 20× a single suite
|
|||
|
|
#
|
|||
|
|
# Suggested release-gate invocation:
|
|||
|
|
# ARCHY_PASSWORD=password123 ARCHY_ALLOW_DESTRUCTIVE=1 \
|
|||
|
|
# tests/lifecycle/run-20x.sh
|
|||
|
|
|
|||
|
|
set -euo pipefail
|
|||
|
|
|
|||
|
|
HERE="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
|
|||
|
|
cd "$HERE"
|
|||
|
|
|
|||
|
|
ITER="${ARCHY_ITERATIONS:-20}"
|
|||
|
|
if ! [[ "$ITER" =~ ^[1-9][0-9]*$ ]]; then
|
|||
|
|
echo "ARCHY_ITERATIONS must be a positive integer, got: $ITER" >&2
|
|||
|
|
exit 2
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
passed=0
|
|||
|
|
failed=0
|
|||
|
|
failures=()
|
|||
|
|
start=$(date +%s)
|
|||
|
|
|
|||
|
|
# One initial teardown so a previous run's cookies don't poison iteration 1.
|
|||
|
|
./setup-teardown.sh
|
|||
|
|
|
|||
|
|
for i in $(seq 1 "$ITER"); do
|
|||
|
|
echo
|
|||
|
|
echo "═══ iteration $i / $ITER ═══"
|
|||
|
|
iter_start=$(date +%s)
|
|||
|
|
|
|||
|
|
if ./run.sh "$@"; then
|
|||
|
|
iter_end=$(date +%s)
|
|||
|
|
passed=$((passed + 1))
|
|||
|
|
echo "── iteration $i: PASS ($((iter_end - iter_start))s) ──"
|
|||
|
|
else
|
|||
|
|
rc=$?
|
|||
|
|
iter_end=$(date +%s)
|
|||
|
|
failed=$((failed + 1))
|
|||
|
|
failures+=("$i")
|
|||
|
|
echo "── iteration $i: FAIL (exit=$rc, $((iter_end - iter_start))s) ──"
|
|||
|
|
if [[ "${ARCHY_FAIL_FAST:-0}" == "1" ]]; then
|
|||
|
|
echo "ARCHY_FAIL_FAST=1, stopping early"
|
|||
|
|
break
|
|||
|
|
fi
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# Teardown between iterations so iteration N+1 starts with a clean
|
|||
|
|
# session-cookie state regardless of what iteration N did.
|
|||
|
|
./setup-teardown.sh
|
|||
|
|
done
|
|||
|
|
|
|||
|
|
end=$(date +%s)
|
|||
|
|
|
|||
|
|
echo
|
|||
|
|
echo "════════════════════════════════════════"
|
|||
|
|
echo " RESULTS"
|
|||
|
|
echo " iterations: $((passed + failed)) / $ITER"
|
|||
|
|
echo " passed: $passed"
|
|||
|
|
echo " failed: $failed"
|
|||
|
|
if (( failed > 0 )); then
|
|||
|
|
echo " failed at: ${failures[*]}"
|
|||
|
|
fi
|
|||
|
|
echo " wall time: $((end - start))s"
|
|||
|
|
echo "════════════════════════════════════════"
|
|||
|
|
|
|||
|
|
if (( failed > 0 )); then
|
|||
|
|
exit 1
|
|||
|
|
fi
|