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.
 
 
 
 

110 lines
3.3 KiB

import shutil
import tempfile
import sys
import unittest
import os
import json
from StringIO import StringIO
from lib.wallet import WalletStorage, NewWallet
class FakeSynchronizer(object):
def __init__(self):
self.store = []
def add(self, address):
self.store.append(address)
class WalletTestCase(unittest.TestCase):
def setUp(self):
super(WalletTestCase, self).setUp()
self.user_dir = tempfile.mkdtemp()
self.wallet_path = os.path.join(self.user_dir, "somewallet")
self._saved_stdout = sys.stdout
self._stdout_buffer = StringIO()
sys.stdout = self._stdout_buffer
def tearDown(self):
super(WalletTestCase, self).tearDown()
shutil.rmtree(self.user_dir)
# Restore the "real" stdout
sys.stdout = self._saved_stdout
class TestWalletStorage(WalletTestCase):
def test_read_dictionnary_from_file(self):
some_dict = {"a":"b", "c":"d"}
contents = repr(some_dict)
with open(self.wallet_path, "w") as f:
contents = f.write(contents)
storage = WalletStorage(self.wallet_path)
self.assertEqual("b", storage.get("a"))
self.assertEqual("d", storage.get("c"))
def test_write_dictionnary_to_file(self):
storage = WalletStorage(self.wallet_path)
some_dict = {"a":"b", "c":"d"}
for key, value in some_dict.items():
storage.put(key, value)
storage.write()
contents = ""
with open(self.wallet_path, "r") as f:
contents = f.read()
self.assertEqual(some_dict, json.loads(contents))
class TestNewWallet(WalletTestCase):
seed_text = "travel nowhere air position hill peace suffer parent beautiful rise blood power home crumble teach"
password = "secret"
first_account_name = "account1"
import_private_key = "L52XzL2cMkHxqxBXRyEpnPQZGUs3uKiL3R11XbAdHigRzDozKZeW"
import_key_address = "15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma"
def setUp(self):
super(TestNewWallet, self).setUp()
self.storage = WalletStorage(self.wallet_path)
self.wallet = NewWallet(self.storage)
# This cannot be constructed by electrum at random, it should be safe
# from eventual collisions.
self.wallet.add_seed(self.seed_text, self.password)
self.wallet.create_master_keys(self.password)
self.wallet.create_main_account()
def test_wallet_with_seed_is_not_watching_only(self):
self.assertFalse(self.wallet.is_watching_only())
def test_wallet_without_seed_is_watching_only(self):
# We need a new storage , since the default storage was already seeded
# in setUp()
new_dir = tempfile.mkdtemp()
storage = WalletStorage(os.path.join(new_dir, "somewallet"))
wallet = NewWallet(storage)
self.assertTrue(wallet.is_watching_only())
shutil.rmtree(new_dir) # Don't leave useless stuff in /tmp
def test_new_wallet_is_deterministic(self):
self.assertTrue(self.wallet.is_deterministic())
def test_get_seed_returns_correct_seed(self):
self.assertEqual(self.wallet.get_seed(self.password), self.seed_text)
def test_update_password(self):
new_password = "secret2"
self.wallet.update_password(self.password, new_password)
self.wallet.get_seed(new_password)