Skip to content

Commit 4506cad

Browse files
authored
Merge pull request #166 from DataDog/tyler/okhttp-bytebuddy
Move OkHttp instrumentation to byte buddy
2 parents 50c8c02 + 2e6ff44 commit 4506cad

File tree

25 files changed

+282
-199
lines changed

25 files changed

+282
-199
lines changed

dd-java-agent-ittests/dd-java-agent-ittests.gradle

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
apply from: "${rootDir}/gradle/java.gradle"
22

33
description = 'dd-java-agent-ittests'
4+
5+
evaluationDependsOn(':dd-java-agent:tooling')
6+
compileTestJava.dependsOn tasks.getByPath(':dd-java-agent:tooling:testClasses')
7+
48
dependencies {
59
testCompile project(':dd-trace-annotations')
610
testCompile project(':dd-trace')
711

812
testCompile deps.opentracingMock
913

10-
testCompile deps.testLogging
14+
testCompile project(':dd-java-agent:tooling').sourceSets.test.output
1115

1216
testCompile group: 'org.mongodb', name: 'mongo-java-driver', version: '3.4.2'
1317
testCompile group: 'org.mongodb', name: 'mongodb-driver-async', version: '3.4.2'

dd-java-agent-ittests/src/test/groovy/com/datadoghq/agent/integration/TestHttpServer.groovy

Lines changed: 26 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,18 @@
11
package com.datadoghq.agent.integration
22

3-
import io.opentracing.ActiveSpan;
4-
import io.opentracing.SpanContext;
5-
import io.opentracing.propagation.Format;
6-
import io.opentracing.propagation.TextMap;
7-
import io.opentracing.util.GlobalTracer;
8-
9-
import ratpack.http.MutableHeaders
10-
import ratpack.http.Response
3+
import io.opentracing.ActiveSpan
4+
import io.opentracing.SpanContext
5+
import io.opentracing.propagation.Format
6+
import io.opentracing.propagation.TextMap
7+
import io.opentracing.util.GlobalTracer
118
import ratpack.groovy.test.embed.GroovyEmbeddedApp
129
import ratpack.handling.Context
1310

1411
import static ratpack.groovy.test.embed.GroovyEmbeddedApp.ratpack
1512

1613
/**
1714
* A simple http server used for testing.<br>
18-
* Binds locally to {@link #PORT}.
15+
* Binds locally to {@link #port}.
1916
*
2017
* <p>To start: {@link #startServer()}<br>
2118
* to stop: {@link #stopServer()}
@@ -27,24 +24,24 @@ class TestHttpServer {
2724
*/
2825
public static final String IS_DD_SERVER = "is-dd-server"
2926

30-
private static GroovyEmbeddedApp INSTANCE = null
31-
private static int PORT = 0
27+
private static GroovyEmbeddedApp server = null
28+
private static int port = 0
3229

3330
static int getPort() {
34-
if (PORT == 0) {
31+
if (port == 0) {
3532
throw new RuntimeException("Server not started")
3633
}
37-
return PORT;
34+
return port
3835
}
3936

4037
/**
4138
* Start the server. Has no effect if already started.
4239
*
4340
* @throws IOException
4441
*/
45-
static synchronized def startServer() {
46-
if (null == INSTANCE) {
47-
INSTANCE = ratpack {
42+
static synchronized startServer() {
43+
if (null == server) {
44+
server = ratpack {
4845
handlers {
4946
get {
5047
String msg = "<html><body><h1>Hello test.</h1>\n"
@@ -55,46 +52,46 @@ class TestHttpServer {
5552
if (isDDServer) {
5653
final SpanContext extractedContext =
5754
GlobalTracer.get()
58-
.extract(Format.Builtin.HTTP_HEADERS, new RatpackResponseAdapter(context))
55+
.extract(Format.Builtin.HTTP_HEADERS, new RatpackResponseAdapter(context))
5956
ActiveSpan span =
6057
GlobalTracer.get()
61-
.buildSpan("test-http-server")
62-
.asChildOf(extractedContext)
63-
.startActive()
58+
.buildSpan("test-http-server")
59+
.asChildOf(extractedContext)
60+
.startActive()
6461
span.deactivate()
6562
}
6663

6764
response.status(200).send(msg)
6865
}
6966
}
7067
}
71-
PORT = INSTANCE.address.port
68+
port = server.address.port
7269
}
7370
}
7471

7572
/** Stop the server. Has no effect if already stopped. */
7673
static synchronized void stopServer() {
77-
if (null != INSTANCE) {
78-
INSTANCE.close()
79-
INSTANCE = null
80-
PORT = 0
74+
if (null != server) {
75+
server.close()
76+
server = null
77+
port = 0
8178
}
8279
}
8380

8481
private static class RatpackResponseAdapter implements TextMap {
85-
final Context context;
82+
final Context context
8683

87-
public RatpackResponseAdapter(Context context) {
84+
RatpackResponseAdapter(Context context) {
8885
this.context = context
8986
}
9087

9188
@Override
92-
public void put(String key, String value) {
89+
void put(String key, String value) {
9390
context.response.set(key, value)
9491
}
9592

9693
@Override
97-
public Iterator<Map.Entry<String, String>> iterator() {
94+
Iterator<Map.Entry<String, String>> iterator() {
9895
return context.request.getHeaders().asMultiValueMap().entrySet().iterator()
9996
}
10097
}

dd-java-agent-ittests/src/test/groovy/com/datadoghq/agent/integration/httpclient/ApacheHttpClientTest.groovy

Lines changed: 29 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,25 @@
11
package com.datadoghq.agent.integration.httpclient
22

3-
import com.datadoghq.agent.integration.TestUtils
43
import com.datadoghq.agent.integration.TestHttpServer
54
import com.datadoghq.trace.DDBaseSpan
65
import com.datadoghq.trace.DDTracer
76
import com.datadoghq.trace.writer.ListWriter
7+
import dd.test.TestUtils
88
import io.opentracing.tag.Tags
9-
import java.net.URI
10-
import java.util.List
119
import org.apache.http.HttpResponse
12-
import org.apache.http.message.BasicHeader
1310
import org.apache.http.client.HttpClient
1411
import org.apache.http.client.methods.HttpGet
1512
import org.apache.http.impl.client.HttpClientBuilder
16-
import spock.lang.*
13+
import org.apache.http.message.BasicHeader
14+
import spock.lang.Shared
15+
import spock.lang.Specification
1716

1817
class ApacheHttpClientTest extends Specification {
1918

2019
@Shared
21-
def ListWriter writer = new ListWriter()
20+
def writer = new ListWriter()
2221
@Shared
23-
def DDTracer tracer = new DDTracer(writer)
22+
def tracer = new DDTracer(writer)
2423

2524
def setupSpec() {
2625
TestUtils.registerOrReplaceGlobalTracer(tracer)
@@ -40,21 +39,17 @@ class ApacheHttpClientTest extends Specification {
4039
final HttpClientBuilder builder = HttpClientBuilder.create()
4140

4241
final HttpClient client = builder.build()
43-
TestUtils.runUnderTrace(
44-
"someTrace",
45-
new Runnable() {
46-
@Override
47-
public void run() {
48-
try {
49-
HttpResponse response =
50-
client.execute(new HttpGet(new URI("http://localhost:" + TestHttpServer.getPort())))
51-
assert response.getStatusLine().getStatusCode() == 200
52-
} catch (Exception e) {
53-
e.printStackTrace()
54-
throw new RuntimeException(e)
55-
}
56-
}
57-
})
42+
TestUtils.runUnderTrace("someTrace") {
43+
try {
44+
HttpResponse response =
45+
client.execute(new HttpGet(new URI("http://localhost:" + TestHttpServer.getPort())))
46+
assert response.getStatusLine().getStatusCode() == 200
47+
} catch (Exception e) {
48+
e.printStackTrace()
49+
throw new RuntimeException(e)
50+
}
51+
}
52+
5853
expect:
5954
// one trace on the server, one trace on the client
6055
writer.size() == 2
@@ -90,23 +85,18 @@ class ApacheHttpClientTest extends Specification {
9085
final HttpClientBuilder builder = HttpClientBuilder.create()
9186

9287
final HttpClient client = builder.build()
93-
TestUtils.runUnderTrace(
94-
"someTrace",
95-
new Runnable() {
96-
@Override
97-
public void run() {
98-
try {
99-
HttpGet request = new HttpGet(new URI("http://localhost:"
100-
+ TestHttpServer.getPort()))
101-
request.addHeader(new BasicHeader(TestHttpServer.IS_DD_SERVER, "false"))
102-
HttpResponse response = client.execute(request)
103-
assert response.getStatusLine().getStatusCode() == 200
104-
} catch (Exception e) {
105-
e.printStackTrace()
106-
throw new RuntimeException(e)
107-
}
108-
}
109-
})
88+
TestUtils.runUnderTrace("someTrace") {
89+
try {
90+
HttpGet request = new HttpGet(new URI("http://localhost:"
91+
+ TestHttpServer.getPort()))
92+
request.addHeader(new BasicHeader(TestHttpServer.IS_DD_SERVER, "false"))
93+
HttpResponse response = client.execute(request)
94+
assert response.getStatusLine().getStatusCode() == 200
95+
} catch (Exception e) {
96+
e.printStackTrace()
97+
throw new RuntimeException(e)
98+
}
99+
}
110100
expect:
111101
// only one trace (client).
112102
writer.size() == 1

dd-java-agent-ittests/src/test/java/com/datadoghq/agent/instrumentation/annotation/TraceAnnotationsTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22

33
import static org.assertj.core.api.Assertions.assertThat;
44

5-
import com.datadoghq.agent.integration.TestUtils;
65
import com.datadoghq.agent.test.SayTracedHello;
76
import com.datadoghq.trace.DDBaseSpan;
87
import com.datadoghq.trace.DDTracer;
98
import com.datadoghq.trace.integration.ErrorFlag;
109
import com.datadoghq.trace.writer.ListWriter;
10+
import dd.test.TestUtils;
1111
import io.opentracing.util.GlobalTracer;
1212
import java.io.PrintWriter;
1313
import java.io.StringWriter;

dd-java-agent-ittests/src/test/java/com/datadoghq/agent/integration/CassandraIntegrationTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.datadoghq.trace.writer.ListWriter;
88
import com.datastax.driver.core.Cluster;
99
import com.datastax.driver.core.Session;
10+
import dd.test.TestUtils;
1011
import io.opentracing.Tracer;
1112
import io.opentracing.tag.Tags;
1213
import org.cassandraunit.utils.EmbeddedCassandraServerHelper;
@@ -47,7 +48,7 @@ public void testSync() throws ClassNotFoundException {
4748
session.execute("SELECT * FROM sync_test.users where name = 'alice' ALLOW FILTERING");
4849

4950
assertThat(writer.getList().size()).isEqualTo(origSize + 5);
50-
DDBaseSpan<?> selectTrace = writer.get(writer.size() - 1).get(0);
51+
final DDBaseSpan<?> selectTrace = writer.get(writer.size() - 1).get(0);
5152

5253
assertThat(selectTrace.getServiceName()).isEqualTo(DDTracer.UNASSIGNED_DEFAULT_SERVICE_NAME);
5354
assertThat(selectTrace.getOperationName()).isEqualTo("execute");
@@ -89,7 +90,7 @@ public void testAsync() throws Exception {
8990
}
9091
Thread.sleep(1);
9192
}
92-
DDBaseSpan<?> selectTrace = writer.get(writer.size() - 1).get(0);
93+
final DDBaseSpan<?> selectTrace = writer.get(writer.size() - 1).get(0);
9394

9495
assertThat(selectTrace.getServiceName()).isEqualTo(DDTracer.UNASSIGNED_DEFAULT_SERVICE_NAME);
9596
assertThat(selectTrace.getOperationName()).isEqualTo("execute");

dd-java-agent-ittests/src/test/java/com/datadoghq/agent/integration/MongoAsyncClientInstrumentationTest.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import com.mongodb.async.client.MongoClient;
1212
import com.mongodb.async.client.MongoClients;
1313
import com.mongodb.async.client.MongoDatabase;
14+
import dd.test.TestUtils;
1415
import io.opentracing.tag.Tags;
1516
import java.net.InetAddress;
1617
import java.nio.ByteBuffer;
@@ -52,15 +53,15 @@ public void asyncClientHasListener() {
5253

5354
@Test
5455
public void insertOperation() throws InterruptedException, Exception {
55-
MongoDatabase db = client.getDatabase(MONGO_DB_NAME);
56+
final MongoDatabase db = client.getDatabase(MONGO_DB_NAME);
5657
final String collectionName = "asyncCollection";
5758
final AtomicBoolean done = new AtomicBoolean(false);
5859

5960
db.createCollection(
6061
collectionName,
6162
new SingleResultCallback<Void>() {
6263
@Override
63-
public void onResult(Void result, Throwable t) {
64+
public void onResult(final Void result, final Throwable t) {
6465
done.set(true);
6566
}
6667
});
@@ -86,7 +87,7 @@ public void onResult(final Void result, final Throwable t) {
8687
.count(
8788
new SingleResultCallback<Long>() {
8889
@Override
89-
public void onResult(Long result, Throwable t) {
90+
public void onResult(final Long result, final Throwable t) {
9091
Assert.assertEquals(1, result.longValue());
9192
done.set(true);
9293
}

dd-java-agent-ittests/src/test/java/com/datadoghq/agent/integration/MongoClientInstrumentationTest.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@
66
import com.mongodb.MongoClient;
77
import com.mongodb.client.MongoCollection;
88
import com.mongodb.client.MongoDatabase;
9-
import de.flapdoodle.embed.mongo.*;
9+
import dd.test.TestUtils;
10+
import de.flapdoodle.embed.mongo.MongodExecutable;
11+
import de.flapdoodle.embed.mongo.MongodProcess;
12+
import de.flapdoodle.embed.mongo.MongodStarter;
1013
import de.flapdoodle.embed.mongo.config.IMongodConfig;
1114
import de.flapdoodle.embed.mongo.config.MongodConfigBuilder;
1215
import de.flapdoodle.embed.mongo.config.Net;
@@ -34,9 +37,9 @@ public class MongoClientInstrumentationTest {
3437
private static final DDTracer tracer = new DDTracer(writer);
3538

3639
public static void startLocalMongo() throws Exception {
37-
MongodStarter starter = MongodStarter.getDefaultInstance();
40+
final MongodStarter starter = MongodStarter.getDefaultInstance();
3841

39-
IMongodConfig mongodConfig =
42+
final IMongodConfig mongodConfig =
4043
new MongodConfigBuilder()
4144
.version(Version.Main.PRODUCTION)
4245
.net(new Net(MONGO_HOST, MONGO_PORT, Network.localhostIsIPv6()))
@@ -84,10 +87,10 @@ public void syncClientHasListener() {
8487

8588
@Test
8689
public void insertOperation() throws UnknownHostException {
87-
MongoDatabase db = client.getDatabase(MONGO_DB_NAME);
90+
final MongoDatabase db = client.getDatabase(MONGO_DB_NAME);
8891
final String collectionName = "testCollection";
8992
db.createCollection(collectionName);
90-
MongoCollection<Document> collection = db.getCollection(collectionName);
93+
final MongoCollection<Document> collection = db.getCollection(collectionName);
9194

9295
collection.insertOne(new Document("foo", "bar"));
9396

dd-java-agent-ittests/src/test/java/com/datadoghq/agent/integration/TestUtils.java

Lines changed: 0 additions & 28 deletions
This file was deleted.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
enableCustomAnnotationTracingOver: ["com.datadoghq.benchmark"]

0 commit comments

Comments
 (0)