committed by
Neil
5 changed files with 138 additions and 10 deletions
@ -0,0 +1,104 @@ |
|||||
|
import asyncio |
||||
|
from unittest import mock |
||||
|
|
||||
|
from lib.jsonrpc import RPCError |
||||
|
from server.env import Env |
||||
|
from server.controller import Controller |
||||
|
|
||||
|
loop = asyncio.get_event_loop() |
||||
|
|
||||
|
|
||||
|
def set_env(): |
||||
|
env = mock.create_autospec(Env) |
||||
|
env.coin = mock.Mock() |
||||
|
env.loop_policy = None |
||||
|
env.max_sessions = 0 |
||||
|
env.max_subs = 0 |
||||
|
env.max_send = 0 |
||||
|
env.bandwidth_limit = 0 |
||||
|
env.identities = '' |
||||
|
env.tor_proxy_host = env.tor_proxy_port = None |
||||
|
env.peer_discovery = env.PD_SELF = False |
||||
|
env.daemon_url = 'http://localhost:8000/' |
||||
|
return env |
||||
|
|
||||
|
|
||||
|
async def coro(res): |
||||
|
return res |
||||
|
|
||||
|
|
||||
|
def raise_exception(exc, msg): |
||||
|
raise exc(msg) |
||||
|
|
||||
|
|
||||
|
def ensure_text_exception(test, exception): |
||||
|
res = err = None |
||||
|
try: |
||||
|
res = loop.run_until_complete(test) |
||||
|
except Exception as e: |
||||
|
err = e |
||||
|
assert isinstance(err, exception), (res, err) |
||||
|
|
||||
|
|
||||
|
def test_transaction_get(): |
||||
|
async def test_verbose_ignore_by_backend(): |
||||
|
env = set_env() |
||||
|
sut = Controller(env) |
||||
|
sut.daemon_request = mock.Mock() |
||||
|
sut.daemon_request.return_value = coro('11'*32) |
||||
|
res = await sut.transaction_get('ff'*32, True) |
||||
|
assert res == '11'*32 |
||||
|
|
||||
|
async def test_verbose_ok(): |
||||
|
env = set_env() |
||||
|
sut = Controller(env) |
||||
|
sut.daemon_request = mock.Mock() |
||||
|
response = { |
||||
|
"hex": "00"*32, |
||||
|
"blockhash": "ff"*32 |
||||
|
} |
||||
|
sut.daemon_request.return_value = coro(response) |
||||
|
res = await sut.transaction_get('ff'*32, True) |
||||
|
assert res == response |
||||
|
|
||||
|
response = { |
||||
|
"hex": "00"*32, |
||||
|
"blockhash": None |
||||
|
} |
||||
|
sut.daemon_request.return_value = coro(response) |
||||
|
res = await sut.transaction_get('ff'*32, True) |
||||
|
assert res == response |
||||
|
|
||||
|
async def test_no_verbose(): |
||||
|
env = set_env() |
||||
|
sut = Controller(env) |
||||
|
sut.daemon_request = mock.Mock() |
||||
|
response = 'cafebabe'*64 |
||||
|
sut.daemon_request.return_value = coro(response) |
||||
|
res = await sut.transaction_get('ff'*32) |
||||
|
assert res == response |
||||
|
|
||||
|
async def test_verbose_failure(): |
||||
|
env = set_env() |
||||
|
sut = Controller(env) |
||||
|
sut.daemon_request = mock.Mock() |
||||
|
sut.daemon_request.return_value = coro(raise_exception(RPCError, 'some unhandled error')) |
||||
|
await sut.transaction_get('ff' * 32, True) |
||||
|
|
||||
|
async def test_wrong_txhash(): |
||||
|
env = set_env() |
||||
|
sut = Controller(env) |
||||
|
sut.daemon_request = mock.Mock() |
||||
|
await sut.transaction_get('cafe') |
||||
|
sut.daemon_request.assert_not_called() |
||||
|
|
||||
|
loop.run_until_complete(asyncio.gather( |
||||
|
*[ |
||||
|
test_verbose_ignore_by_backend(), |
||||
|
test_verbose_ok(), |
||||
|
test_no_verbose() |
||||
|
] |
||||
|
)) |
||||
|
|
||||
|
for error_test in [test_verbose_failure, test_wrong_txhash]: |
||||
|
ensure_text_exception(error_test(), RPCError) |
Loading…
Reference in new issue