3737/**
3838 * Verifies that the {@link TraceIdExecutionInterceptor} is actually wired up for AWS services.
3939 */
40- public class TraceIdTest {
40+ public class
41+ TraceIdTest {
4142 @ Test
4243 public void traceIdInterceptorIsEnabled () {
4344 EnvironmentVariableHelper .run (env -> {
@@ -66,7 +67,7 @@ public void traceIdInterceptorIsEnabled() {
6667 public void traceIdInterceptorPreservesTraceIdAcrossRetries () {
6768 EnvironmentVariableHelper .run (env -> {
6869 env .set ("AWS_LAMBDA_FUNCTION_NAME" , "foo" );
69- MDC .put ("AWS_LAMBDA_X_TraceId " , "mdc-trace-123" );
70+ MDC .put ("AWS_LAMBDA_X_TRACE_ID " , "mdc-trace-123" );
7071
7172 try (MockAsyncHttpClient mockHttpClient = new MockAsyncHttpClient ();
7273 ProtocolRestJsonAsyncClient client = ProtocolRestJsonAsyncClient .builder ()
@@ -76,6 +77,10 @@ public void traceIdInterceptorPreservesTraceIdAcrossRetries() {
7677 .build ()) {
7778
7879 mockHttpClient .stubResponses (
80+ HttpExecuteResponse .builder ()
81+ .response (SdkHttpResponse .builder ().statusCode (500 ).build ())
82+ .responseBody (AbortableInputStream .create (new StringInputStream ("{}" )))
83+ .build (),
7984 HttpExecuteResponse .builder ()
8085 .response (SdkHttpResponse .builder ().statusCode (500 ).build ())
8186 .responseBody (AbortableInputStream .create (new StringInputStream ("{}" )))
@@ -87,6 +92,94 @@ public void traceIdInterceptorPreservesTraceIdAcrossRetries() {
8792 client .allTypes ().join ();
8893
8994 List <SdkHttpRequest > requests = mockHttpClient .getRequests ();
95+ assertThat (requests ).hasSize (3 );
96+
97+ assertThat (requests .get (0 ).firstMatchingHeader ("X-Amzn-Trace-Id" )).hasValue ("mdc-trace-123" );
98+ assertThat (requests .get (1 ).firstMatchingHeader ("X-Amzn-Trace-Id" )).hasValue ("mdc-trace-123" );
99+ assertThat (requests .get (2 ).firstMatchingHeader ("X-Amzn-Trace-Id" )).hasValue ("mdc-trace-123" );
100+
101+ } finally {
102+ MDC .clear ();
103+ }
104+ });
105+ }
106+
107+ @ Test
108+ public void traceIdInterceptorPreservesTraceIdAcrossChainedFutures () {
109+ EnvironmentVariableHelper .run (env -> {
110+ env .set ("AWS_LAMBDA_FUNCTION_NAME" , "foo" );
111+ MDC .put ("AWS_LAMBDA_X_TRACE_ID" , "mdc-trace-123" );
112+
113+ try (MockAsyncHttpClient mockHttpClient = new MockAsyncHttpClient ();
114+ ProtocolRestJsonAsyncClient client = ProtocolRestJsonAsyncClient .builder ()
115+ .region (Region .US_WEST_2 )
116+ .credentialsProvider (AnonymousCredentialsProvider .create ())
117+ .httpClient (mockHttpClient )
118+ .build ()) {
119+
120+ mockHttpClient .stubResponses (
121+ HttpExecuteResponse .builder ()
122+ .response (SdkHttpResponse .builder ().statusCode (200 ).build ())
123+ .responseBody (AbortableInputStream .create (new StringInputStream ("{}" )))
124+ .build (),
125+ HttpExecuteResponse .builder ()
126+ .response (SdkHttpResponse .builder ().statusCode (200 ).build ())
127+ .responseBody (AbortableInputStream .create (new StringInputStream ("{}" )))
128+ .build ()
129+ );
130+
131+ client .allTypes ()
132+ .thenRun (() -> {
133+ String traceId = MDC .get ("AWS_LAMBDA_X_TRACE_ID" );
134+ client .allTypes ().join ();
135+ })
136+ .join ();
137+
138+ List <SdkHttpRequest > requests = mockHttpClient .getRequests ();
139+
140+ assertThat (requests ).hasSize (2 );
141+
142+ assertThat (requests .get (0 ).firstMatchingHeader ("X-Amzn-Trace-Id" )).hasValue ("mdc-trace-123" );
143+ assertThat (requests .get (1 ).firstMatchingHeader ("X-Amzn-Trace-Id" )).hasValue ("mdc-trace-123" );
144+
145+ } finally {
146+ MDC .clear ();
147+ }
148+ });
149+ }
150+
151+ @ Test
152+ public void traceIdInterceptorPreservesTraceIdAcrossExceptionallyCompletedFutures () {
153+ EnvironmentVariableHelper .run (env -> {
154+ env .set ("AWS_LAMBDA_FUNCTION_NAME" , "foo" );
155+ MDC .put ("AWS_LAMBDA_X_TRACE_ID" , "mdc-trace-123" );
156+
157+ try (MockAsyncHttpClient mockHttpClient = new MockAsyncHttpClient ();
158+ ProtocolRestJsonAsyncClient client = ProtocolRestJsonAsyncClient .builder ()
159+ .region (Region .US_WEST_2 )
160+ .credentialsProvider (AnonymousCredentialsProvider .create ())
161+ .httpClient (mockHttpClient )
162+ .build ()) {
163+
164+ mockHttpClient .stubResponses (
165+ HttpExecuteResponse .builder ()
166+ .response (SdkHttpResponse .builder ().statusCode (400 ).build ())
167+ .responseBody (AbortableInputStream .create (new StringInputStream ("{}" )))
168+ .build (),
169+ HttpExecuteResponse .builder ()
170+ .response (SdkHttpResponse .builder ().statusCode (200 ).build ())
171+ .responseBody (AbortableInputStream .create (new StringInputStream ("{}" )))
172+ .build ()
173+ );
174+
175+ client .allTypes ()
176+ .exceptionally (throwable -> {
177+ client .allTypes ().join ();
178+ return null ;
179+ }).join ();
180+
181+ List <SdkHttpRequest > requests = mockHttpClient .getRequests ();
182+
90183 assertThat (requests ).hasSize (2 );
91184
92185 assertThat (requests .get (0 ).firstMatchingHeader ("X-Amzn-Trace-Id" )).hasValue ("mdc-trace-123" );
@@ -98,3 +191,4 @@ public void traceIdInterceptorPreservesTraceIdAcrossRetries() {
98191 });
99192 }
100193}
194+
0 commit comments