#!/bin/bash # Concurrent Rate Limiting Test # Tests that rate limiting correctly handles simultaneous requests echo "================================================" echo "Concurrent Rate Limiting Test" echo "================================================" echo "" API_URL="http://localhost:3000/api/contact" CONCURRENT_REQUESTS=7 echo "Sending $CONCURRENT_REQUESTS concurrent requests..." echo "Expected: First 5 should succeed (200), remaining should fail (429)" echo "" # Create a temporary directory for results TMP_DIR=$(mktemp -d) trap "rm -rf $TMP_DIR" EXIT # Send concurrent requests for i in $(seq 1 $CONCURRENT_REQUESTS); do { response=$(curl -s -w "\n%{http_code}" -X POST "$API_URL" \ -H "Content-Type: application/json" \ -d "{\"name\":\"Concurrent Test $i\",\"email\":\"test$i@example.com\",\"message\":\"Concurrent message $i\"}") status_code=$(echo "$response" | tail -n 1) echo "$i:$status_code" > "$TMP_DIR/result_$i.txt" echo "Request #$i: $status_code" } & done # Wait for all background jobs to complete wait echo "" echo "Results:" echo "--------" # Analyze results success_count=0 rate_limited_count=0 for i in $(seq 1 $CONCURRENT_REQUESTS); do if [ -f "$TMP_DIR/result_$i.txt" ]; then result=$(cat "$TMP_DIR/result_$i.txt") status_code=$(echo "$result" | cut -d':' -f2) if [ "$status_code" = "200" ]; then ((success_count++)) echo "✅ Request #$i: 200 OK" elif [ "$status_code" = "429" ]; then ((rate_limited_count++)) echo "🚫 Request #$i: 429 Rate Limited" else echo "⚠️ Request #$i: $status_code (Unexpected)" fi fi done echo "" echo "Summary:" echo "--------" echo "Successful: $success_count" echo "Rate Limited: $rate_limited_count" echo "" # Verify expectations if [ $success_count -le 5 ] && [ $rate_limited_count -ge 2 ]; then echo "✅ Concurrent rate limiting works correctly!" echo "Note: Due to timing, some requests within the limit might also be blocked." echo "This is acceptable behavior for concurrent requests." else echo "⚠️ Results might indicate an issue:" echo "Expected: ~5 successful, ~2 rate limited" echo "Got: $success_count successful, $rate_limited_count rate limited" fi