#!/bin/bash # Rate Limit 테스트 스크립트 # Usage: ./test-rate-limit.sh [local|production] set -e # 환경 설정 ENV="${1:-local}" if [ "$ENV" = "local" ]; then URL="http://localhost:8787/webhook" else URL="https://telegram-summary-bot.kappa-d8e.workers.dev/webhook" fi # Webhook Secret (환경변수 또는 기본값) TOKEN="${WEBHOOK_SECRET:-test-secret}" echo "=========================================" echo "Rate Limit 테스트" echo "환경: $ENV" echo "URL: $URL" echo "=========================================" echo "" # 카운터 SUCCESS=0 RATE_LIMITED=0 # 35번 요청 (Rate Limit: 30/60초) for i in {1..35}; do echo -n "Request $i: " RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" -X POST "$URL" \ -H "Content-Type: application/json" \ -H "X-Telegram-Bot-Api-Secret-Token: $TOKEN" \ -d "{\"update_id\":$i,\"message\":{\"message_id\":$i,\"from\":{\"id\":123,\"is_bot\":false,\"first_name\":\"Test\"},\"chat\":{\"id\":123,\"type\":\"private\"},\"date\":$(date +%s),\"text\":\"테스트 $i\"}}") if [ "$RESPONSE" = "200" ]; then echo "✅ OK (HTTP 200)" SUCCESS=$((SUCCESS + 1)) else echo "❌ FAILED (HTTP $RESPONSE)" fi # 응답 본문 확인 (Rate Limit 메시지 검증) BODY=$(curl -s -X POST "$URL" \ -H "Content-Type: application/json" \ -H "X-Telegram-Bot-Api-Secret-Token: $TOKEN" \ -d "{\"update_id\":$i,\"message\":{\"message_id\":$i,\"from\":{\"id\":123,\"is_bot\":false,\"first_name\":\"Test\"},\"chat\":{\"id\":123,\"type\":\"private\"},\"date\":$(date +%s),\"text\":\"테스트 $i\"}}") if echo "$BODY" | grep -q "너무 많은 요청"; then echo " └─ Rate Limit 메시지 감지" RATE_LIMITED=$((RATE_LIMITED + 1)) fi # 요청 간격 (0.2초) sleep 0.2 done echo "" echo "=========================================" echo "결과 요약" echo "=========================================" echo "총 요청: 35" echo "성공: $SUCCESS" echo "Rate Limited: $RATE_LIMITED" echo "" if [ $SUCCESS -ge 30 ] && [ $SUCCESS -le 32 ]; then echo "✅ Rate Limiting이 정상적으로 동작합니다." echo " (30-32개 요청 허용, 나머지 차단)" exit 0 else echo "❌ Rate Limiting이 예상과 다르게 동작합니다." echo " (예상: 30-32개 허용, 실제: $SUCCESS개)" exit 1 fi