@@ -535,34 +535,67 @@ describe('InstrumentationPatchTest', () => {
535535 let lambda : Lambda ;
536536 const region = 'us-east-1' ;
537537
538- it ( 'overridden _getV3SmithyClientSendPatch updates MiddlewareStack' , async ( ) => {
539- const mockedMiddlewareStackInternal : any = [ ] ;
540- const mockedMiddlewareStack = {
541- add : ( arg1 : any , arg2 : any ) => mockedMiddlewareStackInternal . push ( [ arg1 , arg2 ] ) ,
542- } ;
543- const send = extractAwsSdkInstrumentation ( PATCHED_INSTRUMENTATIONS )
544- [ '_getV3SmithyClientSendPatch' ] ( ( ...args : unknown [ ] ) => Promise . resolve ( ) )
545- . bind ( { middlewareStack : mockedMiddlewareStack } ) ;
546- sinon
547- . stub ( AWSXRayPropagator . prototype , 'inject' )
548- . callsFake ( ( context : OtelContext , carrier : unknown , setter : TextMapSetter ) => {
549- ( carrier as any ) [ 'isCarrierModified' ] = 'carrierIsModified' ;
550- } ) ;
538+ describe ( 'overridden _getV3SmithyClientSendPatch updates MiddlewareStack' , async ( ) => {
539+ let mockedMiddlewareStackInternal : any ;
540+ let mockedMiddlewareStack ;
541+ let send ;
542+
543+ beforeEach ( async ( ) => {
544+ // Clear environment variables before each test
545+ mockedMiddlewareStackInternal = [ ] ;
546+ mockedMiddlewareStack = {
547+ add : ( arg1 : any , arg2 : any ) => mockedMiddlewareStackInternal . push ( [ arg1 , arg2 ] ) ,
548+ } ;
549+ send = extractAwsSdkInstrumentation ( PATCHED_INSTRUMENTATIONS )
550+ [ '_getV3SmithyClientSendPatch' ] ( ( ...args : unknown [ ] ) => Promise . resolve ( ) )
551+ . bind ( { middlewareStack : mockedMiddlewareStack } ) ;
552+
553+ sinon
554+ . stub ( AWSXRayPropagator . prototype , 'inject' )
555+ . callsFake ( ( context : OtelContext , carrier : unknown , setter : TextMapSetter ) => {
556+ ( carrier as any ) [ 'isCarrierModified' ] = 'carrierIsModified' ;
557+ } ) ;
558+
559+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
560+ // @ts -ignore
561+ await send ( { } , null ) ;
562+ } ) ;
551563
552- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
553- // @ts -ignore
554- await send ( { } , null ) ;
564+ 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 ) ;
555572
556- const middlewareArgs : any = {
557- request : {
558- headers : { } ,
559- } ,
560- } ;
561- await mockedMiddlewareStackInternal [ 0 ] [ 0 ] ( ( arg : any ) => Promise . resolve ( ) , null ) ( middlewareArgs ) ;
573+ sinon . restore ( ) ;
574+
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+
580+ expect ( mockedMiddlewareStackInternal [ 0 ] [ 1 ] . name ) . toEqual ( '_adotInjectXrayContextMiddleware' ) ;
581+ } ) ;
562582
563- sinon . restore ( ) ;
564- expect ( middlewareArgs . request . headers [ 'isCarrierModified' ] ) . toEqual ( 'carrierIsModified' ) ;
565- expect ( mockedMiddlewareStackInternal [ 0 ] [ 1 ] . name ) . toEqual ( '_adotInjectXrayContextMiddleware' ) ;
583+ it ( 'Injecting without existing X-Ray header' , async ( ) => {
584+ const middlewareArgsNoHeader : any = {
585+ request : {
586+ headers : { } ,
587+ } ,
588+ } ;
589+
590+ await mockedMiddlewareStackInternal [ 0 ] [ 0 ] ( ( arg : any ) => Promise . resolve ( ) , null ) ( middlewareArgsNoHeader ) ;
591+
592+ sinon . restore ( ) ;
593+
594+ expect ( middlewareArgsNoHeader . request . headers [ 'isCarrierModified' ] ) . toEqual ( 'carrierIsModified' ) ;
595+ expect ( middlewareArgsNoHeader . request . headers ) . not . toHaveProperty ( 'X-Amzn-Trace-Id' ) ;
596+
597+ expect ( mockedMiddlewareStackInternal [ 0 ] [ 1 ] . name ) . toEqual ( '_adotInjectXrayContextMiddleware' ) ;
598+ } ) ;
566599 } ) ;
567600
568601 it ( 'injects trace context header into request via propagator' , async ( ) => {
0 commit comments