@@ -48,7 +48,7 @@ mod tests {
48
48
49
49
use super :: * ;
50
50
use crate :: {
51
- testing:: trace:: InMemorySpanExporterBuilder ,
51
+ testing:: trace:: { InMemorySpanExporter , InMemorySpanExporterBuilder } ,
52
52
trace:: span_limit:: { DEFAULT_MAX_EVENT_PER_SPAN , DEFAULT_MAX_LINKS_PER_SPAN } ,
53
53
} ;
54
54
use opentelemetry:: trace:: {
@@ -342,4 +342,46 @@ mod tests {
342
342
. attributes( )
343
343
. eq( & [ KeyValue :: new( "test_k" , "test_v" ) ] ) ) ;
344
344
}
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
+ }
345
387
}
0 commit comments