@@ -19,6 +19,7 @@ import {
19
19
readStepFunctionContextFromEvent ,
20
20
readTraceFromSQSEvent ,
21
21
readTraceFromHTTPEvent ,
22
+ readTraceFromLambdaContext ,
22
23
} from "./context" ;
23
24
24
25
let sentSegment : any ;
@@ -388,6 +389,41 @@ describe("readTraceFromSQSEvent", () => {
388
389
} ) ;
389
390
} ) ;
390
391
392
+ describe ( "readTraceFromLambdaContext" , ( ) => {
393
+ it ( "can read from lambda context source" , ( ) => {
394
+ const result = readTraceFromLambdaContext ( {
395
+ clientContext : {
396
+ custom : {
397
+ _datadog : {
398
+ "x-datadog-trace-id" :"666" ,
399
+ "x-datadog-parent-id" :"777" ,
400
+ "x-datadog-sampled" :"1" ,
401
+ "x-datadog-sampling-priority" :"1"
402
+ }
403
+ }
404
+ }
405
+ } ) ;
406
+ expect ( result ) . toEqual ( {
407
+ parentID : "777" ,
408
+ sampleMode : SampleMode . AUTO_KEEP ,
409
+ traceID : "666" ,
410
+ source : Source . Event ,
411
+ } ) ;
412
+ } ) ;
413
+ it ( "can handle no `custom` key" , ( ) => {
414
+ const result = readTraceFromLambdaContext ( {
415
+ clientContext : {
416
+ foo : 'bar'
417
+ }
418
+ } ) ;
419
+ expect ( result ) . toBeUndefined ( ) ;
420
+ } ) ;
421
+ it ( "can handle no context" , ( ) => {
422
+ const result = readTraceFromLambdaContext ( undefined ) ;
423
+ expect ( result ) . toBeUndefined ( ) ;
424
+ } ) ;
425
+ } ) ;
426
+
391
427
describe ( "readStepFunctionContextFromEvent" , ( ) => {
392
428
const stepFunctionEvent = {
393
429
dd : {
@@ -532,7 +568,7 @@ describe("extractTraceContext", () => {
532
568
"x-datadog-sampling-priority" : "2" ,
533
569
"x-datadog-trace-id" : "4110911582297405551" ,
534
570
} ,
535
- } ) ;
571
+ } , { } ) ;
536
572
expect ( result ) . toEqual ( {
537
573
parentID : "797643193680388251" ,
538
574
sampleMode : SampleMode . USER_KEEP ,
@@ -567,7 +603,53 @@ describe("extractTraceContext", () => {
567
603
awsRegion : "sa-east-1" ,
568
604
} ,
569
605
] ,
606
+ } , { } ) ;
607
+ expect ( result ) . toEqual ( {
608
+ parentID : "3369753143434738315" ,
609
+ sampleMode : SampleMode . AUTO_KEEP ,
610
+ traceID : "4555236104497098341" ,
611
+ source : Source . Event ,
570
612
} ) ;
613
+ } ) ;
614
+ it ( "returns trace read from Lambda Context as third highest priority" , ( ) => {
615
+ process . env [ "_X_AMZN_TRACE_ID" ] = "Root=1-5ce31dc2-2c779014b90ce44db5e03875;Parent=0b11cc4230d3e09e;Sampled=1" ;
616
+ const lambdaContext = {
617
+ clientContext : {
618
+ custom : {
619
+ _datadog : {
620
+ "x-datadog-trace-id" :"4555236104497098341" ,
621
+ "x-datadog-parent-id" :"3369753143434738315" ,
622
+ "x-datadog-sampled" :"1" ,
623
+ "x-datadog-sampling-priority" :"1"
624
+ }
625
+ }
626
+ }
627
+ } ;
628
+ const result = extractTraceContext ( {
629
+ Records : [
630
+ {
631
+ body : "Hello world" ,
632
+ attributes : {
633
+ ApproximateReceiveCount : "1" ,
634
+ SentTimestamp : "1605544528092" ,
635
+ SenderId : "AROAYYB64AB3JHSRKO6XR:sqs-trace-dev-producer" ,
636
+ ApproximateFirstReceiveTimestamp : "1605544528094" ,
637
+ } ,
638
+ messageAttributes : {
639
+ _datadog : {
640
+ stringValue :
641
+ '{"x-datadog-parent-id":"666","x-datadog-sampled":"1","x-datadog-sampling-priority":"1"}' ,
642
+ stringListValues : [ ] ,
643
+ binaryListValues : [ ] ,
644
+ dataType : "String" ,
645
+ } ,
646
+ } ,
647
+ eventSource : "aws:sqs" ,
648
+ eventSourceARN : "arn:aws:sqs:sa-east-1:601427279990:metal-queue" ,
649
+ awsRegion : "sa-east-1" ,
650
+ } ,
651
+ ] ,
652
+ } , lambdaContext ) ;
571
653
expect ( result ) . toEqual ( {
572
654
parentID : "3369753143434738315" ,
573
655
sampleMode : SampleMode . AUTO_KEEP ,
@@ -578,7 +660,7 @@ describe("extractTraceContext", () => {
578
660
it ( "returns trace read from env if no headers present" , ( ) => {
579
661
process . env [ "_X_AMZN_TRACE_ID" ] = "Root=1-5ce31dc2-2c779014b90ce44db5e03875;Parent=0b11cc4230d3e09e;Sampled=1" ;
580
662
581
- const result = extractTraceContext ( { } ) ;
663
+ const result = extractTraceContext ( { } , { } ) ;
582
664
expect ( result ) . toEqual ( {
583
665
parentID : "797643193680388254" ,
584
666
sampleMode : SampleMode . USER_KEEP ,
@@ -589,7 +671,7 @@ describe("extractTraceContext", () => {
589
671
it ( "returns trace read from env if no headers present" , ( ) => {
590
672
process . env [ "_X_AMZN_TRACE_ID" ] = "Root=1-5ce31dc2-2c779014b90ce44db5e03875;Parent=0b11cc4230d3e09e;Sampled=1" ;
591
673
592
- const result = extractTraceContext ( { } ) ;
674
+ const result = extractTraceContext ( { } , { } ) ;
593
675
expect ( result ) . toEqual ( {
594
676
parentID : "797643193680388254" ,
595
677
sampleMode : SampleMode . USER_KEEP ,
@@ -608,7 +690,7 @@ describe("extractTraceContext", () => {
608
690
"x-datadog-sampling-priority" : "2" ,
609
691
"x-datadog-trace-id" : "4110911582297405551" ,
610
692
} ,
611
- } ) ;
693
+ } , { } ) ;
612
694
613
695
expect ( sentSegment instanceof Buffer ) . toBeTruthy ( ) ;
614
696
expect ( closedSocket ) . toBeTruthy ( ) ;
@@ -628,7 +710,7 @@ describe("extractTraceContext", () => {
628
710
"x-datadog-sampling-priority" : "2" ,
629
711
"x-datadog-trace-id" : "4110911582297405551" ,
630
712
} ,
631
- } ) ;
713
+ } , { } ) ;
632
714
633
715
expect ( sentSegment ) . toBeUndefined ( ) ;
634
716
} ) ;
@@ -654,7 +736,7 @@ describe("extractTraceContext", () => {
654
736
process . env [ xrayTraceEnvVar ] = "Root=1-5e272390-8c398be037738dc042009320;Parent=94ae789b969f1cc5;Sampled=1" ;
655
737
process . env [ awsXrayDaemonAddressEnvVar ] = "localhost:127.0.0.1:2000" ;
656
738
657
- extractTraceContext ( stepFunctionEvent ) ;
739
+ extractTraceContext ( stepFunctionEvent , { } ) ;
658
740
659
741
expect ( sentSegment instanceof Buffer ) . toBeTruthy ( ) ;
660
742
0 commit comments