fix(loadtest): verify через admin verification-token, убрать token из register. Refs EventHub/EventHubBack#30

This commit is contained in:
2026-07-15 00:12:32 +03:00
parent e8b90606c3
commit 6bba96c36e
6 changed files with 125 additions and 47 deletions
+33 -23
View File
@@ -6,42 +6,53 @@
|------|------------|
| `eventhub_ift_smoke.xml` | Короткий smoke на IFT после prepare |
| `eventhub_ift.xml` | Mix: `auth_browse` 60% + `create_flow` 40%, фазы warmup/ramp/peak |
| `eventhub_tsung.xml` | Legacy localhost (thinktime там в секундах — не использовать для IFT) |
| `eventhub_tsung.xml` | Legacy localhost (не для IFT) |
| `eventhub_http.xml` | Legacy короткий localhost |
Цель IFT: **HTTPS** `api.ift.eventhub.local:443` (Traefik).
Цель: **HTTPS** `api.ift.eventhub.local` (+ `admin-api.ift.eventhub.local` для verify).
Auth path: `POST /v1/register``POST /v1/verify``POST /v1/login`.
На стендах (`EVENTHUB_ENV``prod`) register отдаёт `verification_token` (без почты).
### Auth path
1. `POST /v1/admin/login` (admin-api) — учётка из `ift-admin.csv`
2. `POST /v1/register``user.id`
3. `GET /v1/admin/users/:id/verification-token` — спец. admin-метод
4. `POST /v1/verify`
5. `POST /v1/login` → user JWT
## Подготовка учётки admin
```bash
# из /opt/eventhub-ift/.env или локальной копии
cp test/tsung/ift-admin.csv.example test/tsung/ift-admin.csv
# одна строка без комментариев: email;password
printf '%s;%s\n' "$ADMIN_SUPER_EMAIL" "$ADMIN_SUPER_PASSWORD" > test/tsung/ift-admin.csv
```
`ift-admin.csv` в `.gitignore`.
## Перед прогоном (хост IFT)
```bash
# 1 нода (default)
EVENTHUB_REPLICAS=1 bash /opt/eventhub-ift/devops/scripts/ift-loadtest-prepare.sh
# или N нод
EVENTHUB_REPLICAS=2 bash /opt/eventhub-ift/devops/scripts/ift-loadtest-prepare.sh
# EVENTHUB_REPLICAS=N — больше нод
```
Оставляет `traefik` + `eventhub×N`, гасит admin-ui / bot / observability / fallback.
Оставляет `traefik` + `eventhub×N`.
## Дех-машина (WSL)
1. DNS: `api.ift.eventhub.local` → IP IFT (тот же, что в OpenWRT).
2. Установка: `sudo apt install tsung` (или [документация Tsung](http://tsung.erlang-projects.org/)).
3. TLS: самоподписанный сертификат стенда — импортировать CA из `EventHubDevOps/ift/traefik/certs` в trust store WSL, либо временно положить CA в `/usr/local/share/ca-certificates/` и `update-ca-certificates`. Проверка: `curl -sf https://api.ift.eventhub.local/health`.
4. Запуск из корня `EventHubBack`:
1. DNS: `api.ift.eventhub.local` и `admin-api.ift.eventhub.local` → IP IFT.
2. `sudo apt install tsung`
3. TLS: доверить CA стенда (`EventHubDevOps/ift/traefik/certs`). Проверка:
`curl -sf https://api.ift.eventhub.local/health`
4. Из корня `EventHubBack`:
```bash
# smoke (~1 мин)
tsung -f test/tsung/eventhub_ift_smoke.xml start
# полный прогон (~6 мин фаз)
tsung -f test/tsung/eventhub_ift.xml start
```
Отчёт: `~/.tsung/log/<timestamp>/``tsung_stats.pl` / HTML.
Отчёт: `~/.tsung/log/<timestamp>/`.
## После прогона
@@ -51,11 +62,10 @@ bash /opt/eventhub-ift/devops/scripts/ift-loadtest-restore.sh
## Настройка интенсивности
В `eventhub_ift.xml` блок `<load>`: `interarrival` (сек между стартами пользователей) и `duration` фаз.
`thinktime`**секунды** (не мс).
В `eventhub_ift.xml` блок `<load>`: `interarrival` и `duration` фаз.
`thinktime`**секунды**.
## Что сознательно убрано из hot path
## Замечания
- dummy `/v1/refresh`
- reports / tickets (шум модерации)
- завышенные thinktime (старый `eventhub_tsung.xml`)
- Каждый VU делает admin login — это нагрузка и на admin-api; при необходимости позже вынести общий admin JWT в csv.
- Из hot path убраны: dummy refresh, reports/tickets, завышенные thinktime старого `eventhub_tsung.xml`.