diff --git a/requirements.txt b/requirements.txt index 5f21a2d521496e2dea600d6d73768c9fe966a1bc..c89e16b0dec9bd79da8bd56cd430b2c0eaba8bd4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,4 +4,4 @@ python-magic pyyaml requests sentry-sdk >= 2 -tenacity +tenacity >= 8.4.2 diff --git a/swh/core/tests/test_retry.py b/swh/core/tests/test_retry.py index f976384b6a6f5ddc027e4fdc32260baa84454199..3875d03666413fde62de0b828ac47612e0179f38 100644 --- a/swh/core/tests/test_retry.py +++ b/swh/core/tests/test_retry.py @@ -1,8 +1,9 @@ -# Copyright (C) 2023 The Software Heritage developers +# Copyright (C) 2023-2024 The Software Heritage developers # See the AUTHORS file at the top-level directory of this distribution # License: GNU General Public License version 3, or any later version # See top-level LICENSE file for more information + import pytest import requests from requests.status_codes import codes @@ -20,6 +21,11 @@ def make_request(): return response +@pytest.fixture +def mock_sleep(mocker): + return mocker.patch("time.sleep") + + def assert_sleep_calls(mocker, mock_sleep, sleep_params): mock_sleep.assert_has_calls([mocker.call(param) for param in sleep_params]) @@ -33,7 +39,7 @@ def assert_sleep_calls(mocker, mock_sleep, sleep_params): codes.service_unavailable, ], ) -def test_http_retry(requests_mock, mocker, status_code): +def test_http_retry(requests_mock, mocker, mock_sleep, status_code): data = {"result": {}} requests_mock.get( TEST_URL, @@ -44,8 +50,6 @@ def test_http_retry(requests_mock, mocker, status_code): ], ) - mock_sleep = mocker.patch.object(make_request.retry, "sleep") - response = make_request() assert_sleep_calls(mocker, mock_sleep, [1, WAIT_EXP_BASE]) @@ -53,14 +57,12 @@ def test_http_retry(requests_mock, mocker, status_code): assert response.json() == data -def test_http_retry_max_attemps(requests_mock, mocker): +def test_http_retry_max_attemps(requests_mock, mocker, mock_sleep): requests_mock.get( TEST_URL, [{"status_code": codes.too_many_requests}] * (MAX_NUMBER_ATTEMPTS), ) - mock_sleep = mocker.patch.object(make_request.retry, "sleep") - with pytest.raises(requests.exceptions.HTTPError) as e: make_request() @@ -80,7 +82,7 @@ def make_request_wait_fixed(): return response -def test_http_retry_wait_fixed(requests_mock, mocker): +def test_http_retry_wait_fixed(requests_mock, mocker, mock_sleep): requests_mock.get( TEST_URL, [ @@ -90,8 +92,6 @@ def test_http_retry_wait_fixed(requests_mock, mocker): ], ) - mock_sleep = mocker.patch.object(make_request_wait_fixed.retry, "sleep") - make_request_wait_fixed() assert_sleep_calls(mocker, mock_sleep, [WAIT_EXP_BASE] * 2)