generated from mononoki/pyproj
[+] mvp1
basic working mvp
This commit is contained in:
70
tests/README.md
Normal file
70
tests/README.md
Normal file
@@ -0,0 +1,70 @@
|
||||
# Клиент и тесты сервера
|
||||
|
||||
`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` оставлен как исторический эталон старого
|
||||
сценария. Новые тесты проверяют ответы протокола и состояние сервера, а не логи.
|
||||
Reference in New Issue
Block a user