def test_retry_failed(self, mock_gcs): mock_client = mock_gcs.return_value mock_client.get_bucket = MagicMock() mock_bucket = mock_client.get_bucket.return_value mock_bucket.list_blobs.side_effect = [ ServiceUnavailable("service unavailable"), ServiceUnavailable("service unavailable"), ServiceUnavailable("service unavailable"), ServiceUnavailable("service unavailable"), ] test_handler = GCSHandler("test_bucket_name", back_off=0.1) with pytest.raises(ServiceUnavailable) as expected: test_handler.get_files_from_folder("test_folder") assert expected.value.errors == "service unavailable"
def test_retry_failed(self, mock_gcs): mock_client = mock_gcs.return_value mock_client.get_bucket = MagicMock() mock_bucket = mock_client.get_bucket.return_value mock_blob = mock_bucket.blob.return_value mock_blob.download_as_string.side_effect = [ ServiceUnavailable("service unavailable"), ServiceUnavailable("service unavailable"), ServiceUnavailable("service unavailable"), ServiceUnavailable("service unavailable"), ] test_handler = GCSHandler("test_bucket_name", back_off=0.1) with pytest.raises(ServiceUnavailable) as expected: test_handler.download_file_as_string_with_formatter("test_file_path") assert expected.value.errors == "service unavailable"
def test_iteration_w_multiple_span_creation(self): from google.api_core.exceptions import ServiceUnavailable if HAS_OPENTELEMETRY_INSTALLED: FIRST = (self._make_item(0), self._make_item(1, resume_token=RESUME_TOKEN)) SECOND = (self._make_item(2),) # discarded after 503 LAST = (self._make_item(3),) before = _MockIterator( *(FIRST + SECOND), fail_after=True, error=ServiceUnavailable("testing") ) after = _MockIterator(*LAST) restart = mock.Mock(spec=[], side_effect=[before, after]) name = "TestSpan" resumable = self._call_fut(restart, name, _Session(_Database())) self.assertEqual(list(resumable), list(FIRST + LAST)) self.assertEqual( restart.mock_calls, [mock.call(), mock.call(resume_token=RESUME_TOKEN)] ) span_list = self.memory_exporter.get_finished_spans() self.assertEqual(len(span_list), 2) for span in span_list: self.assertEqual(span.name, name) self.assertEqual( span.attributes, { "db.type": "spanner", "db.url": "spanner.googleapis.com:443", "db.instance": "testing", "net.host.name": "spanner.googleapis.com:443", }, )
def test__should_recover_w_unavailable(): from google.api_core.exceptions import ServiceUnavailable from google.cloud.firestore_v1.watch import _should_recover exception = ServiceUnavailable("testing") assert _should_recover(exception)
def test__retry_read_rows_exception_service_unavailable_wrapped_in_grpc(): from google.api_core.exceptions import ServiceUnavailable from google.cloud.bigtable.row_data import _retry_read_rows_exception wrapped = ServiceUnavailable("testing") exception = _make_grpc_call_error(wrapped) assert _retry_read_rows_exception(exception)
def __next__(self): from google.api_core.exceptions import ServiceUnavailable try: return next(self._iter_values) except StopIteration: if self._fail_after: raise ServiceUnavailable('testing') raise
def test_retry_failed(self, mock_gcs): mock_client = mock_gcs.return_value mock_client.get_bucket = MagicMock() mock_bucket = mock_client.get_bucket.return_value mock_blob = mock_bucket.blob.return_value mock_blob.upload_from_string.side_effect = [ ServiceUnavailable("service unavailable"), ServiceUnavailable("service unavailable"), ServiceUnavailable("service unavailable"), ServiceUnavailable("service unavailable"), ] test_handler = GCSHandler("test_bucket_name", back_off=0.1) with pytest.raises(ServiceUnavailable) as expected: test_handler.put_as_string( "test_file_name", "test_file_string", "test_content_type" ) assert expected.value.errors == "service unavailable"
def test_create_task_transient_error_retries(self): mock_create_task = MagicMock() mock_create_task.side_effect = [ServiceUnavailable("test"), Task()] self.cloud_task_publisher._client.create_task = mock_create_task self.cloud_task_publisher.create_task( body=self.body, queue_name=self.queue_name, function_name=self.function_name, fulfilment_request_transaction_id=self.transaction_id, ) self.assertEqual(mock_create_task.call_count, 2)
def test_retry_succeed(self, mock_gcs): mock_client = mock_gcs.return_value mock_client.get_bucket = MagicMock() mock_bucket = mock_client.get_bucket.return_value mock_blob = mock_bucket.blob.return_value mock_blob.exists.side_effect = [ServiceUnavailable("service unavailable"), True] test_handler = GCSHandler("test_bucket_name", back_off=0.1) result = test_handler.is_exist("test_file_name") assert result is True assert mock_bucket.blob.call_count == 2 assert mock_blob.exists.call_count == 2
def test_retry_succeed(self, mock_gcs): mock_client = mock_gcs.return_value mock_client.get_bucket = MagicMock() mock_bucket = mock_client.get_bucket.return_value mock_bucket.list_blobs.side_effect = [ ServiceUnavailable("service unavailable"), "test return", ] test_handler = GCSHandler("test_bucket_name", back_off=0.1) result = test_handler.get_files_from_folder("test_folder") assert result == "test return" assert mock_bucket.list_blobs.call_count == 2
def test_create_task_transient_error_retries(mocker, cloud_task_publisher): mock_create_task = mocker.Mock() mock_create_task.side_effect = [ServiceUnavailable("test"), Task()] cloud_task_publisher._client.create_task = ( # pylint: disable=protected-access mock_create_task) cloud_task_publisher.create_task( body=BODY, queue_name=QUEUE_NAME, function_name=FUNCTION_NAME, fulfilment_request_transaction_id=TRANSACTION_ID, ) assert mock_create_task.call_count == 2
def test_retry_succeed(self, mock_gcs, csv_blob_from_gcs): mock_client = mock_gcs.return_value mock_client.get_bucket = MagicMock() mock_bucket = mock_client.get_bucket.return_value mock_blob = mock_bucket.blob.return_value mock_blob.download_as_string.side_effect = [ ServiceUnavailable("service unavailable"), csv_blob_from_gcs, ] test_handler = GCSHandler("test_bucket_name", back_off=0.1) result = test_handler.download_file_as_string("test_file_path") assert result == csv_blob_from_gcs assert mock_bucket.blob.call_count == 2 assert mock_blob.download_as_string.call_count == 2
def test_iteration_w_raw_raising_unavailable_no_token(self): from google.api_core.exceptions import ServiceUnavailable ITEMS = ( self._make_item(0), self._make_item(1, resume_token=RESUME_TOKEN), self._make_item(2), ) before = _MockIterator(fail_after=True, error=ServiceUnavailable("testing")) after = _MockIterator(*ITEMS) restart = mock.Mock(spec=[], side_effect=[before, after]) resumable = self._call_fut(restart) self.assertEqual(list(resumable), list(ITEMS)) self.assertEqual(restart.mock_calls, [mock.call(), mock.call(resume_token=b"")]) self.assertNoSpans()
def test_retry_succeed(self, mock_gcs): mock_client = mock_gcs.return_value mock_client.get_bucket = MagicMock() mock_bucket = mock_client.get_bucket.return_value mock_blob = mock_bucket.blob.return_value mock_blob.upload_from_string.side_effect = [ ServiceUnavailable("service unavailable"), True, ] test_handler = GCSHandler("test_bucket_name", back_off=0.1) result = test_handler.put_as_string( "test_file_name", "test_file_string", "test_content_type" ) assert result is True assert mock_bucket.blob.call_count == 2 assert mock_blob.upload_from_string.call_count == 2
def test_iteration_w_raw_raising_unavailable(self): from google.api_core.exceptions import ServiceUnavailable FIRST = (self._make_item(0), self._make_item(1, resume_token=RESUME_TOKEN)) SECOND = (self._make_item(2),) # discarded after 503 LAST = (self._make_item(3),) before = _MockIterator( *(FIRST + SECOND), fail_after=True, error=ServiceUnavailable("testing") ) after = _MockIterator(*LAST) restart = mock.Mock(spec=[], side_effect=[before, after]) resumable = self._call_fut(restart) self.assertEqual(list(resumable), list(FIRST + LAST)) self.assertEqual( restart.mock_calls, [mock.call(), mock.call(resume_token=RESUME_TOKEN)] ) self.assertNoSpans()
def test_w_service_unavailable(self): from google.api_core.exceptions import ServiceUnavailable exception = ServiceUnavailable("testing") self.assertTrue(self._call_fut(exception))
def test_w_service_unavailable_wrapped_in_grpc(self): from google.api_core.exceptions import ServiceUnavailable wrapped = ServiceUnavailable("testing") exception = self._make_grpc_call_error(wrapped) self.assertTrue(self._call_fut(exception))
def test__retry_read_rows_exception_service_unavailable(): from google.api_core.exceptions import ServiceUnavailable from google.cloud.bigtable.row_data import _retry_read_rows_exception exception = ServiceUnavailable("testing") assert _retry_read_rows_exception(exception)