Skip to content

Commit 56db67f

Browse files
committed
Add a two way check with _dd.integration
1 parent fdcdecd commit 56db67f

3 files changed

Lines changed: 18 additions & 2 deletions

File tree

dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/InstrumentationSpecification.groovy

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import datadog.metrics.impl.MonitoringImpl
3333
import datadog.metrics.api.statsd.StatsDClient
3434
import datadog.instrument.classinject.ClassInjector
3535
import datadog.trace.agent.test.asserts.ListWriterAssert
36+
import datadog.trace.agent.test.asserts.TagsAssert
3637
import datadog.trace.agent.test.datastreams.MockFeaturesDiscovery
3738
import datadog.trace.agent.test.datastreams.RecordingDatastreamsPayloadWriter
3839
import datadog.trace.agent.tooling.AgentInstaller
@@ -405,8 +406,11 @@ abstract class InstrumentationSpecification extends DDSpecification implements A
405406
TracerInstaller.forceInstallGlobalTracer(TEST_TRACER)
406407

407408
boolean enabledFinishTimingChecks = this.enabledFinishTimingChecks()
408-
TEST_TRACER.startSpan(*_) >> {
409+
TEST_TRACER.startSpan(*_) >> { Object[] args ->
409410
AgentSpan agentSpan = callRealMethod()
411+
if (args.length > 0 && args[0] instanceof String) {
412+
TagsAssert.INSTRUMENTATION_NAMES[agentSpan.spanId] = (String) args[0]
413+
}
410414
if (!enabledFinishTimingChecks) {
411415
return agentSpan
412416
}

dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/asserts/TagsAssert.groovy

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,22 @@ import datadog.trace.common.writer.ddagent.TraceMapper
1111
import datadog.trace.core.DDSpan
1212
import groovy.transform.stc.ClosureParams
1313
import groovy.transform.stc.SimpleType
14+
import java.util.concurrent.ConcurrentHashMap
1415
import java.util.regex.Pattern
1516

1617
class TagsAssert {
18+
// Populated by the InstrumentationSpecification spy; keyed by span ID.
19+
static final Map<Long, String> INSTRUMENTATION_NAMES = new ConcurrentHashMap<>()
20+
1721
private final long spanParentId
22+
private final long spanId
1823
private final Map<String, Object> tags
1924
private final String serviceName
2025
private final Set<String> assertedTags = new TreeSet<>()
2126

2227
private TagsAssert(DDSpan span) {
2328
this.spanParentId = span.parentId
29+
this.spanId = span.spanId
2430
this.tags = span.tags
2531
this.serviceName = span.getServiceName()
2632
}
@@ -107,6 +113,11 @@ class TagsAssert {
107113
if (assertedTags.add(DDTags.DD_INTEGRATION) && tags[Tags.COMPONENT] != null) {
108114
assert tags[Tags.COMPONENT].toString() == tags[DDTags.DD_INTEGRATION].toString()
109115
}
116+
String capturedInstrumentationName = INSTRUMENTATION_NAMES.remove(spanId)
117+
if (capturedInstrumentationName != null && capturedInstrumentationName != "test" && tags[DDTags.DD_INTEGRATION] != null) {
118+
assert tags[DDTags.DD_INTEGRATION].toString() == capturedInstrumentationName :
119+
"DD_INTEGRATION '${tags[DDTags.DD_INTEGRATION]}' != instrumentationName '${capturedInstrumentationName}' passed to startSpan()"
120+
}
110121

111122
assert tags["thread.name"] != null
112123
assert tags["thread.id"] != null

dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/utils/TraceUtils.groovy

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package datadog.trace.agent.test.utils
33
import datadog.trace.agent.test.asserts.TraceAssert
44
import datadog.trace.bootstrap.instrumentation.api.AgentScope
55
import datadog.trace.bootstrap.instrumentation.api.AgentSpan
6+
import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext
67
import datadog.trace.bootstrap.instrumentation.decorator.BaseDecorator
78
import datadog.trace.core.DDSpan
89

@@ -44,7 +45,7 @@ class TraceUtils {
4445
}
4546

4647
static <T> T runUnderTrace(final String rootOperationName, final boolean inheritCurrent, final boolean async, final Callable<T> r) {
47-
final AgentSpan span = inheritCurrent ? startSpan(rootOperationName) : startSpan(rootOperationName, null)
48+
final AgentSpan span = inheritCurrent ? startSpan("test", rootOperationName) : startSpan("test", rootOperationName, (AgentSpanContext) null)
4849
DECORATOR.afterStart(span)
4950

5051
AgentScope scope = activateSpan(span)

0 commit comments

Comments
 (0)