Files
dotfiles/.scratch/proxy-client-simplify/issues/01-cli.md
T
2026-09-28 09:21:39 -04:00

4.8 KiB

01. Упростить CLI proxy-client и его Python-тесты

Status: ready-for-agent

Спецификация: ../spec.md (читать целиком — там список того, что сохраняем).

Файлы

  • proxy-client/.local/bin/proxy-client
  • tests/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 описывает текущее поведение, без упоминаний удалённого.
  • Не коммитить: коммиты делает оркестратор.

Отчёт: что удалено из кода и тестов (строки до/после, время прогона до/после), какие решения принял сам, что осталось спорным.