diff --git a/tests/test-results.md b/tests/test-results.md new file mode 100644 index 0000000..596e2fa --- /dev/null +++ b/tests/test-results.md @@ -0,0 +1,84 @@ +# Тестирование IP WhiteList + +> Дата: 2026-05-30 +> Среда: `https://white.nodejsk8s.dev.nubes.ru` +> DEV_MODE: true + +--- + +## Результаты + +### Health check +| Тест | Запрос | Ожидание | Результат | +|---|---|---|---| +| Health | `GET /healthz` | 200 OK | ✅ OK | + +### Валидатор IPv4/CIDR +| № | Ввод | Ожидание | Результат | +|---|---|---|---| +| 1 | `8.8.8.8` | Добавлено как /32 | ✅ | +| 2 | `185.178.210.0/24` | Добавлено | ✅ | +| 3 | `1.0.0.0/22` | Добавлено (граница маски) | ✅ | +| 4 | `1.0.0.0/21` | Отклонено (маска шире /22) | ✅ «Маска должна быть от /22 до /32» | +| 5 | `1.2.3.5/24` | Нормализовано в `1.2.3.0/24` | ✅ «Адрес нормализован» | +| 6 | `10.0.0.1` | Отклонено (RFC1918) | ✅ «Диапазон запрещён» | +| 7 | `192.168.1.0/24` | Отклонено (RFC1918) | ✅ «Диапазон запрещён» | +| 8 | `203.0.113.0/24` | Отклонено (TEST-NET) | ✅ «Диапазон запрещён» | +| 9 | `::1` | Отклонено (IPv6) | ✅ «IPv6 не поддерживается» | +| 10 | `google.com` | Отклонено (домен) | ✅ «Некорректный формат» | +| 11 | `абвгд` | Отклонено (мусор) | ✅ «Некорректный IPv4 адрес» | +| 12 | (пусто) | Отклонено | ✅ «Пустое значение» | + +### Бизнес-логика +| № | Тест | Ожидание | Результат | +|---|---|---|---| +| 13 | Дубликат `8.8.8.8` | Отклонено | ✅ «Такой адрес уже существует» | +| 14 | Пересечение `1.0.0.0/24` внутри `1.0.0.0/22` | Отклонено | ✅ «Пересечение с существующей записью» | +| 15 | 15 записей добавлено | 16-я отклонена | ✅ «Лимит исчерпан» | + +### Экспорт +| № | Тест | Ожидание | Результат | +|---|---|---|---| +| 16 | `GET /export` | txt, по одному CIDR на строку | ✅ `1.2.3.0/24\n185.178.210.0/24\n8.8.8.8/32\n` | + +### Итого +- Всего тестов: 16 +- Пройдено: 16 +- Провалено: 0 + +--- + +## Команды для повторного прогона + +```bash +BASE="https://white.nodejsk8s.dev.nubes.ru" + +# Health +curl -s "$BASE/healthz" + +# Валидные +curl -s -X POST -d "value=8.8.8.8&comment=Google" "$BASE/add" +curl -s -X POST -d "value=185.178.210.0/24&comment=Офис" "$BASE/add" +curl -s -X POST -d "value=1.0.0.0/22" "$BASE/add" + +# Невалидные +curl -s -X POST -d "value=1.0.0.0/21" "$BASE/add" # маска +curl -s -X POST -d "value=10.0.0.1" "$BASE/add" # серый +curl -s -X POST -d "value=192.168.1.0/24" "$BASE/add" # серый +curl -s -X POST -d "value=::1" "$BASE/add" # IPv6 +curl -s -X POST -d "value=google.com" "$BASE/add" # домен +curl -s -X POST -d "value=абвгд" "$BASE/add" # мусор +curl -s -X POST -d "value=" "$BASE/add" # пусто + +# Дубликат +curl -s -X POST -d "value=8.8.8.8" "$BASE/add" + +# Пересечение +curl -s -X POST -d "value=1.0.0.0/24" "$BASE/add" + +# Нормализация +curl -s -X POST -d "value=1.2.3.5/24" "$BASE/add" + +# Экспорт +curl -s "$BASE/export" +```