Skip to content

Commit

Permalink
testing: JSONRPC tests draft
Browse files Browse the repository at this point in the history
  • Loading branch information
gdassori committed Apr 24, 2018
1 parent 3de472a commit 27255d9
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 11 deletions.
8 changes: 6 additions & 2 deletions spruned/application/jsonrpc_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ async def _handle(self, jsonrequest):
}
response = await methods.dispatch(request)
if isinstance(response, ExceptionResponse):
response['result'] = response.get('result', None)
return web.json_response(response, status=response.http_status)
result.update(response)
return web.json_response(result)
Expand Down Expand Up @@ -85,7 +86,10 @@ async def getblock(self, blockhash: str, mode: int = 1):
binascii.unhexlify(blockhash)
assert len(blockhash) == 64
except (binascii.Error, AssertionError):
raise JsonRpcServerException(code=-5, message="Block not found")
raise JsonRpcServerException(
code=-5,
message="Error parsing JSON:%s" % blockhash
)
response = await self.vo_service.getblock(blockhash, mode)
if not response:
raise JsonRpcServerException(code=-5, message="Block not found")
Expand Down Expand Up @@ -153,7 +157,7 @@ async def getblockheader(self, blockhash: str, verbose=True):
except (binascii.Error, AssertionError):
raise JsonRpcServerException(
code=-5,
message="Block not found"
message="Error parsing JSON:%s" % blockhash
)
response = await self.vo_service.getblockheader(blockhash, verbose=verbose)
if not response:
Expand Down
62 changes: 53 additions & 9 deletions test/test_application/test_jsonrpc.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import asyncio
import random
from unittest import TestCase
from unittest.mock import Mock
from spruned.application.jsonrpc_server import JSONRPCServer
Expand All @@ -8,10 +9,11 @@

class TestJSONRPCServer(TestCase):
def setUp(self):
self.sut = JSONRPCServer('127.0.0.1', 31337, 'testuser', 'testpassword')
bindport = random.randint(31337, 41337)
self.sut = JSONRPCServer('127.0.0.1', bindport, 'testuser', 'testpassword')
self.vo_service = Mock()
self.sut.set_vo_service(self.vo_service)
self.client = JSONClient(b'testuser', b'testpassword', '127.0.0.1', 31337)
self.client = JSONClient(b'testuser', b'testpassword', '127.0.0.1', bindport)
self.loop = asyncio.get_event_loop()

def test_getblockheader_success(self):
Expand All @@ -20,17 +22,59 @@ def test_getblockheader_success(self):

async def test():
self.loop.create_task(self.sut.start())
await asyncio.sleep(2)
response = await self.client.call('getblockheader', '00'*32)
print(response)
await self.sut.stop()
self.loop.run_until_complete(test())
await asyncio.sleep(1)
response = await self.client.call('getblockheader', params=['00'*32])
return response

res = self.loop.run_until_complete(test())
self.assertEqual(
res,
{'error': None, 'id': 1, 'jsonrpc': '2.0', 'result': {'block': 'header'}}
)

def test_getblockheader_error_missing(self):
pass
response = None
self.vo_service.getblockheader.return_value = async_coro(response)

async def test():
self.loop.create_task(self.sut.start())
await asyncio.sleep(1)
response = await self.client.call('getblockheader', params=['00'*32])
return response

res = self.loop.run_until_complete(test())
self.assertEqual(
res,
{'error': {'code': -5, 'message': 'Block not found'}, 'id': 1, 'jsonrpc': '2.0', 'result': None}
)

def test_getblockheader_error_params(self):
pass
response = None
self.vo_service.getblockheader.return_value = async_coro(response)

async def test():
self.loop.create_task(self.sut.start())
await asyncio.sleep(1)
response1 = await self.client.call('getblockheader', params=['wrong_blockhash'])
response2 = await self.client.call('getblockheader')
return response1, response2

res, res2 = self.loop.run_until_complete(test())
self.assertEqual(
res,
{
'jsonrpc': '2.0',
'error': {
'code': -5, 'message': 'Error parsing JSON:wrong_blockhash'
},
'id': 1,
'result': None
}
)
self.assertEqual(
res2,
{'jsonrpc': '2.0', 'error': {'code': -32602, 'message': 'Invalid params'}, 'id': 1, 'result': None}
)

def test_getblock_success(self):
pass
Expand Down

0 comments on commit 27255d9

Please sign in to comment.