From 8934fcced9dbc479d0fc78c33f8e892e67b704b6 Mon Sep 17 00:00:00 2001 From: Brice Dutheil Date: Tue, 30 Jun 2026 11:28:48 +0200 Subject: [PATCH 1/3] chore(api): Exclude AIGuard and LLMObs class from coverage --- dd-trace-api/build.gradle.kts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/dd-trace-api/build.gradle.kts b/dd-trace-api/build.gradle.kts index 4063701bf5a..9716588d34e 100644 --- a/dd-trace-api/build.gradle.kts +++ b/dd-trace-api/build.gradle.kts @@ -26,6 +26,10 @@ extra["excludedClassesCoverage"] = listOf( "datadog.trace.api.aiguard.AIGuard", "datadog.trace.api.aiguard.AIGuard.AIGuardAbortError", "datadog.trace.api.aiguard.AIGuard.AIGuardClientError", + "datadog.trace.api.aiguard.AIGuard.ContentPart", + "datadog.trace.api.aiguard.AIGuard.ContentPart.Type", + "datadog.trace.api.aiguard.AIGuard.Evaluation", + "datadog.trace.api.aiguard.AIGuard.Message", "datadog.trace.api.aiguard.AIGuard.Options", "datadog.trace.api.civisibility.CIVisibility", "datadog.trace.api.civisibility.DDTestModule", @@ -43,8 +47,10 @@ extra["excludedClassesCoverage"] = listOf( "datadog.trace.api.profiling.ProfilingContext", "datadog.trace.api.profiling.ProfilingContextAttribute.NoOp", "datadog.trace.api.llmobs.LLMObs", + "datadog.trace.api.llmobs.LLMObs.Document", "datadog.trace.api.llmobs.LLMObs.LLMMessage", "datadog.trace.api.llmobs.LLMObs.ToolCall", + "datadog.trace.api.llmobs.LLMObs.ToolResult", "datadog.trace.api.llmobs.LLMObsSpan", "datadog.trace.api.llmobs.noop.NoOpLLMObsSpan", "datadog.trace.api.llmobs.noop.NoOpLLMObsSpanFactory", @@ -63,6 +69,7 @@ extra["excludedClassesCoverage"] = listOf( "datadog.trace.payloadtags.PayloadTagsData", "datadog.trace.payloadtags.PayloadTagsData.PathAndValue", "datadog.trace.api.llmobs.LLMObsTags", + "datadog.trace.api.config.OtlpConfig.Compression", "datadog.trace.api.config.OtlpConfig.Protocol", "datadog.trace.api.config.OtlpConfig.Temporality", ) From 5ee2951a4fae8e745d434964e11dc2a2e3b05f10 Mon Sep 17 00:00:00 2001 From: Brice Dutheil Date: Tue, 30 Jun 2026 11:39:50 +0200 Subject: [PATCH 2/3] test(api): Add tests for 128-bit trace IDs and protocol versions --- .../datadog/trace/api/DD128bTraceIdTest.java | 54 +++++++++++++++++++ .../trace/api/ProtocolVersionTest.java | 34 ++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 dd-trace-api/src/test/java/datadog/trace/api/DD128bTraceIdTest.java diff --git a/dd-trace-api/src/test/java/datadog/trace/api/DD128bTraceIdTest.java b/dd-trace-api/src/test/java/datadog/trace/api/DD128bTraceIdTest.java new file mode 100644 index 00000000000..bed5f68c618 --- /dev/null +++ b/dd-trace-api/src/test/java/datadog/trace/api/DD128bTraceIdTest.java @@ -0,0 +1,54 @@ +package datadog.trace.api; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertSame; +import static org.junit.jupiter.api.Assertions.assertThrows; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +@DisplayName("128-bit trace identifiers") +class DD128bTraceIdTest { + + @Test + @DisplayName("parse upper-case partial hex and cache the normalized hex string") + void parsesUpperCasePartialHexAndNormalizesCachedHexString() { + DD128bTraceId traceId = + DD128bTraceId.fromHex("xx123456789ABCDEF0FEDCBA9876543210yy", 2, 32, false); + + assertEquals("123456789abcdef0fedcba9876543210", traceId.toHexString()); + assertEquals("fedcba9876543210", traceId.toHexStringPadded(16)); + } + + @Test + @DisplayName("reject negative partial hex start") + void rejectsNegativePartialHexStart() { + assertThrows(NumberFormatException.class, () -> DD128bTraceId.fromHex("1234", -1, 1, false)); + } + + @Test + @DisplayName("compare by high and low bits") + void comparesByHighAndLowBits() { + DD128bTraceId traceId = DD128bTraceId.from(1, 2); + DD128bTraceId sameTraceId = DD128bTraceId.from(1, 2); + + assertEquals(traceId, traceId); + assertEquals(traceId, sameTraceId); + assertEquals(traceId.hashCode(), sameTraceId.hashCode()); + assertNotEquals(traceId, DD128bTraceId.from(3, 2)); + assertNotEquals(traceId, DD128bTraceId.from(1, 4)); + assertNotEquals(traceId, "1"); + } + + @Test + @DisplayName("reuse the computed decimal string") + void reusesComputedDecimalString() { + DD128bTraceId traceId = DD128bTraceId.from(0, 42); + + String firstString = traceId.toString(); + + assertEquals("42", firstString); + assertSame(firstString, traceId.toString()); + } +} diff --git a/dd-trace-api/src/test/java/datadog/trace/api/ProtocolVersionTest.java b/dd-trace-api/src/test/java/datadog/trace/api/ProtocolVersionTest.java index 92d42691f37..18d14322388 100644 --- a/dd-trace-api/src/test/java/datadog/trace/api/ProtocolVersionTest.java +++ b/dd-trace-api/src/test/java/datadog/trace/api/ProtocolVersionTest.java @@ -3,15 +3,28 @@ import static datadog.trace.api.ProtocolVersion.V0_4; import static datadog.trace.api.ProtocolVersion.V0_5; import static datadog.trace.api.ProtocolVersion.V1_0; +import static datadog.trace.api.ProtocolVersion.fromConfigValue; +import static datadog.trace.api.ProtocolVersion.fromTraceEndpoint; import static java.util.Arrays.asList; import static java.util.Collections.singletonList; import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +@DisplayName("trace agent protocol versions") class ProtocolVersionTest { @Test + @DisplayName("expose configuration values") + void exposesConfigValues() { + assertEquals("0.4", V0_4.asConfigValue()); + assertEquals("0.5", V0_5.asConfigValue()); + assertEquals("1.0", V1_0.asConfigValue()); + } + + @Test + @DisplayName("expose primary endpoints and fallbacks") void exposesPrimaryEndpointAndFallbacks() { assertEquals("v0.4/traces", V0_4.endpoint()); assertEquals(singletonList("v0.3/traces"), V0_4.fallback()); @@ -24,9 +37,30 @@ void exposesPrimaryEndpointAndFallbacks() { } @Test + @DisplayName("preserve endpoint probe ordering") void preservesProbeOrdering() { assertEquals(asList("v0.4/traces", "v0.3/traces"), V0_4.endpointsToProbe()); assertEquals(asList("v0.5/traces", "v0.4/traces", "v0.3/traces"), V0_5.endpointsToProbe()); assertEquals(asList("v1.0/traces", "v0.4/traces", "v0.3/traces"), V1_0.endpointsToProbe()); } + + @Test + @DisplayName("map configuration values to protocol versions") + void mapsConfigValueToVersion() { + assertEquals(V0_4, fromConfigValue(null)); + assertEquals(V0_4, fromConfigValue("0.4")); + assertEquals(V0_5, fromConfigValue("0.5")); + assertEquals(V1_0, fromConfigValue("1.0")); + assertEquals(V0_4, fromConfigValue("unsupported")); + } + + @Test + @DisplayName("map trace endpoints to protocol versions") + void mapsTraceEndpointToVersion() { + assertEquals(V0_4, fromTraceEndpoint(null)); + assertEquals(V1_0, fromTraceEndpoint("http://localhost:8126/v1.0/traces")); + assertEquals(V0_5, fromTraceEndpoint("HTTP://LOCALHOST:8126/V0.5/TRACES")); + assertEquals(V0_4, fromTraceEndpoint("v0.4/traces")); + assertEquals(V0_4, fromTraceEndpoint("http://localhost:8126/unsupported")); + } } From 4577a43f18f3ca3ce381498e975212f109fe89a0 Mon Sep 17 00:00:00 2001 From: Brice Dutheil Date: Tue, 30 Jun 2026 11:47:46 +0200 Subject: [PATCH 3/3] test(api): Remove 128-bit trace IDs test, better equivalent in #11802 --- .../datadog/trace/api/DD128bTraceIdTest.java | 54 ------------------- 1 file changed, 54 deletions(-) delete mode 100644 dd-trace-api/src/test/java/datadog/trace/api/DD128bTraceIdTest.java diff --git a/dd-trace-api/src/test/java/datadog/trace/api/DD128bTraceIdTest.java b/dd-trace-api/src/test/java/datadog/trace/api/DD128bTraceIdTest.java deleted file mode 100644 index bed5f68c618..00000000000 --- a/dd-trace-api/src/test/java/datadog/trace/api/DD128bTraceIdTest.java +++ /dev/null @@ -1,54 +0,0 @@ -package datadog.trace.api; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotEquals; -import static org.junit.jupiter.api.Assertions.assertSame; -import static org.junit.jupiter.api.Assertions.assertThrows; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -@DisplayName("128-bit trace identifiers") -class DD128bTraceIdTest { - - @Test - @DisplayName("parse upper-case partial hex and cache the normalized hex string") - void parsesUpperCasePartialHexAndNormalizesCachedHexString() { - DD128bTraceId traceId = - DD128bTraceId.fromHex("xx123456789ABCDEF0FEDCBA9876543210yy", 2, 32, false); - - assertEquals("123456789abcdef0fedcba9876543210", traceId.toHexString()); - assertEquals("fedcba9876543210", traceId.toHexStringPadded(16)); - } - - @Test - @DisplayName("reject negative partial hex start") - void rejectsNegativePartialHexStart() { - assertThrows(NumberFormatException.class, () -> DD128bTraceId.fromHex("1234", -1, 1, false)); - } - - @Test - @DisplayName("compare by high and low bits") - void comparesByHighAndLowBits() { - DD128bTraceId traceId = DD128bTraceId.from(1, 2); - DD128bTraceId sameTraceId = DD128bTraceId.from(1, 2); - - assertEquals(traceId, traceId); - assertEquals(traceId, sameTraceId); - assertEquals(traceId.hashCode(), sameTraceId.hashCode()); - assertNotEquals(traceId, DD128bTraceId.from(3, 2)); - assertNotEquals(traceId, DD128bTraceId.from(1, 4)); - assertNotEquals(traceId, "1"); - } - - @Test - @DisplayName("reuse the computed decimal string") - void reusesComputedDecimalString() { - DD128bTraceId traceId = DD128bTraceId.from(0, 42); - - String firstString = traceId.toString(); - - assertEquals("42", firstString); - assertSame(firstString, traceId.toString()); - } -}