@@ -42,11 +42,19 @@ def thread_fuck():
4242 pass
4343
4444
45- async def test_exchangews_ohlcv (mocker ):
45+ async def test_exchangews_ohlcv (mocker , time_machine ):
4646 config = MagicMock ()
4747 ccxt_object = MagicMock ()
48- ccxt_object .watch_ohlcv = AsyncMock ()
48+
49+ async def sleeper (* args , ** kwargs ):
50+ # pass
51+ await asyncio .sleep (1 )
52+ return MagicMock ()
53+
54+ ccxt_object .watch_ohlcv = AsyncMock (side_effect = sleeper )
4955 ccxt_object .close = AsyncMock ()
56+ time_machine .move_to ("2024-11-01 01:00:00 +00:00" )
57+
5058 mocker .patch ("freqtrade.exchange.exchange_ws.ExchangeWS._start_forever" , MagicMock ())
5159
5260 exchange_ws = ExchangeWS (config , ccxt_object )
@@ -56,14 +64,33 @@ async def test_exchangews_ohlcv(mocker):
5664 assert exchange_ws ._klines_scheduled == set ()
5765
5866 exchange_ws .schedule_ohlcv ("ETH/BTC" , "1m" , CandleType .SPOT )
67+ exchange_ws .schedule_ohlcv ("XRP/BTC" , "1m" , CandleType .SPOT )
5968 await asyncio .sleep (0.5 )
6069
61- assert exchange_ws ._klines_watching == {("ETH/BTC" , "1m" , CandleType .SPOT )}
62- assert exchange_ws ._klines_scheduled == {("ETH/BTC" , "1m" , CandleType .SPOT )}
70+ assert exchange_ws ._klines_watching == {
71+ ("ETH/BTC" , "1m" , CandleType .SPOT ),
72+ ("XRP/BTC" , "1m" , CandleType .SPOT ),
73+ }
74+ assert exchange_ws ._klines_scheduled == {
75+ ("ETH/BTC" , "1m" , CandleType .SPOT ),
76+ ("XRP/BTC" , "1m" , CandleType .SPOT ),
77+ }
6378 await asyncio .sleep (0.1 )
64- assert ccxt_object .watch_ohlcv .call_count == 1
65- except Exception as e :
66- print (e )
79+ assert ccxt_object .watch_ohlcv .call_count == 2
80+ ccxt_object .watch_ohlcv .reset_mock ()
81+
82+ time_machine .shift (timedelta (minutes = 5 ))
83+ await asyncio .sleep (0.1 )
84+ exchange_ws .schedule_ohlcv ("ETH/BTC" , "1m" , CandleType .SPOT )
85+ # XRP/BTC should be cleaned up.
86+ assert exchange_ws ._klines_watching == {
87+ ("ETH/BTC" , "1m" , CandleType .SPOT ),
88+ }
89+ assert exchange_ws ._klines_scheduled == {
90+ ("ETH/BTC" , "1m" , CandleType .SPOT ),
91+ ("XRP/BTC" , "1m" , CandleType .SPOT ),
92+ }
93+
6794 finally :
6895 # Cleanup
6996 exchange_ws .cleanup ()
0 commit comments