Skip to content
This repository was archived by the owner on Mar 31, 2026. It is now read-only.

Commit 3a489ad

Browse files
authored
tests: add retry conf test cases for conditionally idempotent operations with no preconditions (#566)
This adds test cases to the retry strategy conformance tests: - Scenario 3 - for conditionally idempotent operations with retryable error codes, libraries **don't** retry when preconditions are absent - Add test schema for scenario 3 and align json file with [conformance-tests/retry_tests.json](https://github.com/googleapis/conformance-tests/blob/master/storage/v1/retry_tests.json)
1 parent 57cf3a1 commit 3a489ad

2 files changed

Lines changed: 53 additions & 216 deletions

File tree

tests/conformance/retry_strategy_test_data.json

Lines changed: 52 additions & 215 deletions
Original file line numberDiff line numberDiff line change
@@ -2,247 +2,84 @@
22
"retryStrategyTests": [
33
{
44
"id": 1,
5-
"description": "always idempotent",
5+
"description": "always_idempotent",
66
"cases": [
77
{
8-
"instructions": [
9-
"return-503",
10-
"return-503"
11-
]
8+
"instructions": ["return-503", "return-503"]
129
}
1310
],
1411
"methods": [
15-
{
16-
"name": "storage.bucket_acl.get",
17-
"resources": [
18-
"BUCKET"
19-
]
20-
},
21-
{
22-
"name": "storage.bucket_acl.list",
23-
"resources": [
24-
"BUCKET"
25-
]
26-
},
27-
{
28-
"name": "storage.buckets.delete",
29-
"resources": [
30-
"BUCKET",
31-
"OBJECT"
32-
]
33-
},
34-
{
35-
"name": "storage.buckets.get",
36-
"resources": [
37-
"BUCKET"
38-
]
39-
},
40-
{
41-
"name": "storage.buckets.getIamPolicy",
42-
"resources": [
43-
"BUCKET"
44-
]
45-
},
46-
{
47-
"name": "storage.buckets.insert",
48-
"resources": []
49-
},
50-
{
51-
"name": "storage.buckets.list",
52-
"resources": [
53-
"BUCKET"
54-
]
55-
},
56-
{
57-
"name": "storage.buckets.lockRetentionPolicy",
58-
"resources": [
59-
"BUCKET"
60-
]
61-
},
62-
{
63-
"name": "storage.buckets.testIamPermissions",
64-
"resources": [
65-
"BUCKET"
66-
]
67-
},
68-
{
69-
"name": "storage.default_object_acl.get",
70-
"resources": [
71-
"BUCKET",
72-
"OBJECT"
73-
]
74-
},
75-
{
76-
"name": "storage.default_object_acl.list",
77-
"resources": [
78-
"BUCKET",
79-
"OBJECT"
80-
]
81-
},
82-
{
83-
"name": "storage.hmacKey.delete",
84-
"resources": []
85-
},
86-
{
87-
"name": "storage.hmacKey.get",
88-
"resources": []
89-
},
90-
{
91-
"name": "storage.hmacKey.list",
92-
"resources": []
93-
},
94-
{
95-
"name": "storage.notifications.delete",
96-
"resources": [
97-
"BUCKET",
98-
"NOTIFICATION"
99-
]
100-
},
101-
{
102-
"name": "storage.notifications.get",
103-
"resources": [
104-
"BUCKET",
105-
"NOTIFICATION"
106-
]
107-
},
108-
{
109-
"name": "storage.notifications.list",
110-
"resources": [
111-
"BUCKET",
112-
"NOTIFICATION"
113-
]
114-
},
115-
{
116-
"name": "storage.object_acl.get",
117-
"resources": [
118-
"BUCKET",
119-
"OBJECT"
120-
]
121-
},
122-
{
123-
"name": "storage.object_acl.list",
124-
"resources": [
125-
"BUCKET",
126-
"OBJECT"
127-
]
128-
},
129-
{
130-
"name": "storage.objects.get",
131-
"resources": [
132-
"BUCKET",
133-
"OBJECT"
134-
]
135-
},
136-
{
137-
"name": "storage.objects.list",
138-
"resources": [
139-
"BUCKET",
140-
"OBJECT"
141-
]
142-
},
143-
{
144-
"name": "storage.serviceaccount.get",
145-
"resources": []
146-
}
12+
{"name": "storage.bucket_acl.get", "resources": ["BUCKET"]},
13+
{"name": "storage.bucket_acl.list", "resources": ["BUCKET"]},
14+
{"name": "storage.buckets.delete", "resources": ["BUCKET"]},
15+
{"name": "storage.buckets.get", "resources": ["BUCKET"]},
16+
{"name": "storage.buckets.getIamPolicy", "resources": ["BUCKET"]},
17+
{"name": "storage.buckets.insert", "resources": []},
18+
{"name": "storage.buckets.list", "resources": ["BUCKET"]},
19+
{"name": "storage.buckets.lockRetentionPolicy", "resources": ["BUCKET"]},
20+
{"name": "storage.buckets.testIamPermissions", "resources": ["BUCKET"]},
21+
{"name": "storage.default_object_acl.get", "resources": ["BUCKET"]},
22+
{"name": "storage.default_object_acl.list", "resources": ["BUCKET"]},
23+
{"name": "storage.hmacKey.delete", "resources": ["HMAC_KEY"]},
24+
{"name": "storage.hmacKey.get", "resources": ["HMAC_KEY"]},
25+
{"name": "storage.hmacKey.list", "resources": ["HMAC_KEY"]},
26+
{"name": "storage.notifications.delete", "resources": ["BUCKET", "NOTIFICATION"]},
27+
{"name": "storage.notifications.get", "resources": ["BUCKET", "NOTIFICATION"]},
28+
{"name": "storage.notifications.list", "resources": ["BUCKET", "NOTIFICATION"]},
29+
{"name": "storage.object_acl.get", "resources": ["BUCKET", "OBJECT"]},
30+
{"name": "storage.object_acl.list", "resources": ["BUCKET", "OBJECT"]},
31+
{"name": "storage.objects.get", "resources": ["BUCKET", "OBJECT"]},
32+
{"name": "storage.objects.list", "resources": ["BUCKET", "OBJECT"]},
33+
{"name": "storage.serviceaccount.get", "resources": []}
14734
],
14835
"preconditionProvided": false,
14936
"expectSuccess": true
15037
},
15138
{
15239
"id": 2,
153-
"description": "conditionally idempotent retries when precondition is present",
40+
"description": "conditionally_idempotent_retries_when_precondition_is_present",
15441
"cases": [
15542
{
156-
"instructions": [
157-
"return-503",
158-
"return-503"
159-
]
43+
"instructions": ["return-503", "return-503"]
16044
}
16145
],
16246
"methods": [
163-
{
164-
"name": "storage.buckets.patch",
165-
"resources": [
166-
"BUCKET"
167-
]
168-
},
169-
{
170-
"name": "storage.buckets.setIamPolicy",
171-
"resources": [
172-
"BUCKET"
173-
]
174-
},
175-
{
176-
"name": "storage.buckets.update",
177-
"resources": [
178-
"BUCKET"
179-
]
180-
},
181-
{
182-
"name": "storage.hmacKey.update",
183-
"resources": []
184-
},
185-
{
186-
"name": "storage.objects.compose",
187-
"resources": [
188-
"BUCKET",
189-
"OBJECT"
190-
]
191-
},
192-
{
193-
"name": "storage.objects.copy",
194-
"resources": [
195-
"BUCKET",
196-
"OBJECT"
197-
]
198-
},
199-
{
200-
"name": "storage.objects.delete",
201-
"resources": [
202-
"BUCKET",
203-
"OBJECT"
204-
]
205-
},
206-
{
207-
"name": "storage.objects.insert",
208-
"resources": [
209-
"BUCKET"
210-
]
211-
},
212-
{
213-
"name": "storage.objects.patch",
214-
"resources": [
215-
"BUCKET",
216-
"OBJECT"
217-
]
218-
},
219-
{
220-
"name": "storage.objects.rewrite",
221-
"resources": [
222-
"BUCKET",
223-
"OBJECT"
224-
]
225-
},
226-
{
227-
"name": "storage.objects.update",
228-
"resources": [
229-
"BUCKET",
230-
"OBJECT"
231-
]
232-
}
47+
{"name": "storage.buckets.patch", "resources": ["BUCKET"]},
48+
{"name": "storage.buckets.setIamPolicy", "resources": ["BUCKET"]},
49+
{"name": "storage.buckets.update", "resources": ["BUCKET"]},
50+
{"name": "storage.hmacKey.update", "resources": ["HMAC_KEY"]},
51+
{"name": "storage.objects.compose", "resources": ["BUCKET", "OBJECT"]},
52+
{"name": "storage.objects.copy", "resources": ["BUCKET", "OBJECT"]},
53+
{"name": "storage.objects.delete", "resources": ["BUCKET", "OBJECT"]},
54+
{"name": "storage.objects.insert", "resources": ["BUCKET"]},
55+
{"name": "storage.objects.patch", "resources": ["BUCKET", "OBJECT"]},
56+
{"name": "storage.objects.rewrite", "resources": ["BUCKET", "OBJECT"]},
57+
{"name": "storage.objects.update", "resources": ["BUCKET", "OBJECT"]}
23358
],
23459
"preconditionProvided": true,
23560
"expectSuccess": true
23661
},
23762
{
23863
"id": 3,
239-
"description": "conditionally idempotent no retries when precondition is absent",
64+
"description": "conditionally_idempotent_no_retries_when_precondition_is_absent",
24065
"cases": [
24166
{
242-
"instructions": []
67+
"instructions": ["return-503"]
24368
}
24469
],
245-
"methods": [],
70+
"methods": [
71+
{"name": "storage.buckets.patch", "resources": ["BUCKET"]},
72+
{"name": "storage.buckets.setIamPolicy", "resources": ["BUCKET"]},
73+
{"name": "storage.buckets.update", "resources": ["BUCKET"]},
74+
{"name": "storage.hmacKey.update", "resources": ["HMAC_KEY"]},
75+
{"name": "storage.objects.compose", "resources": ["BUCKET", "OBJECT"]},
76+
{"name": "storage.objects.copy", "resources": ["BUCKET", "OBJECT"]},
77+
{"name": "storage.objects.delete", "resources": ["BUCKET", "OBJECT"]},
78+
{"name": "storage.objects.insert", "resources": ["BUCKET"]},
79+
{"name": "storage.objects.patch", "resources": ["BUCKET", "OBJECT"]},
80+
{"name": "storage.objects.rewrite", "resources": ["BUCKET", "OBJECT"]},
81+
{"name": "storage.objects.update", "resources": ["BUCKET", "OBJECT"]}
82+
],
24683
"preconditionProvided": false,
24784
"expectSuccess": false
24885
},

tests/conformance/test_conformance.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -523,7 +523,7 @@ def bucket(client):
523523
@pytest.fixture
524524
def object(client, bucket):
525525
blob = client.bucket(bucket.name).blob(uuid.uuid4().hex)
526-
blob.upload_from_string(_STRING_CONTENT, checksum="crc32c")
526+
blob.upload_from_string(_STRING_CONTENT)
527527
blob.reload()
528528
yield blob
529529
try:

0 commit comments

Comments
 (0)