58 lines
2.9 KiB
Markdown
58 lines
2.9 KiB
Markdown
|
|
# Чек-лист тестирования
|
|||
|
|
|
|||
|
|
Для автоматической проверки критичных сценариев кеша используйте [e2e-tests.md](e2e-tests.md):
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
./scripts/test-e2e.sh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Этот чек-лист остается ручной проверкой полного поведения gateway.
|
|||
|
|
|
|||
|
|
## 1. Инфраструктура
|
|||
|
|
|
|||
|
|
- [x] Запуск: `docker compose -f docker-compose.dev.yml up -d --build`
|
|||
|
|
- [x] Оба контейнера работают: `docker ps` показывает caddy + imgproxy
|
|||
|
|
- [x] Логи Caddy: `docker compose -f docker-compose.dev.yml logs caddy` — нет ошибок
|
|||
|
|
- [x] Логи imgproxy: `docker compose -f docker-compose.dev.yml logs imgproxy` — нет ошибок
|
|||
|
|
- [x] Caddy слушает порт 8888: `curl -s -o /dev/null -w "%{http_code}" http://localhost:8888/` → 200
|
|||
|
|
|
|||
|
|
## 2. Базовые запросы
|
|||
|
|
|
|||
|
|
- [x] MISS (первый запрос) → 200, `Cache-Status: Souin; fwd=uri-miss; stored`
|
|||
|
|
- [x] HIT (повторный запрос) → 200, `Cache-Status: Souin; hit`, время < 5ms
|
|||
|
|
- [x] Несуществующий источник → imgproxy возвращает 500
|
|||
|
|
|
|||
|
|
## 3. Обработка изображений
|
|||
|
|
|
|||
|
|
- [x] `resize:fit:800:0:0` — изображение вписано в 800px по ширине
|
|||
|
|
- [x] `resize:fill:400:300:0` — изображение 400x300, обрезано
|
|||
|
|
- [x] `crop:200:200` — обрезка 200x200
|
|||
|
|
- [x] `q:100` vs `q:10` — размер файла: 48931 vs 3910 (разница ~12x)
|
|||
|
|
- [x] `format:webp` → `Content-Type: image/webp`
|
|||
|
|
- [x] Комбинированные: `resize:fit:800:0:0/g:ce/q:75/format:webp`
|
|||
|
|
- [x] `plain/{url}` — прямая передача URL
|
|||
|
|
- [x] base64url-encoded source — работает
|
|||
|
|
|
|||
|
|
## 4. Unsigned режим
|
|||
|
|
|
|||
|
|
- [x] `/unsafe/resize:fit:100:0:0/...` → 200
|
|||
|
|
- [x] Без `/unsafe/` → тоже 200 (ключи не заданы, подпись не проверяется)
|
|||
|
|
|
|||
|
|
> **Примечание:** Когда `IMGPROXY_KEY` и `IMGPROXY_SALT` пустые, imgproxy принимает любые URL (с и без `/unsafe/`). `/unsafe/` обязателен только при включённой подписи.
|
|||
|
|
|
|||
|
|
## 5. Кеш
|
|||
|
|
|
|||
|
|
- [x] Разные размеры = разные ключи кеша (не конфликтуют)
|
|||
|
|
- [x] `Cache-Status` заголовок в каждом ответе
|
|||
|
|
- [x] Ключ кеша содержит полный путь: `GET-http-localhost:8888-/unsafe/...`
|
|||
|
|
|
|||
|
|
## 6. Souin API (через Caddy admin :2019)
|
|||
|
|
|
|||
|
|
- [x] `GET /souin-api/souin/` — возвращает JSON-массив ключей
|
|||
|
|
- [x] `PURGE /souin-api/souin/flush` — 204, кеш сброшен
|
|||
|
|
- [x] `PURGE /souin-api/souin/{regex}` — 204, purge по regex работает
|
|||
|
|
|
|||
|
|
## 7. Останов
|
|||
|
|
|
|||
|
|
- [ ] `docker compose -f docker-compose.dev.yml down` — останавливает и удаляет контейнеры
|