Skip to content

Commit a9ff1bc

Browse files
committed
cleanup, fix test, fix colon bug in string->array header conversion
1 parent 978b88d commit a9ff1bc

16 files changed

Lines changed: 104 additions & 175 deletions

File tree

dev-packages/node-integration-tests/suites/express/sentry-trace/baggage-other-vendors-with-sentry-entries/test.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ test('should ignore sentry-values in `baggage` header of a third party vendor an
1313
const response = await runner.makeRequest<TestAPIResponse>('get', '/test/express', {
1414
headers: {
1515
'sentry-trace': '12312012123120121231201212312012-1121201211212012-1',
16-
baggage: 'sentry-release=2.1.0,sentry-environment=myEnv,sentry-sample_rate=0.54',
16+
baggage: 'sentry-release=2.1.0,sentry-environment=myEnv',
1717
},
1818
});
1919

@@ -34,7 +34,6 @@ test('should ignore sentry-values in `baggage` header of a third party vendor an
3434
'sentry-environment=myEnv',
3535
'sentry-release=2.1.0',
3636
expect.stringMatching(/sentry-sample_rand=\d+/),
37-
'sentry-sample_rate=0.54',
3837
'third=party',
3938
]);
4039
});

dev-packages/node-integration-tests/suites/tracing/double-baggage-no-spans/test.ts

Lines changed: 0 additions & 84 deletions
This file was deleted.
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import { expect } from 'vitest';
2+
import { extractTraceparentData, parseBaggageHeader, TRACEPARENT_REGEXP } from '@sentry/core';
3+
4+
export function expectNoDuplicateSentryBaggageKeys(baggage: string | string[] | undefined): void {
5+
expect(baggage).toBeDefined();
6+
const baggageStr = Array.isArray(baggage) ? baggage.join(',') : (baggage as string);
7+
const sentryEntries = baggageStr.split(',').filter(entry => entry.trim().startsWith('sentry-'));
8+
const sentryKeyNames = sentryEntries.map(entry => entry.trim().split('=')[0]);
9+
const uniqueKeyNames = [...new Set(sentryKeyNames)];
10+
expect(sentryKeyNames).toEqual(uniqueKeyNames);
11+
}
12+
13+
export function expectConsistentTraceId(headers: Record<string, string | string[] | undefined>): void {
14+
const sentryTrace = headers['sentry-trace'];
15+
expect(sentryTrace).toMatch(TRACEPARENT_REGEXP);
16+
17+
const sentryTraceData = extractTraceparentData(sentryTrace as string)!;
18+
expect(sentryTraceData.traceId).toMatch(/^[a-f\d]{32}$/);
19+
20+
const baggage = parseBaggageHeader(headers['baggage']);
21+
22+
const baggageTraceId = baggage!['sentry-trace_id'];
23+
expect(baggageTraceId).toBeDefined();
24+
expect(baggageTraceId).toMatch(/^[a-f\d]{32}$/);
25+
26+
expect(sentryTraceData.traceId).toEqual(baggageTraceId);
27+
}
28+
29+
export function expectUserSetTraceId(headers: Record<string, string | string[] | undefined>): void {
30+
const xSentryTrace = extractTraceparentData(headers['x-tracedata-sentry-trace'] as string);
31+
const sentryTrace = extractTraceparentData(headers['sentry-trace'] as string);
32+
expect(xSentryTrace?.traceId).toBe(sentryTrace?.traceId);
33+
34+
const xBaggage = parseBaggageHeader(headers['x-tracedata-baggage']);
35+
const baggage = parseBaggageHeader(headers['baggage']);
36+
expect(xBaggage).toEqual(baggage);
37+
}

dev-packages/node-integration-tests/suites/tracing/double-baggage-no-spans/instrument.mjs renamed to dev-packages/node-integration-tests/suites/tracing/double-baggage/no-spans/instrument.mjs

File renamed without changes.

dev-packages/node-integration-tests/suites/tracing/double-baggage-no-spans/scenario.mjs renamed to dev-packages/node-integration-tests/suites/tracing/double-baggage/no-spans/scenario.mjs

File renamed without changes.
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import { createTestServer } from '@sentry-internal/test-utils';
2+
import { describe, expect } from 'vitest';
3+
import { createEsmAndCjsTests } from '../../../../utils/runner';
4+
import { expectConsistentTraceId, expectNoDuplicateSentryBaggageKeys, expectUserSetTraceId } from '../expects';
5+
6+
describe('double baggage prevention', () => {
7+
createEsmAndCjsTests(__dirname, 'scenario.mjs', 'instrument.mjs', (createRunner, test) => {
8+
test('fetch with manual getTraceData() does not duplicate sentry baggage entries', async () => {
9+
const [SERVER_URL, closeTestServer] = await createTestServer()
10+
.get('/api/fetch-custom-headers', headers => {
11+
// fetch with manual getTraceData() headers
12+
expect(headers['sentry-trace']).toEqual(expect.stringMatching(/^[a-f\d]{32}-[a-f\d]{16}$/));
13+
expectNoDuplicateSentryBaggageKeys(headers['baggage']);
14+
expectConsistentTraceId(headers);
15+
expectUserSetTraceId(headers);
16+
})
17+
.get('/api/fetch', headers => {
18+
// fetch without manual headers (baseline)
19+
expect(headers['sentry-trace']).toEqual(expect.stringMatching(/^[a-f\d]{32}-[a-f\d]{16}$/));
20+
expectNoDuplicateSentryBaggageKeys(headers['baggage']);
21+
expectConsistentTraceId(headers);
22+
})
23+
.get('/api/http-custom-headers', headers => {
24+
// http.request with manual getTraceData() headers
25+
expect(headers['sentry-trace']).toEqual(expect.stringMatching(/^[a-f\d]{32}-[a-f\d]{16}$/));
26+
expectNoDuplicateSentryBaggageKeys(headers['baggage']);
27+
expectConsistentTraceId(headers);
28+
expectUserSetTraceId(headers);
29+
})
30+
.start();
31+
32+
await createRunner()
33+
.withEnv({ SERVER_URL })
34+
.ignore('transaction')
35+
.expect({
36+
event: {
37+
exception: {
38+
values: [{ type: 'Error', value: 'done' }],
39+
},
40+
},
41+
})
42+
.start()
43+
.completed();
44+
closeTestServer();
45+
});
46+
});
47+
});

dev-packages/node-integration-tests/suites/tracing/double-baggage-spans-parent/instrument.mjs renamed to dev-packages/node-integration-tests/suites/tracing/double-baggage/spans-no-parent/instrument.mjs

File renamed without changes.

dev-packages/node-integration-tests/suites/tracing/double-baggage-spans-no-parent/scenario.mjs renamed to dev-packages/node-integration-tests/suites/tracing/double-baggage/spans-no-parent/scenario.mjs

File renamed without changes.

dev-packages/node-integration-tests/suites/tracing/double-baggage-spans-no-parent/test.ts renamed to dev-packages/node-integration-tests/suites/tracing/double-baggage/spans-no-parent/test.ts

Lines changed: 2 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,7 @@
11
import { createTestServer } from '@sentry-internal/test-utils';
22
import { describe, expect } from 'vitest';
3-
import { createEsmAndCjsTests } from '../../../utils/runner';
4-
import { extractTraceparentData, parseBaggageHeader, TRACEPARENT_REGEXP } from '@sentry/core';
5-
6-
function expectNoDuplicateSentryBaggageKeys(baggage: string | string[] | undefined): void {
7-
expect(baggage).toBeDefined();
8-
const baggageStr = Array.isArray(baggage) ? baggage.join(',') : (baggage as string);
9-
const sentryKeyNames = Object.keys(parseBaggageHeader(baggageStr) || {});
10-
const uniqueKeyNames = [...new Set(sentryKeyNames)];
11-
expect(sentryKeyNames).toEqual(uniqueKeyNames);
12-
}
13-
14-
function expectConsistentTraceId(headers: Record<string, string | string[] | undefined>): void {
15-
const sentryTrace = headers['sentry-trace'];
16-
expect(sentryTrace).toMatch(TRACEPARENT_REGEXP);
17-
18-
const sentryTraceData = extractTraceparentData(sentryTrace as string)!;
19-
expect(sentryTraceData.traceId).toMatch(/^[a-f\d]{32}$/);
20-
21-
const baggage = parseBaggageHeader(headers['baggage']);
22-
23-
const baggageTraceId = baggage!['sentry-trace_id'];
24-
expect(baggageTraceId).toBeDefined();
25-
expect(baggageTraceId).toMatch(/^[a-f\d]{32}$/);
26-
27-
expect(sentryTraceData.traceId).toEqual(baggageTraceId);
28-
}
29-
30-
function expectUserSetTraceId(headers: Record<string, string | string[] | undefined>): void {
31-
const xSentryTrace = extractTraceparentData(headers['x-tracedata-sentry-trace'] as string);
32-
const sentryTrace = extractTraceparentData(headers['sentry-trace'] as string);
33-
expect(xSentryTrace?.traceId).toBe(sentryTrace?.traceId);
34-
35-
const xBaggage = parseBaggageHeader(headers['x-tracedata-baggage']);
36-
const baggage = parseBaggageHeader(headers['baggage']);
37-
expect(xBaggage).toEqual(baggage);
38-
}
3+
import { createEsmAndCjsTests } from '../../../../utils/runner';
4+
import { expectConsistentTraceId, expectNoDuplicateSentryBaggageKeys, expectUserSetTraceId } from '../expects';
395

406
describe('double baggage prevention', () => {
417
createEsmAndCjsTests(__dirname, 'scenario.mjs', 'instrument.mjs', (createRunner, test) => {

dev-packages/node-integration-tests/suites/tracing/double-baggage-spans-no-parent/instrument.mjs renamed to dev-packages/node-integration-tests/suites/tracing/double-baggage/spans-parent/instrument.mjs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,4 @@ Sentry.init({
66
release: '1.0',
77
tracesSampleRate: 1.0,
88
transport: loggingTransport,
9-
debug: true,
109
});

0 commit comments

Comments
 (0)