Skip to content

Commit 106828c

Browse files
committed
add browsertracing unit tests
remove no longer needed function
1 parent 33f9a10 commit 106828c

File tree

2 files changed

+56
-25
lines changed

2 files changed

+56
-25
lines changed

packages/tracing/src/browser/browsertracing.ts

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -242,20 +242,6 @@ export class BrowserTracing implements Integration {
242242
}
243243
}
244244

245-
/**
246-
* Gets transaction context from a sentry-trace meta.
247-
*
248-
* @returns Transaction context data from the header or undefined if there's no header or the header is malformed
249-
*/
250-
export function getHeaderContext(): Partial<TransactionContext> | undefined {
251-
const header = getMetaContent('sentry-trace');
252-
if (header) {
253-
return extractTraceparentData(header);
254-
}
255-
256-
return undefined;
257-
}
258-
259245
/**
260246
* Gets transaction context data from `sentry-trace` and `baggage` <meta> tags.
261247
* @returns Transaction context data or undefined neither tag exists or has valid data

packages/tracing/test/browser/browsertracing.test.ts

Lines changed: 56 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import { BrowserClient } from '@sentry/browser';
22
import { Hub, makeMain } from '@sentry/hub';
3+
import { BaggageObj } from '@sentry/types';
34
import { getGlobalObject, InstrumentHandlerCallback, InstrumentHandlerType } from '@sentry/utils';
45
import { JSDOM } from 'jsdom';
56

67
import {
78
BrowserTracing,
89
BrowserTracingOptions,
9-
getHeaderContext,
10+
extractTraceDataFromMetaTags,
1011
getMetaContent,
1112
} from '../../src/browser/browsertracing';
1213
import { MetricsInstrumentation } from '../../src/browser/metrics';
@@ -215,7 +216,8 @@ describe('BrowserTracing', () => {
215216
it('sets transaction context from sentry-trace header', () => {
216217
const name = 'sentry-trace';
217218
const content = '126de09502ae4e0fb26c6967190756a4-b6e54397b12a2a0f-1';
218-
document.head.innerHTML = `<meta name="${name}" content="${content}">`;
219+
document.head.innerHTML =
220+
`<meta name="${name}" content="${content}">` + '<meta name="baggage" content="sentry-release=2.1.14,foo=bar">';
219221
const startIdleTransaction = jest.spyOn(hubExtensions, 'startIdleTransaction');
220222

221223
createBrowserTracing(true, { routingInstrumentation: customInstrumentRouting });
@@ -226,6 +228,9 @@ describe('BrowserTracing', () => {
226228
traceId: '126de09502ae4e0fb26c6967190756a4',
227229
parentSpanId: 'b6e54397b12a2a0f',
228230
parentSampled: true,
231+
metadata: {
232+
baggage: [{ release: '2.1.14' }, 'foo=bar'],
233+
},
229234
}),
230235
expect.any(Number),
231236
expect.any(Number),
@@ -322,7 +327,7 @@ describe('BrowserTracing', () => {
322327
});
323328
});
324329

325-
describe('sentry-trace <meta> element', () => {
330+
describe('sentry-trace and baggage <meta> elements', () => {
326331
describe('getMetaContent', () => {
327332
it('finds the specified tag and extracts the value', () => {
328333
const name = 'sentry-trace';
@@ -352,67 +357,107 @@ describe('BrowserTracing', () => {
352357
});
353358
});
354359

355-
describe('getHeaderContext', () => {
360+
describe('extractTraceDataFromMetaTags()', () => {
356361
it('correctly parses a valid sentry-trace meta header', () => {
357362
document.head.innerHTML =
358363
'<meta name="sentry-trace" content="12312012123120121231201212312012-1121201211212012-0">';
359364

360-
const headerContext = getHeaderContext();
365+
const headerContext = extractTraceDataFromMetaTags();
361366

362367
expect(headerContext).toBeDefined();
363368
expect(headerContext!.traceId).toEqual('12312012123120121231201212312012');
364369
expect(headerContext!.parentSpanId).toEqual('1121201211212012');
365370
expect(headerContext!.parentSampled).toEqual(false);
366371
});
367372

368-
it('returns undefined if the header is malformed', () => {
373+
it('correctly parses a valid baggage meta header', () => {
374+
document.head.innerHTML = '<meta name="baggage" content="sentry-release=2.1.12,foo=bar">';
375+
376+
const headerContext = extractTraceDataFromMetaTags();
377+
378+
expect(headerContext).toBeDefined();
379+
expect(headerContext?.metadata?.baggage).toBeDefined();
380+
const baggage = headerContext?.metadata?.baggage!;
381+
expect(baggage[0]).toBeDefined();
382+
expect(baggage[0]).toEqual({
383+
release: '2.1.12',
384+
} as BaggageObj);
385+
expect(baggage[1]).toBeDefined();
386+
expect(baggage[1]).toEqual('foo=bar');
387+
});
388+
389+
it('returns undefined if the sentry-trace header is malformed', () => {
369390
document.head.innerHTML = '<meta name="sentry-trace" content="12312012-112120121-0">';
370391

371-
const headerContext = getHeaderContext();
392+
const headerContext = extractTraceDataFromMetaTags();
372393

373394
expect(headerContext).toBeUndefined();
374395
});
375396

397+
it('does not crash if the baggage header is malformed', () => {
398+
document.head.innerHTML = '<meta name="baggage" content="sentry-relase:2.1.13;foo-bar">';
399+
400+
const headerContext = extractTraceDataFromMetaTags();
401+
402+
// TODO currently this creates invalid baggage. This must be adressed in a follow-up PR
403+
expect(headerContext).toBeDefined();
404+
expect(headerContext?.metadata?.baggage).toBeDefined();
405+
const baggage = headerContext?.metadata?.baggage!;
406+
expect(baggage[0]).toBeDefined();
407+
//expect(baggage[0]).toEqual);
408+
expect(baggage[1]).toBeDefined();
409+
});
410+
376411
it("returns undefined if the header isn't there", () => {
377412
document.head.innerHTML = '<meta name="dogs" content="12312012123120121231201212312012-1121201211212012-0">';
378413

379-
const headerContext = getHeaderContext();
414+
const headerContext = extractTraceDataFromMetaTags();
380415

381416
expect(headerContext).toBeUndefined();
382417
});
383418
});
384419

385420
describe('using the data', () => {
386-
it('uses the data for pageload transactions', () => {
421+
it('uses the tracing data for pageload transactions', () => {
387422
// make sampled false here, so we can see that it's being used rather than the tracesSampleRate-dictated one
388423
document.head.innerHTML =
389-
'<meta name="sentry-trace" content="12312012123120121231201212312012-1121201211212012-0">';
424+
'<meta name="sentry-trace" content="12312012123120121231201212312012-1121201211212012-0">' +
425+
'<meta name="baggage" content="sentry-release=2.1.14,foo=bar">';
390426

391427
// pageload transactions are created as part of the BrowserTracing integration's initialization
392428
createBrowserTracing(true);
393429
const transaction = getActiveTransaction(hub) as IdleTransaction;
430+
const baggage = transaction.getBaggage()!;
394431

395432
expect(transaction).toBeDefined();
396433
expect(transaction.op).toBe('pageload');
397434
expect(transaction.traceId).toEqual('12312012123120121231201212312012');
398435
expect(transaction.parentSpanId).toEqual('1121201211212012');
399436
expect(transaction.sampled).toBe(false);
437+
expect(baggage).toBeDefined();
438+
expect(baggage[0]).toBeDefined();
439+
expect(baggage[0]).toEqual({ release: '2.1.14' });
440+
expect(baggage[1]).toBeDefined();
441+
expect(baggage[1]).toEqual('foo=bar');
400442
});
401443

402444
it('ignores the data for navigation transactions', () => {
403445
mockChangeHistory = () => undefined;
404446
document.head.innerHTML =
405-
'<meta name="sentry-trace" content="12312012123120121231201212312012-1121201211212012-0">';
447+
'<meta name="sentry-trace" content="12312012123120121231201212312012-1121201211212012-0">' +
448+
'<meta name="baggage" content="sentry-release=2.1.14,foo=bar">';
406449

407450
createBrowserTracing(true);
408451

409452
mockChangeHistory({ to: 'here', from: 'there' });
410453
const transaction = getActiveTransaction(hub) as IdleTransaction;
454+
const baggage = transaction.getBaggage()!;
411455

412456
expect(transaction).toBeDefined();
413457
expect(transaction.op).toBe('navigation');
414458
expect(transaction.traceId).not.toEqual('12312012123120121231201212312012');
415459
expect(transaction.parentSpanId).toBeUndefined();
460+
expect(baggage).toBeUndefined();
416461
});
417462
});
418463
});

0 commit comments

Comments
 (0)