@@ -4,8 +4,17 @@ require('../setup/tap')
44
55const { expect } = require ( 'chai' )
66const ContextManager = require ( '../../src/opentelemetry/context_manager' )
7- const { ROOT_CONTEXT } = require ( '@opentelemetry/api' )
7+ const TracerProvider = require ( '../../src/opentelemetry/tracer_provider' )
8+ const { context, propagation, trace, ROOT_CONTEXT } = require ( '@opentelemetry/api' )
89const api = require ( '@opentelemetry/api' )
10+ const tracer = require ( '../../' ) . init ( )
11+
12+ function makeSpan ( ...args ) {
13+ const tracerProvider = new TracerProvider ( )
14+ tracerProvider . register ( )
15+ const tracer = tracerProvider . getTracer ( )
16+ return tracer . startSpan ( ...args )
17+ }
918
1019describe ( 'OTel Context Manager' , ( ) => {
1120 let contextManager
@@ -114,4 +123,75 @@ describe('OTel Context Manager', () => {
114123 } )
115124 expect ( ret ) . to . equal ( 'return value' )
116125 } )
126+
127+ it ( 'should propagate baggage from an otel span to a datadog span' , ( ) => {
128+ const entries = {
129+ foo : { value : 'bar' }
130+ }
131+ const baggage = propagation . createBaggage ( entries )
132+ const contextWithBaggage = propagation . setBaggage ( context . active ( ) , baggage )
133+ const span = makeSpan ( 'otel-to-dd' )
134+ const contextWithSpan = trace . setSpan ( contextWithBaggage , span )
135+ api . context . with ( contextWithSpan , ( ) => {
136+ expect ( tracer . scope ( ) . active ( ) . getBaggageItem ( 'foo' ) ) . to . be . equal ( 'bar' )
137+ } )
138+ } )
139+
140+ it ( 'should propagate baggage from a datadog span to an otel span' , ( ) => {
141+ const baggageKey = 'raccoon'
142+ const baggageVal = 'chunky'
143+ const ddSpan = tracer . startSpan ( 'dd-to-otel' )
144+ ddSpan . setBaggageItem ( baggageKey , baggageVal )
145+ tracer . scope ( ) . activate ( ddSpan , ( ) => {
146+ const baggages = propagation . getActiveBaggage ( ) . getAllEntries ( )
147+ expect ( baggages . length ) . to . equal ( 1 )
148+ const baggage = baggages [ 0 ]
149+ expect ( baggage [ 0 ] ) . to . equal ( baggageKey )
150+ expect ( baggage [ 1 ] . value ) . to . equal ( baggageVal )
151+ } )
152+ } )
153+
154+ it ( 'should handle dd-otel baggage conflict' , ( ) => {
155+ const ddSpan = tracer . startSpan ( 'dd' )
156+ ddSpan . setBaggageItem ( 'key1' , 'dd1' )
157+ let contextWithUpdatedBaggages
158+ tracer . scope ( ) . activate ( ddSpan , ( ) => {
159+ let baggages = propagation . getBaggage ( api . context . active ( ) )
160+ baggages = baggages . setEntry ( 'key1' , { value : 'otel1' } )
161+ baggages = baggages . setEntry ( 'key2' , { value : 'otel2' } )
162+ contextWithUpdatedBaggages = propagation . setBaggage ( api . context . active ( ) , baggages )
163+ } )
164+ expect ( JSON . parse ( ddSpan . getAllBaggageItems ( ) ) ) . to . deep . equal ( { key1 : 'dd1' } )
165+ api . context . with ( contextWithUpdatedBaggages , ( ) => {
166+ expect ( JSON . parse ( ddSpan . getAllBaggageItems ( ) ) ) . to . deep . equal (
167+ { key1 : 'otel1' , key2 : 'otel2' }
168+ )
169+ ddSpan . setBaggageItem ( 'key2' , 'dd2' )
170+ expect ( propagation . getActiveBaggage ( ) . getAllEntries ( ) ) . to . deep . equal (
171+ [ [ 'key1' , { value : 'otel1' } ] , [ 'key2' , { value : 'dd2' } ] ]
172+ )
173+ } )
174+ } )
175+
176+ it ( 'should handle dd-otel baggage removal' , ( ) => {
177+ const ddSpan = tracer . startSpan ( 'dd' )
178+ ddSpan . setBaggageItem ( 'key1' , 'dd1' )
179+ ddSpan . setBaggageItem ( 'key2' , 'dd2' )
180+ let contextWithUpdatedBaggages
181+ tracer . scope ( ) . activate ( ddSpan , ( ) => {
182+ let baggages = propagation . getBaggage ( api . context . active ( ) )
183+ baggages = baggages . removeEntry ( 'key1' )
184+ contextWithUpdatedBaggages = propagation . setBaggage ( api . context . active ( ) , baggages )
185+ } )
186+ expect ( JSON . parse ( ddSpan . getAllBaggageItems ( ) ) ) . to . deep . equal (
187+ { key1 : 'dd1' , key2 : 'dd2' }
188+ )
189+ api . context . with ( contextWithUpdatedBaggages , ( ) => {
190+ expect ( JSON . parse ( ddSpan . getAllBaggageItems ( ) ) ) . to . deep . equal (
191+ { key2 : 'dd2' }
192+ )
193+ ddSpan . removeBaggageItem ( 'key2' )
194+ expect ( propagation . getActiveBaggage ( ) . getAllEntries ( ) ) . to . deep . equal ( [ ] )
195+ } )
196+ } )
117197} )
0 commit comments