# Integration Tests Интеграционные тесты для Konduktor — полноценное тестирование сервера с реальными HTTP запросами. ## Отличие от unit-тестов | Аспект | Unit-тесты | Интеграционные тесты | |--------|------------|---------------------| | Scope | Отдельный модуль в изоляции | Весь сервер целиком | | Backend | Mock (httptest.Server) | Реальные HTTP серверы | | Config | Программный | YAML конфигурация | | Extensions | Не тестируются | Полная цепочка обработки | ## Структура тестов ``` tests/integration/ ├── README.md # Эта документация ├── helpers_test.go # Общие хелперы и утилиты ├── reverse_proxy_test.go # Тесты reverse proxy ├── routing_test.go # Тесты маршрутизации (TODO) ├── security_test.go # Тесты security extension (TODO) ├── caching_test.go # Тесты caching extension (TODO) └── static_files_test.go # Тесты статических файлов (TODO) ``` ## Что тестируют интеграционные тесты ### 1. Reverse Proxy (`reverse_proxy_test.go`) - [ ] Базовое проксирование GET/POST/PUT/DELETE - [ ] Exact match routes (`=/api/version`) - [ ] Regex routes с параметрами (`~^/api/resource/(?P\d+)$`) - [ ] Подстановка параметров в target URL (`{id}`, `{tag}`) - [ ] Подстановка переменных в заголовки (`$remote_addr`) - [ ] Передача заголовков X-Forwarded-For, X-Real-IP - [ ] Сохранение query string - [ ] Обработка ошибок backend (502, 504) - [ ] Таймауты соединения ### 2. Routing Extension (`routing_test.go`) - [ ] Приоритет маршрутов (exact > regex > default) - [ ] Case-sensitive regex (`~`) - [ ] Case-insensitive regex (`~*`) - [ ] Default route (`__default__`) - [ ] Return directive (`return 200 "OK"`) - [ ] Конфликт маршрутов ### 3. Security Extension (`security_test.go`) - [ ] IP whitelist - [ ] IP blacklist - [ ] CIDR нотация (10.0.0.0/8) - [ ] Security headers (X-Frame-Options, X-Content-Type-Options) - [ ] Rate limiting - [ ] Комбинация с другими extensions ### 4. Caching Extension (`caching_test.go`) - [ ] Cache hit/miss - [ ] TTL expiration - [ ] Pattern-based caching - [ ] Cache-Control headers - [ ] Cache invalidation - [ ] Max cache size и eviction ### 5. Static Files (`static_files_test.go`) - [ ] Serving статических файлов - [ ] Index file (index.html) - [ ] MIME types - [ ] Cache-Control для static - [ ] SPA fallback - [ ] Directory traversal protection - [ ] 404 для несуществующих файлов ### 6. Extension Chain (`extension_chain_test.go`) - [ ] Порядок выполнения extensions (security → caching → routing) - [ ] Прерывание цепочки при ошибке - [ ] Совместная работа extensions ## Запуск тестов ```bash # Все интеграционные тесты go test ./tests/integration/... -v # Конкретный файл go test ./tests/integration/... -v -run TestReverseProxy # С таймаутом (интеграционные тесты медленнее) go test ./tests/integration/... -v -timeout 60s # С покрытием go test ./tests/integration/... -v -coverprofile=coverage.out ``` ## Требования - Свободные порты: тесты используют случайные порты (`:0`) - Сетевой доступ: для localhost соединений - Время: интеграционные тесты занимают больше времени (~5-10 сек) ## Добавление новых тестов 1. Создайте файл `*_test.go` в `tests/integration/` 2. Используйте хелперы из `helpers_test.go`: - `startTestServer()` — запуск Konduktor сервера - `startBackend()` — запуск mock backend - `makeRequest()` — отправка HTTP запроса 3. Добавьте описание в этот README ## CI/CD Интеграционные тесты запускаются отдельно от unit-тестов: ```yaml # .github/workflows/test.yml jobs: unit-tests: run: go test ./internal/... integration-tests: run: go test ./tests/integration/... -timeout 120s ```