fix(runtime): detect android bind errors as port conflicts
This commit is contained in:
parent
3552de7dbf
commit
e511ff597b
|
|
@ -158,8 +158,9 @@ class ProxyAppRuntime:
|
||||||
loop.run_until_complete(self.run_proxy(stop_event=stop_ev))
|
loop.run_until_complete(self.run_proxy(stop_event=stop_ev))
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
self.log.error("Proxy thread crashed: %s", exc)
|
self.log.error("Proxy thread crashed: %s", exc)
|
||||||
if ("10048" in str(exc) or
|
exc_text = str(exc)
|
||||||
"Address already in use" in str(exc)):
|
if ("10048" in exc_text or
|
||||||
|
"address already in use" in exc_text.lower()):
|
||||||
self._emit_error(
|
self._emit_error(
|
||||||
"Не удалось запустить прокси:\n"
|
"Не удалось запустить прокси:\n"
|
||||||
"Порт уже используется другим приложением.\n\n"
|
"Порт уже используется другим приложением.\n\n"
|
||||||
|
|
|
||||||
|
|
@ -133,6 +133,34 @@ class ProxyAppRuntimeTests(unittest.TestCase):
|
||||||
|
|
||||||
self.assertEqual(errors, ["proxy boom"])
|
self.assertEqual(errors, ["proxy boom"])
|
||||||
|
|
||||||
|
def test_run_proxy_thread_reports_port_in_use_case_insensitively(self):
|
||||||
|
with tempfile.TemporaryDirectory() as tmpdir:
|
||||||
|
errors = []
|
||||||
|
|
||||||
|
async def fake_run_proxy(stop_event=None):
|
||||||
|
raise RuntimeError(
|
||||||
|
"[Errno 98] error while attempting to bind on address "
|
||||||
|
"('127.0.0.1', 1443): address already in use"
|
||||||
|
)
|
||||||
|
|
||||||
|
runtime = ProxyAppRuntime(
|
||||||
|
Path(tmpdir),
|
||||||
|
on_error=errors.append,
|
||||||
|
run_proxy=fake_run_proxy,
|
||||||
|
)
|
||||||
|
|
||||||
|
runtime._run_proxy_thread(1443, {2: "149.154.167.220"}, "127.0.0.1")
|
||||||
|
|
||||||
|
self.assertEqual(
|
||||||
|
errors,
|
||||||
|
[
|
||||||
|
"Не удалось запустить прокси:\n"
|
||||||
|
"Порт уже используется другим приложением.\n\n"
|
||||||
|
"Закройте приложение, использующее этот порт, "
|
||||||
|
"или измените порт в настройках прокси и перезапустите."
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue