tests: run_all.sh авто-tee в test-results/, правила логирования
This commit is contained in:
Executable
+113
@@ -0,0 +1,113 @@
|
||||
#!/usr/bin/env bash
|
||||
# run_all.sh — запускает все тест-скрипты по очереди, выводит итог.
|
||||
# Каждый скрипт независим и имеет собственный cleanup.
|
||||
# При падении одного скрипта остальные продолжают выполняться.
|
||||
#
|
||||
# Запуск: bash run_all.sh
|
||||
# Запуск одного: bash run_all.sh test_auth.sh
|
||||
set -uo pipefail
|
||||
|
||||
ROOT_DIR=$(cd "$(dirname "$0")" && pwd)
|
||||
|
||||
# Авто-логирование: если stdout — терминал, пишем одновременно в файл
|
||||
LOG_DIR="${ROOT_DIR}/../test-results"
|
||||
mkdir -p "$LOG_DIR"
|
||||
LOG_FILE="${LOG_DIR}/$(date +%Y-%m-%d_%H-%M-%S).log"
|
||||
# Перезапуск с tee только если ещё не логируем (нет переменной _LOGGING)
|
||||
if [ -z "${_LOGGING:-}" ]; then
|
||||
export _LOGGING=1
|
||||
exec bash "$0" "$@" 2>&1 | tee "$LOG_FILE"
|
||||
exit $?
|
||||
fi
|
||||
echo "LOG: $LOG_FILE"
|
||||
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m'
|
||||
|
||||
TOTAL_PASS=0
|
||||
TOTAL_FAIL=0
|
||||
FAILED_SCRIPTS=()
|
||||
|
||||
run_script() {
|
||||
local script="$1"
|
||||
local name
|
||||
name=$(basename "$script")
|
||||
echo ""
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
echo " ЗАПУСК: $name"
|
||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||
|
||||
local exit_code=0
|
||||
bash "$script" || exit_code=$?
|
||||
|
||||
if [ "$exit_code" -eq 0 ]; then
|
||||
echo -e "${GREEN} ✓ $name — PASSED${NC}"
|
||||
TOTAL_PASS=$((TOTAL_PASS+1))
|
||||
else
|
||||
echo -e "${RED} ✗ $name — FAILED (exit $exit_code)${NC}"
|
||||
TOTAL_FAIL=$((TOTAL_FAIL+1))
|
||||
FAILED_SCRIPTS+=("$name")
|
||||
fi
|
||||
}
|
||||
|
||||
# Список скриптов в порядке выполнения
|
||||
# (быстрые сначала, invoke/stress — последними)
|
||||
SCRIPTS=(
|
||||
"${ROOT_DIR}/test_auth.sh"
|
||||
"${ROOT_DIR}/test_functions_crud.sh"
|
||||
"${ROOT_DIR}/test_ttl.sh"
|
||||
"${ROOT_DIR}/test_isolation.sh"
|
||||
"${ROOT_DIR}/test_update.sh"
|
||||
"${ROOT_DIR}/test_invoke.sh"
|
||||
"${ROOT_DIR}/test_linters.sh"
|
||||
"${ROOT_DIR}/test_stress.sh"
|
||||
)
|
||||
|
||||
# Если передан аргумент — запускаем только его
|
||||
if [ "$#" -ge 1 ]; then
|
||||
SCRIPTS=("${ROOT_DIR}/$1")
|
||||
fi
|
||||
|
||||
# Предварительная очистка тест-namespace-ов от прошлых прогонов.
|
||||
# Запускается только если cleanup_test_namespaces.sh умеет wildcard.
|
||||
PRE_CLEANUP="${ROOT_DIR}/pre_cleanup.sh"
|
||||
if [ -x "$PRE_CLEANUP" ]; then
|
||||
echo ""
|
||||
echo ">>> Предварительная очистка тест-namespace-ов..."
|
||||
KUBECTL_DIRECT=1 bash "$PRE_CLEANUP" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "╔══════════════════════════════════════╗"
|
||||
echo "║ fission-console — полный тест-сьют ║"
|
||||
echo "╚══════════════════════════════════════╝"
|
||||
|
||||
START_TIME=$(date +%s)
|
||||
|
||||
for script in "${SCRIPTS[@]}"; do
|
||||
if [ ! -f "$script" ]; then
|
||||
echo -e "${YELLOW} SKIP: $script не найден${NC}"
|
||||
continue
|
||||
fi
|
||||
run_script "$script"
|
||||
done
|
||||
|
||||
END_TIME=$(date +%s)
|
||||
ELAPSED=$((END_TIME - START_TIME))
|
||||
|
||||
echo ""
|
||||
echo "╔══════════════════════════════════════╗"
|
||||
printf "║ Скриптов: PASS=%-3d FAIL=%-3d %3ds ║\n" "$TOTAL_PASS" "$TOTAL_FAIL" "$ELAPSED"
|
||||
echo "╚══════════════════════════════════════╝"
|
||||
|
||||
if [ "${#FAILED_SCRIPTS[@]}" -gt 0 ]; then
|
||||
echo ""
|
||||
echo "Упавшие скрипты:"
|
||||
for s in "${FAILED_SCRIPTS[@]}"; do
|
||||
echo -e " ${RED}✗ $s${NC}"
|
||||
done
|
||||
fi
|
||||
|
||||
[ "$TOTAL_FAIL" -eq 0 ]
|
||||
Reference in New Issue
Block a user