Browse Source

wallet: fix bug in restore_wallet_from_text, and write tests

sqlite_db
SomberNight 6 years ago
parent
commit
f85b8f349d
No known key found for this signature in database GPG Key ID: B33B5F232C6271E9
  1. 73
      electrum/tests/test_wallet.py
  2. 2
      electrum/wallet.py

73
electrum/tests/test_wallet.py

@ -4,13 +4,13 @@ import sys
import os import os
import json import json
from decimal import Decimal from decimal import Decimal
from unittest import TestCase
import time import time
from io import StringIO from io import StringIO
from electrum.storage import WalletStorage from electrum.storage import WalletStorage
from electrum.json_db import FINAL_SEED_VERSION from electrum.json_db import FINAL_SEED_VERSION
from electrum.wallet import Abstract_Wallet from electrum.wallet import (Abstract_Wallet, Standard_Wallet, create_new_wallet,
restore_wallet_from_text)
from electrum.exchange_rate import ExchangeBase, FxThread from electrum.exchange_rate import ExchangeBase, FxThread
from electrum.util import TxMinedInfo from electrum.util import TxMinedInfo
from electrum.bitcoin import COIN from electrum.bitcoin import COIN
@ -114,8 +114,9 @@ class FakeWallet:
txid = 'abc' txid = 'abc'
ccy = 'TEST' ccy = 'TEST'
class TestFiat(TestCase): class TestFiat(SequentialTestCase):
def setUp(self): def setUp(self):
super().setUp()
self.value_sat = COIN self.value_sat = COIN
self.fiat_value = {} self.fiat_value = {}
self.wallet = FakeWallet(fiat_value=self.fiat_value) self.wallet = FakeWallet(fiat_value=self.fiat_value)
@ -143,3 +144,69 @@ class TestFiat(TestCase):
def test_save_garbage(self): def test_save_garbage(self):
self.assertEqual(False, Abstract_Wallet.set_fiat_value(self.wallet, txid, ccy, 'garbage', self.fx, self.value_sat)) self.assertEqual(False, Abstract_Wallet.set_fiat_value(self.wallet, txid, ccy, 'garbage', self.fx, self.value_sat))
self.assertNotIn(ccy, self.fiat_value) self.assertNotIn(ccy, self.fiat_value)
class TestCreateRestoreWallet(WalletTestCase):
def test_create_new_wallet(self):
passphrase = 'mypassphrase'
password = 'mypassword'
encrypt_file = True
d = create_new_wallet(path=self.wallet_path,
passphrase=passphrase,
password=password,
encrypt_file=encrypt_file,
segwit=True)
wallet = d['wallet'] # type: Standard_Wallet
wallet.check_password(password)
self.assertEqual(passphrase, wallet.keystore.get_passphrase(password))
self.assertEqual(d['seed'], wallet.keystore.get_seed(password))
self.assertEqual(encrypt_file, wallet.storage.is_encrypted())
def test_restore_wallet_from_text_mnemonic(self):
text = 'bitter grass shiver impose acquire brush forget axis eager alone wine silver'
passphrase = 'mypassphrase'
password = 'mypassword'
encrypt_file = True
d = restore_wallet_from_text(text,
path=self.wallet_path,
network=None,
passphrase=passphrase,
password=password,
encrypt_file=encrypt_file)
wallet = d['wallet'] # type: Standard_Wallet
self.assertEqual(passphrase, wallet.keystore.get_passphrase(password))
self.assertEqual(text, wallet.keystore.get_seed(password))
self.assertEqual(encrypt_file, wallet.storage.is_encrypted())
self.assertEqual('bc1q2ccr34wzep58d4239tl3x3734ttle92a8srmuw', wallet.get_receiving_addresses()[0])
def test_restore_wallet_from_text_xpub(self):
text = 'zpub6nydoME6CFdJtMpzHW5BNoPz6i6XbeT9qfz72wsRqGdgGEYeivso6xjfw8cGcCyHwF7BNW4LDuHF35XrZsovBLWMF4qXSjmhTXYiHbWqGLt'
d = restore_wallet_from_text(text, path=self.wallet_path, network=None)
wallet = d['wallet'] # type: Standard_Wallet
self.assertEqual(text, wallet.keystore.get_master_public_key())
self.assertEqual('bc1q2ccr34wzep58d4239tl3x3734ttle92a8srmuw', wallet.get_receiving_addresses()[0])
def test_restore_wallet_from_text_xprv(self):
text = 'zprvAZzHPqhCMt51fskXBUYB1fTFYgG3CBjJUT4WEZTpGw6hPSDWBPZYZARC5sE9xAcX8NeWvvucFws8vZxEa65RosKAhy7r5MsmKTxr3hmNmea'
d = restore_wallet_from_text(text, path=self.wallet_path, network=None)
wallet = d['wallet'] # type: Standard_Wallet
self.assertEqual(text, wallet.keystore.get_master_private_key(password=None))
self.assertEqual('bc1q2ccr34wzep58d4239tl3x3734ttle92a8srmuw', wallet.get_receiving_addresses()[0])
def test_restore_wallet_from_text_addresses(self):
text = 'bc1q2ccr34wzep58d4239tl3x3734ttle92a8srmuw bc1qnp78h78vp92pwdwq5xvh8eprlga5q8gu66960c'
d = restore_wallet_from_text(text, path=self.wallet_path, network=None)
wallet = d['wallet'] # type: Abstract_Wallet
self.assertEqual('bc1q2ccr34wzep58d4239tl3x3734ttle92a8srmuw', wallet.get_receiving_addresses()[0])
self.assertEqual(2, len(wallet.get_receiving_addresses()))
def test_restore_wallet_from_text_privkeys(self):
text = 'p2wpkh:L4jkdiXszG26SUYvwwJhzGwg37H2nLhrbip7u6crmgNeJysv5FHL p2wpkh:L24GxnN7NNUAfCXA6hFzB1jt59fYAAiFZMcLaJ2ZSawGpM3uqhb1'
d = restore_wallet_from_text(text, path=self.wallet_path, network=None)
wallet = d['wallet'] # type: Abstract_Wallet
addr0 = wallet.get_receiving_addresses()[0]
self.assertEqual('bc1q2ccr34wzep58d4239tl3x3734ttle92a8srmuw', addr0)
self.assertEqual('p2wpkh:L4jkdiXszG26SUYvwwJhzGwg37H2nLhrbip7u6crmgNeJysv5FHL',
wallet.export_private_key(addr0, password=None)[0])
self.assertEqual(2, len(wallet.get_receiving_addresses()))

2
electrum/wallet.py

@ -1892,7 +1892,7 @@ def restore_wallet_from_text(text, *, path, network, passphrase=None, password=N
k = keystore.Imported_KeyStore({}) k = keystore.Imported_KeyStore({})
storage.put('keystore', k.dump()) storage.put('keystore', k.dump())
wallet = Imported_Wallet(storage) wallet = Imported_Wallet(storage)
keys = keystore.get_private_keys(text) keys = keystore.get_private_keys(text, allow_spaces_inside_key=False)
good_inputs, bad_inputs = wallet.import_private_keys(keys, None, write_to_disk=False) good_inputs, bad_inputs = wallet.import_private_keys(keys, None, write_to_disk=False)
# FIXME tell user about bad_inputs # FIXME tell user about bad_inputs
if not good_inputs: if not good_inputs:

Loading…
Cancel
Save