Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
4.8 KiB
4.8 KiB
01. Упростить CLI proxy-client и его Python-тесты
Status: ready-for-agent
Спецификация: ../spec.md (читать целиком — там список того, что сохраняем).
Файлы
proxy-client/.local/bin/proxy-clienttests/test_proxy_client.py,tests/test_proxy_client_managed.py(можно слить, переименовать или разнести по-новому — как станет проще)proxy-client/README.md— все разделы, кроме «Установка» и «Ручное подключение без установщика» (их правит задача 02; при конфликте правки перечитай файл и повтори).proxy-client/.config/proxy-client/examples/— если нужно.
Не трогать: proxy-client/install.sh, shell.bash, shell-тесты.
Что сделать
Пункты 1–4 и 6 спецификации для CLI. Затем привести тесты к пяти местам проверок из спецификации:
- Все проверки разбора ссылки (ALPN, legacy insecure, некорректные ссылки,
соответствие полей REALITY/XHTTP, pcs/vcn, extra, шифрование) — табличные
тесты
parse_vless/build_xray_config, без запуска процессов. - CLI-тесты управляемого Xray: один полный жизненный цикл (start → status/env/
run → stop → файлы удалены, права 600/700, секретов нет в выводе), Ctrl+C,
SIGKILL супервизора →
stopдобивает Xray, устаревшие файлы после смерти процессов, занятый порт, не-loopback адрес, права профиля (с новой подсказкой), сбойxray run -testне оставляет файлов, сбой определения внешнего IP — лишь предупреждение, второйstartпри работающем — отказ. Каждый сценарий — один запуск. Готовность ждать по строке вывода, а не опросомstatusв цикле, если это упрощает. - Удалить тесты-пустышки: проверку тестовой подделки сокета, проверку, что
поддельный xray отвергает не-JSON, тесты порядка внутренних вызовов, всё,
что подменяет функции модуля через
__globals__. Подделку сокета (checking_socket_setup/run_cli_with_socket_setupчерез runpy) заменить настоящим слушающим сокетом на 127.0.0.1 (и закрытым портом для «недоступен»). - Тесты удалённых возможностей (ограничения размера, строгий
.dgst, запрет заглавных букв в хеше, «каталог установки внутри HOME», boot_id, повторный PID, подмена xray_path, способы вызова супервизора и т. п.) уходят вместе с возможностями. - Новая подсказка о правах — тест первым (красный → зелёный).
Упрощай и сам код: если функция после правок становится проходной — встрой.
Сообщения об ошибках — на русском, коротко, с путём к файлу там, где речь о
файле. Сохраняй совместимость с Python 3.8 (без match, str.removeprefix,
| в типах и т. п.).
Готово, когда
python3 -m unittest discover -s testsзелёный; прогон Python-тестов proxy-client заметно быстрее нынешних ~75 с.- Если есть
uv:uv run --python 3.8 python -m unittest discover -s testsтоже зелёный. - Реальная проверка: сгенерированный конфиг для синтетических ссылок REALITY
и XHTTP с шифрованием проходит
xray run -test(xray 26.3.27 есть в~/.local/bin/xray). - README описывает текущее поведение, без упоминаний удалённого.
- Не коммитить: коммиты делает оркестратор.
Отчёт: что удалено из кода и тестов (строки до/после, время прогона до/после), какие решения принял сам, что осталось спорным.