3030from opentelemetry .instrumentation .boto import BotoInstrumentor
3131from opentelemetry .semconv .trace import SpanAttributes
3232from opentelemetry .test .test_base import TestBase
33+ from opentelemetry .trace import NoOpTracerProvider , get_tracer_provider
3334
3435
3536def assert_span_http_status_code (span , code ):
@@ -44,6 +45,7 @@ class TestBotoInstrumentor(TestBase):
4445 def setUp (self ):
4546 super ().setUp ()
4647 BotoInstrumentor ().instrument ()
48+ self .noop_tracer_provider = NoOpTracerProvider ()
4749
4850 def tearDown (self ):
4951 BotoInstrumentor ().uninstrument ()
@@ -280,3 +282,27 @@ def test_elasticache_client(self):
280282 span = spans [0 ]
281283 self .assertEqual (span .attributes ["endpoint" ], "elasticcache" )
282284 self .assertEqual (span .attributes ["aws.region" ], "us-west-2" )
285+ @mock_s3_deprecated
286+ def test_boto_with_noop_tracer_provider (self ):
287+ # Set the NoOpTracerProvider explicitly
288+ from opentelemetry .trace import set_tracer_provider
289+ BotoInstrumentor ().uninstrument ()
290+ set_tracer_provider (self .noop_tracer_provider )
291+
292+ # Create a boto client
293+ s3 = boto .s3 .connect_to_region ("us-east-1" )
294+
295+ # Perform a simple operation
296+ try :
297+ s3 .get_all_buckets ()
298+ except Exception :
299+ pass # Ignore any exceptions for this test
300+
301+ # Ensure no spans are created
302+ tracer = get_tracer_provider ().get_tracer ("test" )
303+ if get_tracer_provider () is self .noop_tracer_provider :
304+ # NoOpTracerProvider does not support span processing
305+ self .assertTrue (True )
306+ else :
307+ spans = self .memory_exporter .get_finished_spans ()
308+ self .assertEqual (len (spans ), 0 )
0 commit comments