Files
image-gateway/docs/testing-checklist.md
S.Gromov 0751c4b469 feat: добавить Image Gateway с кешем Souin
- добавлена сборка Caddy с Souin, Otter и NutsDB

- добавлена конфигурация dev, prod и test Docker Compose

- настроено кеширование через Otter L1 и NutsDB L2

- добавлены e2e-тесты Bun для кеша, restart и purge

- добавлена документация по запуску, API кеша и тестам
2026-05-04 12:18:37 +03:00

2.9 KiB
Raw Blame History

Чек-лист тестирования

Для автоматической проверки критичных сценариев кеша используйте e2e-tests.md:

./scripts/test-e2e.sh

Этот чек-лист остается ручной проверкой полного поведения gateway.

1. Инфраструктура

  • Запуск: docker compose -f docker-compose.dev.yml up -d --build
  • Оба контейнера работают: docker ps показывает caddy + imgproxy
  • Логи Caddy: docker compose -f docker-compose.dev.yml logs caddy — нет ошибок
  • Логи imgproxy: docker compose -f docker-compose.dev.yml logs imgproxy — нет ошибок
  • Caddy слушает порт 8888: curl -s -o /dev/null -w "%{http_code}" http://localhost:8888/ → 200

2. Базовые запросы

  • MISS (первый запрос) → 200, Cache-Status: Souin; fwd=uri-miss; stored
  • HIT (повторный запрос) → 200, Cache-Status: Souin; hit, время < 5ms
  • Несуществующий источник → imgproxy возвращает 500

3. Обработка изображений

  • resize:fit:800:0:0 — изображение вписано в 800px по ширине
  • resize:fill:400:300:0 — изображение 400x300, обрезано
  • crop:200:200 — обрезка 200x200
  • q:100 vs q:10 — размер файла: 48931 vs 3910 (разница ~12x)
  • format:webpContent-Type: image/webp
  • Комбинированные: resize:fit:800:0:0/g:ce/q:75/format:webp
  • plain/{url} — прямая передача URL
  • base64url-encoded source — работает

4. Unsigned режим

  • /unsafe/resize:fit:100:0:0/... → 200
  • Без /unsafe/ → тоже 200 (ключи не заданы, подпись не проверяется)

Примечание: Когда IMGPROXY_KEY и IMGPROXY_SALT пустые, imgproxy принимает любые URL (с и без /unsafe/). /unsafe/ обязателен только при включённой подписи.

5. Кеш

  • Разные размеры = разные ключи кеша (не конфликтуют)
  • Cache-Status заголовок в каждом ответе
  • Ключ кеша содержит полный путь: GET-http-localhost:8888-/unsafe/...

6. Souin API (через Caddy admin :2019)

  • GET /souin-api/souin/ — возвращает JSON-массив ключей
  • PURGE /souin-api/souin/flush — 204, кеш сброшен
  • PURGE /souin-api/souin/{regex} — 204, purge по regex работает

7. Останов

  • docker compose -f docker-compose.dev.yml down — останавливает и удаляет контейнеры