@@ -3,6 +3,7 @@ var chai = require('chai');
33var sinon = require ( 'sinon' ) ;
44var sinonChai = require ( 'sinon-chai' ) ;
55
6+ chai . should ( ) ;
67chai . use ( sinonChai ) ;
78
89var contextUtils = require ( '../../../lib/context_utils' ) ;
@@ -13,6 +14,7 @@ var Segment = require('../../../lib/segments/segment');
1314var SegmentUtils = require ( '../../../lib/segments/segment_utils' ) ;
1415var SegmentEmitter = require ( '../../../lib/segment_emitter' ) ;
1516const TraceID = require ( '../../../lib/segments/attributes/trace_id' ) ;
17+ const { InvokeStore } = require ( '@aws/lambda-invoke-store' ) ;
1618
1719describe ( 'AWSLambda' , function ( ) {
1820 var sandbox ;
@@ -147,6 +149,8 @@ describe('AWSLambda', function() {
147149
148150 describe ( '#resolveLambdaTraceData' , function ( ) {
149151 var sandbox , traceId ;
152+ var INVOKE_STORE_TRACE_ID = 'Root=1-12345678-12345678901234567890abcd;Parent=abcdef0123456789;Sampled=1' ;
153+ var ENV_TRACE_ID = 'Root=1-87654321-09876543210987654321dcba;Parent=fedcba9876543210;Sampled=0' ;
150154
151155 beforeEach ( function ( ) {
152156 sandbox = sinon . createSandbox ( ) ;
@@ -197,6 +201,47 @@ describe('AWSLambda', function() {
197201 facade . resolveLambdaTraceData ( ) ;
198202 populateStub . should . have . not . been . called ;
199203 } ) ;
204+
205+ it ( 'should prioritize InvokeStore trace ID over environment variable if both are defined' , function ( ) {
206+ process . env . _X_AMZN_TRACE_ID = ENV_TRACE_ID ;
207+ Lambda . init ( ) ;
208+
209+ sandbox . stub ( InvokeStore , 'getXRayTraceId' ) . returns ( INVOKE_STORE_TRACE_ID ) ;
210+ populateStub . reset ( ) ;
211+
212+ var facade = setSegmentStub . args [ 0 ] [ 0 ] ;
213+ facade . resolveLambdaTraceData ( ) ;
214+
215+ populateStub . should . have . been . calledWith ( facade , INVOKE_STORE_TRACE_ID ) ;
216+ } ) ;
217+
218+ it ( 'should use InvokeStore trace ID when environment variable is undefined' , function ( ) {
219+ delete process . env . _X_AMZN_TRACE_ID ;
220+
221+ Lambda . init ( ) ;
222+
223+ sandbox . stub ( InvokeStore , 'getXRayTraceId' ) . returns ( INVOKE_STORE_TRACE_ID ) ;
224+ populateStub . reset ( ) ;
225+
226+ var facade = setSegmentStub . args [ 0 ] [ 0 ] ;
227+ facade . resolveLambdaTraceData ( ) ;
228+
229+ populateStub . should . have . been . calledWith ( facade , INVOKE_STORE_TRACE_ID ) ;
230+ } ) ;
231+
232+ it ( 'should use environment variable when InvokeStore returns undefined' , function ( ) {
233+ process . env . _X_AMZN_TRACE_ID = INVOKE_STORE_TRACE_ID ;
234+ Lambda . init ( ) ;
235+
236+ process . env . _X_AMZN_TRACE_ID = ENV_TRACE_ID ;
237+ sandbox . stub ( InvokeStore , 'getXRayTraceId' ) . returns ( undefined ) ;
238+ populateStub . reset ( ) ;
239+
240+ var facade = setSegmentStub . args [ 0 ] [ 0 ] ;
241+ facade . resolveLambdaTraceData ( ) ;
242+
243+ populateStub . should . have . been . calledWith ( facade , ENV_TRACE_ID ) ;
244+ } ) ;
200245 } ) ;
201246 } ) ;
202247
0 commit comments