Skip to content

Commit a3dde40

Browse files
committed
test: test_wizard: add "old" electrum seed tests, and bip39+seed_ext
1 parent 522810d commit a3dde40

File tree

2 files changed

+85
-1
lines changed

2 files changed

+85
-1
lines changed

electrum/wizard.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@ def on_hardware_device(self, wizard_data: dict, new_wallet=True) -> str:
289289
plugin = self.plugins.get_plugin(_type)
290290
return plugin.wizard_entry_for_device(_info, new_wallet=new_wallet)
291291

292-
def validate_seed(self, seed: str, seed_variant: str, wallet_type: str):
292+
def validate_seed(self, seed: str, seed_variant: str, wallet_type: str) -> Tuple[bool, str, str, bool]:
293293
seed_type = ''
294294
seed_valid = False
295295
validation_message = ''

tests/test_wizard.py

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,57 @@ async def test_create_standard_wallet_newseed_passphrase(self):
203203
wallet = Daemon._load_wallet(wallet_path, password=None, config=self.config)
204204
self.assertEqual("bc1qgvx24uzdv4mapfmtlu8azty5fxdcw9ghxu4pr4", wallet.get_receiving_addresses()[0])
205205

206+
async def test_create_standard_wallet_haveseed_electrum_oldseed(self):
207+
w = self.wizard_for(name='test_standard_wallet', wallet_type='standard')
208+
v = w._current
209+
d = v.wizard_data
210+
self.assertEqual('keystore_type', v.view)
211+
212+
d.update({'keystore_type': 'haveseed'})
213+
v = w.resolve_next(v.view, d)
214+
self.assertEqual('have_seed', v.view)
215+
216+
d.update({
217+
'seed': 'powerful random nobody notice nothing important anyway look away hidden message over',
218+
'seed_type': 'old', 'seed_extend': False, 'seed_variant': 'electrum'})
219+
v = w.resolve_next(v.view, d)
220+
self.assertEqual('wallet_password', v.view)
221+
222+
d.update({'password': None, 'encrypt': False})
223+
self.assertTrue(w.is_last_view(v.view, d))
224+
v = w.resolve_next(v.view, d)
225+
226+
wallet_path = os.path.join(w._daemon.config.get_datadir_wallet_path(), d['wallet_name'])
227+
w.create_storage(wallet_path, d)
228+
229+
self.assertTrue(os.path.exists(wallet_path))
230+
wallet = Daemon._load_wallet(wallet_path, password=None, config=self.config)
231+
self.assertEqual("1FJEEB8ihPMbzs2SkLmr37dHyRFzakqUmo", wallet.get_receiving_addresses()[0])
232+
233+
async def test_create_standard_wallet_haveseed_electrum_oldseed_passphrase(self):
234+
w = self.wizard_for(name='test_standard_wallet', wallet_type='standard')
235+
v = w._current
236+
d = v.wizard_data
237+
self.assertEqual('keystore_type', v.view)
238+
239+
d.update({'keystore_type': 'haveseed'})
240+
v = w.resolve_next(v.view, d)
241+
self.assertEqual('have_seed', v.view)
242+
243+
d.update({
244+
'seed': 'powerful random nobody notice nothing important anyway look away hidden message over',
245+
'seed_type': 'old', 'seed_extend': True, 'seed_variant': 'electrum'})
246+
v = w.resolve_next(v.view, d)
247+
# FIXME this diverges from the actual GUIs :(
248+
# the GUIs do validation using wizard.validate_seed() and don't go to 'have_ext' for next view.
249+
# the validation should be moved to the base impl!
250+
self.assertEqual('have_ext', v.view)
251+
252+
d.update({'seed_extra_words': UNICODE_HORROR})
253+
with self.assertRaises(Exception) as ctx:
254+
v = w.resolve_next(v.view, d)
255+
self.assertTrue("cannot have passphrase" in ctx.exception.args[0])
256+
206257
async def test_create_standard_wallet_haveseed_electrum(self):
207258
w = self.wizard_for(name='test_standard_wallet', wallet_type='standard')
208259
v = w._current
@@ -286,6 +337,39 @@ async def test_create_standard_wallet_haveseed_bip39(self):
286337
wallet = Daemon._load_wallet(wallet_path, password=None, config=self.config)
287338
self.assertEqual("bc1qrjr8qn4669jgr3s34f2pyj9awhz02eyvk5eh8g", wallet.get_receiving_addresses()[0])
288339

340+
async def test_create_standard_wallet_haveseed_bip39_passphrase(self):
341+
w = self.wizard_for(name='test_standard_wallet', wallet_type='standard')
342+
v = w._current
343+
d = v.wizard_data
344+
self.assertEqual('keystore_type', v.view)
345+
346+
d.update({'keystore_type': 'haveseed'})
347+
v = w.resolve_next(v.view, d)
348+
self.assertEqual('have_seed', v.view)
349+
350+
d.update({'seed': '9dk', 'seed_type': 'bip39', 'seed_extend': True, 'seed_variant': 'bip39'})
351+
v = w.resolve_next(v.view, d)
352+
self.assertEqual('have_ext', v.view)
353+
354+
d.update({'seed_extra_words': UNICODE_HORROR})
355+
v = w.resolve_next(v.view, d)
356+
self.assertEqual('script_and_derivation', v.view)
357+
358+
d.update({'script_type': 'p2wpkh', 'derivation_path': 'm'})
359+
v = w.resolve_next(v.view, d)
360+
self.assertEqual('wallet_password', v.view)
361+
362+
d.update({'password': None, 'encrypt': False})
363+
self.assertTrue(w.is_last_view(v.view, d))
364+
v = w.resolve_next(v.view, d)
365+
366+
wallet_path = os.path.join(w._daemon.config.get_datadir_wallet_path(), d['wallet_name'])
367+
w.create_storage(wallet_path, d)
368+
369+
self.assertTrue(os.path.exists(wallet_path))
370+
wallet = Daemon._load_wallet(wallet_path, password=None, config=self.config)
371+
self.assertEqual("bc1qjexrunguxz8rlfuul8h4apafyh3sq5yp9kg98j", wallet.get_receiving_addresses()[0])
372+
289373
async def test_2fa_haveseed(self):
290374
self.assertTrue(self.config.get('enable_plugin_trustedcoin'))
291375
w = self.wizard_for(name='test_2fa_wallet', wallet_type='2fa')

0 commit comments

Comments
 (0)