Files
core/tests/README.md
FoxVoland fac12b2ea8 [+] mvp1
basic working mvp
2026-10-07 15:12:38 +03:00

71 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Клиент и тесты сервера
`src/.test/client_test.py` используется и для ручного запуска, и в интеграционных
тестах. Он ожидает `token_ask`, отвечает `token_answer`, ожидает `handshake_ask`,
отвечает `handshake_answer` и подтверждает состояние `air` ответом на heartbeat.
Затем ручной запуск отправляет десять пакетов телеметрии с heartbeat между ними.
Каждое ожидание ответа имеет таймаут; импорт файла не запускает клиент.
После запуска сервера:
```bat
src\.test\start_client.bat rover --count 10 --interval 1
```
Для запроса восстановления укажите старые значения из вывода клиента:
```bat
src\.test\start_client.bat rover --old-token 123 --old-upf 456
```
Сейчас сервер не сообщает результат восстановления отдельным ответом.
Клиент сообщает только факт отправки запроса; heartbeat подтверждает новый
handshake, но сам по себе не доказывает успешное восстановление.
Запуск всех тестов из корня `server`:
```bat
D:\_Programs\anaconda\envs\sites\python.exe -m pytest -q
```
Также можно запустить `tests/start_tests.bat`. Только проверки самого клиента:
```bat
tests\start_tests.bat tests/test_client_protocol.py -q
```
Интеграционные тесты проверяют подключение, метаданные портов, телеметрию,
heartbeat, немедленное закрытие транспорта и сохранение отключённой сессии,
отключение после пяти команд в неправильном состоянии протокола,
перенос данных и маршрутов в обе стороны, отказ для активной/отсутствующей
сессии и неверного `upf`, а также однократность восстановления.
Дополнительные проверки:
- `test_session.py`: все этапы подключения, истечение и продление дедлайна,
остановка воркера, ошибки последовательности и повторный handshake.
- `test_session_manager.py`: обработка событий, истечение окна восстановления,
однократность переноса и безопасность старой отложенной очистки.
- `test_router.py`: перенос ссылок в обе стороны, несвязанные маршруты,
окончательное удаление связей и данные отправителя при пересылке.
- `test_source_validation.py`: синтаксис исходников и docstring каждого теста.
В `test_client_run.py` также проверяются настоящие TCP-таймауты в состояниях
`new/token/ready/air` и сохранение соединения после продления heartbeat.
Краткое описание каждой проверки находится в docstring её функции.
Интеграционные тесты запускают настоящий TCP-обработчик, сессии и роутер на
свободном локальном порту. Маршруты задаются явно внутри теста: правила API/GUI
не предполагаются. Изолированные проверки менеджера используют наблюдатель
вызовов роутера; настоящий роутер дополнительно проверяется отдельно.
В сценариях с таймерами подменяются только часы и ожидания времени в памяти.
Тест явно продвигает время и освобождает нужное ожидание, поэтому реальные
паузы в 5/60 секунд не нужны. Методы сессии, её воркер, обработчики менеджера
и маршрутизация не подменяются. Неопределённые имена часов не добавляются
тестами: такие ошибки остаются видимыми. Фоновые задачи завершаются или
отменяются при выходе из каждого сценария; ошибки воркеров не скрываются.
`fixtures/client_run_expected.json` оставлен как исторический эталон старого
сценария. Новые тесты проверяют ответы протокола и состояние сервера, а не логи.