Skip to content

Commit 0e19dc1

Browse files
committed
adjust propagator tests
1 parent b12c0d9 commit 0e19dc1

File tree

1 file changed

+87
-3
lines changed

1 file changed

+87
-3
lines changed

packages/opentelemetry/test/propagator.test.ts

Lines changed: 87 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -500,14 +500,17 @@ describe('SentryPropagator', () => {
500500
);
501501
});
502502

503-
it('should overwrite existing sentry baggage header', () => {
503+
it('overwrites existing sentry baggage values and add sentry-trace header if sentry-trace is not set yet', () => {
504+
// This is an edeg case where someone set a baggage header with existing sentry- values but no sentry-trace header.
505+
// There's no evidence this occurs in real-life but if it does, we can assume that this must be some kind of error
506+
// Hence, we overwrite the existing sentry- values with our new ones but keep all other non-sentry values.
504507
const spanContext = {
505508
traceId: 'd4cda95b652f4a1592b449d5929fda1b',
506509
spanId: '6e0c63257de34c92',
507510
traceFlags: TraceFlags.SAMPLED,
508511
};
509512

510-
const carrier = {
513+
const carrier: Record<string, string> = {
511514
baggage: 'foo=bar,other=yes,sentry-release=9.9.9,sentry-other=yes',
512515
};
513516
const context = trace.setSpanContext(ROOT_CONTEXT, spanContext);
@@ -520,11 +523,11 @@ describe('SentryPropagator', () => {
520523
'sentry-trace_id=d4cda95b652f4a1592b449d5929fda1b',
521524
'sentry-public_key=abc',
522525
'sentry-environment=production',
523-
'sentry-other=yes',
524526
'sentry-release=1.0.0',
525527
'sentry-sampled=true',
526528
].sort(),
527529
);
530+
expect(carrier[SENTRY_TRACE_HEADER]).toBe('d4cda95b652f4a1592b449d5929fda1b-6e0c63257de34c92-1');
528531
});
529532

530533
it('should create baggage without propagation context', () => {
@@ -537,6 +540,7 @@ describe('SentryPropagator', () => {
537540
expect(carrier[SENTRY_BAGGAGE_HEADER]).toBe(
538541
`foo=bar,sentry-environment=production,sentry-release=1.0.0,sentry-public_key=abc,sentry-trace_id=${traceId}`,
539542
);
543+
expect(carrier[SENTRY_TRACE_HEADER]).toBeDefined(); // whenever we set baggage, we must also set sentry-trace
540544
});
541545

542546
it('should NOT set baggage and sentry-trace header if instrumentation is suppressed', () => {
@@ -551,6 +555,86 @@ describe('SentryPropagator', () => {
551555
expect(carrier[SENTRY_TRACE_HEADER]).toBe(undefined);
552556
expect(carrier[SENTRY_BAGGAGE_HEADER]).toBe(undefined);
553557
});
558+
559+
it("doesn't set baggage header if sentry-trace header is already set", () => {
560+
const carrier: Record<string, string> = {
561+
[SENTRY_TRACE_HEADER]: 'abcdef-xyz-1',
562+
};
563+
propagator.inject(ROOT_CONTEXT, carrier, defaultTextMapSetter);
564+
565+
expect(carrier[SENTRY_BAGGAGE_HEADER]).toBe(undefined);
566+
expect(carrier[SENTRY_TRACE_HEADER]).toBe('abcdef-xyz-1');
567+
});
568+
569+
describe('traceparent header', () => {
570+
it("doesn't change baggage header if sentry-trace header is already set", () => {
571+
const carrier: Record<string, string> = {
572+
[SENTRY_TRACE_HEADER]: 'abcdef-xyz-1',
573+
[SENTRY_BAGGAGE_HEADER]: 'foo=bar,other=yes,sentry-release=9.9.9',
574+
};
575+
propagator.inject(ROOT_CONTEXT, carrier, defaultTextMapSetter);
576+
577+
expect(carrier[SENTRY_BAGGAGE_HEADER]).toBe('foo=bar,other=yes,sentry-release=9.9.9');
578+
expect(carrier[SENTRY_TRACE_HEADER]).toBe('abcdef-xyz-1');
579+
});
580+
581+
it("doesn't set traceparent header if sentry-trace header is already set", () => {
582+
mockSdkInit({ propagateTraceparent: true });
583+
const carrier: Record<string, string> = {
584+
[SENTRY_TRACE_HEADER]: 'abcdef-xyz-1',
585+
};
586+
propagator.inject(ROOT_CONTEXT, carrier, defaultTextMapSetter);
587+
588+
expect(carrier['traceparent']).toBe(undefined);
589+
expect(carrier[SENTRY_TRACE_HEADER]).toBe('abcdef-xyz-1');
590+
});
591+
592+
it('sets traceparent header if propagateTraceparent is true', () => {
593+
mockSdkInit({
594+
environment: 'production',
595+
release: '1.0.0',
596+
tracesSampleRate: 1,
597+
dsn: 'https://abc@domain/123',
598+
propagateTraceparent: true,
599+
});
600+
601+
const spanContext = {
602+
traceId: 'd4cda95b652f4a1592b449d5929fda1b',
603+
spanId: '6e0c63257de34c92',
604+
traceFlags: TraceFlags.SAMPLED,
605+
};
606+
const context = trace.setSpanContext(ROOT_CONTEXT, spanContext);
607+
const baggage = propagation.createBaggage({ foo: { value: 'bar' } });
608+
propagator.inject(propagation.setBaggage(context, baggage), carrier, defaultTextMapSetter);
609+
610+
expect(baggageToArray(carrier[SENTRY_BAGGAGE_HEADER])).toEqual(
611+
[
612+
'foo=bar',
613+
'sentry-trace_id=d4cda95b652f4a1592b449d5929fda1b',
614+
'sentry-public_key=abc',
615+
'sentry-environment=production',
616+
'sentry-release=1.0.0',
617+
'sentry-sampled=true',
618+
].sort(),
619+
);
620+
expect(carrier['traceparent']).toBe('00-d4cda95b652f4a1592b449d5929fda1b-6e0c63257de34c92-01');
621+
});
622+
623+
it("doesn't set traceparent header if propagateTraceparent is false", () => {
624+
mockSdkInit({
625+
environment: 'production',
626+
release: '1.0.0',
627+
tracesSampleRate: 1,
628+
dsn: 'https://abc@domain/123',
629+
propagateTraceparent: false,
630+
});
631+
const carrier: Record<string, string> = {};
632+
propagator.inject(ROOT_CONTEXT, carrier, defaultTextMapSetter);
633+
634+
expect(carrier['traceparent']).toBe(undefined);
635+
expect(carrier[SENTRY_TRACE_HEADER]).toBeDefined();
636+
});
637+
});
554638
});
555639

556640
describe('extract', () => {

0 commit comments

Comments
 (0)