/test/integration/test_kraken_api_order_book_data_source.py

https://github.com/CoinAlpha/hummingbot
Python | 63 lines | 49 code | 13 blank | 1 comment | 4 complexity | 435af141607b9c5d7ea71e8938ca11fa MD5 | raw file
  1. #!/usr/bin/env python
  2. from os.path import join, realpath
  3. import sys; sys.path.insert(0, realpath(join(__file__, "../../../")))
  4. from hummingbot.connector.exchange.kraken.kraken_api_order_book_data_source import KrakenAPIOrderBookDataSource
  5. from hummingbot.core.data_type.order_book_tracker_entry import OrderBookTrackerEntry
  6. import asyncio
  7. import aiohttp
  8. import logging
  9. from typing import (
  10. Dict,
  11. Optional,
  12. Any,
  13. List,
  14. )
  15. import pandas as pd
  16. import unittest
  17. class KrakenAPIOrderBookDataSourceUnitTest(unittest.TestCase):
  18. @classmethod
  19. def setUpClass(cls):
  20. cls.ev_loop: asyncio.BaseEventLoop = asyncio.get_event_loop()
  21. cls.order_book_data_source: KrakenAPIOrderBookDataSource = KrakenAPIOrderBookDataSource(["ETHUSDC", "XBTUSDC", "ETHDAI"])
  22. def run_async(self, task):
  23. return self.ev_loop.run_until_complete(task)
  24. def test_get_active_exchange_markets(self):
  25. market_data: pd.DataFrame = self.run_async(self.order_book_data_source.get_active_exchange_markets())
  26. self.assertIn("ETHDAI", market_data.index)
  27. def test_get_trading_pairs(self):
  28. trading_pairs: List[str] = self.run_async(self.order_book_data_source.get_trading_pairs())
  29. self.assertIn("ETHDAI", trading_pairs)
  30. async def get_snapshot(self):
  31. async with aiohttp.ClientSession() as client:
  32. trading_pairs: List[str] = await self.order_book_data_source.get_trading_pairs()
  33. trading_pair: str = trading_pairs[0]
  34. try:
  35. snapshot: Dict[str, Any] = await self.order_book_data_source.get_snapshot(client, trading_pair, 1000)
  36. return snapshot
  37. except Exception:
  38. return None
  39. def test_get_snapshot(self):
  40. snapshot: Optional[Dict[str, Any]] = self.run_async(self.get_snapshot())
  41. self.assertIsNotNone(snapshot)
  42. self.assertIn(snapshot["trading_pair"], self.run_async(self.order_book_data_source.get_trading_pairs()))
  43. def test_get_tracking_pairs(self):
  44. tracking_pairs: Dict[str, OrderBookTrackerEntry] = self.run_async(self.order_book_data_source.get_tracking_pairs())
  45. self.assertIsInstance(tracking_pairs["ETHDAI"], OrderBookTrackerEntry)
  46. def main():
  47. logging.basicConfig(level=logging.INFO)
  48. unittest.main()
  49. if __name__ == "__main__":
  50. main()