From f9d6849b0a4695b396ba52daefde30538e4ab5f2 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Mon, 8 Jan 2024 16:28:48 +0000 Subject: [PATCH] tests: add unit tests for prev --- electrum/tests/test_daemon.py | 64 +++++++++++++++++++++++++++++++++-- 1 file changed, 61 insertions(+), 3 deletions(-) diff --git a/electrum/tests/test_daemon.py b/electrum/tests/test_daemon.py index d5e707335..26d697897 100644 --- a/electrum/tests/test_daemon.py +++ b/electrum/tests/test_daemon.py @@ -1,21 +1,21 @@ import os from typing import Optional, Iterable +from electrum.commands import Commands from electrum.daemon import Daemon from electrum.simple_config import SimpleConfig -from electrum.wallet import restore_wallet_from_text +from electrum.wallet import restore_wallet_from_text, Abstract_Wallet from electrum import util from . import ElectrumTestCase, as_testnet -class TestUnifiedPassword(ElectrumTestCase): +class DaemonTestCase(ElectrumTestCase): config: 'SimpleConfig' def setUp(self): super().setUp() self.config = SimpleConfig({'electrum_path': self.electrum_path}) - self.config.WALLET_USE_SINGLE_PASSWORD = True self.config.NETWORK_OFFLINE = True self.wallet_dir = os.path.dirname(self.config.get_wallet_path()) @@ -48,6 +48,13 @@ class TestUnifiedPassword(ElectrumTestCase): # for the same fs path, and there would be two wallet objects contending for the same file. return path + +class TestUnifiedPassword(DaemonTestCase): + + def setUp(self): + super().setUp() + self.config.WALLET_USE_SINGLE_PASSWORD = True + def _run_post_unif_sanity_checks(self, paths: Iterable[str], *, password: str): for path in paths: w = self.daemon.load_wallet(path, password) @@ -178,3 +185,54 @@ class TestUnifiedPassword(ElectrumTestCase): is_unified = self.daemon.update_password_for_directory(old_password="123456", new_password="123456") self.assertTrue(is_unified) self._run_post_unif_sanity_checks(paths, password="123456") + + +class TestCommandsWithDaemon(DaemonTestCase): + TESTNET = True + + async def test_wp_command_with_inmemory_wallet_has_password(self): + cmds = Commands(config=self.config, daemon=self.daemon) + wallet = restore_wallet_from_text('bitter grass shiver impose acquire brush forget axis eager alone wine silver', + gap_limit=2, + path=None, + password="123456", + config=self.config)['wallet'] + self.assertEqual("bitter grass shiver impose acquire brush forget axis eager alone wine silver", + await cmds.getseed(wallet=wallet, password="123456")) + + async def test_wp_command_with_inmemory_wallet_no_password(self): + cmds = Commands(config=self.config, daemon=self.daemon) + wallet = restore_wallet_from_text('bitter grass shiver impose acquire brush forget axis eager alone wine silver', + gap_limit=2, + path=None, + config=self.config)['wallet'] + self.assertEqual("bitter grass shiver impose acquire brush forget axis eager alone wine silver", + await cmds.getseed(wallet=wallet)) + + async def test_wp_command_with_diskfile_wallet_has_password(self): + cmds = Commands(config=self.config, daemon=self.daemon) + wpath = self._restore_wallet_from_text("bitter grass shiver impose acquire brush forget axis eager alone wine silver", password="123456", encrypt_file=True) + await cmds.load_wallet(wallet_path=wpath, password="123456") + wallet = self.daemon.get_wallet(wpath) + self.assertIsInstance(wallet, Abstract_Wallet) + + # when using the CLI/RPC to run commands, the "wallet" param is a path: + self.assertEqual("bitter grass shiver impose acquire brush forget axis eager alone wine silver", + await cmds.getseed(wallet=wpath, password="123456")) + # in unit tests or custom code, the "wallet" param is often an Abstract_Wallet: + self.assertEqual("bitter grass shiver impose acquire brush forget axis eager alone wine silver", + await cmds.getseed(wallet=wallet, password="123456")) + + async def test_wp_command_with_diskfile_wallet_no_password(self): + cmds = Commands(config=self.config, daemon=self.daemon) + wpath = self._restore_wallet_from_text("bitter grass shiver impose acquire brush forget axis eager alone wine silver", password=None) + await cmds.load_wallet(wallet_path=wpath, password=None) + wallet = self.daemon.get_wallet(wpath) + self.assertIsInstance(wallet, Abstract_Wallet) + + # when using the CLI/RPC to run commands, the "wallet" param is a path: + self.assertEqual("bitter grass shiver impose acquire brush forget axis eager alone wine silver", + await cmds.getseed(wallet=wpath)) + # in unit tests or custom code, the "wallet" param is often an Abstract_Wallet: + self.assertEqual("bitter grass shiver impose acquire brush forget axis eager alone wine silver", + await cmds.getseed(wallet=wallet))