89 lines
3.2 KiB
Bash
89 lines
3.2 KiB
Bash
#!/usr/bin/env bash
|
|
# Seed verified users for IFT stress hot-path (ift-users.csv).
|
|
# Usage (from EventHubBack root or anywhere):
|
|
# COUNT=400 bash test/tsung/seed-ift-users.sh
|
|
set -euo pipefail
|
|
|
|
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
|
|
ENV_FILE="${ENV_FILE:-$ROOT/docker/.env.ift}"
|
|
OUT="${OUT:-$ROOT/test/tsung/ift-users.csv}"
|
|
COUNT="${COUNT:-400}"
|
|
PASSWORD="${SEED_PASSWORD:-testpassword123}"
|
|
API="${API_BASE:-https://api.ift.eventhub.local}"
|
|
ADMIN_API="${ADMIN_API_BASE:-https://admin-api.ift.eventhub.local}"
|
|
PREFIX="${SEED_PREFIX:-lt_stress_$(date +%Y%m%d%H%M%S)}"
|
|
|
|
if [[ ! -f "$ENV_FILE" ]]; then
|
|
echo "Missing $ENV_FILE" >&2
|
|
exit 1
|
|
fi
|
|
|
|
set -a
|
|
# shellcheck disable=SC1091
|
|
source <(sed $'s/\xEF\xBB\xBF//' "$ENV_FILE" | tr -d '\r' | grep -E '^(ADMIN_SUPER_|ADMIN_EMAIL|ADMIN_PASSWORD|SMOKE_ADMIN_)')
|
|
set +a
|
|
ADMIN_EMAIL_V="${SMOKE_ADMIN_EMAIL:-${ADMIN_SUPER_EMAIL:-$ADMIN_EMAIL}}"
|
|
ADMIN_PASS_V="${SMOKE_ADMIN_PASSWORD:-${ADMIN_SUPER_PASSWORD:-$ADMIN_PASSWORD}}"
|
|
if [[ -z "${ADMIN_EMAIL_V:-}" || -z "${ADMIN_PASS_V:-}" ]]; then
|
|
echo "No admin credentials in $ENV_FILE" >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo "=== admin login ==="
|
|
ADMIN_JSON=$(curl -skf --connect-timeout 15 -X POST "$ADMIN_API/v1/admin/login" \
|
|
-H 'Content-Type: application/json' \
|
|
-d "{\"email\":\"${ADMIN_EMAIL_V}\",\"password\":\"${ADMIN_PASS_V}\"}")
|
|
ADMIN_TOKEN=$(printf '%s' "$ADMIN_JSON" | python3 -c 'import json,sys; print(json.load(sys.stdin)["token"])')
|
|
|
|
: > "$OUT"
|
|
OK=0
|
|
FAIL=0
|
|
for i in $(seq 1 "$COUNT"); do
|
|
EMAIL="${PREFIX}_${i}@loadtest.local"
|
|
REG=$(curl -sk --connect-timeout 15 -w '\n%{http_code}' -X POST "$API/v1/register" \
|
|
-H 'Content-Type: application/json' \
|
|
-d "{\"email\":\"${EMAIL}\",\"password\":\"${PASSWORD}\"}" || true)
|
|
BODY=$(printf '%s' "$REG" | head -n -1)
|
|
CODE=$(printf '%s' "$REG" | tail -n 1)
|
|
if [[ "$CODE" != "201" && "$CODE" != "200" ]]; then
|
|
echo "register fail i=$i code=$CODE body=$BODY" >&2
|
|
FAIL=$((FAIL + 1))
|
|
continue
|
|
fi
|
|
USER_ID=$(printf '%s' "$BODY" | python3 -c 'import json,sys; print(json.load(sys.stdin)["user"]["id"])')
|
|
|
|
VT=$(curl -sk --connect-timeout 15 -w '\n%{http_code}' -X GET \
|
|
"$ADMIN_API/v1/admin/users/${USER_ID}/verification-token" \
|
|
-H "Authorization: Bearer ${ADMIN_TOKEN}" || true)
|
|
VT_BODY=$(printf '%s' "$VT" | head -n -1)
|
|
VT_CODE=$(printf '%s' "$VT" | tail -n 1)
|
|
if [[ "$VT_CODE" != "200" ]]; then
|
|
echo "vtoken fail i=$i code=$VT_CODE" >&2
|
|
FAIL=$((FAIL + 1))
|
|
continue
|
|
fi
|
|
VTOKEN=$(printf '%s' "$VT_BODY" | python3 -c 'import json,sys; print(json.load(sys.stdin)["token"])')
|
|
|
|
VER_CODE=$(curl -sk --connect-timeout 15 -o /dev/null -w '%{http_code}' -X POST "$API/v1/verify" \
|
|
-H 'Content-Type: application/json' \
|
|
-d "{\"token\":\"${VTOKEN}\"}" || true)
|
|
if [[ "$VER_CODE" != "200" && "$VER_CODE" != "201" && "$VER_CODE" != "204" ]]; then
|
|
echo "verify fail i=$i code=$VER_CODE" >&2
|
|
FAIL=$((FAIL + 1))
|
|
continue
|
|
fi
|
|
|
|
printf '%s;%s\n' "$EMAIL" "$PASSWORD" >> "$OUT"
|
|
OK=$((OK + 1))
|
|
if (( i % 25 == 0 )); then
|
|
echo " seeded $i/$COUNT (ok=$OK fail=$FAIL)"
|
|
fi
|
|
done
|
|
|
|
chmod 600 "$OUT"
|
|
echo "=== done ok=$OK fail=$FAIL out=$OUT prefix=$PREFIX ==="
|
|
if (( OK < 10 )); then
|
|
echo "Too few users seeded" >&2
|
|
exit 1
|
|
fi
|