Skip to content
Snippets Groups Projects
Commit cd887ad4 authored by inso's avatar inso
Browse files

Refactoring tests + new tests

- Added tests for core classes
- Moved gui tests to tests.gui package
- Added test for txhistory parsing
parent 2d9e4b08
Branches
Tags
No related merge requests found
Showing
with 287 additions and 33 deletions
...@@ -177,7 +177,10 @@ class TxHistory(): ...@@ -177,7 +177,10 @@ class TxHistory():
parsed_block = min(set(blocks)) parsed_block = min(set(blocks))
logging.debug("Refresh from : {0} to {1}".format(self.latest_block, current_block['number'])) logging.debug("Refresh from : {0} to {1}".format(self.latest_block, current_block['number']))
dividends_data = qtbma.ud.History.null_value dividends_data = qtbma.ud.History.null_value
while dividends_data == qtbma.ud.History.null_value: for i in range(0, 6):
if dividends_data == qtbma.ud.History.null_value:
if i == 5:
return
dividends_data = yield from community.bma_access.future_request(qtbma.ud.History, dividends_data = yield from community.bma_access.future_request(qtbma.ud.History,
req_args={'pubkey': self.wallet.pubkey}) req_args={'pubkey': self.wallet.pubkey})
...@@ -193,7 +196,11 @@ class TxHistory(): ...@@ -193,7 +196,11 @@ class TxHistory():
if t.state == Transfer.AWAITING] if t.state == Transfer.AWAITING]
while parsed_block < current_block['number']: while parsed_block < current_block['number']:
tx_history = qtbma.tx.history.Blocks.null_value tx_history = qtbma.tx.history.Blocks.null_value
while tx_history == qtbma.tx.history.Blocks.null_value: for i in range(0, 6):
if tx_history == qtbma.tx.history.Blocks.null_value:
if i == 5:
return
tx_history = yield from community.bma_access.future_request(qtbma.tx.history.Blocks, tx_history = yield from community.bma_access.future_request(qtbma.tx.history.Blocks,
req_args={'pubkey': self.wallet.pubkey, req_args={'pubkey': self.wallet.pubkey,
'from_':str(parsed_block), 'from_':str(parsed_block),
......
__author__ = 'inso'
__author__ = 'inso'
import sys
import unittest
import asyncio
import quamash
import time
import logging
from ucoinpy.documents.peer import BMAEndpoint as PyBMAEndpoint
from PyQt5.QtCore import QLocale, Qt
from PyQt5.QtTest import QTest
from cutecoin.tests.mocks.bma import nice_blockchain
from cutecoin.tests.mocks.access_manager import MockNetworkAccessManager
from cutecoin.core.registry.identities import IdentitiesRegistry
from cutecoin.core.app import Application
from cutecoin.core import Account, Community, Wallet
from cutecoin.core.net import Network, Node
from cutecoin.core.net.endpoint import BMAEndpoint
from cutecoin.core.net.api.bma.access import BmaAccess
from cutecoin.tests import get_application
from cutecoin.core.net.api import bma as qtbma
class TestTxHistory(unittest.TestCase):
def setUp(self):
self.qapplication = get_application()
self.network_manager = MockNetworkAccessManager()
QLocale.setDefault(QLocale("en_GB"))
self.lp = quamash.QEventLoop(self.qapplication)
asyncio.set_event_loop(self.lp)
self.identities_registry = IdentitiesRegistry({})
self.application = Application(self.qapplication, self.lp, self.network_manager, self.identities_registry)
self.application.preferences['notifications'] = False
self.endpoint = BMAEndpoint(PyBMAEndpoint("", "127.0.0.1", "", 50000))
self.node = Node(self.network_manager, "test_currency", [self.endpoint],
"", "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk",
nice_blockchain.bma_blockchain_current, Node.ONLINE,
time.time(), {}, "ucoin", "0.14.0", 0)
self.network = Network.create(self.network_manager, self.node)
self.bma_access = BmaAccess.create(self.network)
self.community = Community("test_currency", self.network, self.bma_access)
self.wallet = Wallet(0, "7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ",
"Wallet 1", self.identities_registry)
self.wallet.init_cache(self.application, self.community)
# Salt/password : "testcutecoin/testcutecoin"
# Pubkey : 7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ
self.account = Account("testcutecoin", "7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ",
"john", [self.community], [self.wallet], [], self.identities_registry)
def tearDown(self):
try:
self.lp.close()
finally:
asyncio.set_event_loop(None)
def test_txhistory_reload(self):
mock = nice_blockchain.get_mock()
time.sleep(2)
logging.debug(mock.pretend_url)
self.network_manager.set_mock_path(mock.pretend_url)
received_list = []
self.lp.run_until_complete(self.wallet.caches[self.community.currency].
refresh(self.community, received_list))
self.assertEquals(len(received_list), 2)
received_value = sum([r.metadata['amount'] for r in received_list])
self.assertEqual(received_value, 60)
self.assertEqual(len(self.wallet.dividends(self.community)), 2)
dividends_value = sum([ud['amount'] for ud in self.wallet.dividends(self.community)])
self.assertEqual(dividends_value, 15)
mock.delete_mock()
if __name__ == '__main__':
logging.basicConfig(stream=sys.stderr)
logging.getLogger().setLevel(logging.DEBUG)
unittest.main()
__author__ = 'inso'
import json
from pretenders.client.http import HTTPMock from pretenders.client.http import HTTPMock
from pretenders.common.constants import FOREVER from pretenders.common.constants import FOREVER
bma_peering = b"""{ bma_peering = {
"version": 1, "version": 1,
"currency": "test_currency", "currency": "test_currency",
"endpoints": [ "endpoints": [
...@@ -10,12 +11,12 @@ bma_peering = b"""{ ...@@ -10,12 +11,12 @@ bma_peering = b"""{
"status": "UP", "status": "UP",
"block": "30152-00003E7F9234E7542FCF669B69B0F84FF79CCCD3", "block": "30152-00003E7F9234E7542FCF669B69B0F84FF79CCCD3",
"signature": "cXuqZuDfyHvxYAEUkPH1TQ1M+8YNDpj8kiHGYi3LIaMqEdVqwVc4yQYGivjxFMYyngRfxXkyvqBKZA6rKOulCA==", "signature": "cXuqZuDfyHvxYAEUkPH1TQ1M+8YNDpj8kiHGYi3LIaMqEdVqwVc4yQYGivjxFMYyngRfxXkyvqBKZA6rKOulCA==",
"raw": "Version: 1\\nType: Peer\\nCurrency: meta_brouzouf\\nPublicKey: HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk\\nBlock: 30152-00003E7F9234E7542FCF669B69B0F84FF79CCCD3\\nEndpoints:\\nBASIC_MERKLED_API localhost 127.0.0.1 50000\\n", "raw": "Version: 1\nType: Peer\nCurrency: meta_brouzouf\nPublicKey: HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk\nBlock: 30152-00003E7F9234E7542FCF669B69B0F84FF79CCCD3\nEndpoints:\nBASIC_MERKLED_API localhost 127.0.0.1 50000\n",
"pubkey": "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk" "pubkey": "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk"
}""" }
bma_lookup_john = b"""{ bma_lookup_john = {
"partial": false, "partial": False,
"results": [ "results": [
{ {
"pubkey": "7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ", "pubkey": "7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ",
...@@ -32,10 +33,10 @@ bma_lookup_john = b"""{ ...@@ -32,10 +33,10 @@ bma_lookup_john = b"""{
"signed": [] "signed": []
} }
] ]
}""" }
bma_lookup_doe = b"""{ bma_lookup_doe = {
"partial": false, "partial": False,
"results": [ "results": [
{ {
"pubkey": "FADxcH5LmXGmGFgdixSes6nWnC4Vb4pRUBYT81zQRhjn", "pubkey": "FADxcH5LmXGmGFgdixSes6nWnC4Vb4pRUBYT81zQRhjn",
...@@ -52,25 +53,25 @@ bma_lookup_doe = b"""{ ...@@ -52,25 +53,25 @@ bma_lookup_doe = b"""{
"signed": [] "signed": []
} }
] ]
}""" }
bma_certifiers_of_john = b"""{ bma_certifiers_of_john = {
"pubkey": "7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ", "pubkey": "7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ",
"uid": "john", "uid": "john",
"isMember": true, "isMember": True,
"certifications": [ "certifications": [
] ]
}""" }
bma_certified_by_john = b"""{ bma_certified_by_john = {
"pubkey": "7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ", "pubkey": "7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ",
"uid": "john", "uid": "john",
"isMember": true, "isMember": True,
"certifications": [ "certifications": [
] ]
}""" }
bma_parameters = b"""{ bma_parameters = {
"currency": "test_currency", "currency": "test_currency",
"c": 0.1, "c": 0.1,
"dt": 86400, "dt": 86400,
...@@ -86,12 +87,12 @@ bma_parameters = b"""{ ...@@ -86,12 +87,12 @@ bma_parameters = b"""{
"dtDiffEval": 20, "dtDiffEval": 20,
"blocksRot": 144, "blocksRot": 144,
"percentRot": 0.67 "percentRot": 0.67
}""" }
bma_blockchain_current = b"""{ bma_blockchain_current = {
"version": 1, "version": 1,
"nonce": 6909, "nonce": 6909,
"number": 3, "number": 15,
"powMin": 4, "powMin": 4,
"time": 1441618206, "time": 1441618206,
"medianTime": 1441614759, "medianTime": 1441614759,
...@@ -104,7 +105,7 @@ bma_blockchain_current = b"""{ ...@@ -104,7 +105,7 @@ bma_blockchain_current = b"""{
"parameters": "", "parameters": "",
"previousHash": "00003BDA844D77EEE7CF32A6C3C87F2ACBFCFCBB", "previousHash": "00003BDA844D77EEE7CF32A6C3C87F2ACBFCFCBB",
"previousIssuer": "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk", "previousIssuer": "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk",
"dividend": null, "dividend": None,
"membersChanges": [ ], "membersChanges": [ ],
"identities": [ ], "identities": [ ],
"joiners": [ ], "joiners": [ ],
...@@ -114,54 +115,220 @@ bma_blockchain_current = b"""{ ...@@ -114,54 +115,220 @@ bma_blockchain_current = b"""{
"certifications": [ ], "certifications": [ ],
"transactions": [ ], "transactions": [ ],
"raw": "Version: 1\nType: Block\nCurrency: meta_brouzouf\nNonce: 6909\nNumber: 30898\nPoWMin: 4\nTime: 1441618206\nMedianTime: 1441614759\nIssuer: EPs9qX7HmCDy6ptUoMLpTzbh9toHu4au488pBTU9DN6y\nPreviousHash: 00003BDA844D77EEE7CF32A6C3C87F2ACBFCFCBB\nPreviousIssuer: HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk\nMembersCount: 20\nIdentities:\nJoiners:\nActives:\nLeavers:\nExcluded:\nCertifications:\nTransactions:\n" "raw": "Version: 1\nType: Block\nCurrency: meta_brouzouf\nNonce: 6909\nNumber: 30898\nPoWMin: 4\nTime: 1441618206\nMedianTime: 1441614759\nIssuer: EPs9qX7HmCDy6ptUoMLpTzbh9toHu4au488pBTU9DN6y\nPreviousHash: 00003BDA844D77EEE7CF32A6C3C87F2ACBFCFCBB\nPreviousIssuer: HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk\nMembersCount: 20\nIdentities:\nJoiners:\nActives:\nLeavers:\nExcluded:\nCertifications:\nTransactions:\n"
}""" }
# Sent 6, received 20 + 30
bma_txhistory_john = {
"currency": "test_currency",
"pubkey": "7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ",
"history":
{
"sent":
[
{
"version": 1,
"issuers":
[
"7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ"
],
"inputs":
[
"0:D:1:000A8362AE0C1B8045569CE07735DE4C18E81586:8"
],
"outputs":
[
"7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ:2",
"FADxcH5LmXGmGFgdixSes6nWnC4Vb4pRUBYT81zQRhjn:6"
],
"comment": "",
"signatures":
[
"1Mn8q3K7N+R4GZEpAUm+XSyty1Uu+BuOy5t7BIRqgZcKqiaxfhAUfDBOcuk2i4TJy1oA5Rntby8hDN+cUCpvDg=="
],
"hash": "5FB3CB80A982E2BDFBB3EA94673A74763F58CB2A",
"block_number": 2,
"time": 1421932545
},
],
"received":
[
{
"version": 1,
"issuers":
[
"FADxcH5LmXGmGFgdixSes6nWnC4Vb4pRUBYT81zQRhjn"
],
"inputs":
[
"0:D:1:000A8362AE0C1B8045569CE07735DE4C18E81586:8"
],
"outputs":
[
"FADxcH5LmXGmGFgdixSes6nWnC4Vb4pRUBYT81zQRhjn:2",
"7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ:20"
],
"comment": "",
"signatures":
[
"1Mn8q3K7N+R4GZEpAUm+XSyty1Uu+BuOy5t7BIRqgZcKqiaxfhAUfDBOcuk2i4TJy1oA5Rntby8hDN+cUCpvDg=="
],
"hash": "5FB3CB80A982E2BDFBB3EA94673A74763F58CB2A",
"block_number": 2,
"time": 1421932545
},
{
"version": 1,
"issuers":
[
"FADxcH5LmXGmGFgdixSes6nWnC4Vb4pRUBYT81zQRhjn"
],
"inputs":
[
"0:D:1:000A8362AE0C1B8045569CE07735DE4C18E81586:8"
],
"outputs":
[
"FADxcH5LmXGmGFgdixSes6nWnC4Vb4pRUBYT81zQRhjn:5",
"7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ:40"
],
"comment": "",
"signatures":
[
"1Mn8q3K7N+R4GZEpAUm+XSyty1Uu+BuOy5t7BIRqgZcKqiaxfhAUfDBOcuk2i4TJy1oA5Rntby8hDN+cUCpvDg=="
],
"hash": "5FB3CB80A982E2BDFBB3EA94673A74763F58CB2A",
"block_number": 12,
"time": 1421932454
}
],
"sending": [ ],
"receiving": [ ]
}
}
bma_udhistory_john = {
"currency": "test_currency",
"pubkey": "7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ",
"history":
{
"history":
[
{
"block_number": 2,
"consumed": False,
"time": 1435749971,
"amount": 5
},
{
"block_number": 10,
"consumed": False,
"time": 1435836032,
"amount": 10
}
]
}}
bma_txsources_john = {
"currency": "test_currency",
"pubkey": "7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ",
"sources":
[
{
"pubkey": "7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ",
"type": "D",
"number": 2,
"fingerprint": "4A317E3D676E9800E1E92AA2A7255BCEEFF31185",
"amount": 7
},
{
"pubkey": "7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ",
"type": "D",
"number": 4,
"fingerprint": "4A317E3D676E9800E1E92AA2A7255BCEEFF31185",
"amount": 9
}
]}
def get_mock(): def get_mock():
mock = HTTPMock('127.0.0.1', 50000) mock = HTTPMock('127.0.0.1', 50000)
mock.when('GET /network/peering')\ mock.when('GET /network/peering')\
.reply(body=bma_peering, .reply(body=bytes(json.dumps(bma_peering), "utf-8"),
times=FOREVER, times=FOREVER,
headers={'Content-Type': 'application/json'}) headers={'Content-Type': 'application/json'})
mock.when('GET /blockchain/parameters')\ mock.when('GET /blockchain/parameters')\
.reply(body=bma_parameters, .reply(body=bytes(json.dumps(bma_parameters), "utf-8"),
status=200,
times=FOREVER,
headers={'Content-Type': 'application/json'})
mock.when('GET /blockchain/current')\
.reply(body=bytes(json.dumps(bma_blockchain_current), "utf-8"),
status=200,
times=FOREVER,
headers={'Content-Type': 'application/json'})
mock.when('GET /blockchain/block/15')\
.reply(body=bytes(json.dumps(bma_blockchain_current), "utf-8"),
status=200,
times=FOREVER,
headers={'Content-Type': 'application/json'})
mock.when('GET /tx/history/7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ/blocks/0/99')\
.reply(body=bytes(json.dumps(bma_txhistory_john), "utf-8"),
status=200,
times=FOREVER,
headers={'Content-Type': 'application/json'})
mock.when('GET /tx/sources/7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ')\
.reply(body=bytes(json.dumps(bma_txsources_john), "utf-8"),
status=200,
times=FOREVER,
headers={'Content-Type': 'application/json'})
mock.when('GET /ud/history/7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ')\
.reply(body=bytes(json.dumps(bma_udhistory_john), "utf-8"),
status=200, status=200,
times=FOREVER, times=FOREVER,
headers={'Content-Type': 'application/json'}) headers={'Content-Type': 'application/json'})
mock.when('GET /wot/certifiers-of/7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ')\ mock.when('GET /wot/certifiers-of/7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ')\
.reply(body=bma_certifiers_of_john, .reply(body=bytes(json.dumps(bma_certifiers_of_john), "utf-8"),
status=200, status=200,
times=FOREVER, times=FOREVER,
headers={'Content-Type': 'application/json'}) headers={'Content-Type': 'application/json'})
mock.when('GET /wot/certified-by/7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ')\ mock.when('GET /wot/certified-by/7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ')\
.reply(body=bma_certified_by_john, .reply(body=bytes(json.dumps(bma_certified_by_john), "utf-8"),
status=200, status=200,
times=FOREVER, times=FOREVER,
headers={'Content-Type': 'application/json'}) headers={'Content-Type': 'application/json'})
mock.when('GET /wot/lookup/john')\ mock.when('GET /wot/lookup/john')\
.reply(body=bma_lookup_john, .reply(body=bytes(json.dumps(bma_lookup_john), "utf-8"),
status=200, status=200,
times=FOREVER, times=FOREVER,
headers={'Content-Type': 'application/json'}) headers={'Content-Type': 'application/json'})
mock.when('GET /wot/lookup/7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ')\ mock.when('GET /wot/lookup/7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ')\
.reply(body=bma_lookup_john, .reply(body=bytes(json.dumps(bma_lookup_john), "utf-8"),
status=200, status=200,
times=FOREVER, times=FOREVER,
headers={'Content-Type': 'application/json'}) headers={'Content-Type': 'application/json'})
mock.when('GET /wot/lookup/doe')\ mock.when('GET /wot/lookup/doe')\
.reply(body=bma_lookup_doe, .reply(body=bytes(json.dumps(bma_lookup_doe), "utf-8"),
status=200, status=200,
times=1, times=1,
headers={'Content-Type': 'application/json'}) headers={'Content-Type': 'application/json'})
mock.when('GET /wot/lookup/FADxcH5LmXGmGFgdixSes6nWnC4Vb4pRUBYT81zQRhjn')\ mock.when('GET /wot/lookup/FADxcH5LmXGmGFgdixSes6nWnC4Vb4pRUBYT81zQRhjn')\
.reply(body=bma_lookup_doe, .reply(body=bytes(json.dumps(bma_lookup_doe), "utf-8"),
status=200, status=200,
times=FOREVER, times=FOREVER,
headers={'Content-Type': 'application/json'}) headers={'Content-Type': 'application/json'})
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment