Skip to content

Commit 52d9691

Browse files
committed
Port span link related tests
1 parent 955e655 commit 52d9691

File tree

10 files changed

+87
-54
lines changed

10 files changed

+87
-54
lines changed

dd-java-agent/instrumentation/armeria-jetty/src/test/jetty11/groovy/ArmeriaJetty11ServerTest.groovy

+5
Original file line numberDiff line numberDiff line change
@@ -119,4 +119,9 @@ class ArmeriaJetty11ServerTest extends HttpServerTest<ArmeriaServer> {
119119
boolean testSessionId() {
120120
true
121121
}
122+
123+
@Override
124+
boolean testWebsockets() {
125+
false
126+
}
122127
}

dd-java-agent/instrumentation/aws-java-s3-2.0/src/test/groovy/S3ClientTest.groovy

+35-41
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import datadog.trace.agent.test.AgentTestRunner
22
import datadog.trace.api.DDSpanTypes
3+
import datadog.trace.api.DDTraceId
4+
import datadog.trace.bootstrap.instrumentation.api.SpanAttributes
5+
import datadog.trace.bootstrap.instrumentation.api.SpanLink
36
import datadog.trace.core.tagprocessor.SpanPointersProcessor
4-
import groovy.json.JsonSlurper
57
import org.testcontainers.containers.GenericContainer
68
import org.testcontainers.utility.DockerImageName
79
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials
@@ -70,6 +72,14 @@ class S3ClientTest extends AgentTestRunner {
7072
operationName "aws.http"
7173
resourceName "S3.PutObject"
7274
spanType DDSpanTypes.HTTP_CLIENT
75+
links {
76+
link(DDTraceId.ZERO, (long)0, SpanLink.DEFAULT_FLAGS,
77+
SpanAttributes.builder()
78+
.put("ptr.kind", SpanPointersProcessor.S3_PTR_KIND)
79+
.put("ptr.dir", SpanPointersProcessor.DOWN_DIRECTION)
80+
.put("ptr.hash","6d1a2fe194c6579187408f827f942be3")
81+
.put("link.kind",SpanPointersProcessor.LINK_KIND).build())
82+
}
7383
tags {
7484
defaultTags()
7585
tag "component", "java-aws-sdk"
@@ -87,19 +97,6 @@ class S3ClientTest extends AgentTestRunner {
8797
tag "peer.port", { it instanceof Integer }
8898
tag "span.kind", "client"
8999
tag "aws.requestId", { it != null }
90-
tag "_dd.span_links", { it != null }
91-
92-
// Assert the span links
93-
def spanLinks = tags["_dd.span_links"]
94-
assert spanLinks != null
95-
def links = new JsonSlurper().parseText(spanLinks)
96-
assert links.size() == 1
97-
def link = links[0]
98-
assert link["attributes"] != null
99-
assert link["attributes"]["ptr.kind"] == SpanPointersProcessor.S3_PTR_KIND
100-
assert link["attributes"]["ptr.dir"] == SpanPointersProcessor.DOWN_DIRECTION
101-
assert link["attributes"]["ptr.hash"] == "6d1a2fe194c6579187408f827f942be3"
102-
assert link["attributes"]["link.kind"] == SpanPointersProcessor.LINK_KIND
103100
}
104101
}
105102
}
@@ -134,6 +131,14 @@ class S3ClientTest extends AgentTestRunner {
134131
operationName "aws.http"
135132
resourceName "S3.PutObject"
136133
spanType DDSpanTypes.HTTP_CLIENT
134+
links {
135+
link(DDTraceId.ZERO, (long)0, SpanLink.DEFAULT_FLAGS,
136+
SpanAttributes.builder()
137+
.put("ptr.kind", SpanPointersProcessor.S3_PTR_KIND)
138+
.put("ptr.dir", SpanPointersProcessor.DOWN_DIRECTION)
139+
.put("ptr.hash","6d1a2fe194c6579187408f827f942be3")
140+
.put("link.kind",SpanPointersProcessor.LINK_KIND).build())
141+
}
137142
tags {
138143
defaultTags()
139144
tag "component", "java-aws-sdk"
@@ -151,7 +156,6 @@ class S3ClientTest extends AgentTestRunner {
151156
tag "peer.port", { it instanceof Integer }
152157
tag "span.kind", "client"
153158
tag "aws.requestId", { it != null }
154-
tag "_dd.span_links", { it != null }
155159
}
156160
}
157161
}
@@ -161,6 +165,14 @@ class S3ClientTest extends AgentTestRunner {
161165
operationName "aws.http"
162166
resourceName "S3.CopyObject"
163167
spanType DDSpanTypes.HTTP_CLIENT
168+
links {
169+
link(DDTraceId.ZERO, (long)0, SpanLink.DEFAULT_FLAGS,
170+
SpanAttributes.builder()
171+
.put("ptr.kind", SpanPointersProcessor.S3_PTR_KIND)
172+
.put("ptr.dir", SpanPointersProcessor.DOWN_DIRECTION)
173+
.put("ptr.hash","1542053ce6d393c424b1374bac1fc0c5")
174+
.put("link.kind",SpanPointersProcessor.LINK_KIND).build())
175+
}
164176
tags {
165177
defaultTags()
166178
tag "component", "java-aws-sdk"
@@ -178,19 +190,6 @@ class S3ClientTest extends AgentTestRunner {
178190
tag "peer.port", { it instanceof Integer }
179191
tag "span.kind", "client"
180192
tag "aws.requestId", { it != null }
181-
tag "_dd.span_links", { it != null }
182-
183-
// Assert the span links
184-
def spanLinks = tags["_dd.span_links"]
185-
assert spanLinks != null
186-
def links = new JsonSlurper().parseText(spanLinks)
187-
assert links.size() == 1
188-
def link = links[0]
189-
assert link["attributes"] != null
190-
assert link["attributes"]["ptr.kind"] == SpanPointersProcessor.S3_PTR_KIND
191-
assert link["attributes"]["ptr.dir"] == SpanPointersProcessor.DOWN_DIRECTION
192-
assert link["attributes"]["ptr.hash"] == "1542053ce6d393c424b1374bac1fc0c5"
193-
assert link["attributes"]["link.kind"] == SpanPointersProcessor.LINK_KIND
194193
}
195194
}
196195
}
@@ -346,6 +345,14 @@ class S3ClientTest extends AgentTestRunner {
346345
operationName "aws.http"
347346
resourceName "S3.CompleteMultipartUpload"
348347
spanType DDSpanTypes.HTTP_CLIENT
348+
links {
349+
link(DDTraceId.ZERO, (long)0, SpanLink.DEFAULT_FLAGS,
350+
SpanAttributes.builder()
351+
.put("ptr.kind", SpanPointersProcessor.S3_PTR_KIND)
352+
.put("ptr.dir", SpanPointersProcessor.DOWN_DIRECTION)
353+
.put("ptr.hash","422412aa6b472a7194f3e24f4b12b4a6")
354+
.put("link.kind",SpanPointersProcessor.LINK_KIND).build())
355+
}
349356
tags {
350357
defaultTags()
351358
tag "component", "java-aws-sdk"
@@ -364,19 +371,6 @@ class S3ClientTest extends AgentTestRunner {
364371
tag "span.kind", "client"
365372
tag "aws.requestId", { it != null }
366373
tag "http.query.string", { it != null }
367-
tag "_dd.span_links", { it != null }
368-
369-
// Assert the span links
370-
def spanLinks = tags["_dd.span_links"]
371-
assert spanLinks != null
372-
def links = new JsonSlurper().parseText(spanLinks)
373-
assert links.size() == 1
374-
def link = links[0]
375-
assert link["attributes"] != null
376-
assert link["attributes"]["ptr.kind"] == SpanPointersProcessor.S3_PTR_KIND
377-
assert link["attributes"]["ptr.dir"] == SpanPointersProcessor.DOWN_DIRECTION
378-
assert link["attributes"]["ptr.hash"] == "422412aa6b472a7194f3e24f4b12b4a6"
379-
assert link["attributes"]["link.kind"] == SpanPointersProcessor.LINK_KIND
380374
}
381375
}
382376
}

dd-java-agent/instrumentation/jetty-11/src/testFixtures/groovy/JettyServer.groovy

+6-3
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,12 @@ class JettyServer implements WebsocketServer {
3131
JettyServer(ServletContextHandler handler) {
3232
server.handler = handler
3333
server.addBean(errorHandler)
34-
JakartaWebSocketServletContainerInitializer.configure(handler, (servletContext, container) -> {
35-
container.addEndpoint(ServerEndpointConfig.Builder.create(WsEndpoint.class, "/websocket").build())
36-
})
34+
try {
35+
JakartaWebSocketServletContainerInitializer.configure(handler, (servletContext, container) -> {
36+
container.addEndpoint(ServerEndpointConfig.Builder.create(WsEndpoint.class, "/websocket").build())
37+
})
38+
} catch (Throwable ignored) {
39+
}
3740
}
3841

3942
@Override

dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.4/src/test/groovy/OpenTelemetry14Test.groovy

+4
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@ class OpenTelemetry14Test extends AgentTestRunner {
311311
assertTraces(1) {
312312
trace(1) {
313313
span {
314+
ignoreSpanLinks() // check is done on the content of the tag below
314315
tags {
315316
defaultTags()
316317
"$SPAN_KIND" "$SPAN_KIND_INTERNAL"
@@ -345,6 +346,7 @@ class OpenTelemetry14Test extends AgentTestRunner {
345346
assertTraces(1) {
346347
trace(1) {
347348
span {
349+
ignoreSpanLinks() // check is done on the content of the tag below
348350
tags {
349351
defaultTags()
350352
"$SPAN_KIND" "$SPAN_KIND_INTERNAL"
@@ -380,6 +382,7 @@ class OpenTelemetry14Test extends AgentTestRunner {
380382
assertTraces(1) {
381383
trace(1) {
382384
span {
385+
ignoreSpanLinks() // check is done on the content of the tag below
383386
tags {
384387
defaultTags()
385388
"$SPAN_KIND" "$SPAN_KIND_INTERNAL"
@@ -421,6 +424,7 @@ class OpenTelemetry14Test extends AgentTestRunner {
421424
assertTraces(1) {
422425
trace(1) {
423426
span {
427+
ignoreSpanLinks() // check is done on the content of the tag below
424428
tags {
425429
defaultTags()
426430
"$SPAN_KIND" "$SPAN_KIND_INTERNAL"

dd-java-agent/instrumentation/spark/src/testFixtures/groovy/datadog/trace/instrumentation/spark/AbstractSparkStructuredStreamingTest.groovy

+5-2
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@ package datadog.trace.instrumentation.spark
22

33
import datadog.trace.agent.test.AgentTestRunner
44
import datadog.trace.api.DDTags
5+
import datadog.trace.api.DDTraceId
56
import datadog.trace.api.Platform
67
import datadog.trace.api.sampling.PrioritySampling
78
import datadog.trace.api.sampling.SamplingMechanism
9+
import datadog.trace.core.DDSpan
810
import org.apache.spark.sql.Dataset
911
import org.apache.spark.sql.Encoders
1012
import org.apache.spark.sql.execution.streaming.MemoryStream
@@ -300,8 +302,9 @@ class AbstractSparkStructuredStreamingTest extends AgentTestRunner {
300302
resourceName "test-query"
301303
spanType "spark"
302304
parent()
303-
assert span.tags.containsKey(DDTags.SPAN_LINKS)
304-
assert span.tags[DDTags.SPAN_LINKS] != null
305+
links({
306+
link(DDTraceId.from((long)12052652441736835200), (long)-6394091631972716416)
307+
})
305308
}
306309
span {
307310
operationName "spark.sql"

dd-java-agent/instrumentation/undertow/undertow-2.0/build.gradle

+2
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ dependencies {
4242
testRuntimeOnly project(':dd-java-agent:instrumentation:servlet:request-2')
4343
testRuntimeOnly project(':dd-java-agent:instrumentation:servlet:request-3')
4444
testRuntimeOnly project(':dd-java-agent:instrumentation:servlet:request-5')
45+
testRuntimeOnly project(':dd-java-agent:instrumentation:websocket:javax-websocket-1.0')
46+
testRuntimeOnly project(':dd-java-agent:instrumentation:websocket:jakarta-websocket-2.0')
4547

4648
latestDepTestImplementation group: 'io.undertow', name: 'undertow-servlet', version: '2.2.+'
4749
latestDepTestImplementation group: 'io.undertow', name: 'undertow-websockets-jsr', version: '2.2.+'

dd-java-agent/instrumentation/undertow/undertow-2.0/src/test/groovy/UndertowServletTest.groovy

+10
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,10 @@ abstract class UndertowServletTest extends HttpServerTest<Undertow> {
323323
}
324324

325325
class UndertowServletV0Test extends UndertowServletTest implements TestingGenericHttpNamingConventions.ServerV0 {
326+
@Override
327+
boolean testWebsockets() {
328+
false
329+
}
326330
}
327331

328332
class UndertowServletNoHttpRouteForkedTest extends UndertowServletTest implements TestingGenericHttpNamingConventions.ServerV0 {
@@ -331,6 +335,12 @@ class UndertowServletNoHttpRouteForkedTest extends UndertowServletTest implement
331335
false
332336
}
333337

338+
@Override
339+
boolean testWebsockets() {
340+
// only test websocket in this test class not to have the same done too many times
341+
true
342+
}
343+
334344
@Override
335345
protected void configurePreAgent() {
336346
super.configurePreAgent()

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

+6-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package datadog.trace.agent.test.asserts
22

3-
3+
import datadog.trace.api.DDTraceId
44
import datadog.trace.bootstrap.instrumentation.api.AgentSpanLink
55
import datadog.trace.bootstrap.instrumentation.api.SpanAttributes
66
import datadog.trace.bootstrap.instrumentation.api.SpanLink
@@ -31,9 +31,12 @@ class LinksAssert {
3131
}
3232

3333
def link(DDSpan linked, byte flags = SpanLink.DEFAULT_FLAGS, SpanAttributes attributes = SpanAttributes.EMPTY, String traceState = '') {
34+
link(linked.traceId, linked.spanId, flags, attributes, traceState)
35+
}
36+
37+
def link(DDTraceId traceId, def spanId, byte flags = SpanLink.DEFAULT_FLAGS, SpanAttributes attributes = SpanAttributes.EMPTY, String traceState = '') {
3438
def found = links.find {
35-
it.spanId() == linked.spanId &&
36-
it.traceId() == linked.traceId
39+
it.spanId() == spanId && it.traceId() == traceId
3740
}
3841
assert found != null
3942
assert found.traceFlags() == flags

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

+11-2
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,12 @@ import groovy.transform.stc.SimpleType
1111

1212
import java.util.regex.Pattern
1313

14+
import static datadog.trace.agent.test.asserts.TagsAssert.assertTags
15+
1416
class SpanAssert {
1517
private final DDSpan span
1618
private final DDSpan previous
19+
private boolean checkLinks = true
1720
private final checked = [:]
1821

1922
private SpanAssert(span, DDSpan previous) {
@@ -168,8 +171,10 @@ class SpanAssert {
168171
if (!checked.errored) {
169172
errored(false)
170173
}
171-
if (!checked.links) {
172-
assert span.tags['_dd.span_links'] == null
174+
if (checkLinks) {
175+
if (!checked.links) {
176+
assert span.tags['_dd.span_links'] == null
177+
}
173178
}
174179
hasServiceName()
175180
}
@@ -185,6 +190,10 @@ class SpanAssert {
185190
assertTags(span, spec, checkAllTags)
186191
}
187192

193+
void ignoreSpanLinks() {
194+
this.checkLinks = false
195+
}
196+
188197
void links(@ClosureParams(value = SimpleType, options = ['datadog.trace.agent.test.asserts.LinksAssert'])
189198
@DelegatesTo(value = LinksAssert, strategy = Closure.DELEGATE_FIRST) Closure spec) {
190199
checked.links = true

dd-trace-core/src/main/java/datadog/trace/core/tagprocessor/SpanPointersProcessor.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ public class SpanPointersProcessor implements TagsPostProcessor {
2525

2626
// The pointer direction will always be down. The serverless agent handles cases where the
2727
// direction is up.
28-
static final String DOWN_DIRECTION = "d";
29-
static final String S3_PTR_KIND = "aws.s3.object";
30-
static final String LINK_KIND = "span-pointer";
28+
public static final String DOWN_DIRECTION = "d";
29+
public static final String S3_PTR_KIND = "aws.s3.object";
30+
public static final String LINK_KIND = "span-pointer";
3131

3232
@Override
3333
public Map<String, Object> processTags(

0 commit comments

Comments
 (0)