5.1 KiB
Клиент и тесты сервера
src/.test/client_test.py используется и для ручного запуска, и в интеграционных
тестах. Он ожидает token_ask, отвечает token_answer, ожидает handshake_ask,
отвечает handshake_answer и подтверждает состояние air ответом на heartbeat.
Затем ручной запуск отправляет десять пакетов телеметрии с heartbeat между ними.
Каждое ожидание ответа имеет таймаут; импорт файла не запускает клиент.
После запуска сервера:
src\.test\start_client.bat rover --count 10 --interval 1
Для запроса восстановления укажите старые значения из вывода клиента:
src\.test\start_client.bat rover --old-token 123 --old-upf 456
Сейчас сервер не сообщает результат восстановления отдельным ответом. Клиент сообщает только факт отправки запроса; heartbeat подтверждает новый handshake, но сам по себе не доказывает успешное восстановление.
Запуск всех тестов из корня server:
D:\_Programs\anaconda\envs\sites\python.exe -m pytest -q
Также можно запустить tests/start_tests.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 оставлен как исторический эталон старого
сценария. Новые тесты проверяют ответы протокола и состояние сервера, а не логи.