#!/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 ]