Skip to content

Commit 8c2ed03

Browse files
dougqhclaude
andcommitted
Add tests to verify span kind ordinal constants and SPAN_KIND_VALUES stay in sync
Verifies that: - SPAN_KIND_VALUES array covers all ordinals up to SPAN_KIND_CUSTOM - Each known ordinal maps to the correct Tags.SPAN_KIND_* constant - UNSET and CUSTOM map to null - setSpanKindOrdinal round-trips correctly for all known kinds Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 0738b6a commit 8c2ed03

1 file changed

Lines changed: 41 additions & 0 deletions

File tree

dd-trace-core/src/test/groovy/datadog/trace/core/DDSpanContextTest.groovy

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext
66
import datadog.trace.bootstrap.instrumentation.api.ErrorPriorities
77
import datadog.trace.bootstrap.instrumentation.api.ProfilingContextIntegration
88
import datadog.trace.bootstrap.instrumentation.api.ServiceNameSources
9+
import datadog.trace.bootstrap.instrumentation.api.Tags
910
import datadog.trace.common.writer.ListWriter
1011
import datadog.trace.core.propagation.ExtractedContext
1112
import datadog.trace.core.test.DDCoreSpecification
@@ -352,4 +353,44 @@ class DDSpanContextTest extends DDCoreSpecification {
352353
}
353354
assert sourceWithoutCommonTags == comparison
354355
}
356+
357+
def "span kind ordinal constants and SPAN_KIND_VALUES array stay in sync"() {
358+
expect: "SPAN_KIND_VALUES array covers all ordinals"
359+
DDSpanContext.SPAN_KIND_VALUES.length == DDSpanContext.SPAN_KIND_CUSTOM + 1
360+
361+
and: "each known ordinal maps to the correct Tags constant"
362+
DDSpanContext.SPAN_KIND_VALUES[DDSpanContext.SPAN_KIND_SERVER] == Tags.SPAN_KIND_SERVER
363+
DDSpanContext.SPAN_KIND_VALUES[DDSpanContext.SPAN_KIND_CLIENT] == Tags.SPAN_KIND_CLIENT
364+
DDSpanContext.SPAN_KIND_VALUES[DDSpanContext.SPAN_KIND_PRODUCER] == Tags.SPAN_KIND_PRODUCER
365+
DDSpanContext.SPAN_KIND_VALUES[DDSpanContext.SPAN_KIND_CONSUMER] == Tags.SPAN_KIND_CONSUMER
366+
DDSpanContext.SPAN_KIND_VALUES[DDSpanContext.SPAN_KIND_INTERNAL] == Tags.SPAN_KIND_INTERNAL
367+
DDSpanContext.SPAN_KIND_VALUES[DDSpanContext.SPAN_KIND_BROKER] == Tags.SPAN_KIND_BROKER
368+
369+
and: "UNSET and CUSTOM map to null"
370+
DDSpanContext.SPAN_KIND_VALUES[DDSpanContext.SPAN_KIND_UNSET] == null
371+
DDSpanContext.SPAN_KIND_VALUES[DDSpanContext.SPAN_KIND_CUSTOM] == null
372+
}
373+
374+
def "setSpanKindOrdinal round-trips with SPAN_KIND_VALUES for all known kinds"() {
375+
when:
376+
def span = tracer.buildSpan("test", "test").start()
377+
def context = (DDSpanContext) span.context()
378+
context.setSpanKindOrdinal(kindString)
379+
380+
then:
381+
context.getSpanKindOrdinal() == expectedOrdinal
382+
DDSpanContext.SPAN_KIND_VALUES[expectedOrdinal] == kindString
383+
384+
cleanup:
385+
span.finish()
386+
387+
where:
388+
kindString | expectedOrdinal
389+
Tags.SPAN_KIND_SERVER | DDSpanContext.SPAN_KIND_SERVER
390+
Tags.SPAN_KIND_CLIENT | DDSpanContext.SPAN_KIND_CLIENT
391+
Tags.SPAN_KIND_PRODUCER | DDSpanContext.SPAN_KIND_PRODUCER
392+
Tags.SPAN_KIND_CONSUMER | DDSpanContext.SPAN_KIND_CONSUMER
393+
Tags.SPAN_KIND_INTERNAL | DDSpanContext.SPAN_KIND_INTERNAL
394+
Tags.SPAN_KIND_BROKER | DDSpanContext.SPAN_KIND_BROKER
395+
}
355396
}

0 commit comments

Comments
 (0)