@@ -1817,6 +1817,7 @@ async def test_{{ service.name|snake_case }}_{{ method.name|snake_case }}_grpc_a
18171817 host=transport._host,
18181818 credentials=transport._credentials,
18191819 client_info=transport._client_info,
1820+ client_options=getattr(transport, "_client_options", None),
18201821 )
18211822 assert mock_rest_transport.{{ method.transport_safe_name|snake_case }}.call_count == 2
18221823 await transport.close()
@@ -2475,4 +2476,200 @@ def test_api_key_credentials(client_class, transport_class):
24752476 api_audience=None,
24762477 )
24772478
2479+
2480+ def test_{{ service.name|snake_case }}_base_transport_wrap_method_modern_api_core(monkeypatch):
2481+ monkeypatch.setattr(transports.base, "_WRAP_METHOD_SUPPORTS_TRACING", True)
2482+ # 1. Concrete transport: passes client_options=None and kind="{{ opts.transport[0] }}"
2483+ with mock.patch.object(transports.base.gapic_v1.method, "wrap_method") as mock_wrap:
2484+ transport = transports.{{ service.name }}{{ opts.transport[0] .capitalize() }}Transport(
2485+ credentials=ga_credentials.AnonymousCredentials()
2486+ )
2487+ func = mock.MagicMock()
2488+ transport._wrap_method(func)
2489+ assert mock_wrap.call_args.kwargs["kind"] == "{{ opts.transport[0] }}"
2490+ assert "client_options" in mock_wrap.call_args.kwargs
2491+
2492+ # 2. Base transport: kind raises NotImplementedError and is cleanly omitted
2493+ with mock.patch.object(transports.base.gapic_v1.method, "wrap_method") as mock_wrap:
2494+ base_transport = transports.{{ service.name }}Transport(
2495+ credentials=ga_credentials.AnonymousCredentials()
2496+ )
2497+ func = mock.MagicMock()
2498+ base_transport._wrap_method(func)
2499+ assert "kind" not in mock_wrap.call_args.kwargs
2500+ assert "client_options" in mock_wrap.call_args.kwargs
2501+
2502+
2503+ def test_{{ service.name|snake_case }}_base_transport_wrap_method_older_api_core_fallbacks(monkeypatch):
2504+ monkeypatch.setattr(transports.base, "_WRAP_METHOD_SUPPORTS_TRACING", False)
2505+ with mock.patch.object(transports.base.gapic_v1.method, "wrap_method"):
2506+ transport = transports.{{ service.name }}{{ opts.transport[0] .capitalize() }}Transport(
2507+ credentials=ga_credentials.AnonymousCredentials()
2508+ )
2509+
2510+ # Era 1: Ancient google-api-core (< 2.29.0: can be removed once google-api-core < 2.29.0 is no longer supported)
2511+ monkeypatch.setattr(transports.base, "_WRAP_METHOD_SUPPORTS_KIND", False)
2512+ with mock.patch.object(transports.base.gapic_v1.method, "wrap_method") as mock_wrap:
2513+ func = mock.MagicMock()
2514+ transport._wrap_method(
2515+ func,
2516+ client_options="fake_options",
2517+ method_name="fake_method",
2518+ is_streaming=False,
2519+ )
2520+ kwargs = mock_wrap.call_args.kwargs
2521+ assert "kind" not in kwargs
2522+ assert "client_options" not in kwargs
2523+ assert "method_name" not in kwargs
2524+ assert "is_streaming" not in kwargs
2525+
2526+ with mock.patch.object(transports.base.gapic_v1.method, "wrap_method") as mock_wrap:
2527+ base_transport = transports.{{ service.name }}Transport(
2528+ credentials=ga_credentials.AnonymousCredentials()
2529+ )
2530+ func = mock.MagicMock()
2531+ base_transport._wrap_method(
2532+ func,
2533+ client_options="fake_options",
2534+ method_name="fake_method",
2535+ is_streaming=False,
2536+ )
2537+ kwargs = mock_wrap.call_args.kwargs
2538+ assert "kind" not in kwargs
2539+ assert "client_options" not in kwargs
2540+ assert "method_name" not in kwargs
2541+ assert "is_streaming" not in kwargs
2542+
2543+ # Era 2: Intermediate google-api-core (>= 2.29.0, < 2.36.0: can be removed once google-api-core < 2.36.0 is no longer supported)
2544+ monkeypatch.setattr(transports.base, "_WRAP_METHOD_SUPPORTS_KIND", True)
2545+ with mock.patch.object(transports.base.gapic_v1.method, "wrap_method") as mock_wrap:
2546+ func = mock.MagicMock()
2547+ transport._wrap_method(
2548+ func,
2549+ client_options="fake_options",
2550+ method_name="fake_method",
2551+ is_streaming=False,
2552+ )
2553+ kwargs = mock_wrap.call_args.kwargs
2554+ assert kwargs.get("kind") == "{{ opts.transport[0] }}"
2555+ assert "client_options" not in kwargs
2556+ assert "method_name" not in kwargs
2557+ assert "is_streaming" not in kwargs
2558+
2559+ with mock.patch.object(transports.base.gapic_v1.method, "wrap_method") as mock_wrap:
2560+ base_transport = transports.{{ service.name }}Transport(
2561+ credentials=ga_credentials.AnonymousCredentials()
2562+ )
2563+ func = mock.MagicMock()
2564+ base_transport._wrap_method(
2565+ func,
2566+ client_options="fake_options",
2567+ method_name="fake_method",
2568+ is_streaming=False,
2569+ )
2570+ kwargs = mock_wrap.call_args.kwargs
2571+ assert "kind" not in kwargs
2572+ assert "client_options" not in kwargs
2573+ assert "method_name" not in kwargs
2574+ assert "is_streaming" not in kwargs
2575+
2576+
2577+ {% if 'grpc' in opts .transport %}
2578+ def test_{{ service.name|snake_case }}_base_transport_wrap_async_method_modern_api_core(monkeypatch):
2579+ monkeypatch.setattr(transports.base, "_ASYNC_WRAP_METHOD_SUPPORTS_TRACING", True)
2580+ # 1. Concrete transport: passes client_options=None and kind="grpc_asyncio"
2581+ with mock.patch.object(transports.base.gapic_v1.method_async, "wrap_method") as mock_wrap:
2582+ transport = transports.{{ service.grpc_asyncio_transport_name }}(
2583+ credentials=ga_credentials.AnonymousCredentials()
2584+ )
2585+ func = mock.MagicMock()
2586+ transport._wrap_async_method(func)
2587+ assert mock_wrap.call_args.kwargs["kind"] == "grpc_asyncio"
2588+ assert "client_options" in mock_wrap.call_args.kwargs
2589+
2590+ # 2. Base transport: kind raises NotImplementedError and is cleanly omitted
2591+ with mock.patch.object(transports.base.gapic_v1.method_async, "wrap_method") as mock_wrap:
2592+ base_transport = transports.{{ service.name }}Transport(
2593+ credentials=ga_credentials.AnonymousCredentials()
2594+ )
2595+ func = mock.MagicMock()
2596+ base_transport._wrap_async_method(func)
2597+ assert "kind" not in mock_wrap.call_args.kwargs
2598+ assert "client_options" in mock_wrap.call_args.kwargs
2599+
2600+
2601+ def test_{{ service.name|snake_case }}_base_transport_wrap_async_method_older_api_core_fallbacks(monkeypatch):
2602+ monkeypatch.setattr(transports.base, "_ASYNC_WRAP_METHOD_SUPPORTS_TRACING", False)
2603+ with mock.patch.object(transports.base.gapic_v1.method_async, "wrap_method"):
2604+ transport = transports.{{ service.grpc_asyncio_transport_name }}(
2605+ credentials=ga_credentials.AnonymousCredentials()
2606+ )
2607+
2608+ # Era 1: Ancient google-api-core (< 2.29.0: can be removed once google-api-core < 2.29.0 is no longer supported)
2609+ monkeypatch.setattr(transports.base, "_ASYNC_WRAP_METHOD_SUPPORTS_KIND", False)
2610+ with mock.patch.object(transports.base.gapic_v1.method_async, "wrap_method") as mock_wrap:
2611+ func = mock.MagicMock()
2612+ transport._wrap_async_method(
2613+ func,
2614+ client_options="fake_options",
2615+ method_name="fake_method",
2616+ is_streaming=False,
2617+ )
2618+ kwargs = mock_wrap.call_args.kwargs
2619+ assert "kind" not in kwargs
2620+ assert "client_options" not in kwargs
2621+ assert "method_name" not in kwargs
2622+ assert "is_streaming" not in kwargs
2623+
2624+ with mock.patch.object(transports.base.gapic_v1.method_async, "wrap_method") as mock_wrap:
2625+ base_transport = transports.{{ service.name }}Transport(
2626+ credentials=ga_credentials.AnonymousCredentials()
2627+ )
2628+ func = mock.MagicMock()
2629+ base_transport._wrap_async_method(
2630+ func,
2631+ client_options="fake_options",
2632+ method_name="fake_method",
2633+ is_streaming=False,
2634+ )
2635+ kwargs = mock_wrap.call_args.kwargs
2636+ assert "kind" not in kwargs
2637+ assert "client_options" not in kwargs
2638+ assert "method_name" not in kwargs
2639+ assert "is_streaming" not in kwargs
2640+
2641+ # Era 2: Intermediate google-api-core (>= 2.29.0, < 2.36.0: can be removed once google-api-core < 2.36.0 is no longer supported)
2642+ monkeypatch.setattr(transports.base, "_ASYNC_WRAP_METHOD_SUPPORTS_KIND", True)
2643+ with mock.patch.object(transports.base.gapic_v1.method_async, "wrap_method") as mock_wrap:
2644+ func = mock.MagicMock()
2645+ transport._wrap_async_method(
2646+ func,
2647+ client_options="fake_options",
2648+ method_name="fake_method",
2649+ is_streaming=False,
2650+ )
2651+ kwargs = mock_wrap.call_args.kwargs
2652+ assert kwargs.get("kind") == "grpc_asyncio"
2653+ assert "client_options" not in kwargs
2654+ assert "method_name" not in kwargs
2655+ assert "is_streaming" not in kwargs
2656+
2657+ with mock.patch.object(transports.base.gapic_v1.method_async, "wrap_method") as mock_wrap:
2658+ base_transport = transports.{{ service.name }}Transport(
2659+ credentials=ga_credentials.AnonymousCredentials()
2660+ )
2661+ func = mock.MagicMock()
2662+ base_transport._wrap_async_method(
2663+ func,
2664+ client_options="fake_options",
2665+ method_name="fake_method",
2666+ is_streaming=False,
2667+ )
2668+ kwargs = mock_wrap.call_args.kwargs
2669+ assert "kind" not in kwargs
2670+ assert "client_options" not in kwargs
2671+ assert "method_name" not in kwargs
2672+ assert "is_streaming" not in kwargs
2673+ {% endif %}
2674+
24782675{% endblock %}
0 commit comments