37
37
/**
38
38
* Verifies that the {@link TraceIdExecutionInterceptor} is actually wired up for AWS services.
39
39
*/
40
- public class TraceIdTest {
40
+ public class
41
+ TraceIdTest {
41
42
@ Test
42
43
public void traceIdInterceptorIsEnabled () {
43
44
EnvironmentVariableHelper .run (env -> {
@@ -66,7 +67,7 @@ public void traceIdInterceptorIsEnabled() {
66
67
public void traceIdInterceptorPreservesTraceIdAcrossRetries () {
67
68
EnvironmentVariableHelper .run (env -> {
68
69
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" );
70
71
71
72
try (MockAsyncHttpClient mockHttpClient = new MockAsyncHttpClient ();
72
73
ProtocolRestJsonAsyncClient client = ProtocolRestJsonAsyncClient .builder ()
@@ -76,6 +77,10 @@ public void traceIdInterceptorPreservesTraceIdAcrossRetries() {
76
77
.build ()) {
77
78
78
79
mockHttpClient .stubResponses (
80
+ HttpExecuteResponse .builder ()
81
+ .response (SdkHttpResponse .builder ().statusCode (500 ).build ())
82
+ .responseBody (AbortableInputStream .create (new StringInputStream ("{}" )))
83
+ .build (),
79
84
HttpExecuteResponse .builder ()
80
85
.response (SdkHttpResponse .builder ().statusCode (500 ).build ())
81
86
.responseBody (AbortableInputStream .create (new StringInputStream ("{}" )))
@@ -87,6 +92,94 @@ public void traceIdInterceptorPreservesTraceIdAcrossRetries() {
87
92
client .allTypes ().join ();
88
93
89
94
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
+
90
183
assertThat (requests ).hasSize (2 );
91
184
92
185
assertThat (requests .get (0 ).firstMatchingHeader ("X-Amzn-Trace-Id" )).hasValue ("mdc-trace-123" );
@@ -98,3 +191,4 @@ public void traceIdInterceptorPreservesTraceIdAcrossRetries() {
98
191
});
99
192
}
100
193
}
194
+
0 commit comments