Skip to content

Commit 51dfd2b

Browse files
committed
Fix latestDepTests for Jetty
1 parent 5e194ef commit 51dfd2b

3 files changed

Lines changed: 92 additions & 57 deletions

File tree

dd-java-agent/instrumentation/jetty-8/src/test/groovy/JettyHandlerTest.groovy

Lines changed: 79 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import datadog.trace.agent.test.AgentTestRunner
22
import datadog.trace.agent.test.TestUtils
33
import datadog.trace.agent.test.utils.OkHttpUtils
4-
import datadog.trace.api.Config
54
import datadog.trace.api.DDSpanTypes
65
import okhttp3.OkHttpClient
76
import org.eclipse.jetty.continuation.Continuation
@@ -11,9 +10,11 @@ import org.eclipse.jetty.server.Request
1110
import org.eclipse.jetty.server.Server
1211
import org.eclipse.jetty.server.handler.AbstractHandler
1312

13+
import javax.servlet.DispatcherType
1414
import javax.servlet.ServletException
1515
import javax.servlet.http.HttpServletRequest
1616
import javax.servlet.http.HttpServletResponse
17+
import java.util.concurrent.atomic.AtomicBoolean
1718

1819
class JettyHandlerTest extends AgentTestRunner {
1920

@@ -55,29 +56,29 @@ class JettyHandlerTest extends AgentTestRunner {
5556

5657
expect:
5758
response.body().string().trim() == "Hello World"
58-
TEST_WRITER.waitForTraces(1)
59-
TEST_WRITER.size() == 1
60-
def trace = TEST_WRITER.firstTrace()
61-
trace.size() == 1
62-
def context = trace[0].context()
63-
context.serviceName == "unnamed-java-app"
64-
context.operationName == "jetty.request"
65-
context.resourceName == "GET ${handler.class.name}"
66-
context.spanType == DDSpanTypes.HTTP_SERVER
67-
!context.getErrorFlag()
68-
context.parentId == "0"
69-
def tags = context.tags
70-
tags["http.url"] == "http://localhost:$port/"
71-
tags["http.method"] == "GET"
72-
tags["span.kind"] == "server"
73-
tags["span.type"] == DDSpanTypes.HTTP_SERVER
74-
tags["component"] == "jetty-handler"
75-
tags["http.status_code"] == 200
76-
tags["thread.name"] != null
77-
tags["thread.id"] != null
78-
tags[Config.RUNTIME_ID_TAG] == Config.get().runtimeId
79-
tags["span.origin.type"] == handler.class.name
80-
tags.size() == 10
59+
60+
assertTraces(1) {
61+
trace(0, 1) {
62+
span(0) {
63+
serviceName "unnamed-java-app"
64+
operationName "jetty.request"
65+
resourceName "GET ${handler.class.name}"
66+
spanType DDSpanTypes.HTTP_SERVER
67+
errored false
68+
parent()
69+
tags {
70+
"http.url" "http://localhost:$port/"
71+
"http.method" "GET"
72+
"span.kind" "server"
73+
"component" "jetty-handler"
74+
"span.origin.type" handler.class.name
75+
"span.type" DDSpanTypes.HTTP_SERVER
76+
"http.status_code" 200
77+
defaultTags()
78+
}
79+
}
80+
}
81+
}
8182
}
8283

8384
def "handler instrumentation clears state after async request"() {
@@ -127,10 +128,16 @@ class JettyHandlerTest extends AgentTestRunner {
127128

128129
def "call to jetty with error creates a trace"() {
129130
setup:
131+
def errorHandlerCalled = new AtomicBoolean(false)
130132
Handler handler = new AbstractHandler() {
131133
@Override
132134
void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
133-
throw new RuntimeException()
135+
if (baseRequest.dispatcherType == DispatcherType.ERROR) {
136+
errorHandlerCalled.set(true)
137+
baseRequest.setHandled(true)
138+
} else {
139+
throw new RuntimeException()
140+
}
134141
}
135142
}
136143
server.setHandler(handler)
@@ -143,31 +150,52 @@ class JettyHandlerTest extends AgentTestRunner {
143150

144151
expect:
145152
response.body().string().trim() == ""
146-
TEST_WRITER.waitForTraces(1)
147-
TEST_WRITER.size() == 1
148-
def trace = TEST_WRITER.firstTrace()
149-
trace.size() == 1
150-
def context = trace[0].context()
151-
context.serviceName == "unnamed-java-app"
152-
context.operationName == "jetty.request"
153-
context.resourceName == "GET ${handler.class.name}"
154-
context.spanType == DDSpanTypes.HTTP_SERVER
155-
context.getErrorFlag()
156-
context.parentId == "0"
157-
def tags = context.tags
158-
tags["http.url"] == "http://localhost:$port/"
159-
tags["http.method"] == "GET"
160-
tags["span.kind"] == "server"
161-
tags["span.type"] == DDSpanTypes.HTTP_SERVER
162-
tags["component"] == "jetty-handler"
163-
tags["http.status_code"] == 500
164-
tags["thread.name"] != null
165-
tags["thread.id"] != null
166-
tags[Config.RUNTIME_ID_TAG] == Config.get().runtimeId
167-
tags["span.origin.type"] == handler.class.name
168-
tags["error"] == true
169-
tags["error.type"] == RuntimeException.name
170-
tags["error.stack"] != null
171-
tags.size() == 13
153+
154+
assertTraces(errorHandlerCalled.get() ? 2 : 1) {
155+
trace(0, 1) {
156+
span(0) {
157+
serviceName "unnamed-java-app"
158+
operationName "jetty.request"
159+
resourceName "GET ${handler.class.name}"
160+
spanType DDSpanTypes.HTTP_SERVER
161+
errored true
162+
parent()
163+
tags {
164+
"http.url" "http://localhost:$port/"
165+
"http.method" "GET"
166+
"span.kind" "server"
167+
"component" "jetty-handler"
168+
"span.origin.type" handler.class.name
169+
"span.type" DDSpanTypes.HTTP_SERVER
170+
"http.status_code" 500
171+
errorTags RuntimeException
172+
defaultTags()
173+
}
174+
}
175+
}
176+
if (errorHandlerCalled.get()) {
177+
trace(1, 1) {
178+
span(0) {
179+
serviceName "unnamed-java-app"
180+
operationName "jetty.request"
181+
resourceName "GET ${handler.class.name}"
182+
spanType DDSpanTypes.HTTP_SERVER
183+
errored true
184+
parent()
185+
tags {
186+
"http.url" "http://localhost:$port/"
187+
"http.method" "GET"
188+
"span.kind" "server"
189+
"component" "jetty-handler"
190+
"span.origin.type" handler.class.name
191+
"span.type" DDSpanTypes.HTTP_SERVER
192+
"http.status_code" 500
193+
"error" true
194+
defaultTags()
195+
}
196+
}
197+
}
198+
}
199+
}
172200
}
173201
}

dd-java-agent/instrumentation/servlet-3/src/test/groovy/JettyServlet3Test.groovy

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import okhttp3.Interceptor
77
import okhttp3.OkHttpClient
88
import okhttp3.Request
99
import okhttp3.Response
10-
import org.eclipse.jetty.http.HttpHeaders
1110
import org.eclipse.jetty.security.ConstraintMapping
1211
import org.eclipse.jetty.security.ConstraintSecurityHandler
1312
import org.eclipse.jetty.security.HashLoginService
@@ -16,6 +15,7 @@ import org.eclipse.jetty.security.authentication.BasicAuthenticator
1615
import org.eclipse.jetty.server.Server
1716
import org.eclipse.jetty.servlet.ServletContextHandler
1817
import org.eclipse.jetty.util.security.Constraint
18+
import spock.lang.Shared
1919

2020
class JettyServlet3Test extends AgentTestRunner {
2121

@@ -29,11 +29,14 @@ class JettyServlet3Test extends AgentTestRunner {
2929
})
3030
.build()
3131

32+
@Shared
3233
int port
34+
@Shared
3335
private Server jettyServer
36+
@Shared
3437
private ServletContextHandler servletContext
3538

36-
def setup() {
39+
def setupSpec() {
3740
port = TestUtils.randomOpenPort()
3841
jettyServer = new Server(port)
3942
servletContext = new ServletContextHandler()
@@ -53,7 +56,7 @@ class JettyServlet3Test extends AgentTestRunner {
5356
"Jetty server: http://localhost:" + port + "/")
5457
}
5558

56-
def cleanup() {
59+
def cleanupSpec() {
5760
jettyServer.stop()
5861
jettyServer.destroy()
5962
}
@@ -68,7 +71,7 @@ class JettyServlet3Test extends AgentTestRunner {
6871
requestBuilder.header("x-datadog-parent-id", "456")
6972
}
7073
if (auth) {
71-
requestBuilder.header(HttpHeaders.AUTHORIZATION, Credentials.basic("user", "password"))
74+
requestBuilder.header("Authorization", Credentials.basic("user", "password"))
7275
}
7376
def response = client.newCall(requestBuilder.build()).execute()
7477

dd-java-agent/instrumentation/servlet-3/src/test/groovy/TomcatServlet3Test.groovy

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,20 @@ import org.apache.catalina.core.ApplicationFilterChain
1010
import org.apache.catalina.startup.Tomcat
1111
import org.apache.tomcat.JarScanFilter
1212
import org.apache.tomcat.JarScanType
13+
import spock.lang.Shared
1314

1415
class TomcatServlet3Test extends AgentTestRunner {
1516

1617
OkHttpClient client = OkHttpUtils.client()
1718

19+
@Shared
1820
int port
21+
@Shared
1922
Tomcat tomcatServer
23+
@Shared
2024
Context appContext
2125

22-
def setup() {
26+
def setupSpec() {
2327
port = TestUtils.randomOpenPort()
2428
tomcatServer = new Tomcat()
2529
tomcatServer.setPort(port)
@@ -52,7 +56,7 @@ class TomcatServlet3Test extends AgentTestRunner {
5256
"Tomcat server: http://" + tomcatServer.getHost().getName() + ":" + port + "/")
5357
}
5458

55-
def cleanup() {
59+
def cleanupSpec() {
5660
tomcatServer.stop()
5761
tomcatServer.destroy()
5862
}

0 commit comments

Comments
 (0)