@@ -70,6 +70,81 @@ 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 with some other casing` , async ( ) => {
74+ process . env = {
75+ AWS_LAMBDA_FUNCTION_NAME : "some-function" ,
76+ _X_AMZN_TRACE_ID : "some-trace-id" ,
77+ } ;
78+ const handler = recursionDetectionMiddleware ( { runtime : "node" } ) ( mockNextHandler , { } as any ) ;
79+ await handler ( {
80+ input : { } ,
81+ request : new HttpRequest ( {
82+ headers : {
83+ [ "x-AmZn-TrAcE-iD" ] : "some-real-trace-id" ,
84+ } ,
85+ } ) ,
86+ } ) ;
87+
88+ const { calls } = ( mockNextHandler as any ) . mock ;
89+ expect ( calls . length ) . toBe ( 1 ) ;
90+ const { request } = mockNextHandler . mock . calls [ 0 ] [ 0 ] ;
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" ) ;
146+ } ) ;
147+
73148 it ( "has no effect for browser runtime" , async ( ) => {
74149 process . env = {
75150 AWS_LAMBDA_FUNCTION_NAME : "some-function" ,
0 commit comments