From 9cc4fb8a9c104f0f2f4b3375dee0810f8dd5ae84 Mon Sep 17 00:00:00 2001 From: zebra-lucky Date: Sat, 2 Nov 2024 13:06:16 +0200 Subject: [PATCH] onionmc_support.py: modify code to simplify testing --- .../joinmarket/jmdaemon/onionmc_support.py | 43 ++++++++++--------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/electrum/plugins/joinmarket/jmdaemon/onionmc_support.py b/electrum/plugins/joinmarket/jmdaemon/onionmc_support.py index 6ec7c5d3f..fb0cbf27b 100644 --- a/electrum/plugins/joinmarket/jmdaemon/onionmc_support.py +++ b/electrum/plugins/joinmarket/jmdaemon/onionmc_support.py @@ -46,27 +46,25 @@ class TorClientService: self.connected_deferred = SimpleDeferredMock() return self.connected_deferred - async def _create_connection(self): + async def _proxy_create_conn(self): + self.transport, self.protocol = await self.proxy.create_connection( + self.factory.buildProtocol, self.host, self.port) + + async def _start_service(self): if self.stop_task and not self.stop_task.done(): await self.stop_task self.stop_task = None fail_count = 0 - proxy = self.proxy - timeout = self.timeout - - async def proxy_create_conn(): - self.transport, self.protocol = await proxy.create_connection( - self.factory.buildProtocol, self.host, self.port) - while fail_count < self.fail_after_failures: try: - await asyncio.wait_for(proxy_create_conn(), timeout=timeout) + await asyncio.wait_for(self._proxy_create_conn(), + timeout=self.timeout) if self.connected_deferred and self.connected_deferred.cb: self.connected_deferred.cb(self.protocol) break except BaseException as e: - self.logger.error(f'create_connection: {repr(e)}') + self.logger.error(f'_start_service: {repr(e)}') fail_count += 1 if fail_count < self.fail_after_failures: continue @@ -74,19 +72,22 @@ class TorClientService: self.connected_deferred.errb(e) def startService(self): - self.srv_task = asyncio.create_task(self._create_connection()) + self.srv_task = asyncio.create_task(self._start_service()) async def _stop_service(self): - if self.srv_task and not self.srv_task.done(): - self.srv_task.cancel() - self.srv_task = None - - if self.transport: - self.transport.close() - self.transport = None - self.protocol = None - if self.stop_deferred and self.stop_deferred.cb: - self.stop_deferred.cb(None) + try: + if self.srv_task and not self.srv_task.done(): + self.srv_task.cancel() + self.srv_task = None + + if self.transport: + self.transport.close() + self.transport = None + self.protocol = None + if self.stop_deferred and self.stop_deferred.cb: + self.stop_deferred.cb(None) + except BaseException as e: + self.logger.error(f'_stop_service: {repr(e)}') def stopService(self): self.stop_deferred = SimpleDeferredMock()