Visitar URL original
refactor(api-core): simplify async interceptors extraction and expand… · googleapis/google-cloud-python@d3e6d1f · GitHub
Skip to content

Commit d3e6d1f

Browse files
committed
refactor(api-core): simplify async interceptors extraction and expand tests
- Use list(channel_kwargs.pop('interceptors', None) or []) in create_async_channel_with_otel - Add unit tests for None and omitted interceptors arguments
1 parent 9163da6 commit d3e6d1f

2 files changed

Lines changed: 74 additions & 1 deletion

File tree

‎packages/google-api-core/google/api_core/_observability.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ def create_async_channel_with_otel(
133133
"""
134134
if is_otel_capabilities_enabled(client_options):
135135
async_interceptor = _get_otel_interceptor(client_options, is_async=True)
136-
interceptors = list(channel_kwargs.pop("interceptors", []) or [])
136+
interceptors = list(channel_kwargs.pop("interceptors", None) or [])
137137
interceptors.append(async_interceptor)
138138
channel_kwargs["interceptors"] = interceptors
139139

‎packages/google-api-core/tests/unit/test_observability.py‎

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,3 +254,76 @@ def test_create_async_channel_with_otel_enabled(monkeypatch):
254254
target="example.com:443",
255255
interceptors=[user_interceptor, mock_async_interceptor],
256256
)
257+
258+
259+
def test_create_async_channel_with_otel_none_interceptors(monkeypatch):
260+
mock_tracer_provider = object()
261+
options = ClientOptions(tracer_provider=mock_tracer_provider)
262+
263+
mock_async_channel = mock.Mock(name="async_channel")
264+
mock_channel_factory = mock.Mock(return_value=mock_async_channel)
265+
mock_async_interceptor = mock.Mock(name="otel_async_interceptor")
266+
267+
mock_otel = mock.Mock()
268+
mock_otel_grpc = mock_otel.instrumentation.grpc
269+
mock_otel_grpc.aio_client_interceptor.return_value = mock_async_interceptor
270+
271+
monkeypatch.setitem(sys.modules, "opentelemetry", mock_otel)
272+
monkeypatch.setitem(
273+
sys.modules, "opentelemetry.instrumentation", mock_otel.instrumentation
274+
)
275+
monkeypatch.setitem(
276+
sys.modules, "opentelemetry.instrumentation.grpc", mock_otel_grpc
277+
)
278+
279+
result = _observability.create_async_channel_with_otel(
280+
mock_channel_factory,
281+
client_options=options,
282+
target="example.com:443",
283+
interceptors=None,
284+
)
285+
286+
assert result is mock_async_channel
287+
mock_otel_grpc.aio_client_interceptor.assert_called_once_with(
288+
tracer_provider=mock_tracer_provider
289+
)
290+
mock_channel_factory.assert_called_once_with(
291+
target="example.com:443",
292+
interceptors=[mock_async_interceptor],
293+
)
294+
295+
296+
def test_create_async_channel_with_otel_omitted_interceptors(monkeypatch):
297+
mock_tracer_provider = object()
298+
options = ClientOptions(tracer_provider=mock_tracer_provider)
299+
300+
mock_async_channel = mock.Mock(name="async_channel")
301+
mock_channel_factory = mock.Mock(return_value=mock_async_channel)
302+
mock_async_interceptor = mock.Mock(name="otel_async_interceptor")
303+
304+
mock_otel = mock.Mock()
305+
mock_otel_grpc = mock_otel.instrumentation.grpc
306+
mock_otel_grpc.aio_client_interceptor.return_value = mock_async_interceptor
307+
308+
monkeypatch.setitem(sys.modules, "opentelemetry", mock_otel)
309+
monkeypatch.setitem(
310+
sys.modules, "opentelemetry.instrumentation", mock_otel.instrumentation
311+
)
312+
monkeypatch.setitem(
313+
sys.modules, "opentelemetry.instrumentation.grpc", mock_otel_grpc
314+
)
315+
316+
result = _observability.create_async_channel_with_otel(
317+
mock_channel_factory,
318+
client_options=options,
319+
target="example.com:443",
320+
)
321+
322+
assert result is mock_async_channel
323+
mock_otel_grpc.aio_client_interceptor.assert_called_once_with(
324+
tracer_provider=mock_tracer_provider
325+
)
326+
mock_channel_factory.assert_called_once_with(
327+
target="example.com:443",
328+
interceptors=[mock_async_interceptor],
329+
)

0 commit comments

Comments
 (0)