From b5a6a1cf36bc8ea0cd430da97cd8efbb9915609d Mon Sep 17 00:00:00 2001 From: doronkopit5 Date: Mon, 14 Mar 2022 13:46:26 +0200 Subject: [PATCH] fix(opentelemtry-core): fix header extraction --- .../propagation/W3CBaggagePropagator.ts | 3 +- .../test/baggage/W3CBaggagePropagator.test.ts | 30 ++++++++++++++----- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/packages/opentelemetry-core/src/baggage/propagation/W3CBaggagePropagator.ts b/packages/opentelemetry-core/src/baggage/propagation/W3CBaggagePropagator.ts index 652cc14c3a..d38b92c77d 100644 --- a/packages/opentelemetry-core/src/baggage/propagation/W3CBaggagePropagator.ts +++ b/packages/opentelemetry-core/src/baggage/propagation/W3CBaggagePropagator.ts @@ -58,7 +58,8 @@ export class W3CBaggagePropagator implements TextMapPropagator { } extract(context: Context, carrier: unknown, getter: TextMapGetter): Context { - const headerValue: string = getter.get(carrier, BAGGAGE_HEADER) as string; + const headerBaggage = getter.get(carrier, BAGGAGE_HEADER); + const headerValue: string = (headerBaggage instanceof Array)? headerBaggage[0]: headerBaggage as string; if (!headerValue) return context; const baggage: Record = {}; if (headerValue.length === 0) { diff --git a/packages/opentelemetry-core/test/baggage/W3CBaggagePropagator.test.ts b/packages/opentelemetry-core/test/baggage/W3CBaggagePropagator.test.ts index 38de668087..8f5fc3cf9d 100644 --- a/packages/opentelemetry-core/test/baggage/W3CBaggagePropagator.test.ts +++ b/packages/opentelemetry-core/test/baggage/W3CBaggagePropagator.test.ts @@ -175,9 +175,29 @@ describe('W3CBaggagePropagator', () => { }); describe('.extract()', () => { + const baggageValue = 'key1=d4cda95b,key3=c88815a7, keyn = valn, keym =valm'; + const expected = propagation.createBaggage({ + key1: { value: 'd4cda95b' }, + key3: { value: 'c88815a7' }, + keyn: { value: 'valn' }, + keym: { value: 'valm' }, + }); + it('should extract context of a sampled span from carrier', () => { - carrier[BAGGAGE_HEADER] = - 'key1=d4cda95b,key3=c88815a7, keyn = valn, keym =valm'; + carrier[BAGGAGE_HEADER] = baggageValue; + const extractedBaggage = propagation.getBaggage( + httpBaggagePropagator.extract( + ROOT_CONTEXT, + carrier, + defaultTextMapGetter + ) + ); + + assert.deepStrictEqual(extractedBaggage, expected); + }); + + it('should extract context of a sampled span when the headerValue comes as array', () => { + carrier[BAGGAGE_HEADER] = [baggageValue]; const extractedBaggage = propagation.getBaggage( httpBaggagePropagator.extract( ROOT_CONTEXT, @@ -186,12 +206,6 @@ describe('W3CBaggagePropagator', () => { ) ); - const expected = propagation.createBaggage({ - key1: { value: 'd4cda95b' }, - key3: { value: 'c88815a7' }, - keyn: { value: 'valn' }, - keym: { value: 'valm' }, - }); assert.deepStrictEqual(extractedBaggage, expected); }); });