Skip to content

Commit 01ec825

Browse files
[Storage] Attempt to fix flaky retry test (Azure#25656)
1 parent 9039f05 commit 01ec825

File tree

4 files changed

+19
-78
lines changed

4 files changed

+19
-78
lines changed

sdk/storage/azure-storage-blob/tests/recordings/test_retry.test_retry_on_socket_timeout.yaml

Lines changed: 0 additions & 36 deletions
This file was deleted.

sdk/storage/azure-storage-blob/tests/recordings/test_retry_async.test_retry_on_socket_timeout_async.yaml

Lines changed: 0 additions & 32 deletions
This file was deleted.

sdk/storage/azure-storage-blob/tests/test_retry.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,19 +128,26 @@ def assert_exception_is_present_on_retry_context(**kwargs):
128128
def test_retry_on_socket_timeout(self, storage_account_name, storage_account_key):
129129
# Arrange
130130
container_name = self.get_resource_name('utcontainer')
131-
retry = LinearRetry(backoff=1)
131+
blob_name = self.get_resource_name('blob')
132+
# Upload a blob that can be downloaded to test read timeout
133+
service = self._create_storage_service(BlobServiceClient, storage_account_name, storage_account_key)
134+
container = service.create_container(container_name)
135+
container.upload_blob(blob_name, b'a' * 5 * 1025, overwrite=True)
136+
137+
retry = LinearRetry(backoff=1, random_jitter_range=1)
132138
retry_transport = RetryRequestTransport(connection_timeout=11, read_timeout=0.000000000001)
133139
# make the connect timeout reasonable, but packet timeout truly small, to make sure the request always times out
134140
service = self._create_storage_service(
135141
BlobServiceClient, storage_account_name, storage_account_key, retry_policy=retry, transport=retry_transport)
142+
blob = service.get_blob_client(container_name, blob_name)
136143

137144
assert service._client._client._pipeline._transport.connection_config.timeout == 11
138145
assert service._client._client._pipeline._transport.connection_config.read_timeout == 0.000000000001
139146

140147
# Act
141148
try:
142149
with self.assertRaises(AzureError) as error:
143-
service.create_container(container_name)
150+
blob.download_blob()
144151
# Assert
145152
# 3 retries + 1 original == 4
146153
assert retry_transport.count == 4

sdk/storage/azure-storage-blob/tests/test_retry_async.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -146,21 +146,26 @@ def assert_exception_is_present_on_retry_context(**kwargs):
146146
async def test_retry_on_socket_timeout_async(self, storage_account_name, storage_account_key):
147147
# Arrange
148148
container_name = self.get_resource_name('utcontainer')
149-
retry = LinearRetry(backoff=1)
149+
blob_name = self.get_resource_name('blob')
150+
# Upload a blob that can be downloaded to test read timeout
151+
service = self._create_storage_service(BlobServiceClient, storage_account_name, storage_account_key)
152+
container = await service.create_container(container_name)
153+
await container.upload_blob(blob_name, b'a' * 5 * 1025, overwrite=True)
154+
155+
retry = LinearRetry(backoff=1, random_jitter_range=1)
150156
retry_transport = AiohttpRetryTestTransport(connection_timeout=11, read_timeout=0.000000000001)
151157
# make the connect timeout reasonable, but packet timeout truly small, to make sure the request always times out
152158
service = self._create_storage_service(
153159
BlobServiceClient, storage_account_name, storage_account_key, retry_policy=retry, transport=retry_transport)
160+
blob = service.get_blob_client(container_name, blob_name)
154161

155162
assert service._client._client._pipeline._transport.connection_config.timeout == 11
156163
assert service._client._client._pipeline._transport.connection_config.read_timeout == 0.000000000001
157164

158165
# Act
159166
try:
160167
with self.assertRaises(AzureError) as error:
161-
await service.create_container(container_name)
162-
163-
168+
await blob.download_blob()
164169
# Assert
165170
# 3 retries + 1 original == 4
166171
assert retry_transport.count == 4
@@ -172,10 +177,7 @@ async def test_retry_on_socket_timeout_async(self, storage_account_name, storage
172177

173178
finally:
174179
# we must make the timeout normal again to let the delete operation succeed
175-
try:
176-
await service.delete_container(container_name, connection_timeout=11)
177-
except:
178-
pass
180+
await service.delete_container(container_name, connection_timeout=11, read_timeout=11)
179181

180182
@BlobPreparer()
181183
@AsyncStorageTestCase.await_prepared_test

0 commit comments

Comments
 (0)