lbry-sdk/tests/unit/wallet/test_ledger.py

96 lines
3.1 KiB
Python
Raw Normal View History

2018-06-12 17:53:29 +02:00
from twisted.internet import defer
from twisted.trial import unittest
from lbrynet import conf
from lbrynet.wallet.account import Account
2018-07-15 16:53:52 +02:00
from lbrynet.wallet.database import WalletDatabase
2018-06-12 17:53:29 +02:00
from lbrynet.wallet.transaction import Transaction, Output, Input
from lbrynet.wallet.ledger import MainNetLedger
2018-06-12 17:53:29 +02:00
from torba.wallet import Wallet
class MockHeaders:
def __init__(self, ledger):
self.ledger = ledger
self.height = 1
def __len__(self):
return self.height
def __getitem__(self, height):
return {'merkle_root': 'abcd04'}
2018-07-15 16:53:52 +02:00
class MainNetTestLedger(MainNetLedger):
headers_class = MockHeaders
network_name = 'unittest'
def __init__(self):
super(MainNetLedger, self).__init__({
'db': WalletDatabase(':memory:')
})
2018-06-12 17:53:29 +02:00
class LedgerTestCase(unittest.TestCase):
def setUp(self):
conf.initialize_settings(False)
2018-07-15 16:53:52 +02:00
self.ledger = MainNetTestLedger()
self.account = Account.generate(self.ledger, u"lbryum")
return self.ledger.db.start()
2018-06-12 17:53:29 +02:00
def tearDown(self):
2018-07-15 16:53:52 +02:00
return self.ledger.db.stop()
2018-06-12 17:53:29 +02:00
class BasicAccountingTests(LedgerTestCase):
@defer.inlineCallbacks
def test_empty_state(self):
balance = yield self.account.get_balance()
self.assertEqual(balance, 0)
@defer.inlineCallbacks
def test_balance(self):
address = yield self.account.receiving.get_or_create_usable_address()
hash160 = self.ledger.address_to_hash160(address)
tx = Transaction().add_outputs([Output.pay_pubkey_hash(100, hash160)])
yield self.ledger.db.save_transaction_io(
2018-07-15 16:53:52 +02:00
'insert', tx, 1, True, address, hash160, '{}:{}:'.format(tx.id, 1)
)
2018-07-15 16:53:52 +02:00
balance = yield self.account.get_balance(0)
2018-06-12 17:53:29 +02:00
self.assertEqual(balance, 100)
tx = Transaction().add_outputs([Output.pay_claim_name_pubkey_hash(100, b'foo', b'', hash160)])
yield self.ledger.db.save_transaction_io(
2018-07-15 16:53:52 +02:00
'insert', tx, 1, True, address, hash160, '{}:{}:'.format(tx.id, 1)
)
2018-07-15 16:53:52 +02:00
balance = yield self.account.get_balance(0)
self.assertEqual(balance, 100) # claim names don't count towards balance
2018-07-15 16:53:52 +02:00
balance = yield self.account.get_balance(0, include_claims=True)
self.assertEqual(balance, 200)
2018-06-12 17:53:29 +02:00
@defer.inlineCallbacks
def test_get_utxo(self):
2018-07-15 16:53:52 +02:00
address = yield self.account.receiving.get_or_create_usable_address()
hash160 = self.ledger.address_to_hash160(address)
tx = Transaction().add_outputs([Output.pay_pubkey_hash(100, hash160)])
yield self.ledger.db.save_transaction_io(
'insert', tx, 1, True, address, hash160, '{}:{}:'.format(tx.id, 1)
)
2018-06-12 17:53:29 +02:00
2018-07-15 16:53:52 +02:00
utxos = yield self.account.get_unspent_outputs()
2018-06-12 17:53:29 +02:00
self.assertEqual(len(utxos), 1)
2018-07-15 16:53:52 +02:00
tx = Transaction().add_inputs([Input.spend(utxos[0])])
yield self.ledger.db.save_transaction_io(
'insert', tx, 1, True, address, hash160, '{}:{}:'.format(tx.id, 1)
)
balance = yield self.account.get_balance(0, include_claims=True)
2018-06-12 17:53:29 +02:00
self.assertEqual(balance, 0)
2018-07-15 16:53:52 +02:00
utxos = yield self.account.get_unspent_outputs()
2018-06-12 17:53:29 +02:00
self.assertEqual(len(utxos), 0)
2018-07-15 16:53:52 +02:00