2121import java .util .Properties ;
2222import org .junit .jupiter .api .Test ;
2323import org .mockito .Mockito ;
24+ import org .slf4j .MDC ;
2425import software .amazon .awssdk .core .SdkRequest ;
2526import software .amazon .awssdk .core .interceptor .Context ;
2627import software .amazon .awssdk .core .interceptor .ExecutionAttributes ;
@@ -111,6 +112,94 @@ public void headerNotAddedIfNoTraceIdEnvVar() {
111112 });
112113 }
113114
115+ @ Test
116+ public void modifyHttpRequest_whenMultiConcurrencyModeWithMdc_shouldAddTraceIdHeader () {
117+ EnvironmentVariableHelper .run (env -> {
118+ resetRelevantEnvVars (env );
119+ env .set ("AWS_LAMBDA_FUNCTION_NAME" , "foo" );
120+ env .set ("AWS_LAMBDA_MAX_CONCURRENCY" , "10" );
121+
122+ MDC .put ("AWS_LAMBDA_X_TraceId" , "mdc-trace-123" );
123+
124+ try {
125+ Context .ModifyHttpRequest context = context ();
126+ assertThat (modifyHttpRequest (context ).firstMatchingHeader ("X-Amzn-Trace-Id" )).hasValue ("mdc-trace-123" );
127+ } finally {
128+ MDC .remove ("AWS_LAMBDA_X_TraceId" );
129+ }
130+ });
131+ }
132+
133+ @ Test
134+ public void modifyHttpRequest_whenMultiConcurrencyModeWithBothMdcAndSystemProperty_shouldUseMdcValue () {
135+ EnvironmentVariableHelper .run (env -> {
136+ resetRelevantEnvVars (env );
137+ env .set ("AWS_LAMBDA_FUNCTION_NAME" , "foo" );
138+ env .set ("AWS_LAMBDA_MAX_CONCURRENCY" , "10" );
139+
140+ MDC .put ("AWS_LAMBDA_X_TraceId" , "mdc-trace-123" );
141+ Properties props = System .getProperties ();
142+ props .setProperty ("com.amazonaws.xray.traceHeader" , "sys-prop-345" );
143+
144+ try {
145+ Context .ModifyHttpRequest context = context ();
146+ assertThat (modifyHttpRequest (context ).firstMatchingHeader ("X-Amzn-Trace-Id" )).hasValue ("mdc-trace-123" );
147+ } finally {
148+ MDC .remove ("AWS_LAMBDA_X_TraceId" );
149+ props .remove ("com.amazonaws.xray.traceHeader" );
150+ }
151+ });
152+ }
153+
154+ @ Test
155+ public void modifyHttpRequest_whenMultiConcurrencyModeWithEmptyMdc_shouldNotAddHeader () {
156+ EnvironmentVariableHelper .run (env -> {
157+ resetRelevantEnvVars (env );
158+ env .set ("AWS_LAMBDA_FUNCTION_NAME" , "foo" );
159+ env .set ("AWS_LAMBDA_MAX_CONCURRENCY" , "10" );
160+
161+ MDC .clear ();
162+
163+ Context .ModifyHttpRequest context = context ();
164+ assertThat (modifyHttpRequest (context )).isSameAs (context .httpRequest ());
165+ });
166+ }
167+
168+ @ Test
169+ public void modifyHttpRequest_whenNotInLambdaEnvironmentWithMdc_shouldNotAddHeader () {
170+ EnvironmentVariableHelper .run (env -> {
171+ resetRelevantEnvVars (env );
172+ env .set ("AWS_LAMBDA_MAX_CONCURRENCY" , "10" );
173+
174+ MDC .put ("AWS_LAMBDA_X_TraceId" , "should-be-ignored" );
175+
176+ try {
177+ Context .ModifyHttpRequest context = context ();
178+ assertThat (modifyHttpRequest (context )).isSameAs (context .httpRequest ());
179+ } finally {
180+ MDC .remove ("AWS_LAMBDA_X_TraceId" );
181+ }
182+ });
183+ }
184+
185+ @ Test
186+ public void modifyHttpRequest_whenConcurrencyModeIsEmptyString_shouldUseMdcValue () {
187+ EnvironmentVariableHelper .run (env -> {
188+ resetRelevantEnvVars (env );
189+ env .set ("AWS_LAMBDA_FUNCTION_NAME" , "foo" );
190+ env .set ("AWS_LAMBDA_MAX_CONCURRENCY" , "" );
191+
192+ MDC .put ("AWS_LAMBDA_X_TraceId" , "empty-string-test" );
193+
194+ try {
195+ Context .ModifyHttpRequest context = context ();
196+ assertThat (modifyHttpRequest (context ).firstMatchingHeader ("X-Amzn-Trace-Id" )).hasValue ("empty-string-test" );
197+ } finally {
198+ MDC .remove ("AWS_LAMBDA_X_TraceId" );
199+ }
200+ });
201+ }
202+
114203 private Context .ModifyHttpRequest context () {
115204 return context (SdkHttpRequest .builder ()
116205 .uri (URI .create ("https://localhost" ))
@@ -133,5 +222,6 @@ private SdkHttpRequest modifyHttpRequest(Context.ModifyHttpRequest context) {
133222 private void resetRelevantEnvVars (EnvironmentVariableHelper env ) {
134223 env .remove ("AWS_LAMBDA_FUNCTION_NAME" );
135224 env .remove ("_X_AMZN_TRACE_ID" );
225+ env .remove ("AWS_LAMBDA_MAX_CONCURRENCY" );
136226 }
137227}
0 commit comments