@@ -269,7 +269,7 @@ impl Drop for Span {
269269/// use opentelemetry_sdk::trace::{FinishedSpan, ReadableSpan};
270270/// fn on_end(span: &mut FinishedSpan) {
271271/// // Read the span data without consuming it
272- /// if span.name() != "my_span" {
272+ /// if span.name() != Some( "my_span") {
273273/// return;
274274/// }
275275/// // Consume the span data, potentially cloning it
@@ -342,7 +342,7 @@ impl ReadableSpan for FinishedSpan {
342342 }
343343
344344 fn name ( & self ) -> Option < & str > {
345- Some ( & self . span . as_ref ( ) ? . name )
345+ Some ( & self . span_data_ref ( ) . name )
346346 }
347347 fn start_time ( & self ) -> Option < SystemTime > {
348348 Some ( self . span_data_ref ( ) . start_time )
@@ -558,9 +558,9 @@ mod tests {
558558 DEFAULT_MAX_ATTRIBUTES_PER_EVENT , DEFAULT_MAX_ATTRIBUTES_PER_LINK ,
559559 DEFAULT_MAX_ATTRIBUTES_PER_SPAN , DEFAULT_MAX_EVENT_PER_SPAN , DEFAULT_MAX_LINKS_PER_SPAN ,
560560 } ;
561- use crate :: trace:: { SpanEvents , SpanLinks , SpanProcessor } ;
561+ use crate :: trace:: { SdkTracer , SpanEvents , SpanLinks , SpanProcessor } ;
562562 use opentelemetry:: trace:: {
563- self , Span as _, SpanBuilder , TraceFlags , TraceId , Tracer , TracerProvider ,
563+ self , SamplingResult , Span as _, SpanBuilder , TraceFlags , TraceId , Tracer , TracerProvider ,
564564 } ;
565565 use std:: time:: Duration ;
566566 use std:: vec;
@@ -989,6 +989,82 @@ mod tests {
989989 assert_eq ! ( event_vec. len( ) , DEFAULT_MAX_EVENT_PER_SPAN as usize ) ;
990990 }
991991
992+ fn make_test_span ( tracer : & SdkTracer , sampling_decision : trace:: SamplingDecision ) -> Span {
993+ tracer
994+ . span_builder ( "test_span" )
995+ . with_sampling_result ( SamplingResult {
996+ decision : sampling_decision,
997+ attributes : vec ! [ ] ,
998+ trace_state : Default :: default ( ) ,
999+ } )
1000+ . with_attributes ( vec ! [ KeyValue :: new( "k" , "v" ) ] )
1001+ . with_kind ( SpanKind :: Client )
1002+ . with_events ( vec ! [ Event :: with_name( "test_event" ) ] )
1003+ . with_links ( vec ! [ Link :: with_context( SpanContext :: new(
1004+ TraceId :: from_bytes( ( 1234_u128 ) . to_ne_bytes( ) ) ,
1005+ SpanId :: from_bytes( ( 5678_u64 ) . to_ne_bytes( ) ) ,
1006+ Default :: default ( ) ,
1007+ false ,
1008+ Default :: default ( ) ,
1009+ ) ) ] )
1010+ . with_span_id ( SpanId :: from_bytes ( ( 1337_u64 ) . to_ne_bytes ( ) ) )
1011+ . start ( tracer)
1012+ }
1013+
1014+ #[ test]
1015+ fn test_readable_span ( ) {
1016+ use super :: ReadableSpan ;
1017+
1018+ let provider = crate :: trace:: SdkTracerProvider :: builder ( )
1019+ . with_simple_exporter ( NoopSpanExporter :: new ( ) )
1020+ . build ( ) ;
1021+ let tracer = provider. tracer ( "test" ) ;
1022+ {
1023+ // ReadableSpan trait methods for recording span
1024+ let span = make_test_span ( & tracer, trace:: SamplingDecision :: RecordOnly ) ;
1025+
1026+ assert_eq ! (
1027+ span. context( ) . span_id( ) ,
1028+ SpanId :: from_bytes( ( 1337_u64 ) . to_ne_bytes( ) )
1029+ ) ;
1030+
1031+ assert_eq ! ( span. name( ) , Some ( "test_span" ) ) ;
1032+ assert_eq ! ( span. span_kind( ) , SpanKind :: Client ) ;
1033+ assert ! ( span. start_time( ) . is_some( ) ) ;
1034+ assert ! ( span. end_time( ) . is_some( ) ) ;
1035+ assert_eq ! ( span. attributes( ) , & [ KeyValue :: new( "k" , "v" ) ] ) ;
1036+ assert_eq ! ( span. dropped_attributes_count( ) , 0 ) ;
1037+ assert_eq ! ( span. events( ) . len( ) , 1 ) ;
1038+ assert_eq ! ( span. events( ) [ 0 ] . name, "test_event" ) ;
1039+ assert_eq ! ( span. dropped_events_count( ) , 0 ) ;
1040+ assert_eq ! ( span. links( ) . len( ) , 1 ) ;
1041+ }
1042+
1043+ {
1044+ // ReadableSpan trait methods for non-recording span
1045+ let span = make_test_span ( & tracer, trace:: SamplingDecision :: Drop ) ;
1046+
1047+ assert_eq ! (
1048+ span. context( ) . span_id( ) ,
1049+ SpanId :: from_bytes( ( 1337_u64 ) . to_ne_bytes( ) )
1050+ ) ;
1051+
1052+ assert_eq ! ( span. name( ) , None ) ;
1053+ assert_eq ! ( span. span_kind( ) , SpanKind :: Internal ) ;
1054+ assert ! ( span. start_time( ) . is_none( ) ) ;
1055+ assert ! ( span. end_time( ) . is_none( ) ) ;
1056+ assert_eq ! ( span. attributes( ) , & [ ] ) ;
1057+ assert_eq ! ( span. dropped_attributes_count( ) , 0 ) ;
1058+ assert_eq ! ( span. events( ) . len( ) , 0 ) ;
1059+ assert_eq ! ( span. dropped_events_count( ) , 0 ) ;
1060+ assert_eq ! ( span. links( ) . len( ) , 0 ) ;
1061+ assert_eq ! (
1062+ span. context( ) . span_id( ) ,
1063+ SpanId :: from_bytes( ( 1337_u64 ) . to_ne_bytes( ) )
1064+ ) ;
1065+ }
1066+ }
1067+
9921068 #[ test]
9931069 fn test_span_exported_data ( ) {
9941070 let provider = crate :: trace:: SdkTracerProvider :: builder ( )
@@ -1018,11 +1094,22 @@ mod tests {
10181094 struct TestSpanProcessor ;
10191095 impl SpanProcessor for TestSpanProcessor {
10201096 fn on_end ( & self , span : & mut FinishedSpan ) {
1021- let parent_id = span. parent_span_id ( ) ;
1022- let name = span. name ( ) ;
1097+ assert_eq ! (
1098+ span. context( ) . span_id( ) ,
1099+ SpanId :: from_bytes( ( 1337_u64 ) . to_ne_bytes( ) )
1100+ ) ;
1101+
1102+ assert_eq ! ( span. name( ) , Some ( "test_span" ) ) ;
1103+ assert_eq ! ( span. span_kind( ) , SpanKind :: Client ) ;
1104+ assert ! ( span. start_time( ) . is_some( ) ) ;
1105+ assert ! ( span. end_time( ) . is_some( ) ) ;
1106+ assert_eq ! ( span. attributes( ) , & [ KeyValue :: new( "k" , "v" ) ] ) ;
1107+ assert_eq ! ( span. dropped_attributes_count( ) , 0 ) ;
1108+ assert_eq ! ( span. events( ) . len( ) , 1 ) ;
1109+ assert_eq ! ( span. events( ) [ 0 ] . name, "test_event" ) ;
1110+ assert_eq ! ( span. dropped_events_count( ) , 0 ) ;
1111+ assert_eq ! ( span. links( ) . len( ) , 1 ) ;
10231112
1024- assert_eq ! ( name, Some ( "test_span" ) ) ;
1025- assert_eq ! ( parent_id, SpanId :: INVALID ) ;
10261113 let _ = span. consume ( ) ;
10271114 }
10281115
@@ -1040,10 +1127,10 @@ mod tests {
10401127 let provider = crate :: trace:: SdkTracerProvider :: builder ( )
10411128 . with_span_processor ( TestSpanProcessor )
10421129 . build ( ) ;
1043- let tracer = provider . tracer ( "test" ) ;
1044- {
1045- tracer . start ( "test_span" ) ;
1046- }
1130+ drop ( make_test_span (
1131+ & provider . tracer ( "test" ) ,
1132+ trace :: SamplingDecision :: RecordAndSample ,
1133+ ) ) ;
10471134 let res = provider. shutdown ( ) ;
10481135 println ! ( "{:?}" , res) ;
10491136 assert ! ( res. is_ok( ) ) ;
@@ -1075,10 +1162,11 @@ mod tests {
10751162 let provider = crate :: trace:: SdkTracerProvider :: builder ( )
10761163 . with_span_processor ( TestSpanProcessor )
10771164 . build ( ) ;
1078- let tracer = provider. tracer ( "test" ) ;
1079- {
1080- tracer. start ( "test_span" ) ;
1081- }
1165+ drop ( make_test_span (
1166+ & provider. tracer ( "test" ) ,
1167+ trace:: SamplingDecision :: RecordAndSample ,
1168+ ) ) ;
1169+
10821170 let res = provider. shutdown ( ) ;
10831171 println ! ( "{:?}" , res) ;
10841172 assert ! ( res. is_ok( ) ) ;
0 commit comments