feat(xray-proxy): добавлена проверяемая установка Xray командой install
- Зачем:
- пользователь без root должен получать проверенный бинарник Xray 26.3.27
одной явной командой, без риска для живого managed-экземпляра.
- Что:
- команда install [--replace]: пин 26.3.27, маппинг x86_64/aarch64,
скачивание urllib + проверка SHA2-256 из официального четырёхзаписного
.dgst, staging внутри ~/.local/bin и один атомарный os.replace;
- границы размеров (64 MiB архив/бинарник, 4 KiB .dgst, счёт limit+1,
сверка Content-Length) и guard managed-режима через start-lock;
- типизированная StartLockBusyError, offline-тесты реального загрузчика
через подмену urlopen, снапшоты дерева ФС в отказных путях;
- README/спека обновлены, включая справку о последней версии с
allowInsecure (25.12.8, удалена в 26.2.6); тикет 04 закрыт, леджер
дополнен итогами эксперимента.
- Проверка:
- PYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover -s tests — 79 OK.
- bash tests/test_proxy_launchers.sh — 8 PASS.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
90cc8456cd
commit
0432c4ae8a
7 files changed
+1266
-43
No files matched your search
@@ -473,6 +473,24 @@ class ManagedXrayCliTest(unittest.TestCase):
|
||||
profile_text,
|
||||
)
|
||||
|
||||
def test_live_managed_instance_rejects_install_replace_without_changes(self):
|
||||
profile_text = self.tcp_profile()
|
||||
self.write_profile(profile_text)
|
||||
process = self.start()
|
||||
state_before = self.managed_state_path().read_bytes()
|
||||
xray_before = self.xray.read_bytes()
|
||||
|
||||
result = self.run_cli("install", "--replace")
|
||||
|
||||
self.assertNotEqual(0, result.returncode)
|
||||
self.assertIn("сначала", result.stderr)
|
||||
self.assertIn("stop", result.stderr)
|
||||
self.assertEqual(state_before, self.managed_state_path().read_bytes())
|
||||
self.assertEqual(xray_before, self.xray.read_bytes())
|
||||
self.assertFalse((self.home / ".local/bin/xray").exists())
|
||||
self.assert_no_secrets(result.stdout + result.stderr, profile_text)
|
||||
self.stop_and_collect(process)
|
||||
|
||||
def test_stale_cleanup_waits_for_start_lock_and_preserves_files(self):
|
||||
state_dir = self.state_home / "xray-proxy"
|
||||
state_dir.mkdir(parents=True, mode=0o700)
|
||||
|
||||
Reference in new issue
Block a user