@@ -48,7 +48,7 @@ mod tests {
4848
4949 use super :: * ;
5050 use crate :: {
51- testing:: trace:: InMemorySpanExporterBuilder ,
51+ testing:: trace:: { InMemorySpanExporter , InMemorySpanExporterBuilder } ,
5252 trace:: span_limit:: { DEFAULT_MAX_EVENT_PER_SPAN , DEFAULT_MAX_LINKS_PER_SPAN } ,
5353 } ;
5454 use opentelemetry:: trace:: {
@@ -342,4 +342,46 @@ mod tests {
342342 . attributes( )
343343 . eq( & [ KeyValue :: new( "test_k" , "test_v" ) ] ) ) ;
344344 }
345+
346+ #[ tokio:: test( flavor = "multi_thread" , worker_threads = 1 ) ]
347+ async fn empty_tracer_name_retained ( ) {
348+ async fn tracer_name_retained_helper (
349+ tracer : super :: Tracer ,
350+ provider : TracerProvider ,
351+ exporter : InMemorySpanExporter ,
352+ ) {
353+ // Act
354+ tracer. start ( "my_span" ) . end ( ) ;
355+
356+ // Force flush to ensure spans are exported
357+ provider. force_flush ( ) . into_iter ( ) . for_each ( |result| {
358+ result. expect ( "failed to flush spans" ) ;
359+ } ) ;
360+
361+ // Assert
362+ let finished_spans = exporter
363+ . get_finished_spans ( )
364+ . expect ( "spans are expected to be exported." ) ;
365+ assert_eq ! ( finished_spans. len( ) , 1 , "There should be a single span" ) ;
366+
367+ let tracer_name = finished_spans[ 0 ] . instrumentation_scope . name ( ) ;
368+ assert_eq ! ( tracer_name, "" , "The tracer name should be an empty string" ) ;
369+
370+ exporter. reset ( ) ;
371+ }
372+
373+ let exporter = InMemorySpanExporter :: default ( ) ;
374+ let span_processor = SimpleSpanProcessor :: new ( Box :: new ( exporter. clone ( ) ) ) ;
375+ let tracer_provider = TracerProvider :: builder ( )
376+ . with_span_processor ( span_processor)
377+ . build ( ) ;
378+
379+ // Test Tracer creation in 2 ways, both with empty string as tracer name
380+ let tracer1 = tracer_provider. tracer ( "" ) ;
381+ tracer_name_retained_helper ( tracer1, tracer_provider. clone ( ) , exporter. clone ( ) ) . await ;
382+
383+ let tracer_scope = InstrumentationScope :: builder ( "" ) . build ( ) ;
384+ let tracer2 = tracer_provider. tracer_with_scope ( tracer_scope) ;
385+ tracer_name_retained_helper ( tracer2, tracer_provider, exporter) . await ;
386+ }
345387}
0 commit comments