|
20 | 20 | from tos.http import Response
|
21 | 21 | from urllib3.exceptions import ProtocolError
|
22 | 22 |
|
23 |
| -from tosfs.retry import is_retryable_exception |
| 23 | +from tosfs.retry import _get_sleep_time, is_retryable_exception |
24 | 24 |
|
25 | 25 | mock_resp = Mock(spec=requests.Response)
|
26 | 26 |
|
@@ -86,3 +86,38 @@ def test_is_retry_exception(
|
86 | 86 | expected,
|
87 | 87 | ):
|
88 | 88 | assert is_retryable_exception(exception) == expected
|
| 89 | + |
| 90 | + |
| 91 | +def test_get_sleep_time(): |
| 92 | + mock_resp = Mock(spec=requests.Response) |
| 93 | + |
| 94 | + sleep_time = 1000 |
| 95 | + |
| 96 | + mock_resp.status_code = 429 |
| 97 | + mock_resp.headers = { |
| 98 | + "Content-Type": "application/json", |
| 99 | + "Date": "Thu, 07 Nov 2024 17:19:56 GMT", |
| 100 | + "Retry-After": str(sleep_time), |
| 101 | + "Server": "TosServer", |
| 102 | + "x-tos-ec": "0004-00000007", |
| 103 | + "x-tos-id-2": "0000-00000-0000", |
| 104 | + "x-tos-request-id": "0000-0000-0000", |
| 105 | + "x-tos-server-time": "1", |
| 106 | + "Content-Length": "277", |
| 107 | + } |
| 108 | + mock_resp.iter_content = Mock(return_value=[b"chunk1", b"chunk2", b"chunk3"]) |
| 109 | + mock_resp.json = Mock(return_value={"key": "value"}) |
| 110 | + |
| 111 | + response = Response(mock_resp) |
| 112 | + |
| 113 | + err = TosServerError( |
| 114 | + response, |
| 115 | + "Exceed account external rate limit. Too much throughput in a " |
| 116 | + "short period of time, please slow down.", |
| 117 | + "ExceedAccountExternalRateLimit", |
| 118 | + "KmsJSKDKhjasdlKmsduwRETYHB", |
| 119 | + "", |
| 120 | + "0004-00000001", |
| 121 | + ) |
| 122 | + |
| 123 | + assert _get_sleep_time(err, 1) == sleep_time |
0 commit comments