1+ import com.amazonaws.AmazonWebServiceClient
12import com.amazonaws.auth.AWSStaticCredentialsProvider
23import com.amazonaws.auth.AnonymousAWSCredentials
34import com.amazonaws.client.builder.AwsClientBuilder
5+ import com.amazonaws.handlers.RequestHandler2
46import com.amazonaws.regions.Regions
57import com.amazonaws.services.s3.AmazonS3ClientBuilder
68import datadog.trace.agent.test.AgentTestRunner
@@ -16,14 +18,22 @@ class AWSClientTest extends AgentTestRunner {
1618
1719 def " request handler is hooked up" () {
1820 setup :
19- def client = AmazonS3ClientBuilder . standard()
21+ def builder = AmazonS3ClientBuilder . standard()
2022 .withRegion(Regions . US_EAST_1 )
21- client. build()
23+ if (addHandler) {
24+ builder. withRequestHandlers(new RequestHandler2 () {})
25+ }
26+ AmazonWebServiceClient client = builder. build()
2227
2328 expect :
24- client. getRequestHandlers() != null
25- client. getRequestHandlers(). size() == 1
26- client. getRequestHandlers(). get(0 ). getClass(). getSimpleName() == " TracingRequestHandler"
29+ client. requestHandler2s != null
30+ client. requestHandler2s. size() == size
31+ client. requestHandler2s. get(position). getClass(). getSimpleName() == " TracingRequestHandler"
32+
33+ where :
34+ addHandler | size | position
35+ true | 2 | 1
36+ false | 1 | 0
2737 }
2838
2939 def " send request with mocked back end" () {
@@ -39,7 +49,7 @@ class AWSClientTest extends AgentTestRunner {
3949 }
4050 AwsClientBuilder.EndpointConfiguration endpoint = new AwsClientBuilder.EndpointConfiguration (" http://localhost:$server . address . port " , " us-west-2" );
4151
42- def client = AmazonS3ClientBuilder
52+ AmazonWebServiceClient client = AmazonS3ClientBuilder
4353 .standard()
4454 .withPathStyleAccessEnabled(true )
4555 .withEndpointConfiguration(endpoint)
@@ -51,12 +61,13 @@ class AWSClientTest extends AgentTestRunner {
5161 expect :
5262 bucket != null
5363
54- receivedHeaders. get(). get(" x-datadog-trace-id" ) == null
55- receivedHeaders. get(). get(" x-datadog-parent-id" ) == null
64+ client. requestHandler2s != null
65+ client. requestHandler2s. size() == 1
66+ client. requestHandler2s. get(0 ). getClass(). getSimpleName() == " TracingRequestHandler"
5667
57- TEST_WRITER . size() == 1
68+ TEST_WRITER . size() == 2
5869
59- def trace = TEST_WRITER . firstTrace( )
70+ def trace = TEST_WRITER . get( 0 )
6071 trace. size() == 2
6172
6273 and : // span 0 - from apache-httpclient instrumentation
@@ -97,6 +108,34 @@ class AWSClientTest extends AgentTestRunner {
97108 tags2[DDTags . THREAD_ID ] != null
98109 tags2. size() == 8
99110
111+ and :
112+
113+ def trace2 = TEST_WRITER . get(1 )
114+ trace2. size() == 1
115+
116+ and : // span 0 - from aws instrumentation
117+ def span = trace2[0 ]
118+
119+ span. context(). operationName == " Amazon S3"
120+ span. serviceName == " unnamed-java-app"
121+ span. resourceName == " Amazon S3"
122+ span. type == null
123+ ! span. context(). getErrorFlag()
124+ span. context(). parentId == 0
125+
126+ def tags = span. context(). tags
127+ tags[" component" ] == " java-aws-sdk"
128+ tags2[Tags . SPAN_KIND . key] == Tags . SPAN_KIND_CLIENT
129+ tags2[Tags . HTTP_METHOD . key] == " PUT"
130+ tags2[Tags . HTTP_URL . key] == " http://localhost:$server . address . port /testbucket/"
131+ tags2[Tags . HTTP_STATUS . key] == 200
132+ tags[" thread.name" ] != null
133+ tags[" thread.id" ] != null
134+ tags. size() == 7
135+
136+ receivedHeaders. get(). get(" x-datadog-trace-id" ) == " $span . traceId "
137+ receivedHeaders. get(). get(" x-datadog-parent-id" ) == " $span . spanId "
138+
100139 cleanup :
101140 server. close()
102141 }
0 commit comments