Stage 4
This commit is contained in:
@@ -1,50 +1,298 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "============================================================"
|
||||
echo " EVENTHUB FULL API TEST SUITE"
|
||||
echo "============================================================"
|
||||
echo ""
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
CYAN='\033[0;36m'
|
||||
NC='\033[0m'
|
||||
|
||||
SCRIPTS_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
|
||||
# Проверяем, что сервер запущен
|
||||
if ! curl -s "http://localhost:8080/health" | grep -q "ok"; then
|
||||
echo "❌ Server is not running. Please start the server first."
|
||||
exit 1
|
||||
fi
|
||||
PROJECT_ROOT="$(cd "$SCRIPTS_DIR/../.." && pwd)"
|
||||
BASE_URL="http://localhost:8080"
|
||||
|
||||
PASSED=0
|
||||
FAILED=0
|
||||
SKIPPED=0
|
||||
SERVER_STARTED=false
|
||||
SERVER_PID=""
|
||||
|
||||
run_test() {
|
||||
# ============================================================================
|
||||
# Вспомогательные функции
|
||||
# ============================================================================
|
||||
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
|
||||
log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
|
||||
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
|
||||
log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1"; }
|
||||
log_step() { echo -e "${CYAN}[STEP]${NC} $1"; }
|
||||
|
||||
# Очистка при выходе
|
||||
cleanup() {
|
||||
echo ""
|
||||
echo "▶ Running $1..."
|
||||
if bash "$SCRIPTS_DIR/$1"; then
|
||||
((PASSED++))
|
||||
echo "✅ $1 PASSED"
|
||||
else
|
||||
((FAILED++))
|
||||
echo "❌ $1 FAILED"
|
||||
log_info "Cleaning up..."
|
||||
|
||||
if [ -n "$SERVER_PID" ] && kill -0 "$SERVER_PID" 2>/dev/null; then
|
||||
log_info "Stopping server (PID: $SERVER_PID)..."
|
||||
kill "$SERVER_PID" 2>/dev/null
|
||||
wait "$SERVER_PID" 2>/dev/null
|
||||
|
||||
# Убеждаемся, что все beam процессы остановлены
|
||||
pkill -f "beam.*eventhub" 2>/dev/null || true
|
||||
log_success "Server stopped"
|
||||
fi
|
||||
|
||||
# Удаляем временные файлы
|
||||
rm -f /tmp/eventhub_test_*.log 2>/dev/null
|
||||
}
|
||||
|
||||
# Обработчик сигналов
|
||||
trap cleanup EXIT INT TERM
|
||||
|
||||
# Проверка порта
|
||||
check_port() {
|
||||
local port=$1
|
||||
if lsof -i ":$port" > /dev/null 2>&1 || netstat -tuln 2>/dev/null | grep -q ":$port "; then
|
||||
return 0
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
# Ожидание запуска сервера
|
||||
wait_for_server() {
|
||||
local max_attempts=30
|
||||
local attempt=0
|
||||
|
||||
log_info "Waiting for server to start..."
|
||||
|
||||
while [ $attempt -lt $max_attempts ]; do
|
||||
if curl -s "$BASE_URL/health" | grep -q "ok"; then
|
||||
log_success "Server is ready (took $attempt seconds)"
|
||||
return 0
|
||||
fi
|
||||
sleep 1
|
||||
((attempt++))
|
||||
echo -n "."
|
||||
done
|
||||
echo ""
|
||||
|
||||
log_error "Server failed to start within $max_attempts seconds"
|
||||
return 1
|
||||
}
|
||||
|
||||
# Запуск сервера
|
||||
start_server() {
|
||||
echo -e "${CYAN}[STEP]${NC} Starting EventHub server..."
|
||||
|
||||
cd "$PROJECT_ROOT"
|
||||
|
||||
if [ ! -f "rebar.config" ]; then
|
||||
echo -e "${RED}[ERROR]${NC} rebar.config not found in $(pwd)"
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo -e "${BLUE}[INFO]${NC} Project root: $(pwd)"
|
||||
|
||||
# Очищаем старые данные
|
||||
rm -rf Mnesia.* 2>/dev/null
|
||||
pkill -f "beam.*eventhub_test" 2>/dev/null || true
|
||||
sleep 1
|
||||
|
||||
# Компилируем
|
||||
echo -e "${BLUE}[INFO]${NC} Compiling..."
|
||||
rebar3 compile > /dev/null 2>&1
|
||||
|
||||
# Запускаем сервер через erl (более надёжно для фона)
|
||||
LOG_FILE="/tmp/eventhub_test_server.log"
|
||||
echo -e "${BLUE}[INFO]${NC} Starting server..."
|
||||
|
||||
# Запускаем в фоне с перенаправлением вывода
|
||||
rebar3 shell --sname eventhub_test </dev/null > "$LOG_FILE" 2>&1 &
|
||||
SERVER_PID=$!
|
||||
|
||||
# Даём процессу время запуститься
|
||||
sleep 3
|
||||
|
||||
# Проверяем, жив ли процесс
|
||||
if ! kill -0 "$SERVER_PID" 2>/dev/null; then
|
||||
echo -e "${RED}[ERROR]${NC} Server process died immediately"
|
||||
echo -e "${YELLOW}[INFO]${NC} Check log: $LOG_FILE"
|
||||
cat "$LOG_FILE"
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo -e "${BLUE}[INFO]${NC} Server PID: $SERVER_PID"
|
||||
|
||||
# Ждём готовности
|
||||
for i in {1..30}; do
|
||||
echo -n "."
|
||||
if curl -s "http://localhost:8080/health" 2>/dev/null | grep -q "ok"; then
|
||||
echo ""
|
||||
echo -e "${GREEN}[SUCCESS]${NC} Server ready at http://localhost:8080"
|
||||
return 0
|
||||
fi
|
||||
|
||||
if ! kill -0 "$SERVER_PID" 2>/dev/null; then
|
||||
echo ""
|
||||
echo -e "${RED}[ERROR]${NC} Server died during startup"
|
||||
echo -e "${YELLOW}[INFO]${NC} Last lines of log:"
|
||||
tail -30 "$LOG_FILE"
|
||||
return 1
|
||||
fi
|
||||
|
||||
sleep 1
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo -e "${RED}[ERROR]${NC} Server failed to respond"
|
||||
return 1
|
||||
}
|
||||
|
||||
# Остановка сервера
|
||||
stop_server() {
|
||||
if [ "$SERVER_STARTED" = true ] && [ -n "$SERVER_PID" ]; then
|
||||
log_step "Stopping EventHub server..."
|
||||
|
||||
# Останавливаем нашу ноду
|
||||
if kill -0 "$SERVER_PID" 2>/dev/null; then
|
||||
kill "$SERVER_PID" 2>/dev/null
|
||||
wait "$SERVER_PID" 2>/dev/null
|
||||
fi
|
||||
|
||||
# Останавливаем все связанные beam процессы
|
||||
pkill -f "beam.*eventhub_test" 2>/dev/null || true
|
||||
|
||||
SERVER_STARTED=false
|
||||
log_success "Server stopped"
|
||||
sleep 2
|
||||
fi
|
||||
}
|
||||
|
||||
run_test "test_auth_api.sh"
|
||||
run_test "test_calendar_api.sh"
|
||||
run_test "test_event_api.sh"
|
||||
run_test "test_booking_api.sh"
|
||||
# Проверка, запущен ли сервер
|
||||
is_server_running() {
|
||||
curl -s "$BASE_URL/health" | grep -q "ok"
|
||||
}
|
||||
|
||||
echo ""
|
||||
echo "============================================================"
|
||||
echo " TEST SUMMARY"
|
||||
echo "============================================================"
|
||||
echo "Passed: $PASSED"
|
||||
echo "Failed: $FAILED"
|
||||
echo "============================================================"
|
||||
# Запуск одного тестового скрипта
|
||||
run_test_script() {
|
||||
local script_path=$1
|
||||
local script_name=$(basename "$script_path")
|
||||
|
||||
if [ $FAILED -eq 0 ]; then
|
||||
echo "🎉 ALL TESTS PASSED!"
|
||||
exit 0
|
||||
else
|
||||
echo "❌ SOME TESTS FAILED"
|
||||
exit 1
|
||||
fi
|
||||
echo ""
|
||||
echo "============================================================"
|
||||
echo -e "${CYAN}[RUNNING]${NC} $script_name"
|
||||
echo "============================================================"
|
||||
|
||||
# Даём скрипту права на выполнение
|
||||
chmod +x "$script_path" 2>/dev/null
|
||||
|
||||
# Запускаем тест
|
||||
if bash "$script_path"; then
|
||||
echo ""
|
||||
echo -e "${GREEN}[PASSED]${NC} $script_name"
|
||||
return 0
|
||||
else
|
||||
echo ""
|
||||
echo -e "${RED}[FAILED]${NC} $script_name"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# ============================================================================
|
||||
# Главная логика
|
||||
# ============================================================================
|
||||
main() {
|
||||
echo "============================================================"
|
||||
echo " EVENTHUB FULL API TEST SUITE"
|
||||
echo "============================================================"
|
||||
echo ""
|
||||
|
||||
# Проверяем, не запущен ли уже сервер
|
||||
if is_server_running; then
|
||||
log_warning "Server is already running on port 8080"
|
||||
read -p "Use existing server? [Y/n]: " USE_EXISTING
|
||||
if [[ "$USE_EXISTING" =~ ^[Nn] ]]; then
|
||||
log_error "Please stop the existing server first: make stop"
|
||||
exit 1
|
||||
fi
|
||||
log_info "Using existing server"
|
||||
else
|
||||
# Проверяем, свободен ли порт
|
||||
if check_port 8080; then
|
||||
log_error "Port 8080 is in use by another process"
|
||||
log_info "Please free the port or stop the other process"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Запускаем сервер
|
||||
if ! start_server; then
|
||||
log_error "Failed to start server"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
echo ""
|
||||
log_info "Server is ready at $BASE_URL"
|
||||
|
||||
# Получаем список всех тестовых скриптов
|
||||
TEST_SCRIPTS=$(find "$SCRIPTS_DIR" -maxdepth 1 -name "test_*.sh" ! -name "test_all.sh" ! -name "test_runner.sh" -type f | sort)
|
||||
|
||||
if [ -z "$TEST_SCRIPTS" ]; then
|
||||
log_warning "No test scripts found in $SCRIPTS_DIR"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo ""
|
||||
log_info "Found test scripts:"
|
||||
for script in $TEST_SCRIPTS; do
|
||||
echo " - $(basename "$script")"
|
||||
done
|
||||
|
||||
# Счётчики времени
|
||||
START_TIME=$(date +%s)
|
||||
|
||||
# Запускаем все тесты
|
||||
for script in $TEST_SCRIPTS; do
|
||||
if run_test_script "$script"; then
|
||||
((PASSED++))
|
||||
else
|
||||
((FAILED++))
|
||||
fi
|
||||
done
|
||||
|
||||
END_TIME=$(date +%s)
|
||||
DURATION=$((END_TIME - START_TIME))
|
||||
|
||||
# Останавливаем сервер, если мы его запускали
|
||||
if [ "$SERVER_STARTED" = true ]; then
|
||||
echo ""
|
||||
stop_server
|
||||
fi
|
||||
|
||||
# Итоговый отчёт
|
||||
echo ""
|
||||
echo "============================================================"
|
||||
echo " TEST SUMMARY"
|
||||
echo "============================================================"
|
||||
echo -e "Total scripts: $((PASSED + FAILED))"
|
||||
echo -e "${GREEN}Passed: $PASSED${NC}"
|
||||
echo -e "${RED}Failed: $FAILED${NC}"
|
||||
if [ $SKIPPED -gt 0 ]; then
|
||||
echo -e "${YELLOW}Skipped: $SKIPPED${NC}"
|
||||
fi
|
||||
echo -e "Duration: ${DURATION}s"
|
||||
echo "============================================================"
|
||||
|
||||
if [ $FAILED -eq 0 ]; then
|
||||
echo ""
|
||||
echo -e "${GREEN}🎉 ALL TESTS PASSED!${NC}"
|
||||
return 0
|
||||
else
|
||||
echo ""
|
||||
echo -e "${RED}❌ SOME TESTS FAILED${NC}"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Запуск
|
||||
main "$@"
|
||||
exit $?
|
||||
Reference in New Issue
Block a user