From 0cacfefe33faa65e6ebfff966013da6bacdb37bd Mon Sep 17 00:00:00 2001 From: Andrea Marziali Date: Mon, 29 Jun 2026 16:00:49 +0200 Subject: [PATCH] Add coverage and exclusions for dsm classes --- dd-trace-core/build.gradle | 6 ++ .../DataStreamsTransactionExtractorsTest.java | 64 +++++++++++++++++++ internal-api/build.gradle.kts | 2 + 3 files changed, 72 insertions(+) diff --git a/dd-trace-core/build.gradle b/dd-trace-core/build.gradle index ee8ef78ee16..0fd867fef67 100644 --- a/dd-trace-core/build.gradle +++ b/dd-trace-core/build.gradle @@ -51,6 +51,12 @@ excludedClassesCoverage += [ 'datadog.trace.core.TracingConfigPoller.Updater', // covered with dd-trace-core/src/test/groovy/datadog/trace/core/datastreams/CheckpointerTest.groovy 'datadog.trace.core.datastreams.DefaultDataStreamsMonitoring', + // no-op + 'datadog.trace.core.datastreams.DisabledDataStreamsMonitoring', + // pojo + 'datadog.trace.core.datastreams.DataStreamsTransactionExtractors.DataStreamsTransactionExtractorImpl', + // it's a private inner class. Tested indirectly via deserialize in DataStreamsTransactionExtractorsTest + 'datadog.trace.core.datastreams.DataStreamsTransactionExtractors.JsonDataStreamsTransactionExtractor', // TODO CorePropagation will be removed during context refactoring 'datadog.trace.core.propagation.CorePropagation', // TODO DSM propagator will be tested once fully migrated diff --git a/dd-trace-core/src/test/java/datadog/trace/core/datastreams/DataStreamsTransactionExtractorsTest.java b/dd-trace-core/src/test/java/datadog/trace/core/datastreams/DataStreamsTransactionExtractorsTest.java index 7565f19afee..51205505225 100644 --- a/dd-trace-core/src/test/java/datadog/trace/core/datastreams/DataStreamsTransactionExtractorsTest.java +++ b/dd-trace-core/src/test/java/datadog/trace/core/datastreams/DataStreamsTransactionExtractorsTest.java @@ -2,7 +2,11 @@ import static datadog.trace.api.datastreams.DataStreamsTransactionExtractor.Type.HTTP_IN_HEADERS; import static datadog.trace.api.datastreams.DataStreamsTransactionExtractor.Type.HTTP_OUT_HEADERS; +import static datadog.trace.api.datastreams.DataStreamsTransactionExtractor.Type.KAFKA_CONSUME_HEADERS; +import static datadog.trace.api.datastreams.DataStreamsTransactionExtractor.Type.KAFKA_PRODUCE_HEADERS; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertSame; +import static org.junit.jupiter.api.Assertions.assertTrue; import datadog.trace.api.datastreams.DataStreamsTransactionExtractor; import datadog.trace.core.DDCoreJavaSpecification; @@ -28,4 +32,64 @@ void deserializeFromJson() { assertEquals(HTTP_IN_HEADERS, extractors.get(1).getType()); assertEquals("transaction_id", extractors.get(1).getValue()); } + + @Test + void deserializeKafkaTypes() { + DataStreamsTransactionExtractors list = + DataStreamsTransactionExtractors.deserialize( + "[" + + "{\"name\": \"consume\", \"type\": \"KAFKA_CONSUME_HEADERS\", \"value\": \"txn\"}," + + "{\"name\": \"produce\", \"type\": \"KAFKA_PRODUCE_HEADERS\", \"value\": \"txn\"}" + + "]"); + List extractors = list.getExtractors(); + + assertEquals(2, extractors.size()); + assertEquals(KAFKA_CONSUME_HEADERS, extractors.get(0).getType()); + assertEquals(KAFKA_PRODUCE_HEADERS, extractors.get(1).getType()); + } + + @Test + void deserializeUnknownTypeReturnsEmpty() { + DataStreamsTransactionExtractors list = + DataStreamsTransactionExtractors.deserialize( + "[{\"name\": \"ext\", \"type\": \"NOT_A_REAL_TYPE\", \"value\": \"v\"}]"); + + assertSame(DataStreamsTransactionExtractors.EMPTY, list); + assertTrue(list.getExtractors().isEmpty()); + } + + @Test + void deserializeEmptyArrayReturnsEmptyList() { + DataStreamsTransactionExtractors list = DataStreamsTransactionExtractors.deserialize("[]"); + + assertTrue(list.getExtractors().isEmpty()); + } + + @Test + void deserializeInvalidJsonReturnsEmpty() { + DataStreamsTransactionExtractors list = + DataStreamsTransactionExtractors.deserialize("not valid json"); + + assertSame(DataStreamsTransactionExtractors.EMPTY, list); + assertTrue(list.getExtractors().isEmpty()); + } + + @Test + void deserializeNullJsonReturnsEmpty() { + DataStreamsTransactionExtractors list = DataStreamsTransactionExtractors.deserialize("null"); + + assertTrue(list.getExtractors().isEmpty()); + } + + @Test + void implToStringContainsFields() { + DataStreamsTransactionExtractors list = + DataStreamsTransactionExtractors.deserialize( + "[{\"name\": \"myext\", \"type\": \"HTTP_OUT_HEADERS\", \"value\": \"myval\"}]"); + String str = list.getExtractors().get(0).toString(); + + assertTrue(str.contains("myext")); + assertTrue(str.contains("HTTP_OUT_HEADERS")); + assertTrue(str.contains("myval")); + } } diff --git a/internal-api/build.gradle.kts b/internal-api/build.gradle.kts index c6e03a03883..00e9b476b2a 100644 --- a/internal-api/build.gradle.kts +++ b/internal-api/build.gradle.kts @@ -66,7 +66,9 @@ extra["excludedClassesCoverage"] = listOf( "datadog.trace.api.profiling.RecordingType", // Data Streams Monitoring "datadog.trace.api.datastreams.Backlog", + "datadog.trace.api.datastreams.DataStreamsTransactionExtractor.Type", // enum "datadog.trace.api.datastreams.InboxItem", + "datadog.trace.api.datastreams.KafkaConfigReport", // pojo "datadog.trace.api.datastreams.NoopDataStreamsMonitoring", "datadog.trace.api.datastreams.NoopPathwayContext", "datadog.trace.api.datastreams.SchemaRegistryUsage",