| set -euo pipefail | |
| # Flood the server with requests from unique IPs to stress-test | |
| # the rate-limit bucket map. Without the eviction fix (#94), | |
| # this causes unbounded memory growth. | |
| # | |
| # Usage: | |
| # ./scripts/simulate-ratelimit-leak.sh [host:port] [unique-ips] | |
| HOST="${1:-localhost:9867}" | |
| UNIQUE_IPS="${2:-5000}" | |
| BATCH_SIZE=50 | |
| echo "Rate-limit stress test — ${UNIQUE_IPS} unique IPs → ${HOST}" | |
| echo "Monitor: curl http://${HOST}/metrics | jq .metrics.rateBucketHosts" | |
| echo "" | |
| for i in $(seq 1 "$UNIQUE_IPS"); do | |
| ip="10.$((i / 65536 % 256)).$((i / 256 % 256)).$((i % 256))" | |
| curl -s -o /dev/null -H "X-Forwarded-For: ${ip}" "http://${HOST}/help" & | |
| if (( i % BATCH_SIZE == 0 )); then | |
| wait | |
| printf "\rSent %d/%d" "$i" "$UNIQUE_IPS" | |
| fi | |
| done | |
| wait | |
| echo -e "\rDone — sent ${UNIQUE_IPS} requests" | |