@@ -70,7 +70,7 @@ describe(recursionDetectionMiddleware.name, () => {
7070 expect ( request . headers [ TRACE_ID_HEADER_NAME ] ) . toBe ( "some-real-trace-id" ) ;
7171 } ) ;
7272
73- it ( `should NOT set ${ TRACE_ID_HEADER_NAME } header when the header is already set in all lowercase ` , async ( ) => {
73+ it ( `should NOT set ${ TRACE_ID_HEADER_NAME } header when the header is already set with some other casing ` , async ( ) => {
7474 process . env = {
7575 AWS_LAMBDA_FUNCTION_NAME : "some-function" ,
7676 _X_AMZN_TRACE_ID : "some-trace-id" ,
@@ -80,15 +80,69 @@ describe(recursionDetectionMiddleware.name, () => {
8080 input : { } ,
8181 request : new HttpRequest ( {
8282 headers : {
83- [ TRACE_ID_HEADER_NAME . toLowerCase ( ) ] : "some-real-trace-id" ,
83+ [ "x-AmZn-TrAcE-iD" ] : "some-real-trace-id" ,
8484 } ,
8585 } ) ,
8686 } ) ;
8787
8888 const { calls } = ( mockNextHandler as any ) . mock ;
8989 expect ( calls . length ) . toBe ( 1 ) ;
9090 const { request } = mockNextHandler . mock . calls [ 0 ] [ 0 ] ;
91- expect ( request . headers [ TRACE_ID_HEADER_NAME . toLowerCase ( ) ] ) . toBe ( "some-real-trace-id" ) ;
91+ const existingTraceHeader = Object . keys ( request . headers ) . find (
92+ ( h ) => h . toLowerCase ( ) === TRACE_ID_HEADER_NAME . toLowerCase ( )
93+ ) ;
94+ expect ( existingTraceHeader ) . toBeDefined ( ) ;
95+ expect ( request . headers [ existingTraceHeader ! ] ) . toBe ( "some-real-trace-id" ) ;
96+ } ) ;
97+
98+ it ( `should NOT set ${ TRACE_ID_HEADER_NAME } header when the header is already set with alternating case` , async ( ) => {
99+ process . env = {
100+ AWS_LAMBDA_FUNCTION_NAME : "some-function" ,
101+ _X_AMZN_TRACE_ID : "some-trace-id" ,
102+ } ;
103+ const handler = recursionDetectionMiddleware ( { runtime : "node" } ) ( mockNextHandler , { } as any ) ;
104+ await handler ( {
105+ input : { } ,
106+ request : new HttpRequest ( {
107+ headers : {
108+ "X-aMzN-tRaCe-Id" : "some-real-trace-id" ,
109+ } ,
110+ } ) ,
111+ } ) ;
112+
113+ const { calls } = ( mockNextHandler as any ) . mock ;
114+ expect ( calls . length ) . toBe ( 1 ) ;
115+ const { request } = mockNextHandler . mock . calls [ 0 ] [ 0 ] ;
116+ const existingTraceHeader = Object . keys ( request . headers ) . find (
117+ ( h ) => h . toLowerCase ( ) === TRACE_ID_HEADER_NAME . toLowerCase ( )
118+ ) ;
119+ expect ( existingTraceHeader ) . toBeDefined ( ) ;
120+ expect ( request . headers [ existingTraceHeader ! ] ) . toBe ( "some-real-trace-id" ) ;
121+ } ) ;
122+
123+ it ( `should NOT set ${ TRACE_ID_HEADER_NAME } header when the header is already set with all uppercase` , async ( ) => {
124+ process . env = {
125+ AWS_LAMBDA_FUNCTION_NAME : "some-function" ,
126+ _X_AMZN_TRACE_ID : "some-trace-id" ,
127+ } ;
128+ const handler = recursionDetectionMiddleware ( { runtime : "node" } ) ( mockNextHandler , { } as any ) ;
129+ await handler ( {
130+ input : { } ,
131+ request : new HttpRequest ( {
132+ headers : {
133+ "X-AMZN-TRACE-ID" : "some-real-trace-id" ,
134+ } ,
135+ } ) ,
136+ } ) ;
137+
138+ const { calls } = ( mockNextHandler as any ) . mock ;
139+ expect ( calls . length ) . toBe ( 1 ) ;
140+ const { request } = mockNextHandler . mock . calls [ 0 ] [ 0 ] ;
141+ const existingTraceHeader = Object . keys ( request . headers ) . find (
142+ ( h ) => h . toLowerCase ( ) === TRACE_ID_HEADER_NAME . toLowerCase ( )
143+ ) ;
144+ expect ( existingTraceHeader ) . toBeDefined ( ) ;
145+ expect ( request . headers [ existingTraceHeader ! ] ) . toBe ( "some-real-trace-id" ) ;
92146 } ) ;
93147
94148 it ( "has no effect for browser runtime" , async ( ) => {
0 commit comments