# FR24 / RTL-SDR test plan ## 1. Цель Проверить, что локальный RTL-SDR ingest-контур работает корректно, устойчиво восстанавливается после сбоев и отдаёт данные в noisemap / карту без потерь и без разъезда состояния. ## 2. Уровни тестирования ### 2.1 Smoke tests Быстрая проверка, что стек вообще поднялся: - Docker Compose стартует без ошибок - `postgres` доступен внутри сети compose - `capture` стартует и видит RTL-SDR - `preprocess` стартует и подключается к БД - `api` отвечает на health endpoint ### 2.2 Integration tests Проверка связности компонентов: - `capture` пишет записи в `raw_packets` - `preprocess` читает `raw_packets` и обновляет `processing_state` - `preprocess` создаёт/обновляет `flights`, `tracks`, `track_points` - `api` читает данные из БД и отдаёт их в формате, нужном для карты - PostGIS-функции работают на геометриях ### 2.3 Recovery tests Проверка восстановления после сбоя: - остановить `preprocess` - продолжить запись сырья - поднять `preprocess` - убедиться, что он автоматически догоняет пропущенный диапазон - проверить, что overlap не даёт дублей ### 2.4 Retention tests Проверка хранения сырья: - raw-данные доступны не менее 3 дней - после истечения retention raw-слой чистится автоматически - обработанные данные не удаляются вместе с raw без причины ### 2.5 Resource tests Проверка в рамках лимитов VM: - CPU не выходит за разумный потолок при live-режиме - RAM не утекает при длительном прогоне - диск не растёт неконтролируемо - логирование и БД не съедают всё место ## 3. Минимальный smoke checklist - [ ] VM загружается - [ ] USB passthrough RTL-SDR работает - [ ] `docker compose up -d` успешен - [ ] `postgres` живой и PostGIS включён - [ ] `capture` видит устройство - [ ] `preprocess` пишет state - [ ] `api` отвечает `/health` - [ ] хотя бы одна тестовая запись проходит путь raw → core ## 4. Минимальный integration checklist - [ ] raw packet попадает в `raw_packets` - [ ] создаётся/обновляется `captures` - [ ] создаётся/обновляется `aircraft` - [ ] создаётся/обновляется `flights` - [ ] создаются `track_points` - [ ] обновляется `tracks` - [ ] `processing_state` отражает последний checkpoint - [ ] `api` возвращает данные для визуализации ## 5. Recovery сценарий ### Сценарий A: preprocess down 1. Остановить `preprocess` 2. Записать часть сырья 3. Запустить `preprocess` 4. Проверить, что недостающий диапазон дочитан 5. Проверить отсутствие дублей на overlap ### Сценарий B: temporary DB restart 1. Перезапустить `postgres` 2. Проверить, что контейнеры восстанавливают соединение 3. Проверить, что `capture` и `preprocess` не теряют состояние навсегда ### Сценарий C: capture restart 1. Перезапустить `capture` 2. Проверить, что new live поток продолжает попадать в raw слой 3. Проверить, что recovery не ломается после краткой паузы ## 6. Data correctness checks - координаты в допустимых диапазонах - время монотонно внутри одного трека/сессии там, где это ожидается - `track_points` привязаны к правильному `flight`/`track` - `tracks` и `flights` не расходятся по времени и объёму - геометрии PostGIS валидны ## 7. Performance checks - нет резкого роста latency на ingest - процесс recovery не блокирует live ingest - API отвечает в приемлемое время на типовые запросы карты - индексы реально используются, а не декоративны ## 8. What must be proven before handoff to Слава Перед передачей Славе должны быть подтверждены: - compose stack поднимается и переживает restart - USB RTL-SDR стабильно доступен в VM - raw retention работает - recovery работает - карта может читать данные из API - БД и схема не вываливаются за лимиты VM - базовые smoke/integration tests пройдены ## 9. Что должен вернуть Dev-агент В отчёте Dev-агента должны быть: - список тестов, которые он запускал - команды, которыми он тестировал - результаты smoke/integration/recovery tests - замечания по рискам - список того, что требует реального RTL-SDR железа для final verification