test: add test coverage for unwatch_ohlcv

This commit is contained in:
Matthias
2025-02-11 08:55:20 +01:00
parent 44d798239d
commit 78d213a8a0
+11 -1
View File
@@ -1,9 +1,12 @@
import asyncio import asyncio
import logging
import threading import threading
from datetime import timedelta from datetime import timedelta
from time import sleep from time import sleep
from unittest.mock import AsyncMock, MagicMock from unittest.mock import AsyncMock, MagicMock
from ccxt import NotSupported
from freqtrade.enums import CandleType from freqtrade.enums import CandleType
from freqtrade.exchange.exchange_ws import ExchangeWS from freqtrade.exchange.exchange_ws import ExchangeWS
from ft_client.test_client.test_rest_client import log_has_re from ft_client.test_client.test_rest_client import log_has_re
@@ -61,15 +64,18 @@ def patch_eventloop_threading(exchange):
pass pass
async def test_exchangews_ohlcv(mocker, time_machine): async def test_exchangews_ohlcv(mocker, time_machine, caplog):
config = MagicMock() config = MagicMock()
ccxt_object = MagicMock() ccxt_object = MagicMock()
caplog.set_level(logging.DEBUG)
async def sleeper(*args, **kwargs): async def sleeper(*args, **kwargs):
# pass # pass
await asyncio.sleep(0.12) await asyncio.sleep(0.12)
return MagicMock() return MagicMock()
ccxt_object.un_watch_ohlcv_for_symbols = AsyncMock(side_effect=NotSupported)
ccxt_object.watch_ohlcv = AsyncMock(side_effect=sleeper) ccxt_object.watch_ohlcv = AsyncMock(side_effect=sleeper)
ccxt_object.close = AsyncMock() ccxt_object.close = AsyncMock()
time_machine.move_to("2024-11-01 01:00:02 +00:00") time_machine.move_to("2024-11-01 01:00:02 +00:00")
@@ -101,11 +107,14 @@ async def test_exchangews_ohlcv(mocker, time_machine):
time_machine.shift(timedelta(minutes=5)) time_machine.shift(timedelta(minutes=5))
exchange_ws.schedule_ohlcv("ETH/BTC", "1m", CandleType.SPOT) exchange_ws.schedule_ohlcv("ETH/BTC", "1m", CandleType.SPOT)
await asyncio.sleep(1) await asyncio.sleep(1)
assert log_has_re("un_watch_ohlcv_for_symbols not supported: ", caplog)
# XRP/BTC should be cleaned up. # XRP/BTC should be cleaned up.
assert exchange_ws._klines_watching == { assert exchange_ws._klines_watching == {
("ETH/BTC", "1m", CandleType.SPOT), ("ETH/BTC", "1m", CandleType.SPOT),
} }
# Cleanup happened. # Cleanup happened.
ccxt_object.un_watch_ohlcv_for_symbols = AsyncMock(side_effect=ValueError)
exchange_ws.schedule_ohlcv("ETH/BTC", "1m", CandleType.SPOT) exchange_ws.schedule_ohlcv("ETH/BTC", "1m", CandleType.SPOT)
assert exchange_ws._klines_watching == { assert exchange_ws._klines_watching == {
("ETH/BTC", "1m", CandleType.SPOT), ("ETH/BTC", "1m", CandleType.SPOT),
@@ -117,6 +126,7 @@ async def test_exchangews_ohlcv(mocker, time_machine):
finally: finally:
# Cleanup # Cleanup
exchange_ws.cleanup() exchange_ws.cleanup()
assert log_has_re("Exception in _unwatch_ohlcv", caplog)
async def test_exchangews_get_ohlcv(mocker, caplog): async def test_exchangews_get_ohlcv(mocker, caplog):