You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
freqtrade/tests/test_rate_limiter_sleep_mod...

36 lines
937 B

import pytest
import os
import time
from unittest import mock
from adapters.ccxt_shim.rate_limiter import RateLimiter
@pytest.fixture
def rate_limiter_sleep():
with mock.patch.dict(
os.environ,
{
"FT_RATE_LIMIT_PER_MINUTE": "60", # 1 token per second
"FT_RATE_LIMIT_MODE": "sleep",
"FT_RATE_LIMIT_DISABLE": "0",
},
):
yield RateLimiter()
def test_sleep_mode_delays(rate_limiter_sleep):
# Drain 60 tokens
for _ in range(60):
rate_limiter_sleep.allow("test_drain")
start_time = time.time()
# 61st call should sleep for approx 1s (to get 1 token)
# We cheat/check token logic: refill rate is 1/sec.
# Cost 1. Needed 1. Time = 1s.
rate_limiter_sleep.allow("test_sleep")
elapsed = time.time() - start_time
assert elapsed >= 0.9 # Allow slight timing jitter
assert elapsed < 2.0 # Shouldn't sleep excessively