11package com.datadoghq.agent.integration.servlet
22
3+ import com.datadoghq.trace.DDBaseSpan
34import com.datadoghq.trace.DDTags
45import com.datadoghq.trace.DDTracer
56import com.datadoghq.trace.writer.ListWriter
67import io.opentracing.tag.Tags
78import io.opentracing.util.GlobalTracer
9+ import okhttp3.Interceptor
810import okhttp3.OkHttpClient
911import okhttp3.Request
12+ import okhttp3.Response
1013import org.eclipse.jetty.server.Server
1114import org.eclipse.jetty.servlet.ServletContextHandler
1215import spock.lang.Specification
1316import spock.lang.Unroll
1417
1518import java.lang.reflect.Field
19+ import java.util.concurrent.CountDownLatch
1620
1721class JettyServletTest extends Specification {
1822
1923 static final int PORT = randomOpenPort()
24+
25+ // Jetty needs this to ensure consistent ordering for async.
26+ static CountDownLatch latch
2027 OkHttpClient client = new OkHttpClient.Builder ()
28+ .addNetworkInterceptor(new Interceptor () {
29+ @Override
30+ Response intercept (Interceptor.Chain chain ) throws IOException {
31+ def response = chain. proceed(chain. request())
32+ JettyServletTest . latch. await()
33+ return response
34+ }
35+ })
2136 // Uncomment when debugging:
2237// .connectTimeout(1, TimeUnit.HOURS)
2338// .writeTimeout(1, TimeUnit.HOURS)
@@ -27,7 +42,13 @@ class JettyServletTest extends Specification {
2742 private Server jettyServer
2843 private ServletContextHandler servletContext
2944
30- ListWriter writer = new ListWriter ()
45+ ListWriter writer = new ListWriter () {
46+ @Override
47+ void write (final List<DDBaseSpan<?> > trace ) {
48+ add(trace)
49+ JettyServletTest . latch. countDown()
50+ }
51+ }
3152 DDTracer tracer = new DDTracer (writer)
3253
3354 def setup () {
@@ -63,6 +84,7 @@ class JettyServletTest extends Specification {
6384 @Unroll
6485 def " test #path servlet call" () {
6586 setup :
87+ latch = new CountDownLatch (1 )
6688 def request = new Request.Builder ()
6789 .url(" http://localhost:$PORT /$path " )
6890 .get()
0 commit comments