Example #1
0
    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])
Example #2
0
    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])
Example #3
0
    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])
Example #4
0
    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])
Example #5
0
    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])
Example #6
0
    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())
Example #7
0
    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])
Example #8
0
    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])
Example #9
0
    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])
Example #10
0
    def test_get_channels_nonempty_connections(self):
        channel = {'channel_id': 0}
        self.exchange.connections = {AsyncContextManager(): [channel]}

        self.assertEqual([channel], self.exchange.get_channels())