Add funky locking to ensure consistent execution for jetty test.
This commit is contained in:
parent
fb133c8905
commit
cffde51b9e
|
@ -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()
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue