Skip to content
This repository was archived by the owner on Nov 12, 2025. It is now read-only.

Commit 132433d

Browse files
authored
chore: test that ServiceUnavailable is retried (#970)
* chore: test that ServiceUnavailable is retried * remove debug file
1 parent 6e2c94f commit 132433d

1 file changed

Lines changed: 45 additions & 11 deletions

File tree

Lines changed: 45 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,12 @@
1515
import importlib
1616
from unittest import mock
1717

18+
import google.api_core.exceptions
1819
from google.api_core.gapic_v1 import client_info
1920
from google.auth import credentials
2021
import pytest
2122

22-
from google.cloud.bigquery_storage import types
23+
from google.cloud.bigquery_storage_v1 import types
2324

2425
PROJECT = "my-project"
2526
SERVICE_ACCOUNT_PROJECT = "project-from-credentials"
@@ -29,20 +30,15 @@
2930
def mock_transport(monkeypatch):
3031
from google.cloud.bigquery_storage_v1.services.big_query_read import transports
3132

32-
fake_create_session_rpc = mock.Mock(name="create_read_session_rpc")
33-
fake_read_rows_rpc = mock.Mock(name="read_rows_rpc")
34-
3533
transport = mock.create_autospec(
3634
transports.grpc.BigQueryReadGrpcTransport, instance=True
3735
)
3836

3937
transport.create_read_session = mock.Mock(name="fake_create_read_session")
4038
transport.read_rows = mock.Mock(name="fake_read_rows")
41-
42-
transport._wrapped_methods = {
43-
transport.create_read_session: fake_create_session_rpc,
44-
transport.read_rows: fake_read_rows_rpc,
45-
}
39+
transports.grpc.BigQueryReadGrpcTransport._prep_wrapped_messages(
40+
transport, client_info.ClientInfo()
41+
)
4642

4743
# _credentials property for TPC support
4844
transport._credentials = ""
@@ -85,8 +81,11 @@ def __init__(self, *args, **kwargs):
8581

8682

8783
def test_create_read_session(mock_transport, client_under_test):
88-
assert client_under_test._transport is mock_transport # sanity check
84+
# validate test assumptions
85+
assert client_under_test._transport is mock_transport
8986

87+
rpc_callable = mock.Mock()
88+
mock_transport._wrapped_methods[mock_transport.create_read_session] = rpc_callable
9089
table = "projects/{}/datasets/{}/tables/{}".format(
9190
"data-project-id", "dataset_id", "table_id"
9291
)
@@ -101,12 +100,47 @@ def test_create_read_session(mock_transport, client_under_test):
101100
expected_session_arg = types.CreateReadSessionRequest(
102101
parent="projects/other-project", read_session=read_session
103102
)
104-
rpc_callable = mock_transport._wrapped_methods[mock_transport.create_read_session]
105103
rpc_callable.assert_called_once_with(
106104
expected_session_arg, metadata=mock.ANY, retry=mock.ANY, timeout=mock.ANY
107105
)
108106

109107

108+
def test_create_read_session_retries_serviceunavailable(
109+
mock_transport, client_under_test
110+
):
111+
"""Regression test for https://github.com/googleapis/python-bigquery-storage/issues/969."""
112+
# validate test assumptions
113+
assert client_under_test._transport is mock_transport
114+
115+
mock_transport.create_read_session.side_effect = [
116+
google.api_core.exceptions.ServiceUnavailable("connection reset"),
117+
google.api_core.exceptions.ServiceUnavailable("connection reset"),
118+
types.ReadSession(),
119+
]
120+
table = "projects/{}/datasets/{}/tables/{}".format(
121+
"data-project-id", "dataset_id", "table_id"
122+
)
123+
read_session = types.ReadSession()
124+
read_session.table = table
125+
126+
# with pytest.raises(google.api_core.exceptions.ServiceUnavailable):
127+
client_under_test.create_read_session(
128+
parent="projects/other-project", read_session=read_session
129+
)
130+
131+
expected_session_arg = types.CreateReadSessionRequest(
132+
parent="projects/other-project", read_session=read_session
133+
)
134+
expected_call = mock.call(expected_session_arg, metadata=mock.ANY, timeout=mock.ANY)
135+
mock_transport.create_read_session.assert_has_calls(
136+
[
137+
expected_call,
138+
expected_call,
139+
expected_call,
140+
]
141+
)
142+
143+
110144
def test_read_rows(mock_transport, client_under_test):
111145
stream_name = "teststream"
112146
offset = 0

0 commit comments

Comments
 (0)