ttests: maybe fix tearDown() issue in test_storage_upgrade.py - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 05fd42454842bdce853e96d6b3ffbb043960f7c4 DIR parent 5339e0054c6e473ec4b5858ea9bb11aeb37be109 HTML Author: SomberNight <somber.night@protonmail.com> Date: Wed, 10 Mar 2021 20:16:25 +0100 ttests: maybe fix tearDown() issue in test_storage_upgrade.py from travis logs: --- Logging error --- Traceback (most recent call last): File "/opt/python/3.7.6/lib/python3.7/logging/__init__.py", line 1028, in emit stream.write(msg + self.terminator) ValueError: I/O operation on closed file. Call stack: File "/opt/python/3.7.6/lib/python3.7/threading.py", line 890, in _bootstrap self._bootstrap_inner() File "/opt/python/3.7.6/lib/python3.7/threading.py", line 926, in _bootstrap_inner self.run() File "/home/travis/build/spesmilo/electrum/electrum/plugin.py", line 213, in run self.run_jobs() File "/home/travis/build/spesmilo/electrum/electrum/util.py", line 359, in on_stop self.logger.info("stopped") Message: 'stopped' Diffstat: M electrum/tests/test_storage_upgradā¦ | 11 ++++++++--- M electrum/util.py | 2 ++ 2 files changed, 10 insertions(+), 3 deletions(-) --- DIR diff --git a/electrum/tests/test_storage_upgrade.py b/electrum/tests/test_storage_upgrade.py t@@ -5,6 +5,7 @@ import json from typing import Optional import asyncio +import electrum from electrum.wallet_db import WalletDB from electrum.wallet import Wallet from electrum import constants t@@ -312,6 +313,8 @@ class TestStorageUpgrade(WalletTestCase): ########## + plugins: 'electrum.plugin.Plugins' + @classmethod def setUpClass(cls): super().setUpClass() t@@ -323,12 +326,14 @@ class TestStorageUpgrade(WalletTestCase): gui_name = 'cmdline' # TODO it's probably wasteful to load all plugins... only need Trezor - Plugins(config, gui_name) + cls.plugins = Plugins(config, gui_name) @classmethod def tearDownClass(cls): super().tearDownClass() shutil.rmtree(cls.__electrum_path) + cls.plugins.stop() + cls.plugins.stopped_event.wait() def _upgrade_storage(self, wallet_json, accounts=1) -> Optional[WalletDB]: if accounts == 1: t@@ -358,8 +363,8 @@ class TestStorageUpgrade(WalletTestCase): def _sanity_check_upgraded_db(self, db): self.assertFalse(db.requires_split()) self.assertFalse(db.requires_upgrade()) - w = Wallet(db, None, config=self.config) - w.stop() + wallet = Wallet(db, None, config=self.config) + asyncio.run_coroutine_threadsafe(wallet.stop(), self.asyncio_loop).result() @staticmethod def _load_db_from_json_string(*, wallet_json, manual_upgrades): DIR diff --git a/electrum/util.py b/electrum/util.py t@@ -317,6 +317,7 @@ class DaemonThread(threading.Thread, Logger): self.running_lock = threading.Lock() self.job_lock = threading.Lock() self.jobs = [] + self.stopped_event = threading.Event() # set when fully stopped def add_jobs(self, jobs): with self.job_lock: t@@ -357,6 +358,7 @@ class DaemonThread(threading.Thread, Logger): jnius.detach() self.logger.info("jnius detach") self.logger.info("stopped") + self.stopped_event.set() def print_stderr(*args):