@@ -52,7 +52,7 @@ mod tests {
52
52
} ;
53
53
use opentelemetry:: testing:: trace:: TestSpan ;
54
54
use opentelemetry:: trace:: {
55
- SamplingDecision , SamplingResult , SpanKind , TraceContextExt , TraceState ,
55
+ SamplingDecision , SamplingResult , SpanKind , Status , TraceContextExt , TraceState ,
56
56
} ;
57
57
use opentelemetry:: {
58
58
trace:: {
@@ -63,7 +63,7 @@ mod tests {
63
63
} ;
64
64
65
65
#[ test]
66
- fn in_span ( ) {
66
+ fn tracer_in_span ( ) {
67
67
// Arrange
68
68
let exporter = InMemorySpanExporterBuilder :: new ( ) . build ( ) ;
69
69
let provider = TracerProvider :: builder ( )
@@ -72,7 +72,13 @@ mod tests {
72
72
73
73
// Act
74
74
let tracer = provider. tracer ( "test_tracer" ) ;
75
- tracer. in_span ( "span_name" , |_cx| { } ) ;
75
+ tracer. in_span ( "span_name" , |cx| {
76
+ let span = cx. span ( ) ;
77
+ assert ! ( span. is_recording( ) ) ;
78
+ span. update_name ( "span_name_updated" ) ;
79
+ span. set_attribute ( KeyValue :: new ( "attribute1" , "value1" ) ) ;
80
+ span. add_event ( "test-event" . to_string ( ) , vec ! [ ] ) ;
81
+ } ) ;
76
82
77
83
provider. force_flush ( ) ;
78
84
@@ -82,8 +88,14 @@ mod tests {
82
88
. expect ( "Spans are expected to be exported." ) ;
83
89
assert_eq ! ( exported_spans. len( ) , 1 ) ;
84
90
let span = & exported_spans[ 0 ] ;
85
- assert_eq ! ( span. name, "span_name " ) ;
91
+ assert_eq ! ( span. name, "span_name_updated " ) ;
86
92
assert_eq ! ( span. instrumentation_lib. name, "test_tracer" ) ;
93
+ assert_eq ! ( span. attributes. len( ) , 1 ) ;
94
+ assert_eq ! ( span. events. len( ) , 1 ) ;
95
+ assert_eq ! ( span. events[ 0 ] . name, "test-event" ) ;
96
+ assert_eq ! ( span. span_context. trace_flags( ) , TraceFlags :: SAMPLED ) ;
97
+ assert ! ( !span. span_context. is_remote( ) ) ;
98
+ assert_eq ! ( span. status, Status :: Unset ) ;
87
99
}
88
100
89
101
#[ test]
@@ -97,7 +109,46 @@ mod tests {
97
109
// Act
98
110
let tracer = provider. tracer ( "test_tracer" ) ;
99
111
let mut span = tracer. start ( "span_name" ) ;
100
- span. set_attribute ( KeyValue :: new ( "key1" , "value1" ) ) ;
112
+ span. set_attribute ( KeyValue :: new ( "attribute1" , "value1" ) ) ;
113
+ span. add_event ( "test-event" . to_string ( ) , vec ! [ ] ) ;
114
+ span. set_status ( Status :: error ( "cancelled" ) ) ;
115
+ drop ( span) ;
116
+ provider. force_flush ( ) ;
117
+
118
+ // Assert
119
+ let exported_spans = exporter
120
+ . get_finished_spans ( )
121
+ . expect ( "Spans are expected to be exported." ) ;
122
+ assert_eq ! ( exported_spans. len( ) , 1 ) ;
123
+ let span = & exported_spans[ 0 ] ;
124
+ assert_eq ! ( span. name, "span_name" ) ;
125
+ assert_eq ! ( span. instrumentation_lib. name, "test_tracer" ) ;
126
+ assert_eq ! ( span. attributes. len( ) , 1 ) ;
127
+ assert_eq ! ( span. events. len( ) , 1 ) ;
128
+ assert_eq ! ( span. events[ 0 ] . name, "test-event" ) ;
129
+ assert_eq ! ( span. span_context. trace_flags( ) , TraceFlags :: SAMPLED ) ;
130
+ assert ! ( !span. span_context. is_remote( ) ) ;
131
+ let status_expected = Status :: error ( "cancelled" ) ;
132
+ assert_eq ! ( span. status, status_expected) ;
133
+ }
134
+
135
+ #[ test]
136
+ fn tracer_span_builder ( ) {
137
+ // Arrange
138
+ let exporter = InMemorySpanExporterBuilder :: new ( ) . build ( ) ;
139
+ let provider = TracerProvider :: builder ( )
140
+ . with_span_processor ( SimpleSpanProcessor :: new ( Box :: new ( exporter. clone ( ) ) ) )
141
+ . build ( ) ;
142
+
143
+ // Act
144
+ let tracer = provider. tracer ( "test_tracer" ) ;
145
+ let mut span = tracer
146
+ . span_builder ( "span_name" )
147
+ . with_kind ( SpanKind :: Server )
148
+ . start ( & tracer) ;
149
+ span. set_attribute ( KeyValue :: new ( "attribute1" , "value1" ) ) ;
150
+ span. add_event ( "test-event" . to_string ( ) , vec ! [ ] ) ;
151
+ span. set_status ( Status :: Ok ) ;
101
152
drop ( span) ;
102
153
provider. force_flush ( ) ;
103
154
@@ -108,7 +159,14 @@ mod tests {
108
159
assert_eq ! ( exported_spans. len( ) , 1 ) ;
109
160
let span = & exported_spans[ 0 ] ;
110
161
assert_eq ! ( span. name, "span_name" ) ;
162
+ assert_eq ! ( span. span_kind, SpanKind :: Server ) ;
111
163
assert_eq ! ( span. instrumentation_lib. name, "test_tracer" ) ;
164
+ assert_eq ! ( span. attributes. len( ) , 1 ) ;
165
+ assert_eq ! ( span. events. len( ) , 1 ) ;
166
+ assert_eq ! ( span. events[ 0 ] . name, "test-event" ) ;
167
+ assert_eq ! ( span. span_context. trace_flags( ) , TraceFlags :: SAMPLED ) ;
168
+ assert ! ( !span. span_context. is_remote( ) ) ;
169
+ assert_eq ! ( span. status, Status :: Ok ) ;
112
170
}
113
171
114
172
#[ test]
0 commit comments