@@ -98,6 +98,44 @@ public void teardown() {
9898 AWSXRay .endSegment ();
9999 }
100100
101+ @ Test
102+ public void testDuplicateInterceptor () throws Exception {
103+ SdkHttpClient mockClient = mockSdkHttpClient (generateLambdaInvokeResponse (400 ));
104+ LambdaClient client = lambdaClientDupInterceptor (mockClient );
105+
106+ Segment segment = AWSXRay .getCurrentSegment ();
107+ try {
108+ client .invoke (InvokeRequest .builder ()
109+ .functionName ("testFunctionName" )
110+ .build ()
111+ );
112+ } catch (Exception e ) {
113+ // ignore SDK errors
114+ } finally {
115+ Assert .assertEquals (1 , segment .getSubsegments ().size ());
116+ Subsegment subsegment = segment .getSubsegments ().get (0 );
117+ Map <String , Object > awsStats = subsegment .getAws ();
118+ @ SuppressWarnings ("unchecked" )
119+ Map <String , Object > httpResponseStats = (Map <String , Object >) subsegment .getHttp ().get ("response" );
120+ Cause cause = subsegment .getCause ();
121+
122+ Assert .assertEquals ("Invoke" , awsStats .get ("operation" ));
123+ Assert .assertEquals ("testFunctionName" , awsStats .get ("function_name" ));
124+ Assert .assertEquals ("1111-2222-3333-4444" , awsStats .get ("request_id" ));
125+ Assert .assertEquals ("extended" , awsStats .get ("id_2" ));
126+ Assert .assertEquals ("us-west-42" , awsStats .get ("region" ));
127+ Assert .assertEquals (0 , awsStats .get ("retries" ));
128+ Assert .assertEquals (2L , httpResponseStats .get ("content_length" ));
129+ Assert .assertEquals (400 , httpResponseStats .get ("status" ));
130+ Assert .assertEquals (false , subsegment .isInProgress ());
131+ Assert .assertEquals (true , subsegment .isError ());
132+ Assert .assertEquals (false , subsegment .isThrottle ());
133+ Assert .assertEquals (false , subsegment .isFault ());
134+ Assert .assertEquals (1 , cause .getExceptions ().size ());
135+ Assert .assertEquals (true , cause .getExceptions ().get (0 ).isRemote ());
136+ }
137+ }
138+
101139 @ Test
102140 public void testResponseDescriptors () throws Exception {
103141 String responseBody = "{\" LastEvaluatedTableName\" :\" baz\" ,\" TableNames\" :[\" foo\" ,\" bar\" ,\" baz\" ]}" ;
@@ -490,7 +528,7 @@ public void testNoHeaderAddedWhenPropagationOff() {
490528
491529 interceptor .modifyHttpRequest (context , attributes );
492530
493- verify (mockRequest .toBuilder (), never ()).appendHeader (anyString (), anyString ());
531+ verify (mockRequest .toBuilder (), never ()).putHeader (anyString (), anyString ());
494532 }
495533
496534 @ Test
@@ -661,6 +699,22 @@ private static LambdaClient lambdaClient(SdkHttpClient mockClient) {
661699 .build ();
662700 }
663701
702+ private static LambdaClient lambdaClientDupInterceptor (SdkHttpClient mockClient ) {
703+ return LambdaClient .builder ()
704+ .httpClient (mockClient )
705+ .endpointOverride (URI .create ("http://example.com" ))
706+ .region (Region .of ("us-west-42" ))
707+ .credentialsProvider (StaticCredentialsProvider .create (
708+ AwsSessionCredentials .create ("key" , "secret" , "session" )
709+ ))
710+ .overrideConfiguration (ClientOverrideConfiguration .builder ()
711+ .addExecutionInterceptor (new TracingInterceptor ())
712+ .addExecutionInterceptor (new TracingInterceptor ())
713+ .build ()
714+ )
715+ .build ();
716+ }
717+
664718 private static LambdaAsyncClient lambdaAsyncClient (SdkAsyncHttpClient mockClient ) {
665719 return LambdaAsyncClient .builder ()
666720 .httpClient (mockClient )
0 commit comments