Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 767b215

Browse files
committed
fix: ensure exception is available when BackgroundConsumer open stream fails
1 parent c89f55d commit 767b215

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

google/api_core/bidi.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,11 @@ def open(self):
276276
request_generator = _RequestQueueGenerator(
277277
self._request_queue, initial_request=self._initial_request
278278
)
279-
call = self._start_rpc(iter(request_generator), metadata=self._rpc_metadata)
279+
try:
280+
call = self._start_rpc(iter(request_generator), metadata=self._rpc_metadata)
281+
except exceptions.GoogleAPICallError as exc:
282+
self._on_call_done(exc)
283+
raise
280284

281285
request_generator.call = call
282286

tests/unit/test_bidi.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -804,6 +804,18 @@ def test_wake_on_error(self):
804804
while consumer.is_active:
805805
pass
806806

807+
def test_rpc_callback_fires_when_consumer_start_fails(self):
808+
expected_exception = exceptions.InvalidArgument("test")
809+
callback = mock.Mock(spec=["__call__"])
810+
rpc, _ = make_rpc()
811+
bidi_rpc = bidi.BidiRpc(rpc)
812+
bidi_rpc.add_done_callback(callback)
813+
bidi_rpc._start_rpc.side_effect = expected_exception
814+
815+
consumer = bidi.BackgroundConsumer(bidi_rpc, on_response=lambda: None)
816+
consumer.start()
817+
assert callback.call_args.args[0] == expected_exception
818+
807819
def test_consumer_expected_error(self, caplog):
808820
caplog.set_level(logging.DEBUG)
809821

0 commit comments

Comments
 (0)