From 7f05e51f983a9ee1154f4bc0e7fcd66837c6cfd2 Mon Sep 17 00:00:00 2001 From: Anthonios Partheniou Date: Mon, 14 Mar 2022 20:36:23 +0000 Subject: [PATCH] fix: ensure exception is available when BackgroundConsumer open stream fails --- google/api_core/bidi.py | 6 +++++- tests/unit/test_bidi.py | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/google/api_core/bidi.py b/google/api_core/bidi.py index 4b4963f7..12cfc8ee 100644 --- a/google/api_core/bidi.py +++ b/google/api_core/bidi.py @@ -276,7 +276,11 @@ def open(self): request_generator = _RequestQueueGenerator( self._request_queue, initial_request=self._initial_request ) - call = self._start_rpc(iter(request_generator), metadata=self._rpc_metadata) + try: + call = self._start_rpc(iter(request_generator), metadata=self._rpc_metadata) + except exceptions.GoogleAPICallError as exc: + self._on_call_done(exc) + raise request_generator.call = call diff --git a/tests/unit/test_bidi.py b/tests/unit/test_bidi.py index 7fb16209..76358b79 100644 --- a/tests/unit/test_bidi.py +++ b/tests/unit/test_bidi.py @@ -804,6 +804,20 @@ def test_wake_on_error(self): while consumer.is_active: pass + def test_rpc_callback_fires_when_consumer_start_fails(self): + expected_exception = exceptions.InvalidArgument("test") + callback = mock.Mock(spec=["__call__"]) + rpc, _ = make_rpc() + bidi_rpc = bidi.BidiRpc(rpc) + bidi_rpc.add_done_callback(callback) + bidi_rpc._start_rpc.side_effect = expected_exception + + consumer = bidi.BackgroundConsumer(bidi_rpc, on_response=lambda: None) + + consumer.start() + + assert callback.call_args.args[0] == expected_exception + def test_consumer_expected_error(self, caplog): caplog.set_level(logging.DEBUG)