From 987bf9ec981096a755d27317e1f019543e405bc4 Mon Sep 17 00:00:00 2001
From: Antoine Lambert <anlambert@softwareheritage.org>
Date: Thu, 27 Jun 2024 11:11:16 +0200
Subject: [PATCH] test_retry: Fix mocking of sleep calls with tenacity 8.4.2

Latest tenacity release adds some internal changes that broke the
mocking of sleep calls in tests.

Fix it by directly mocking time.sleep (was not working previously).
---
 requirements.txt             |  2 +-
 swh/core/tests/test_retry.py | 20 ++++++++++----------
 2 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/requirements.txt b/requirements.txt
index 5f21a2d5..c89e16b0 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 f976384b..3875d036 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)
-- 
GitLab