You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
129 lines
4.4 KiB
129 lines
4.4 KiB
# -*- coding: utf-8 -*- |
|
|
|
import asyncio |
|
import copy |
|
from unittest import mock |
|
|
|
from electrum import constants, util, wallet, SimpleConfig |
|
from electrum.wallet import restore_wallet_from_text |
|
|
|
from tests import ElectrumTestCase |
|
|
|
from electrum.plugins.joinmarket.jm_main import JMManager |
|
from electrum.plugins.joinmarket.jm_util import JMStates |
|
from electrum.plugins.joinmarket.tests import ( |
|
SynchronizerMock, VerifyierMock, NetworkMock) |
|
|
|
|
|
class JMManagerInitTestCase(ElectrumTestCase): |
|
'''Separate testcase to test JMManager''' |
|
|
|
TESTNET = True |
|
|
|
def setUp(self): |
|
super().setUp() |
|
patcher = mock.patch.object(wallet.Abstract_Wallet, 'save_db') |
|
self.mock_save_db = patcher.start() |
|
self.addCleanup(patcher.stop) |
|
|
|
async def asyncSetUp(self): |
|
await super().asyncSetUp() |
|
self.asyncio_loop = util.get_asyncio_loop() |
|
self.config = SimpleConfig({'electrum_path': self.electrum_path}) |
|
self.config.FEE_EST_DYNAMIC = False |
|
self.config.FEE_EST_STATIC_FEERATE = 100000 |
|
self.w = w = restore_wallet_from_text('logic observe arrest marriage ' |
|
'crew bounce dismiss audit grunt' |
|
' identify rate supply', |
|
path='if_this_exists_mocking' |
|
'_failed_648151893', |
|
gap_limit=10, |
|
config=self.config)['wallet'] |
|
self.w.adb.synchronizer = SynchronizerMock() |
|
self.w.adb.verifier = VerifyierMock() |
|
self.w._up_to_date = True |
|
self.w.db.put('stored_height', int(1e7)) |
|
self.network = NetworkMock(self.asyncio_loop, self.config, w) |
|
await asyncio.sleep(0.2) # FIXME dirty fix to fix patching of save_db |
|
|
|
async def test_init(self): |
|
w = self.w |
|
keystore = w.db.get('keystore') |
|
keystore_backup = copy.deepcopy(keystore) |
|
|
|
keystore['type'] = 'sometype' |
|
jmman = JMManager(w) |
|
assert jmman.unsupported |
|
assert not jmman.enabled |
|
assert jmman.state == JMStates.Unsupported |
|
|
|
keystore = w.db.put('keystore', None) |
|
jmman = JMManager(w) |
|
assert jmman.unsupported |
|
assert not jmman.enabled |
|
assert jmman.state == JMStates.Unsupported |
|
|
|
keystore = w.db.put('keystore', keystore_backup) |
|
jmman = JMManager(w) |
|
assert not jmman.enabled |
|
assert not jmman.unsupported |
|
assert jmman.state == JMStates.Disabled |
|
|
|
jmman = JMManager(w) |
|
jmman.on_network_start(self.network) |
|
assert not jmman.enabled |
|
assert not jmman.unsupported |
|
assert jmman.state == JMStates.Disabled |
|
await jmman._enable_jm() |
|
assert jmman.enabled |
|
assert jmman.state == JMStates.Ready |
|
|
|
async def test_init_on_mainnet(self): |
|
w = self.w |
|
constants.BitcoinMainnet.set_as_network() |
|
jmman = JMManager(w) |
|
assert not jmman.enabled |
|
assert jmman.unsupported |
|
assert 'mainnet' in jmman.unsupported_msg |
|
|
|
async def test_init_jm_data(self): |
|
w = self.w |
|
db = w.db |
|
jmman = JMManager(w) |
|
jmman.on_network_start(self.network) |
|
jmw = jmman.jmw |
|
|
|
assert db.get('jm_data') is None |
|
assert db.get('jm_addresses') is None |
|
assert db.get('jm_commitments') is None |
|
assert db.get('jm_txs') is None |
|
|
|
jmw.init_jm_data() |
|
assert db.get('jm_data') is None |
|
assert db.get('jm_addresses') is None |
|
assert db.get('jm_commitments') is None |
|
assert db.get('jm_txs') is None |
|
|
|
await jmman._enable_jm() |
|
assert db.get('jm_data') == {'jm_enabled': True} |
|
assert db.get('jm_addresses') is not None |
|
assert db.get('jm_commitments') is not None |
|
assert db.get('jm_txs') is not None |
|
|
|
async def test_enable_jm(self): |
|
w = self.w |
|
jmman = JMManager(w) |
|
jmman.on_network_start(self.network) |
|
assert not jmman.enabled |
|
|
|
enabled = await jmman.loop.run_in_executor(None, jmman.enable_jm) |
|
assert enabled |
|
assert jmman.enabled |
|
|
|
enabled = await jmman.loop.run_in_executor(None, jmman.enable_jm) |
|
assert jmman.enabled |
|
assert not enabled |
|
|
|
enabled = await jmman._enable_jm() |
|
assert jmman.enabled |
|
assert not enabled
|
|
|