generated from mononoki/pyproj
71 lines
5.1 KiB
Markdown
71 lines
5.1 KiB
Markdown
# Клиент и тесты сервера
|
||
|
||
`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` оставлен как исторический эталон старого
|
||
сценария. Новые тесты проверяют ответы протокола и состояние сервера, а не логи.
|