From 6b96d4d14589fdf221d35c33d32bcdb811f8e3fc Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 5 Jan 2025 13:00:47 +0100 Subject: [PATCH] test: improve exchange_ws tests --- tests/exchange/test_exchange_ws.py | 41 +++++++++++++++++++++++++----- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/tests/exchange/test_exchange_ws.py b/tests/exchange/test_exchange_ws.py index 8b97ae1b8..9c069f3f9 100644 --- a/tests/exchange/test_exchange_ws.py +++ b/tests/exchange/test_exchange_ws.py @@ -42,11 +42,19 @@ def patch_eventloop_threading(exchange): pass -async def test_exchangews_ohlcv(mocker): +async def test_exchangews_ohlcv(mocker, time_machine): config = MagicMock() ccxt_object = MagicMock() - ccxt_object.watch_ohlcv = AsyncMock() + + async def sleeper(*args, **kwargs): + # pass + await asyncio.sleep(1) + return MagicMock() + + ccxt_object.watch_ohlcv = AsyncMock(side_effect=sleeper) ccxt_object.close = AsyncMock() + time_machine.move_to("2024-11-01 01:00:00 +00:00") + mocker.patch("freqtrade.exchange.exchange_ws.ExchangeWS._start_forever", MagicMock()) exchange_ws = ExchangeWS(config, ccxt_object) @@ -56,14 +64,33 @@ async def test_exchangews_ohlcv(mocker): assert exchange_ws._klines_scheduled == set() exchange_ws.schedule_ohlcv("ETH/BTC", "1m", CandleType.SPOT) + exchange_ws.schedule_ohlcv("XRP/BTC", "1m", CandleType.SPOT) await asyncio.sleep(0.5) - assert exchange_ws._klines_watching == {("ETH/BTC", "1m", CandleType.SPOT)} - assert exchange_ws._klines_scheduled == {("ETH/BTC", "1m", CandleType.SPOT)} + assert exchange_ws._klines_watching == { + ("ETH/BTC", "1m", CandleType.SPOT), + ("XRP/BTC", "1m", CandleType.SPOT), + } + assert exchange_ws._klines_scheduled == { + ("ETH/BTC", "1m", CandleType.SPOT), + ("XRP/BTC", "1m", CandleType.SPOT), + } await asyncio.sleep(0.1) - assert ccxt_object.watch_ohlcv.call_count == 1 - except Exception as e: - print(e) + assert ccxt_object.watch_ohlcv.call_count == 2 + ccxt_object.watch_ohlcv.reset_mock() + + time_machine.shift(timedelta(minutes=5)) + await asyncio.sleep(0.1) + exchange_ws.schedule_ohlcv("ETH/BTC", "1m", CandleType.SPOT) + # XRP/BTC should be cleaned up. + assert exchange_ws._klines_watching == { + ("ETH/BTC", "1m", CandleType.SPOT), + } + assert exchange_ws._klines_scheduled == { + ("ETH/BTC", "1m", CandleType.SPOT), + ("XRP/BTC", "1m", CandleType.SPOT), + } + finally: # Cleanup exchange_ws.cleanup()