@@ -120,57 +120,87 @@ void main() {
120120 expect (span.throwable, exception);
121121 });
122122
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+ }
167163
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+ }
174204
175205 test (
176206 'tracing header from propagation context should generate new span ids for new events' ,
@@ -221,6 +251,7 @@ void main() {
221251
222252 expect (response.request! .headers[baggageHeader! .name], isNull);
223253 expect (response.request! .headers[sentryTraceHeader.name], isNull);
254+ expect (response.request! .headers['traceparent' ], isNull);
224255 });
225256
226257 test (
@@ -242,6 +273,7 @@ void main() {
242273
243274 expect (response.request! .headers[baggageHeader! .name], isNull);
244275 expect (response.request! .headers[sentryTraceHeader.name], isNull);
276+ expect (response.request! .headers['traceparent' ], isNull);
245277 });
246278
247279 test ('do not throw if no span bound to the scope' , () async {
0 commit comments