tests: run_all.sh авто-tee в test-results/, правила логирования
This commit is contained in:
@@ -60,6 +60,33 @@ ssh -i ~/.ssh/naeel_vm_id_ed25519 -o StrictHostKeyChecking=no -o ConnectTimeout=
|
||||
git tag vX.Y.Z && git push origin vX.Y.Z
|
||||
```
|
||||
|
||||
## ⛔ ТЕРМИНАЛЬНЫЙ БУФЕР — НИКОГДА НЕ ЧИТАТЬ СТАРЫЙ
|
||||
|
||||
**АБСОЛЮТНОЕ ПРАВИЛО:**
|
||||
- get_terminal_output из старых сессий — МУСОР. Там старые прогоны.
|
||||
- Всегда запускать новую команду через SSH и читать её вывод напрямую.
|
||||
- НИКОГДА не читать буфер терминала из предыдущей сессии как актуальные данные.
|
||||
- Актуальный результат — только из команды, которая была запущена СЕЙЧАС.
|
||||
|
||||
## ⛔ ДОКУМЕНТАЦИЯ ТЕСТ-ПРОГОНОВ — В РЕАЛЬНОМ ВРЕМЕНИ
|
||||
|
||||
**Правила:**
|
||||
1. Перед запуском `run_all.sh` — создать файл `test-results/YYYY-MM-DD_HH-MM.log` и записать в него метку времени и что запускается.
|
||||
2. Запускать `run_all.sh 2>&1 | tee ~/terra/fission/test-results/YYYY-MM-DD_HH-MM.log` — вывод пишется сразу в файл и отображается в терминале.
|
||||
3. После завершения — rsync лога локально. Лог остаётся как документация.
|
||||
4. Папка `test-results/` в репозитории — `.gitignore` не добавлять, логи коммитить.
|
||||
|
||||
**Формат запуска:**
|
||||
```bash
|
||||
LOG="test-results/$(date +%Y-%m-%d_%H-%M).log"
|
||||
ssh -i ~/.ssh/naeel_vm_id_ed25519 -o StrictHostKeyChecking=no naeel@5.172.178.213 \
|
||||
"bash ~/terra/fission/scripts/run_all.sh 2>&1 | tee ~/terra/fission/${LOG}"
|
||||
rsync -az -e "ssh -i ~/.ssh/naeel_vm_id_ed25519 -o StrictHostKeyChecking=no" \
|
||||
naeel@5.172.178.213:~/terra/fission/test-results/ ~/fission/test-results/
|
||||
```
|
||||
|
||||
**Никогда не разбираться с результатами по памяти / буферу / чату. Только лог.**
|
||||
|
||||
## Поведение агента
|
||||
|
||||
- Не трогать рабочий код без явного указания
|
||||
|
||||
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