def test_linear_retry_interval(self, resource_group, location, storage_account, storage_account_key): # Arrange context_stub = {} for i in range(10): # Act retry_policy = LinearRetry(backoff=1, random_jitter_range=3) backoff = retry_policy.get_backoff_time(context_stub) # Assert backoff interval is within +/- 3 of 1 self.assertTrue(0 <= backoff <= 4) # Act retry_policy = LinearRetry(backoff=5, random_jitter_range=3) backoff = retry_policy.get_backoff_time(context_stub) # Assert backoff interval is within +/- 3 of 5 self.assertTrue(2 <= backoff <= 8) # Act retry_policy = LinearRetry(backoff=15, random_jitter_range=3) backoff = retry_policy.get_backoff_time(context_stub) # Assert backoff interval is within +/- 3 of 15 self.assertTrue(12 <= backoff <= 18)
def test_linear_retry_interval(self): # Arrange context_stub = {} for i in range(10): # Act retry_policy = LinearRetry(backoff=1, random_jitter_range=3) backoff = retry_policy.get_backoff_time(context_stub) # Assert backoff interval is within +/- 3 of 1 self.assertTrue(0 <= backoff <= 4) # Act retry_policy = LinearRetry(backoff=5, random_jitter_range=3) backoff = retry_policy.get_backoff_time(context_stub) # Assert backoff interval is within +/- 3 of 5 self.assertTrue(2 <= backoff <= 8) # Act retry_policy = LinearRetry(backoff=15, random_jitter_range=3) backoff = retry_policy.get_backoff_time(context_stub) # Assert backoff interval is within +/- 3 of 15 self.assertTrue(12 <= backoff <= 18)
def test_retry_callback_and_retry_context(self, resource_group, location, storage_account, storage_account_key): # Arrange container_name = self.get_resource_name('utcontainer') retry = LinearRetry(backoff=1) service = self._create_storage_service(BlobServiceClient, storage_account, storage_account_key, retry_policy=retry) # Force the create call to 'timeout' with a 408 callback = ResponseCallback(status=201, new_status=408).override_status def assert_exception_is_present_on_retry_context(**kwargs): self.assertIsNotNone(kwargs.get('response')) self.assertEqual(kwargs['response'].status_code, 408) # Act try: # The initial create will return 201, but we overwrite it and retry. # The retry will then get a 409 and return false. with self.assertRaises(ResourceExistsError): service.create_container( container_name, raw_response_hook=callback, retry_hook=assert_exception_is_present_on_retry_context) finally: service.delete_container(container_name)
def test_retry_on_socket_timeout(self, resource_group, location, storage_account, storage_account_key): # Arrange container_name = self.get_resource_name('utcontainer') retry = LinearRetry(backoff=1) # make the connect timeout reasonable, but packet timeout truly small, to make sure the request always times out socket_timeout = (11, 0.000000000001) service = self._create_storage_service( BlobServiceClient, storage_account, storage_account_key, retry_policy=retry, connection_timeout=socket_timeout) assert service._client._client._pipeline._transport.connection_config.timeout == socket_timeout # Act try: with self.assertRaises(ServiceResponseError) as error: service.create_container(container_name) # Assert # This call should succeed on the server side, but fail on the client side due to socket timeout self.assertTrue( 'read timeout' in str(error.exception), 'Expected socket timeout but got different exception.') finally: # we must make the timeout normal again to let the delete operation succeed service.delete_container(container_name, connection_timeout=(11, 11))
def test_retry_on_socket_timeout(self): if TestMode.need_recording_file(self.test_mode): return # Arrange container_name = self.get_resource_name() retry = LinearRetry(backoff=1) # make the connect timeout reasonable, but packet timeout truly small, to make sure the request always times out socket_timeout = (11, 0.000000000001) service = self._create_storage_service( BlobServiceClient, self.settings, retry_policy=retry, connection_timeout=socket_timeout) self.assertEqual(service._config.connection.timeout, socket_timeout) # Act try: with self.assertRaises(ServiceResponseError) as error: service.create_container(container_name) # Assert # This call should succeed on the server side, but fail on the client side due to socket timeout self.assertTrue('read timeout' in str(error.exception), 'Expected socket timeout but got different exception.') finally: # we must make the timeout normal again to let the delete operation succeed service.delete_container(container_name, connection_timeout=(11, 11))
def test_linear_retry(self): # Arrange container_name = self.get_resource_name() retry = LinearRetry(backoff=1) service = self._create_storage_service( BlobServiceClient, self.settings, retry_policy=retry) # Force the create call to 'timeout' with a 408 callback = ResponseCallback(status=201, new_status=408).override_status # Act try: # The initial create will return 201, but we overwrite it and retry. # The retry will then get a 409 and return false. with self.assertRaises(ResourceExistsError): service.create_container(container_name, raw_response_hook=callback) finally: service.delete_container(container_name)