opentelemetry-java-instrume.../dd-java-agent/instrumentation/java-concurrent/src/slickTest/groovy/SlickTest.groovy

81 lines
2.1 KiB
Groovy

import datadog.trace.agent.test.AgentTestRunner
import datadog.trace.api.DDSpanTypes
import datadog.trace.api.DDTags
import io.opentracing.tag.Tags
class SlickTest extends AgentTestRunner {
// Can't be @Shared, otherwise the work queue is initialized before the instrumentation is applied
def database = new SlickUtils()
def "Basic statement generates spans"() {
setup:
def future = database.startQuery(SlickUtils.TestQuery())
def result = database.getResults(future)
expect:
result == SlickUtils.TestValue()
assertTraces(1) {
trace(0, 2) {
span(0) {
operationName "SlickUtils.startQuery"
serviceName "unnamed-java-app"
resourceName "SlickUtils.startQuery"
parent()
errored false
tags {
"$Tags.COMPONENT.key" "trace"
defaultTags()
}
}
span(1) {
operationName "${SlickUtils.Driver()}.query"
serviceName SlickUtils.Driver()
resourceName SlickUtils.TestQuery()
childOf span(0)
errored false
tags {
"$Tags.COMPONENT.key" "java-jdbc-prepared_statement"
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_CLIENT
"$DDTags.SPAN_TYPE" DDSpanTypes.SQL
"$Tags.DB_TYPE.key" SlickUtils.Driver()
"$Tags.DB_USER.key" SlickUtils.Username()
"db.instance" SlickUtils.Url()
"span.origin.type" "org.h2.jdbc.JdbcPreparedStatement"
defaultTags()
}
}
}
}
}
def "Concurrent requests do not throw exception"() {
setup:
def sleepFuture = database.startQuery(SlickUtils.SleepQuery())
def future = database.startQuery(SlickUtils.TestQuery())
def result = database.getResults(future)
database.getResults(sleepFuture)
expect:
result == SlickUtils.TestValue()
// Expect two traces because two queries have been run
assertTraces(2) {
trace(0, 2, {
span(0) {}
span(1) {}
})
trace(1, 2, {
span(0) {}
span(1) {}
})
}
}
}