@@ -120,57 +120,87 @@ void main() {
120
120
expect (span.throwable, exception);
121
121
});
122
122
123
- test ('should add tracing headers from span when tracing enabled' , () async {
124
- final sut = fixture.getSut (
125
- client: fixture.getClient (statusCode: 200 , reason: 'OK' ),
126
- );
127
- final tr = fixture._hub.startTransaction (
128
- 'name' ,
129
- 'op' ,
130
- bindToScope: true ,
131
- );
132
-
133
- final response = await sut.get (requestUri);
134
-
135
- await tr.finish ();
136
-
137
- final tracer = (tr as SentryTracer );
138
- expect (tracer.children.length, 1 );
139
- final span = tracer.children.first;
140
- final baggageHeader = span.toBaggageHeader ();
141
- final sentryTraceHeader = span.toSentryTrace ();
142
-
143
- expect (
144
- response.request! .headers[baggageHeader! .name], baggageHeader.value);
145
- expect (response.request! .headers[sentryTraceHeader.name],
146
- sentryTraceHeader.value);
147
- });
148
-
149
- test (
150
- 'should add tracing headers from propagation context when tracing disabled' ,
151
- () async {
152
- fixture._hub.options.tracesSampleRate = null ;
153
- fixture._hub.options.tracesSampler = null ;
154
- final sut = fixture.getSut (
155
- client: fixture.getClient (statusCode: 200 , reason: 'OK' ),
156
- );
157
- final propagationContext = fixture._hub.scope.propagationContext;
158
- propagationContext.baggage = SentryBaggage ({'foo' : 'bar' });
159
-
160
- final response = await sut.get (requestUri);
161
-
162
- final baggageHeader = propagationContext.toBaggageHeader ();
163
-
164
- expect (propagationContext.toBaggageHeader (), isNotNull);
165
- expect (
166
- response.request! .headers[baggageHeader! .name], baggageHeader.value);
123
+ for (final propagate in < bool > [true , false ]) {
124
+ test (
125
+ 'should add tracing headers from span when tracing enabled (propagateTraceparent: $propagate )' ,
126
+ () async {
127
+ final sut = fixture.getSut (
128
+ client: fixture.getClient (statusCode: 200 , reason: 'OK' ),
129
+ );
130
+ fixture._hub.options.propagateTraceparent = propagate;
131
+
132
+ final tr = fixture._hub.startTransaction (
133
+ 'name' ,
134
+ 'op' ,
135
+ bindToScope: true ,
136
+ );
137
+
138
+ final response = await sut.get (requestUri);
139
+
140
+ await tr.finish ();
141
+
142
+ final tracer = (tr as SentryTracer );
143
+ final span = tracer.children.first;
144
+ final baggageHeader = span.toBaggageHeader ();
145
+ final sentryTraceHeader = span.toSentryTrace ();
146
+
147
+ expect (response.request! .headers[baggageHeader! .name],
148
+ baggageHeader.value);
149
+ expect (response.request! .headers[sentryTraceHeader.name],
150
+ sentryTraceHeader.value);
151
+
152
+ final traceHeader = span.toSentryTrace ();
153
+ final expected =
154
+ '00-${traceHeader .traceId }-${traceHeader .spanId }-${traceHeader .sampled == true ? '01' : '00' }' ;
155
+
156
+ if (propagate) {
157
+ expect (response.request! .headers['traceparent' ], expected);
158
+ } else {
159
+ expect (response.request! .headers['traceparent' ], isNull);
160
+ }
161
+ });
162
+ }
167
163
168
- final traceHeader = SentryTraceHeader .fromTraceHeader (
169
- response.request! .headers['sentry-trace' ] as String ,
170
- );
171
- expect (traceHeader.traceId, propagationContext.traceId);
172
- // can't check span id as it is always generated new
173
- });
164
+ for (final propagate in < bool > [true , false ]) {
165
+ test (
166
+ 'should add tracing headers from propagation context when tracing disabled (propagateTraceparent: $propagate )' ,
167
+ () async {
168
+ fixture._hub.options.tracesSampleRate = null ;
169
+ fixture._hub.options.tracesSampler = null ;
170
+ fixture._hub.options.propagateTraceparent = propagate;
171
+
172
+ final sut = fixture.getSut (
173
+ client: fixture.getClient (statusCode: 200 , reason: 'OK' ),
174
+ );
175
+ final propagationContext = fixture._hub.scope.propagationContext;
176
+ propagationContext.baggage = SentryBaggage ({'foo' : 'bar' });
177
+
178
+ final response = await sut.get (requestUri);
179
+
180
+ final baggageHeader = propagationContext.toBaggageHeader ();
181
+
182
+ expect (propagationContext.toBaggageHeader (), isNotNull);
183
+ expect (response.request! .headers[baggageHeader! .name],
184
+ baggageHeader.value);
185
+
186
+ final traceHeader = SentryTraceHeader .fromTraceHeader (
187
+ response.request! .headers['sentry-trace' ] as String ,
188
+ );
189
+ expect (traceHeader.traceId, propagationContext.traceId);
190
+
191
+ if (propagate) {
192
+ final headerValue = response.request! .headers['traceparent' ]! ;
193
+ final parts = headerValue.split ('-' );
194
+ expect (parts.length, 4 );
195
+ expect (parts[0 ], '00' );
196
+ expect (parts[1 ], propagationContext.traceId.toString ());
197
+ expect (parts[2 ].length, 16 );
198
+ expect (parts[3 ], '00' );
199
+ } else {
200
+ expect (response.request! .headers['traceparent' ], isNull);
201
+ }
202
+ });
203
+ }
174
204
175
205
test (
176
206
'tracing header from propagation context should generate new span ids for new events' ,
@@ -221,6 +251,7 @@ void main() {
221
251
222
252
expect (response.request! .headers[baggageHeader! .name], isNull);
223
253
expect (response.request! .headers[sentryTraceHeader.name], isNull);
254
+ expect (response.request! .headers['traceparent' ], isNull);
224
255
});
225
256
226
257
test (
@@ -242,6 +273,7 @@ void main() {
242
273
243
274
expect (response.request! .headers[baggageHeader! .name], isNull);
244
275
expect (response.request! .headers[sentryTraceHeader.name], isNull);
276
+ expect (response.request! .headers['traceparent' ], isNull);
245
277
});
246
278
247
279
test ('do not throw if no span bound to the scope' , () async {
0 commit comments