21
21
import java .util .Properties ;
22
22
import org .junit .jupiter .api .Test ;
23
23
import org .mockito .Mockito ;
24
+ import org .slf4j .MDC ;
24
25
import software .amazon .awssdk .core .SdkRequest ;
25
26
import software .amazon .awssdk .core .interceptor .Context ;
26
27
import software .amazon .awssdk .core .interceptor .ExecutionAttributes ;
@@ -111,6 +112,94 @@ public void headerNotAddedIfNoTraceIdEnvVar() {
111
112
});
112
113
}
113
114
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
+
114
203
private Context .ModifyHttpRequest context () {
115
204
return context (SdkHttpRequest .builder ()
116
205
.uri (URI .create ("https://localhost" ))
@@ -133,5 +222,6 @@ private SdkHttpRequest modifyHttpRequest(Context.ModifyHttpRequest context) {
133
222
private void resetRelevantEnvVars (EnvironmentVariableHelper env ) {
134
223
env .remove ("AWS_LAMBDA_FUNCTION_NAME" );
135
224
env .remove ("_X_AMZN_TRACE_ID" );
225
+ env .remove ("AWS_LAMBDA_MAX_CONCURRENCY" );
136
226
}
137
227
}
0 commit comments