Skip to content

Commit 1fbc2a0

Browse files
committed
Remove access to private attributes
1 parent 999709d commit 1fbc2a0

File tree

1 file changed

+79
-108
lines changed

1 file changed

+79
-108
lines changed

packages/smithy-core/tests/functional/test_retries.py

Lines changed: 79 additions & 108 deletions
Original file line numberDiff line numberDiff line change
@@ -6,179 +6,150 @@
66
from smithy_core.retries import StandardRetryQuota, StandardRetryStrategy
77

88

9-
def get_retry_quota(strategy: StandardRetryStrategy) -> int:
10-
return strategy._retry_quota.available_capacity # pyright: ignore[reportPrivateUsage]
11-
12-
13-
async def test_standard_retry_eventually_succeeds() -> None:
14-
strategy = StandardRetryStrategy(max_attempts=3)
9+
def test_standard_retry_eventually_succeeds() -> None:
10+
retry_quota = StandardRetryQuota()
11+
strategy = StandardRetryStrategy(max_attempts=3, retry_quota=retry_quota)
1512
error = CallError(is_retry_safe=True)
1613

17-
token = await strategy.acquire_initial_retry_token()
14+
token = strategy.acquire_initial_retry_token()
1815
assert token.retry_count == 0
19-
assert get_retry_quota(strategy) == 500
16+
assert retry_quota.available_capacity == 500
2017

21-
token = await strategy.refresh_retry_token_for_retry(
22-
token_to_renew=token, error=error
23-
)
18+
token = strategy.refresh_retry_token_for_retry(token_to_renew=token, error=error)
2419
assert token.retry_count == 1
25-
assert get_retry_quota(strategy) == 495
20+
assert retry_quota.available_capacity == 495
2621

27-
token = await strategy.refresh_retry_token_for_retry(
28-
token_to_renew=token, error=error
29-
)
22+
token = strategy.refresh_retry_token_for_retry(token_to_renew=token, error=error)
3023
assert token.retry_count == 2
31-
assert get_retry_quota(strategy) == 490
24+
assert retry_quota.available_capacity == 490
3225

33-
await strategy.record_success(token=token)
34-
assert get_retry_quota(strategy) == 495
26+
strategy.record_success(token=token)
27+
assert retry_quota.available_capacity == 495
3528

3629

37-
async def test_standard_retry_fails_due_to_max_attempts() -> None:
38-
strategy = StandardRetryStrategy(max_attempts=3)
30+
def test_standard_retry_fails_due_to_max_attempts() -> None:
31+
retry_quota = StandardRetryQuota()
32+
strategy = StandardRetryStrategy(max_attempts=3, retry_quota=retry_quota)
3933
error = CallError(is_retry_safe=True)
4034

41-
token = await strategy.acquire_initial_retry_token()
35+
token = strategy.acquire_initial_retry_token()
4236

43-
token = await strategy.refresh_retry_token_for_retry(
44-
token_to_renew=token, error=error
45-
)
37+
token = strategy.refresh_retry_token_for_retry(token_to_renew=token, error=error)
4638
assert token.retry_count == 1
47-
assert get_retry_quota(strategy) == 495
39+
assert retry_quota.available_capacity == 495
4840

49-
token = await strategy.refresh_retry_token_for_retry(
50-
token_to_renew=token, error=error
51-
)
41+
token = strategy.refresh_retry_token_for_retry(token_to_renew=token, error=error)
5242
assert token.retry_count == 2
53-
assert get_retry_quota(strategy) == 490
43+
assert retry_quota.available_capacity == 490
5444

5545
with pytest.raises(RetryError, match="maximum number of allowed attempts"):
56-
await strategy.refresh_retry_token_for_retry(token_to_renew=token, error=error)
57-
assert get_retry_quota(strategy) == 490
46+
strategy.refresh_retry_token_for_retry(token_to_renew=token, error=error)
47+
assert retry_quota.available_capacity == 490
5848

5949

60-
async def test_retry_quota_exhausted_after_single_retry(
61-
monkeypatch: pytest.MonkeyPatch,
62-
) -> None:
63-
monkeypatch.setattr(StandardRetryQuota, "INITIAL_RETRY_TOKENS", 5, raising=False)
64-
strategy = StandardRetryStrategy(max_attempts=3)
50+
def test_retry_quota_exhausted_after_single_retry() -> None:
51+
retry_quota = StandardRetryQuota(initial_capacity=5)
52+
strategy = StandardRetryStrategy(max_attempts=3, retry_quota=retry_quota)
6553
error = CallError(is_retry_safe=True)
6654

67-
token = await strategy.acquire_initial_retry_token()
68-
assert get_retry_quota(strategy) == 5
55+
token = strategy.acquire_initial_retry_token()
56+
assert retry_quota.available_capacity == 5
6957

70-
token = await strategy.refresh_retry_token_for_retry(
71-
token_to_renew=token, error=error
72-
)
58+
token = strategy.refresh_retry_token_for_retry(token_to_renew=token, error=error)
7359
assert token.retry_count == 1
74-
assert get_retry_quota(strategy) == 0
60+
assert retry_quota.available_capacity == 0
7561

7662
with pytest.raises(RetryError, match="Retry quota exceeded"):
77-
await strategy.refresh_retry_token_for_retry(token_to_renew=token, error=error)
78-
assert get_retry_quota(strategy) == 0
63+
strategy.refresh_retry_token_for_retry(token_to_renew=token, error=error)
64+
assert retry_quota.available_capacity == 0
7965

8066

81-
async def test_retry_quota_prevents_retries_when_zero(
82-
monkeypatch: pytest.MonkeyPatch,
83-
) -> None:
84-
monkeypatch.setattr(StandardRetryQuota, "INITIAL_RETRY_TOKENS", 0, raising=False)
85-
strategy = StandardRetryStrategy(max_attempts=3)
67+
def test_retry_quota_prevents_retries_when_zero() -> None:
68+
retry_quota = StandardRetryQuota(initial_capacity=0)
69+
strategy = StandardRetryStrategy(max_attempts=3, retry_quota=retry_quota)
8670
error = CallError(is_retry_safe=True)
8771

88-
token = await strategy.acquire_initial_retry_token()
89-
assert get_retry_quota(strategy) == 0
72+
token = strategy.acquire_initial_retry_token()
73+
assert retry_quota.available_capacity == 0
9074

9175
with pytest.raises(RetryError, match="Retry quota exceeded"):
92-
await strategy.refresh_retry_token_for_retry(token_to_renew=token, error=error)
93-
assert get_retry_quota(strategy) == 0
76+
strategy.refresh_retry_token_for_retry(token_to_renew=token, error=error)
77+
assert retry_quota.available_capacity == 0
9478

9579

96-
async def test_retry_quota_stops_retries_when_exhauste(
97-
monkeypatch: pytest.MonkeyPatch,
98-
) -> None:
99-
monkeypatch.setattr(StandardRetryQuota, "INITIAL_RETRY_TOKENS", 10, raising=False)
100-
strategy = StandardRetryStrategy(max_attempts=5)
80+
def test_retry_quota_stops_retries_when_exhausted() -> None:
81+
retry_quota = StandardRetryQuota(initial_capacity=10)
82+
strategy = StandardRetryStrategy(max_attempts=5, retry_quota=retry_quota)
10183
error = CallError(is_retry_safe=True)
10284

103-
token = await strategy.acquire_initial_retry_token()
104-
assert get_retry_quota(strategy) == 10
85+
token = strategy.acquire_initial_retry_token()
86+
assert retry_quota.available_capacity == 10
10587

106-
token = await strategy.refresh_retry_token_for_retry(
107-
token_to_renew=token, error=error
108-
)
109-
assert get_retry_quota(strategy) == 5
88+
token = strategy.refresh_retry_token_for_retry(token_to_renew=token, error=error)
89+
assert retry_quota.available_capacity == 5
11090

111-
token = await strategy.refresh_retry_token_for_retry(
112-
token_to_renew=token, error=error
113-
)
114-
assert get_retry_quota(strategy) == 0
91+
token = strategy.refresh_retry_token_for_retry(token_to_renew=token, error=error)
92+
assert retry_quota.available_capacity == 0
11593

11694
with pytest.raises(RetryError, match="Retry quota exceeded"):
117-
await strategy.refresh_retry_token_for_retry(token_to_renew=token, error=error)
118-
assert get_retry_quota(strategy) == 0
95+
strategy.refresh_retry_token_for_retry(token_to_renew=token, error=error)
96+
assert retry_quota.available_capacity == 0
11997

12098

121-
async def test_retry_quota_recovers_after_successful_responses(
122-
monkeypatch: pytest.MonkeyPatch,
123-
) -> None:
124-
monkeypatch.setattr(StandardRetryQuota, "INITIAL_RETRY_TOKENS", 15, raising=False)
125-
strategy = StandardRetryStrategy(max_attempts=5)
99+
def test_retry_quota_recovers_after_successful_responses() -> None:
100+
retry_quota = StandardRetryQuota(initial_capacity=15)
101+
strategy = StandardRetryStrategy(max_attempts=5, retry_quota=retry_quota)
126102
error = CallError(is_retry_safe=True)
127103

128104
# First operation: 2 retries then success
129-
token = await strategy.acquire_initial_retry_token()
130-
assert get_retry_quota(strategy) == 15
105+
token = strategy.acquire_initial_retry_token()
106+
assert retry_quota.available_capacity == 15
131107

132-
token = await strategy.refresh_retry_token_for_retry(
133-
token_to_renew=token, error=error
134-
)
135-
assert get_retry_quota(strategy) == 10
108+
token = strategy.refresh_retry_token_for_retry(token_to_renew=token, error=error)
109+
assert retry_quota.available_capacity == 10
136110

137-
token = await strategy.refresh_retry_token_for_retry(
138-
token_to_renew=token, error=error
139-
)
140-
assert get_retry_quota(strategy) == 5
111+
token = strategy.refresh_retry_token_for_retry(token_to_renew=token, error=error)
112+
assert retry_quota.available_capacity == 5
141113

142-
await strategy.record_success(token=token)
143-
assert get_retry_quota(strategy) == 10
114+
strategy.record_success(token=token)
115+
assert retry_quota.available_capacity == 10
144116

145117
# Second operation: 1 retry then success
146-
token = await strategy.acquire_initial_retry_token()
147-
token = await strategy.refresh_retry_token_for_retry(
148-
token_to_renew=token, error=error
149-
)
150-
assert get_retry_quota(strategy) == 5
151-
await strategy.record_success(token=token)
152-
assert get_retry_quota(strategy) == 10
118+
token = strategy.acquire_initial_retry_token()
119+
token = strategy.refresh_retry_token_for_retry(token_to_renew=token, error=error)
120+
assert retry_quota.available_capacity == 5
121+
strategy.record_success(token=token)
122+
assert retry_quota.available_capacity == 10
153123

154124

155125
async def test_retry_quota_shared_correctly_across_multiple_operations() -> None:
156-
strategy = StandardRetryStrategy(max_attempts=5)
126+
retry_quota = StandardRetryQuota()
127+
strategy = StandardRetryStrategy(max_attempts=5, retry_quota=retry_quota)
157128
error = CallError(is_retry_safe=True)
158129

159130
# Operation 1
160-
op1_token = await strategy.acquire_initial_retry_token()
161-
assert get_retry_quota(strategy) == 500
131+
op1_token = strategy.acquire_initial_retry_token()
132+
assert retry_quota.available_capacity == 500
162133

163-
op1_token = await strategy.refresh_retry_token_for_retry(
134+
op1_token = strategy.refresh_retry_token_for_retry(
164135
token_to_renew=op1_token, error=error
165136
)
166-
assert get_retry_quota(strategy) == 495
137+
assert retry_quota.available_capacity == 495
167138

168-
op1_token = await strategy.refresh_retry_token_for_retry(
139+
op1_token = strategy.refresh_retry_token_for_retry(
169140
token_to_renew=op1_token, error=error
170141
)
171-
assert get_retry_quota(strategy) == 490
142+
assert retry_quota.available_capacity == 490
172143

173144
# Operation 2 (while operation 1 is in progress)
174-
op2_token = await strategy.acquire_initial_retry_token()
175-
op2_token = await strategy.refresh_retry_token_for_retry(
145+
op2_token = strategy.acquire_initial_retry_token()
146+
op2_token = strategy.refresh_retry_token_for_retry(
176147
token_to_renew=op2_token, error=error
177148
)
178-
assert get_retry_quota(strategy) == 485
149+
assert retry_quota.available_capacity == 485
179150

180-
await strategy.record_success(token=op2_token)
181-
assert get_retry_quota(strategy) == 490
151+
strategy.record_success(token=op2_token)
152+
assert retry_quota.available_capacity == 490
182153

183-
await strategy.record_success(token=op1_token)
184-
assert get_retry_quota(strategy) == 495
154+
strategy.record_success(token=op1_token)
155+
assert retry_quota.available_capacity == 495

0 commit comments

Comments
 (0)