def test_register_channel(self): # All channels go through the same process so no need to create # separate tests. name = self.exchange.TICKER channel = self.exchange.channels[name] ex_name = channel['ex_name'] id = self.test_market['id'] reply = { 'type': 'subscriptions', 'channels': [{ 'name': ex_name, 'product_ids': [id] }] } websocket_mock = AsyncContextManager() self.exchange.connections[websocket_mock] = [] self.exchange.register_channel(reply, websocket_mock) correct_registration = { 'request': { 'type': 'subscribe', 'channels': [{ 'name': ex_name, 'product_ids': [id] }], }, 'channel_id': 0, 'ex_channel_id': (ex_name, id), 'name': name, 'symbol': self.test_market['symbol'] } self.assertEqual([correct_registration], self.exchange.connections[websocket_mock])
def test_register_channel(self): """Ticker, trades, order_book""" name = self.exchange.TICKER ex_name = self.exchange.channels[name]['ex_name'] id = self.test_market['id'] reply = {'event': 'subscribed', 'subscriptions': {ex_name: [id]}} websocket_mock = AsyncContextManager() self.exchange.connections[websocket_mock] = [] self.exchange.register_channel(reply, websocket_mock) correct_registration = { 'request': { 'action': 'subscribe', 'channels': [{ 'name': ex_name, 'markets': [id] }], }, 'channel_id': 0, 'ex_channel_id': (ex_name, id), 'name': name, 'symbol': self.test_market['symbol'] } self.assertEqual([correct_registration], self.exchange.connections[websocket_mock])
def test_register_channel(self): """Ticker, trades, order_book""" name = self.exchange.TICKER ex_name = self.exchange.channels[name]['ex_name'] id = self.test_market['info']['wsname'] ex_channel_id = 0 reply = { "channelID": ex_channel_id, "channelName": ex_name, "event": "subscriptionStatus", "pair": id, "status": "subscribed", "subscription": { "name": ex_name } } websocket_mock = AsyncContextManager() self.exchange.connections[websocket_mock] = [] self.exchange.register_channel(reply, websocket_mock) correct_registration = [{ 'request': { 'event': 'subscribe', 'pair': id, 'subscription': reply['subscription'] }, 'channel_id': 0, 'ex_channel_id': ex_channel_id, 'name': name, 'ex_name': ex_name, 'symbol': self.test_market['symbol'] }] self.assertEqual(correct_registration, self.exchange.connections[websocket_mock])
def test_register_ticker_or_trades_channel(self): """This stands for both ticker and trades because they're formatted the same""" channel = self.exchange.channels[self.exchange.TICKER] ex_name = channel['ex_name'] ex_channel_id = 0 id = self.test_market['id'] reply = { "event": "subscribed", "channel": ex_name, "chanId": ex_channel_id, "symbol": id, "pair": id[1:] # Remove the preceding `t` } websocket_mock = AsyncContextManager() self.exchange.connections[websocket_mock] = [] self.exchange.register_channel(reply, websocket_mock) correct_registration = { 'request': { 'event': 'subscribe', 'channel': ex_name, 'symbol': id }, # We know the first channel id is always 0. # See exchange.Exchange.claim_channel_id() for implementation. 'channel_id': 0, 'ex_channel_id': ex_channel_id, 'name': self.exchange.TICKER, 'symbol': self.test_market['symbol'] } self.assertEqual([correct_registration], self.exchange.connections[websocket_mock])
def test_register_ohlcvs_channel(self): channel = self.exchange.channels[self.exchange.OHLCVS] ex_name = channel['ex_name'] ex_channel_id = 0 id = self.test_market['id'] timeframe = '1m' ex_timeframe = self.exchange.timeframes[timeframe] key = f'trade:{ex_timeframe}:{id}' reply = { "event": "subscribed", "channel": ex_name, "chanId": ex_channel_id, "key": key } websocket_mock = AsyncContextManager() self.exchange.connections[websocket_mock] = [] self.exchange.register_channel(reply, websocket_mock) correct_channel = { 'request': { 'event': 'subscribe', 'channel': ex_name, 'key': key }, # We know the first channel id is always 0. # See exchange.Exchange.claim_channel_id() for implementation. 'channel_id': 0, 'ex_channel_id': ex_channel_id, 'name': self.exchange.OHLCVS, 'symbol': self.test_market['symbol'], 'timeframe': timeframe } self.assertEqual([correct_channel], self.exchange.connections[websocket_mock])
def test_claim_nonfirst_channel_id(self): channel_id = 0 self.exchange.connections = { AsyncContextManager(): [{ 'channel_id': channel_id }] } self.assertEqual(channel_id + 1, self.exchange.claim_channel_id())
def test_register_order_book_channel(self): channel = self.exchange.channels[self.exchange.ORDER_BOOK] ex_name = channel['ex_name'] ex_channel_id = 0 id = self.test_market['id'] depth = 100 reply = { "event": "subscribed", "channel": ex_name, "chanId": ex_channel_id, "symbol": id, "prec": "P0", "freq": "F0", "len": depth } websocket_mock = AsyncContextManager() self.exchange.connections[websocket_mock] = [] self.exchange.register_channel(reply, websocket_mock) correct_channel = { 'request': { 'event': 'subscribe', 'channel': ex_name, 'symbol': id, # These values are hardcoded in Bitfinex.subscribe_order_book "prec": "P0", "freq": "F0", "len": depth }, # We know the first channel id is always 0. # See exchange.Exchange.claim_channel_id() for implementation. 'channel_id': 0, 'ex_channel_id': ex_channel_id, 'name': self.exchange.ORDER_BOOK, 'symbol': self.test_market['symbol'], } self.assertEqual([correct_channel], self.exchange.connections[websocket_mock])
def test_register_ohlcvs_channel(self): """OHLCVS only""" name = self.exchange.OHLCVS ex_name = self.exchange.channels[name]['ex_name'] id = self.test_market['id'] timeframe = '1m' ex_timeframe = self.exchange.timeframes[timeframe] reply = { 'event': 'subscribed', 'subscriptions': { ex_name: { ex_timeframe: [id] } } } websocket_mock = AsyncContextManager() self.exchange.connections[websocket_mock] = [] self.exchange.register_channel(reply, websocket_mock) correct_registration = { 'request': { 'action': 'subscribe', 'channels': [{ 'name': ex_name, 'markets': [id], 'interval': ex_timeframe }], }, 'channel_id': 0, 'ex_channel_id': (ex_name, id), 'name': name, 'symbol': self.test_market['symbol'], 'timeframe': timeframe } self.assertEqual([correct_registration], self.exchange.connections[websocket_mock])
def test_register_ohlcvs_channel(self): """OHLCVS only""" name = self.exchange.OHLCVS ex_name = self.exchange.channels[name]['ex_name'] ex_channel_id = 0 id = self.test_market['info']['wsname'] ex_timeframe = 5 timeframe = '5m' reply = { "channelID": ex_channel_id, "channelName": ex_name, "event": "subscriptionStatus", "pair": id, "status": "subscribed", "subscription": { "name": ex_name, "interval": ex_timeframe } } websocket_mock = AsyncContextManager() self.exchange.connections[websocket_mock] = [] self.exchange.register_channel(reply, websocket_mock) correct_registration = [{ 'request': { 'event': 'subscribe', 'pair': id, 'subscription': reply['subscription'] }, 'channel_id': 0, 'ex_channel_id': ex_channel_id, 'name': name, 'ex_name': ex_name, 'symbol': self.test_market['symbol'], 'timeframe': timeframe }] self.assertEqual(correct_registration, self.exchange.connections[websocket_mock])
def test_get_channels_nonempty_connections(self): channel = {'channel_id': 0} self.exchange.connections = {AsyncContextManager(): [channel]} self.assertEqual([channel], self.exchange.get_channels())