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

5.1 KiB
Raw Blame History

Клиент и тесты сервера

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 оставлен как исторический эталон старого сценария. Новые тесты проверяют ответы протокола и состояние сервера, а не логи.