Files
security-alert-center/docs/testing-e2e-checklist.md
2026-06-01 10:21:43 +10:00

110 lines
5.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# E2E и нагрузочное тестирование SAC + агенты
Чеклист после freeze MVP (`work-plan.md`). Отмечайте дату и хост.
## Дни 1–2: функциональный E2E
### Linux (ssh-monitor, `UseSAC=dual` или `exclusive`)
- [ ] `ssh-monitor --check-sac` → HTTP 201/202, событие `agent.test` в UI
- [ ] Успешный SSH login → `ssh.login.success` в SAC + Telegram (dual)
- [ ] Неудачный SSH → `ssh.login.failed`
- [ ] `SERVER_DISPLAY_NAME` задан → в SAC **Хосты** отображается display name
- [ ] Heartbeat → `agent.heartbeat`, хост не `stale` в пределах `SAC_HEARTBEAT_STALE_MINUTES`
- [ ] Daily report → `report.daily.ssh` (агент или SAC: `python -m app.jobs.daily_report --force`, `details.generated_by`)
### Windows (RDP-login-monitor, `UseSAC=dual`)
- [ ] `-CheckSac` → ingest OK
- [ ] Старт монитора → `agent.lifecycle` в SAC (HTTP 201), Telegram «ЗАПУЩЕН»
- [ ] Версия в UI **Хосты** = `$ScriptVersion` после деплоя
- [ ] `$ServerDisplayName` → display name в SAC
- [ ] 4624/4625 (тестовый вход) → `rdp.login.*` при наличии событий
- [ ] Dashboard: новое событие появляется в «Последние события» без F5 (~5 с)
### SAC UI
- [ ] Problems: open → ack → resolve
- [ ] Дубликат `event_id` → HTTP 409, одна строка в БД
- [ ] Правило brute-force (порог событий) → Problem
### SAC Telegram — severity и exclusive (`notif-02`)
**Предусловие:** на prod после `79a78dc+` выполнен деплой (`sudo /opt/sac-deploy.sh` → миграция **`004_notification_channels`**).
| # | Шаг | Ожидание |
|---|-----|----------|
| 1 | UI → **Настройки** → «Проверить Telegram» | Сообщение «✅ SAC: тестовое сообщение…» в чате |
| 2 | Включить Telegram, `min severity` = **warning**, сохранить (token/chat из env или форма) | GET: `source=db`, `configured=true` |
| 3 | Ingest **`rdp.login.failed`** (severity `warning`) — см. curl ниже | Telegram: «🚨 SAC событие», severity warning |
| 4 | Ingest **`rdp.login.success`** (severity `info`) — новый `event_id` | Событие в UI, **нет** сообщения в Telegram |
| 5 | Сменить `min severity` на **high**, сохранить | Повтор `failed` (warning) → **нет** TG; `high` problem → TG |
| 6 | Агент **`UseSAC=exclusive`**: неудачный вход | TG только из SAC, **не** из бота агента |
**Синтетический ingest (без RDP-хоста):** подставьте `SAC_API_KEY` и уникальный `event_id`.
```bash
API_KEY="sac_…"
BASE="https://sac.kalinamall.ru"
# warning → должен уйти в TG при min=warning
curl -sS -X POST "$BASE/api/v1/events" \
-H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" \
-d '{
"schema_version": "1.0",
"event_id": "00000000-0000-4000-8000-000000000101",
"occurred_at": "2026-05-29T12:00:00+03:00",
"source": {"product": "rdp-login-monitor", "product_version": "1.2.20-SAC"},
"host": {"hostname": "E2E-RDP", "os_family": "windows", "display_name": "E2E RDP test"},
"category": "auth",
"type": "rdp.login.failed",
"severity": "warning",
"title": "RDP login failed (E2E)",
"summary": "notif-02 synthetic failed login"
}'
# info → не должен уйти в TG при min=warning
curl -sS -X POST "$BASE/api/v1/events" \
-H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" \
-d '{
"schema_version": "1.0",
"event_id": "00000000-0000-4000-8000-000000000102",
"occurred_at": "2026-05-29T12:01:00+03:00",
"source": {"product": "rdp-login-monitor", "product_version": "1.2.20-SAC"},
"host": {"hostname": "E2E-RDP", "os_family": "windows"},
"category": "auth",
"type": "rdp.login.success",
"severity": "info",
"title": "RDP login success (E2E)",
"summary": "notif-02 synthetic success — no TG expected"
}'
```
Отметка: дата ______, оператор ______, результат TG шагов 3–4: ☐ OK / ☐ fail
## Дни 3–4: нагрузка и устойчивость
- [ ] Пакет 50+ `ssh.login.failed` с одного IP → агрегация/Problem, без зависания UI
- [ ] Повтор ingest с тем же `event_id` → 409
- [ ] Остановка SAC API → spool на агенте, восстановление после `/health`
- [ ] Flapping heartbeat: stale → warning в health / хостах
## День 5: регресс
- [ ] Обновление RDP через Deploy: одна версия в `deployed_version.txt`, ingest после 1.2.14+ JSON
- [ ] `sac-retention.timer` active; ручной `systemctl start sac-retention.service` — exit 0
- [ ] Известные issues занесены в issue tracker / `known-issues.md`
## Дни 67: soak
- [ ] 4872 ч dual mode: нет роста spool без причины, диск БД в норме
- [ ] Только bugfix по результатам выше
## Версии на момент чеклиста
| Компонент | Версия |
|-----------|--------|
| ssh-monitor | 1.2.6-SAC |
| RDP-login-monitor | 1.2.20-SAC |
| security-alert-center | 0.7.0 (`backend/app/version.py`) |