From a8351775976226738452ff05ea68ca4c53fae313 Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 10 Aug 2023 21:25:50 +0200 Subject: [PATCH] Initial swat at online WS test --- tests/exchange_online/test_ccxt_ws_compat.py | 56 ++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 tests/exchange_online/test_ccxt_ws_compat.py diff --git a/tests/exchange_online/test_ccxt_ws_compat.py b/tests/exchange_online/test_ccxt_ws_compat.py new file mode 100644 index 000000000..5c1d0845a --- /dev/null +++ b/tests/exchange_online/test_ccxt_ws_compat.py @@ -0,0 +1,56 @@ +""" +Tests in this file do NOT mock network calls, so they are expected to be fluky at times. + +However, these tests aim to test ccxt compatibility, specifically regarding websockets. +""" + +import logging +from datetime import timedelta + +import pytest + +from freqtrade.enums import CandleType +from freqtrade.exchange.exchange_utils import (timeframe_to_minutes, timeframe_to_next_date, + timeframe_to_prev_date) +from freqtrade.util.datetime_helpers import dt_now +from tests.conftest import log_has_re +from tests.exchange_online.conftest import EXCHANGE_FIXTURE_TYPE, EXCHANGES + + +@pytest.mark.longrun +class TestCCXTExchangeWs: + + def test_ccxt_ohlcv(self, exchange_ws: EXCHANGE_FIXTURE_TYPE, caplog): + exch, exchangename = exchange_ws + + assert exch._ws_async is not None + pair = EXCHANGES[exchangename]['pair'] + timeframe = '1m' + pair_tf = (pair, timeframe, CandleType.SPOT) + + res = exch.refresh_latest_ohlcv([pair_tf]) + now = dt_now() - timedelta(minutes=(timeframe_to_minutes(timeframe) * 1.1)) + # Currently closed candle + curr_candle = timeframe_to_prev_date(timeframe, now) + # Currently open candle + next_candle = timeframe_to_next_date(timeframe, now) + assert pair_tf in exch._exchange_ws._klines_watching + assert pair_tf in exch._exchange_ws._klines_scheduled + assert res[pair_tf] is not None + df1 = res[pair_tf] + caplog.set_level(logging.DEBUG) + assert df1.iloc[-1]['date'] == curr_candle + + # Wait until the next candle (might be up to 1 minute). + while True: + caplog.clear() + res = exch.refresh_latest_ohlcv([pair_tf]) + df2 = res[pair_tf] + assert df2 is not None + if df2.iloc[-1]['date'] == next_candle: + break + assert df2.iloc[-1]['date'] == curr_candle + + assert log_has_re(r"watch result.*", caplog) + +