@@ -486,6 +486,32 @@ def test_wrap_method_otel_tracing_custom_client_options(mock_otel):
486486 mock_otel .span .set_attribute .assert_called_with ("rpc.response.status_code" , "OK" )
487487
488488
489+ def test_wrap_method_otel_tracing_dict_client_options (mock_otel ):
490+ """Proves that providing client_options as a dict with tracer_provider uses that provider."""
491+ mock_target = mock .Mock (return_value = "success" )
492+
493+ mock_provider = mock .Mock ()
494+ mock_provider .get_tracer .return_value = mock_otel .tracer
495+
496+ client_options = {"tracer_provider" : mock_provider }
497+
498+ wrapped = google .api_core .gapic_v1 .method .wrap_method (
499+ mock_target ,
500+ client_options = client_options ,
501+ method_name = "/google.cloud.secretmanager.v1.SecretManagerService/ListSecrets" ,
502+ )
503+ result = wrapped ()
504+
505+ assert result == "success"
506+ mock_provider .get_tracer .assert_called_once_with ("google.api_core" )
507+ mock_otel .tracer .start_as_current_span .assert_called_once_with (
508+ "google.cloud.secretmanager.v1.SecretManagerService/ListSecrets" ,
509+ kind = "CLIENT" ,
510+ attributes = _DEFAULT_SPAN_ATTRIBUTES ,
511+ )
512+ mock_otel .span .set_attribute .assert_called_with ("rpc.response.status_code" , "OK" )
513+
514+
489515def test_wrap_method_otel_tracing_enabled_error (mock_otel ):
490516 """Proves that when an RPC fails, the T3 client span enriches the status code attribute."""
491517 err = RuntimeError ("gRPC connection reset" )
0 commit comments