Add funky locking to ensure consistent execution for jetty test.

This commit is contained in:
Tyler Benson 2017-09-21 13:42:43 -07:00
parent fb133c8905
commit cffde51b9e
2 changed files with 25 additions and 3 deletions

View File

@ -1,23 +1,38 @@
package com.datadoghq.agent.integration.servlet package com.datadoghq.agent.integration.servlet
import com.datadoghq.trace.DDBaseSpan
import com.datadoghq.trace.DDTags import com.datadoghq.trace.DDTags
import com.datadoghq.trace.DDTracer import com.datadoghq.trace.DDTracer
import com.datadoghq.trace.writer.ListWriter import com.datadoghq.trace.writer.ListWriter
import io.opentracing.tag.Tags import io.opentracing.tag.Tags
import io.opentracing.util.GlobalTracer import io.opentracing.util.GlobalTracer
import okhttp3.Interceptor
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import okhttp3.Request import okhttp3.Request
import okhttp3.Response
import org.eclipse.jetty.server.Server import org.eclipse.jetty.server.Server
import org.eclipse.jetty.servlet.ServletContextHandler import org.eclipse.jetty.servlet.ServletContextHandler
import spock.lang.Specification import spock.lang.Specification
import spock.lang.Unroll import spock.lang.Unroll
import java.lang.reflect.Field import java.lang.reflect.Field
import java.util.concurrent.CountDownLatch
class JettyServletTest extends Specification { class JettyServletTest extends Specification {
static final int PORT = randomOpenPort() static final int PORT = randomOpenPort()
// Jetty needs this to ensure consistent ordering for async.
static CountDownLatch latch
OkHttpClient client = new OkHttpClient.Builder() OkHttpClient client = new OkHttpClient.Builder()
.addNetworkInterceptor(new Interceptor() {
@Override
Response intercept(Interceptor.Chain chain) throws IOException {
def response = chain.proceed(chain.request())
JettyServletTest.latch.await()
return response
}
})
// Uncomment when debugging: // Uncomment when debugging:
// .connectTimeout(1, TimeUnit.HOURS) // .connectTimeout(1, TimeUnit.HOURS)
// .writeTimeout(1, TimeUnit.HOURS) // .writeTimeout(1, TimeUnit.HOURS)
@ -27,7 +42,13 @@ class JettyServletTest extends Specification {
private Server jettyServer private Server jettyServer
private ServletContextHandler servletContext private ServletContextHandler servletContext
ListWriter writer = new ListWriter() ListWriter writer = new ListWriter() {
@Override
void write(final List<DDBaseSpan<?>> trace) {
add(trace)
JettyServletTest.latch.countDown()
}
}
DDTracer tracer = new DDTracer(writer) DDTracer tracer = new DDTracer(writer)
def setup() { def setup() {
@ -63,6 +84,7 @@ class JettyServletTest extends Specification {
@Unroll @Unroll
def "test #path servlet call"() { def "test #path servlet call"() {
setup: setup:
latch = new CountDownLatch(1)
def request = new Request.Builder() def request = new Request.Builder()
.url("http://localhost:$PORT/$path") .url("http://localhost:$PORT/$path")
.get() .get()

View File

@ -80,10 +80,10 @@ public class InstrumentationRulesManager {
final ClassLoader cl; final ClassLoader cl;
if (obj instanceof ClassLoader) { if (obj instanceof ClassLoader) {
cl = (ClassLoader) obj; cl = (ClassLoader) obj;
log.info("Calling initialize with {}", cl); log.debug("Calling initialize with {}", cl);
} else { } else {
cl = obj.getClass().getClassLoader(); cl = obj.getClass().getClassLoader();
log.info("Calling initialize with {} and classloader ", obj, cl); log.debug("Calling initialize with {} and classloader {}", obj, cl);
} }
AgentRulesManager.INSTANCE.instrumentationRulesManager.initialize(cl); AgentRulesManager.INSTANCE.instrumentationRulesManager.initialize(cl);