diff --git a/CHANGELOG.md b/CHANGELOG.md index 199a6fcae..8ffc0ee53 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## Unreleased + +### Fixes + +- Do not attach headers if Span is NoOp ([#1143](https://github.com/getsentry/sentry-dart/pull/1143)) + ## 6.16.0 ### Features diff --git a/dart/lib/src/http_client/tracing_client.dart b/dart/lib/src/http_client/tracing_client.dart index 336286eba..322fab941 100644 --- a/dart/lib/src/http_client/tracing_client.dart +++ b/dart/lib/src/http_client/tracing_client.dart @@ -2,6 +2,7 @@ import 'package:http/http.dart'; import '../hub.dart'; import '../hub_adapter.dart'; import '../protocol.dart'; +import '../tracing.dart'; import '../utils/tracing_utils.dart'; /// A [http](https://pub.dev/packages/http)-package compatible HTTP client @@ -19,11 +20,16 @@ class TracingClient extends BaseClient { Future send(BaseRequest request) async { // see https://develop.sentry.dev/sdk/performance/#header-sentry-trace final currentSpan = _hub.getSpan(); - final span = currentSpan?.startChild( + var span = currentSpan?.startChild( 'http.client', description: '${request.method} ${request.url}', ); + // if the span is NoOp, we dont want to attach headers + if (span is NoOpSentrySpan) { + span = null; + } + StreamedResponse? response; try { if (span != null) { diff --git a/dart/test/http_client/tracing_client_test.dart b/dart/test/http_client/tracing_client_test.dart index 5a356e513..65927cfb9 100644 --- a/dart/test/http_client/tracing_client_test.dart +++ b/dart/test/http_client/tracing_client_test.dart @@ -135,6 +135,20 @@ void main() { expect(response.request!.headers[sentryTrace.name], sentryTrace.value); }); + test('captured span do not add headers if NoOp', () async { + final sut = fixture.getSut( + client: fixture.getClient(statusCode: 200, reason: 'OK'), + ); + + await fixture._hub + .configureScope((scope) => scope.span = NoOpSentrySpan()); + + final response = await sut.get(requestUri); + + expect(response.request!.headers['baggage'], null); + expect(response.request!.headers['sentry-trace'], null); + }); + test('captured span do not add headers if origins not set', () async { final sut = fixture.getSut( client: fixture.getClient( diff --git a/dio/lib/src/tracing_client_adapter.dart b/dio/lib/src/tracing_client_adapter.dart index 6a9162e1d..c24d26be5 100644 --- a/dio/lib/src/tracing_client_adapter.dart +++ b/dio/lib/src/tracing_client_adapter.dart @@ -25,11 +25,16 @@ class TracingClientAdapter extends HttpClientAdapter { ) async { // see https://develop.sentry.dev/sdk/performance/#header-sentry-trace final currentSpan = _hub.getSpan(); - final span = currentSpan?.startChild( + var span = currentSpan?.startChild( 'http.client', description: '${options.method} ${options.uri}', ); + // if the span is NoOp, we dont want to attach headers + if (span is NoOpSentrySpan) { + span = null; + } + ResponseBody? response; try { if (span != null) { diff --git a/dio/test/tracing_client_adapter_test.dart b/dio/test/tracing_client_adapter_test.dart index 5d27224a2..4251786c8 100644 --- a/dio/test/tracing_client_adapter_test.dart +++ b/dio/test/tracing_client_adapter_test.dart @@ -121,6 +121,19 @@ void main() { ); }); + test('captured span do not add headers if NoOp', () async { + final sut = fixture.getSut( + client: fixture.getClient(statusCode: 200, reason: 'OK'), + ); + await fixture._hub + .configureScope((scope) => scope.span = NoOpSentrySpan()); + + final response = await sut.get(requestOptions); + + expect(response.headers['baggage'], null); + expect(response.headers['sentry-trace'], null); + }); + test('do not throw if no span bound to the scope', () async { final sut = fixture.getSut( client: fixture.getClient(statusCode: 200, reason: 'OK'),