Fix latestDepTests for Jetty
This commit is contained in:
parent
5e194ef06c
commit
51dfd2b184
|
@ -1,7 +1,6 @@
|
||||||
import datadog.trace.agent.test.AgentTestRunner
|
import datadog.trace.agent.test.AgentTestRunner
|
||||||
import datadog.trace.agent.test.TestUtils
|
import datadog.trace.agent.test.TestUtils
|
||||||
import datadog.trace.agent.test.utils.OkHttpUtils
|
import datadog.trace.agent.test.utils.OkHttpUtils
|
||||||
import datadog.trace.api.Config
|
|
||||||
import datadog.trace.api.DDSpanTypes
|
import datadog.trace.api.DDSpanTypes
|
||||||
import okhttp3.OkHttpClient
|
import okhttp3.OkHttpClient
|
||||||
import org.eclipse.jetty.continuation.Continuation
|
import org.eclipse.jetty.continuation.Continuation
|
||||||
|
@ -11,9 +10,11 @@ import org.eclipse.jetty.server.Request
|
||||||
import org.eclipse.jetty.server.Server
|
import org.eclipse.jetty.server.Server
|
||||||
import org.eclipse.jetty.server.handler.AbstractHandler
|
import org.eclipse.jetty.server.handler.AbstractHandler
|
||||||
|
|
||||||
|
import javax.servlet.DispatcherType
|
||||||
import javax.servlet.ServletException
|
import javax.servlet.ServletException
|
||||||
import javax.servlet.http.HttpServletRequest
|
import javax.servlet.http.HttpServletRequest
|
||||||
import javax.servlet.http.HttpServletResponse
|
import javax.servlet.http.HttpServletResponse
|
||||||
|
import java.util.concurrent.atomic.AtomicBoolean
|
||||||
|
|
||||||
class JettyHandlerTest extends AgentTestRunner {
|
class JettyHandlerTest extends AgentTestRunner {
|
||||||
|
|
||||||
|
@ -55,29 +56,29 @@ class JettyHandlerTest extends AgentTestRunner {
|
||||||
|
|
||||||
expect:
|
expect:
|
||||||
response.body().string().trim() == "Hello World"
|
response.body().string().trim() == "Hello World"
|
||||||
TEST_WRITER.waitForTraces(1)
|
|
||||||
TEST_WRITER.size() == 1
|
assertTraces(1) {
|
||||||
def trace = TEST_WRITER.firstTrace()
|
trace(0, 1) {
|
||||||
trace.size() == 1
|
span(0) {
|
||||||
def context = trace[0].context()
|
serviceName "unnamed-java-app"
|
||||||
context.serviceName == "unnamed-java-app"
|
operationName "jetty.request"
|
||||||
context.operationName == "jetty.request"
|
resourceName "GET ${handler.class.name}"
|
||||||
context.resourceName == "GET ${handler.class.name}"
|
spanType DDSpanTypes.HTTP_SERVER
|
||||||
context.spanType == DDSpanTypes.HTTP_SERVER
|
errored false
|
||||||
!context.getErrorFlag()
|
parent()
|
||||||
context.parentId == "0"
|
tags {
|
||||||
def tags = context.tags
|
"http.url" "http://localhost:$port/"
|
||||||
tags["http.url"] == "http://localhost:$port/"
|
"http.method" "GET"
|
||||||
tags["http.method"] == "GET"
|
"span.kind" "server"
|
||||||
tags["span.kind"] == "server"
|
"component" "jetty-handler"
|
||||||
tags["span.type"] == DDSpanTypes.HTTP_SERVER
|
"span.origin.type" handler.class.name
|
||||||
tags["component"] == "jetty-handler"
|
"span.type" DDSpanTypes.HTTP_SERVER
|
||||||
tags["http.status_code"] == 200
|
"http.status_code" 200
|
||||||
tags["thread.name"] != null
|
defaultTags()
|
||||||
tags["thread.id"] != null
|
}
|
||||||
tags[Config.RUNTIME_ID_TAG] == Config.get().runtimeId
|
}
|
||||||
tags["span.origin.type"] == handler.class.name
|
}
|
||||||
tags.size() == 10
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
def "handler instrumentation clears state after async request"() {
|
def "handler instrumentation clears state after async request"() {
|
||||||
|
@ -127,10 +128,16 @@ class JettyHandlerTest extends AgentTestRunner {
|
||||||
|
|
||||||
def "call to jetty with error creates a trace"() {
|
def "call to jetty with error creates a trace"() {
|
||||||
setup:
|
setup:
|
||||||
|
def errorHandlerCalled = new AtomicBoolean(false)
|
||||||
Handler handler = new AbstractHandler() {
|
Handler handler = new AbstractHandler() {
|
||||||
@Override
|
@Override
|
||||||
void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
|
void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
|
||||||
throw new RuntimeException()
|
if (baseRequest.dispatcherType == DispatcherType.ERROR) {
|
||||||
|
errorHandlerCalled.set(true)
|
||||||
|
baseRequest.setHandled(true)
|
||||||
|
} else {
|
||||||
|
throw new RuntimeException()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
server.setHandler(handler)
|
server.setHandler(handler)
|
||||||
|
@ -143,31 +150,52 @@ class JettyHandlerTest extends AgentTestRunner {
|
||||||
|
|
||||||
expect:
|
expect:
|
||||||
response.body().string().trim() == ""
|
response.body().string().trim() == ""
|
||||||
TEST_WRITER.waitForTraces(1)
|
|
||||||
TEST_WRITER.size() == 1
|
assertTraces(errorHandlerCalled.get() ? 2 : 1) {
|
||||||
def trace = TEST_WRITER.firstTrace()
|
trace(0, 1) {
|
||||||
trace.size() == 1
|
span(0) {
|
||||||
def context = trace[0].context()
|
serviceName "unnamed-java-app"
|
||||||
context.serviceName == "unnamed-java-app"
|
operationName "jetty.request"
|
||||||
context.operationName == "jetty.request"
|
resourceName "GET ${handler.class.name}"
|
||||||
context.resourceName == "GET ${handler.class.name}"
|
spanType DDSpanTypes.HTTP_SERVER
|
||||||
context.spanType == DDSpanTypes.HTTP_SERVER
|
errored true
|
||||||
context.getErrorFlag()
|
parent()
|
||||||
context.parentId == "0"
|
tags {
|
||||||
def tags = context.tags
|
"http.url" "http://localhost:$port/"
|
||||||
tags["http.url"] == "http://localhost:$port/"
|
"http.method" "GET"
|
||||||
tags["http.method"] == "GET"
|
"span.kind" "server"
|
||||||
tags["span.kind"] == "server"
|
"component" "jetty-handler"
|
||||||
tags["span.type"] == DDSpanTypes.HTTP_SERVER
|
"span.origin.type" handler.class.name
|
||||||
tags["component"] == "jetty-handler"
|
"span.type" DDSpanTypes.HTTP_SERVER
|
||||||
tags["http.status_code"] == 500
|
"http.status_code" 500
|
||||||
tags["thread.name"] != null
|
errorTags RuntimeException
|
||||||
tags["thread.id"] != null
|
defaultTags()
|
||||||
tags[Config.RUNTIME_ID_TAG] == Config.get().runtimeId
|
}
|
||||||
tags["span.origin.type"] == handler.class.name
|
}
|
||||||
tags["error"] == true
|
}
|
||||||
tags["error.type"] == RuntimeException.name
|
if (errorHandlerCalled.get()) {
|
||||||
tags["error.stack"] != null
|
trace(1, 1) {
|
||||||
tags.size() == 13
|
span(0) {
|
||||||
|
serviceName "unnamed-java-app"
|
||||||
|
operationName "jetty.request"
|
||||||
|
resourceName "GET ${handler.class.name}"
|
||||||
|
spanType DDSpanTypes.HTTP_SERVER
|
||||||
|
errored true
|
||||||
|
parent()
|
||||||
|
tags {
|
||||||
|
"http.url" "http://localhost:$port/"
|
||||||
|
"http.method" "GET"
|
||||||
|
"span.kind" "server"
|
||||||
|
"component" "jetty-handler"
|
||||||
|
"span.origin.type" handler.class.name
|
||||||
|
"span.type" DDSpanTypes.HTTP_SERVER
|
||||||
|
"http.status_code" 500
|
||||||
|
"error" true
|
||||||
|
defaultTags()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,6 @@ import okhttp3.Interceptor
|
||||||
import okhttp3.OkHttpClient
|
import okhttp3.OkHttpClient
|
||||||
import okhttp3.Request
|
import okhttp3.Request
|
||||||
import okhttp3.Response
|
import okhttp3.Response
|
||||||
import org.eclipse.jetty.http.HttpHeaders
|
|
||||||
import org.eclipse.jetty.security.ConstraintMapping
|
import org.eclipse.jetty.security.ConstraintMapping
|
||||||
import org.eclipse.jetty.security.ConstraintSecurityHandler
|
import org.eclipse.jetty.security.ConstraintSecurityHandler
|
||||||
import org.eclipse.jetty.security.HashLoginService
|
import org.eclipse.jetty.security.HashLoginService
|
||||||
|
@ -16,6 +15,7 @@ import org.eclipse.jetty.security.authentication.BasicAuthenticator
|
||||||
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 org.eclipse.jetty.util.security.Constraint
|
import org.eclipse.jetty.util.security.Constraint
|
||||||
|
import spock.lang.Shared
|
||||||
|
|
||||||
class JettyServlet3Test extends AgentTestRunner {
|
class JettyServlet3Test extends AgentTestRunner {
|
||||||
|
|
||||||
|
@ -29,11 +29,14 @@ class JettyServlet3Test extends AgentTestRunner {
|
||||||
})
|
})
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
|
@Shared
|
||||||
int port
|
int port
|
||||||
|
@Shared
|
||||||
private Server jettyServer
|
private Server jettyServer
|
||||||
|
@Shared
|
||||||
private ServletContextHandler servletContext
|
private ServletContextHandler servletContext
|
||||||
|
|
||||||
def setup() {
|
def setupSpec() {
|
||||||
port = TestUtils.randomOpenPort()
|
port = TestUtils.randomOpenPort()
|
||||||
jettyServer = new Server(port)
|
jettyServer = new Server(port)
|
||||||
servletContext = new ServletContextHandler()
|
servletContext = new ServletContextHandler()
|
||||||
|
@ -53,7 +56,7 @@ class JettyServlet3Test extends AgentTestRunner {
|
||||||
"Jetty server: http://localhost:" + port + "/")
|
"Jetty server: http://localhost:" + port + "/")
|
||||||
}
|
}
|
||||||
|
|
||||||
def cleanup() {
|
def cleanupSpec() {
|
||||||
jettyServer.stop()
|
jettyServer.stop()
|
||||||
jettyServer.destroy()
|
jettyServer.destroy()
|
||||||
}
|
}
|
||||||
|
@ -68,7 +71,7 @@ class JettyServlet3Test extends AgentTestRunner {
|
||||||
requestBuilder.header("x-datadog-parent-id", "456")
|
requestBuilder.header("x-datadog-parent-id", "456")
|
||||||
}
|
}
|
||||||
if (auth) {
|
if (auth) {
|
||||||
requestBuilder.header(HttpHeaders.AUTHORIZATION, Credentials.basic("user", "password"))
|
requestBuilder.header("Authorization", Credentials.basic("user", "password"))
|
||||||
}
|
}
|
||||||
def response = client.newCall(requestBuilder.build()).execute()
|
def response = client.newCall(requestBuilder.build()).execute()
|
||||||
|
|
||||||
|
|
|
@ -10,16 +10,20 @@ import org.apache.catalina.core.ApplicationFilterChain
|
||||||
import org.apache.catalina.startup.Tomcat
|
import org.apache.catalina.startup.Tomcat
|
||||||
import org.apache.tomcat.JarScanFilter
|
import org.apache.tomcat.JarScanFilter
|
||||||
import org.apache.tomcat.JarScanType
|
import org.apache.tomcat.JarScanType
|
||||||
|
import spock.lang.Shared
|
||||||
|
|
||||||
class TomcatServlet3Test extends AgentTestRunner {
|
class TomcatServlet3Test extends AgentTestRunner {
|
||||||
|
|
||||||
OkHttpClient client = OkHttpUtils.client()
|
OkHttpClient client = OkHttpUtils.client()
|
||||||
|
|
||||||
|
@Shared
|
||||||
int port
|
int port
|
||||||
|
@Shared
|
||||||
Tomcat tomcatServer
|
Tomcat tomcatServer
|
||||||
|
@Shared
|
||||||
Context appContext
|
Context appContext
|
||||||
|
|
||||||
def setup() {
|
def setupSpec() {
|
||||||
port = TestUtils.randomOpenPort()
|
port = TestUtils.randomOpenPort()
|
||||||
tomcatServer = new Tomcat()
|
tomcatServer = new Tomcat()
|
||||||
tomcatServer.setPort(port)
|
tomcatServer.setPort(port)
|
||||||
|
@ -52,7 +56,7 @@ class TomcatServlet3Test extends AgentTestRunner {
|
||||||
"Tomcat server: http://" + tomcatServer.getHost().getName() + ":" + port + "/")
|
"Tomcat server: http://" + tomcatServer.getHost().getName() + ":" + port + "/")
|
||||||
}
|
}
|
||||||
|
|
||||||
def cleanup() {
|
def cleanupSpec() {
|
||||||
tomcatServer.stop()
|
tomcatServer.stop()
|
||||||
tomcatServer.destroy()
|
tomcatServer.destroy()
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue