@@ -11,6 +11,8 @@ import {
1111 Tracer ,
1212 AttributeValue ,
1313 TextMapSetter ,
14+ defaultTextMapSetter ,
15+ ROOT_CONTEXT ,
1416} from '@opentelemetry/api' ;
1517import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node' ;
1618import { Instrumentation } from '@opentelemetry/instrumentation' ;
@@ -539,6 +541,8 @@ describe('InstrumentationPatchTest', () => {
539541 let mockedMiddlewareStackInternal : any ;
540542 let mockedMiddlewareStack ;
541543 let send ;
544+ let middlewareArgsHeader : any ;
545+ const testXrayTraceHeader = 'test-xray-trace-header' ;
542546
543547 beforeEach ( async ( ) => {
544548 // Clear environment variables before each test
@@ -550,49 +554,51 @@ describe('InstrumentationPatchTest', () => {
550554 [ '_getV3SmithyClientSendPatch' ] ( ( ...args : unknown [ ] ) => Promise . resolve ( ) )
551555 . bind ( { middlewareStack : mockedMiddlewareStack } ) ;
552556
553- sinon
554- . stub ( AWSXRayPropagator . prototype , 'inject' )
555- . callsFake ( ( context : OtelContext , carrier : unknown , setter : TextMapSetter ) => {
556- ( carrier as any ) [ 'isCarrierModified' ] = 'carrierIsModified' ;
557- } ) ;
557+ middlewareArgsHeader = {
558+ request : {
559+ headers : { } ,
560+ } ,
561+ } ;
558562
559563 // eslint-disable-next-line @typescript-eslint/ban-ts-comment
560564 // @ts -ignore
561565 await send ( { } , null ) ;
562566 } ) ;
563567
564568 it ( 'Injecting with existing X-Ray header' , async ( ) => {
565- const existingHeader = 'test-trace-header' ;
566- const middlewareArgsWithHeader : any = {
567- request : {
568- headers : { [ AWSXRAY_TRACE_ID_HEADER ] : existingHeader } ,
569- } ,
570- } ;
571- await mockedMiddlewareStackInternal [ 0 ] [ 0 ] ( ( arg : any ) => Promise . resolve ( ) , null ) ( middlewareArgsWithHeader ) ;
569+ sinon
570+ . stub ( AWSXRayPropagator . prototype , 'inject' )
571+ . callsFake ( ( context : OtelContext , carrier : unknown , setter : TextMapSetter ) => {
572+ ( carrier as any ) [ 'isCarrierModified' ] = 'carrierIsModified' ;
573+ ( carrier as any ) [ AWSXRAY_TRACE_ID_HEADER ] = testXrayTraceHeader ;
574+ } ) ;
575+ await mockedMiddlewareStackInternal [ 0 ] [ 0 ] ( ( arg : any ) => Promise . resolve ( ) , null ) ( middlewareArgsHeader ) ;
572576
573577 sinon . restore ( ) ;
574578
575- expect ( middlewareArgsWithHeader . request . headers [ 'isCarrierModified' ] ) . toEqual ( 'carrierIsModified' ) ;
576- expect ( middlewareArgsWithHeader . request . headers ) . not . toHaveProperty ( AWSXRAY_TRACE_ID_HEADER ) ;
577- expect ( middlewareArgsWithHeader . request . headers ) . toHaveProperty ( 'X-Amzn-Trace-Id' ) ;
578- expect ( middlewareArgsWithHeader . request . headers [ 'X-Amzn-Trace-Id' ] ) . toEqual ( existingHeader ) ;
579+ expect ( middlewareArgsHeader . request . headers [ 'isCarrierModified' ] ) . toEqual ( 'carrierIsModified' ) ;
580+ expect ( middlewareArgsHeader . request . headers ) . not . toHaveProperty ( AWSXRAY_TRACE_ID_HEADER ) ;
581+ expect ( middlewareArgsHeader . request . headers ) . toHaveProperty ( 'X-Amzn-Trace-Id' ) ;
582+ expect ( middlewareArgsHeader . request . headers [ 'X-Amzn-Trace-Id' ] ) . toEqual ( testXrayTraceHeader ) ;
579583
580584 expect ( mockedMiddlewareStackInternal [ 0 ] [ 1 ] . name ) . toEqual ( '_adotInjectXrayContextMiddleware' ) ;
581585 } ) ;
582586
583587 it ( 'Injecting without existing X-Ray header' , async ( ) => {
584- const middlewareArgsNoHeader : any = {
585- request : {
586- headers : { } ,
587- } ,
588- } ;
588+ const invalidContext = trace . setSpanContext ( ROOT_CONTEXT , {
589+ traceId : 'invalid-trace-id' ,
590+ spanId : 'invalid-span' ,
591+ traceFlags : 0 ,
592+ isRemote : false ,
593+ } ) ;
589594
590- await mockedMiddlewareStackInternal [ 0 ] [ 0 ] ( ( arg : any ) => Promise . resolve ( ) , null ) ( middlewareArgsNoHeader ) ;
595+ const propagator = new AWSXRayPropagator ( ) ;
591596
597+ propagator . inject ( invalidContext , middlewareArgsHeader . request . headers , defaultTextMapSetter ) ;
592598 sinon . restore ( ) ;
593599
594- expect ( middlewareArgsNoHeader . request . headers [ 'isCarrierModified' ] ) . toEqual ( 'carrierIsModified' ) ;
595- expect ( middlewareArgsNoHeader . request . headers ) . not . toHaveProperty ( 'X-Amzn-Trace-Id' ) ;
600+ expect ( middlewareArgsHeader . request . headers ) . not . toHaveProperty ( AWSXRAY_TRACE_ID_HEADER ) ;
601+ expect ( middlewareArgsHeader . request . headers ) . not . toHaveProperty ( 'X-Amzn-Trace-Id' ) ;
596602
597603 expect ( mockedMiddlewareStackInternal [ 0 ] [ 1 ] . name ) . toEqual ( '_adotInjectXrayContextMiddleware' ) ;
598604 } ) ;
0 commit comments