Skip to content

Commit 889eb75

Browse files
committed
improve orderbook tests
1 parent 884458f commit 889eb75

File tree

3 files changed

+42
-8
lines changed

3 files changed

+42
-8
lines changed

gdax/orderbook.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@
2020
import gdax.utils
2121

2222

23+
class OrderBookError(Exception):
24+
pass
25+
26+
2327
class OrderBook(object):
2428
def __init__(self, product_ids='ETH-USD', api_key=None, api_secret=None,
2529
passphrase=None, use_heartbeat=False,
@@ -147,6 +151,11 @@ async def handle_message(self):
147151
await self._init()
148152
return
149153

154+
msg_type = message['type']
155+
156+
if msg_type == 'error':
157+
raise OrderBookError(f'Error: {message["message"]}')
158+
150159
product_id = message['product_id']
151160
assert self._sequences[product_id] is not None
152161
sequence = message['sequence']
@@ -163,7 +172,6 @@ async def handle_message(self):
163172
await self._init()
164173
return
165174

166-
msg_type = message['type']
167175
if msg_type == 'open':
168176
self.add(product_id, message)
169177
elif msg_type == 'done' and 'price' in message:
@@ -172,16 +180,14 @@ async def handle_message(self):
172180
self.match(product_id, message)
173181
elif msg_type == 'change':
174182
self.change(product_id, message)
175-
elif msg_type == 'error':
176-
raise Exception(f'Error: {message["message"]}')
177183
elif msg_type == 'heartbeat':
178184
pass
179185
elif msg_type == 'received':
180186
pass
181187
elif msg_type == 'done':
182188
pass
183189
else:
184-
raise Exception(f'unknown message type {msg_type}')
190+
raise OrderBookError(f'unknown message type {msg_type}')
185191

186192
self._sequences[product_id] = sequence
187193
return message
@@ -344,7 +350,7 @@ def get_max_bid_depth(self, product_id):
344350
return sum([order['size'] for order in orders])
345351

346352

347-
async def run_orderbook():
353+
async def run_orderbook(): # pragma: no cover
348354
async with OrderBook(
349355
['ETH-USD', 'BTC-USD'],
350356
api_key=None,
@@ -367,7 +373,7 @@ async def run_orderbook():
367373
orderbook.get_min_ask_depth('ETH-USD'),
368374
orderbook.get_max_bid_depth('ETH-USD'))
369375

370-
if __name__ == "__main__":
376+
if __name__ == "__main__": # pragma: no cover
371377
logging.getLogger().setLevel(logging.INFO)
372378
loop = asyncio.get_event_loop()
373379
loop.run_until_complete(run_orderbook())

gdax/trader.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,7 @@ async def get_trailing_volume(self):
349349
return await self._get("/users/self/trailing-volume")
350350

351351

352-
async def main():
352+
async def main(): # pragma: no cover
353353
trader = Trader(product_id='BTC-USD',
354354
api_key=None,
355355
api_secret=None,
@@ -363,7 +363,7 @@ async def main():
363363
logging.info(res)
364364

365365

366-
if __name__ == "__main__":
366+
if __name__ == "__main__": # pragma: no cover
367367
logging.getLogger().setLevel(logging.INFO)
368368
loop = asyncio.get_event_loop()
369369
loop.run_until_complete(main())

tests/test_orderbook.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,7 @@ async def test_orderbook_advanced(self, mock_book, mock_connect):
304304
mock_connect.return_value.aenter.send_json = CoroutineMock()
305305
messages_expected = [
306306
{ # ignored
307+
"type": "received",
307308
"product_id": product_id,
308309
"sequence": sequence - 1,
309310
},
@@ -454,3 +455,30 @@ async def test_orderbook_advanced(self, mock_book, mock_connect):
454455
current_book['sequence'] += 1
455456
assert orderbook.get_current_book(product_id) != current_book
456457
# TODO
458+
459+
@patch('gdax.trader.Trader.get_product_order_book')
460+
async def test_error(self, mock_book, mock_connect):
461+
mock_connect.return_value.aenter.receive_str = CoroutineMock()
462+
mock_connect.return_value.aenter.send_json = CoroutineMock()
463+
mock_book.return_value = {'bids': [], 'asks': [], 'sequence': 1}
464+
messages_expected = [
465+
{
466+
"type": "error",
467+
"message": "test error",
468+
},
469+
{
470+
"type": "unknownmsgtype",
471+
'product_id': 'ETH-USD',
472+
'sequence': 2,
473+
},
474+
]
475+
mock_connect.return_value.aenter.receive_str.side_effect = [
476+
json.dumps(message_expected)
477+
for message_expected in messages_expected
478+
]
479+
async with gdax.orderbook.OrderBook() as orderbook:
480+
with pytest.raises(gdax.orderbook.OrderBookError):
481+
message = await orderbook.handle_message()
482+
483+
with pytest.raises(gdax.orderbook.OrderBookError):
484+
message = await orderbook.handle_message()

0 commit comments

Comments
 (0)