From ceed2ca4180e8ef6127f66bd1796a4d67785a86d Mon Sep 17 00:00:00 2001 From: Alexey Kuznetsov Date: Sat, 1 Nov 2025 16:21:44 -0400 Subject: [PATCH 1/4] Smaller diff. --- build.gradle.kts | 3 +- .../main/java/datadog/context/ContextKey.java | 2 + .../datadog/context/propagation/Concern.java | 2 + dd-java-agent/agent-bootstrap/build.gradle | 1 - .../java/datadog/trace/bootstrap/Agent.java | 12 +- .../bootstrap/InitializationTelemetry.java | 4 +- .../trace/bootstrap/InstanceStore.java | 4 +- .../api/Java8BytecodeBridge.java | 20 +- .../rmi/ContextPropagator.java | 4 +- .../matcher/SafeHasSuperTypeMatcher.java | 1 + .../civisibility/CiVisibilityTestUtils.groovy | 6 +- .../datadog/trace/civisibility/ci/CIInfo.java | 4 +- .../civisibility/codeowners/Codeowners.java | 4 +- .../config/ExecutionSettingsFactoryImpl.java | 4 +- .../source/index/PackageResolver.java | 4 +- .../CiVisibilityMetricCollectorImpl.java | 1 + .../CiVisibilityMetricCollectorTest.groovy | 4 +- .../bootstrap/debugger/DebuggerContext.java | 1 + .../trace/bootstrap/debugger/ProbeId.java | 4 +- .../el/ReflectiveFieldValueResolver.java | 1 + .../debugger/util/WellKnownClasses.java | 8 +- .../debugger/agent/StringTemplateBuilder.java | 1 + .../java/com/datadog/debugger/agent/Trie.java | 16 +- .../debugger/util/MoshiSnapshotHelper.java | 4 +- .../debugger/util/WeakIdentityHashMap.java | 6 +- .../iast/sensitive/UrlRegexpTokenizer.java | 4 +- .../java/com/datadog/iast/taint/Ranges.java | 4 +- .../com/datadog/iast/ReporterTest.groovy | 154 ++++----- .../json/VulnerabilityEncodingTest.groovy | 1 - .../iast/propagation/CodecModuleTest.groovy | 1 - .../sink/HttpResponseHeaderModuleTest.groovy | 1 - .../trace/logging/PrintStreamWrapper.java | 1 + .../agent-otel/otel-bootstrap/build.gradle | 6 +- .../opentelemetry/shim/trace/OtelSpan.java | 1 + .../shim/trace/OtelSpanBuilder.java | 3 + .../shim/trace/OtelSpanEvent.java | 2 + .../agent/tooling/InstrumenterModule.java | 8 +- .../trace/agent/tooling/TracerInstaller.java | 1 + .../reqctx/LocalVariablesSorter.java | 2 +- .../api/security/ApiSecuritySamplerImpl.java | 3 + .../datadog/appsec/event/data/Address.java | 4 +- .../appsec/event/data/MapDataBundle.java | 4 +- .../appsec/gateway/AppSecRequestContext.java | 4 +- .../appsec/util/StandardizedLogging.java | 1 + .../ddwaf/WAFModuleSpecification.groovy | 18 +- .../ObjectIntrospectionSpecification.groovy | 1 - .../gateway/GatewayBridgeSpecification.groovy | 279 ++++++++++----- .../app/controllers/HomeController.scala | 4 +- .../test/InstrumentationSpecification.groovy | 72 ++-- .../agent/test/base/HttpClientTest.groovy | 197 +++++++---- .../agent/test/base/HttpServerTest.groovy | 324 +++++++++++++----- .../LogContextInjectionTestBase.groovy | 1 - .../AkkaHttpClientInstrumentationTest.groovy | 1 - .../scala/AkkaHttpTestWebServer.scala | 7 +- .../FormDataToStrictInstrumentation.java | 4 +- ...MultipartUnmarshallersInstrumentation.java | 4 +- .../StrictFormCompanionInstrumentation.java | 4 +- .../akka-http/akka-http-10.6/build.gradle | 1 - .../AkkaHttpClientInstrumentationTest.groovy | 1 - .../test/scala/AkkaHttpTestWebServer.scala | 7 +- .../test/groovy/AvroDatumReaderTest.groovy | 8 +- .../groovy/Aws2KinesisDataStreamsTest.groovy | 74 +++- .../groovy/Aws2SnsDataStreamsTest.groovy | 50 ++- .../src/test/groovy/SnsClientTest.groovy | 22 +- .../src/test/groovy/SqsClientTest.groovy | 3 +- .../axway/AxwayHTTPPluginDecorator.java | 8 +- dd-java-agent/instrumentation/build.gradle | 6 +- .../bar/smoketest/MockHttpServletRequest.java | 8 +- .../groovy/CouchbaseAsyncClientTest.groovy | 1 - .../test/groovy/CouchbaseClientTest.groovy | 1 - .../groovy/springdata/CouchbaseConfig.groovy | 1 - .../groovy/FinatraServer270Test.groovy | 1 - .../GrizzlyHttpBlockingHelper.java | 4 +- .../src/test/groovy/GrizzlyTest.groovy | 1 - .../test/hazelcast/v39/HazelcastTest.groovy | 1 - .../core-3.3/src/test/groovy/QueryTest.groovy | 1 - .../src/test/groovy/SessionTest.groovy | 3 - .../core-4.0/src/test/groovy/QueryTest.groovy | 1 - .../src/test/groovy/SessionTest.groovy | 3 - .../test/groovy/HttpUrlConnectionTest.groovy | 3 +- .../groovy/test/IgniteCacheAsyncTest.groovy | 1 - .../groovy/test/IgniteCacheSyncTest.groovy | 1 - .../src/test/groovy/JMS2Test.groovy | 1 - .../jakarta-jms/src/test/groovy/MDBBad.groovy | 1 - .../src/test/groovy/CrossedContextTest.groovy | 1 - .../java/io/StringReaderCallSiteTest.groovy | 6 +- .../instrumentation/java/net/URICallSite.java | 8 +- .../instrumentation/java/net/URLCallSite.java | 8 +- .../src/test/groovy/JaxRsFilterTest.groovy | 1 - .../groovy/JDBCInstrumentationTestBase.groovy | 10 +- .../RemoteJDBCInstrumentationTest.groovy | 4 +- .../instrumentation/jetty9/HandleVisitor.java | 1 + .../testFixtures/groovy/JettyServer.groovy | 25 +- .../src/test/ee10/groovy/JettyServer.groovy | 33 +- .../src/test/ee8/groovy/JettyServer.groovy | 35 +- .../src/test/ee9/groovy/JettyServer.groovy | 35 +- .../src/test/groovy/Jetty70Test.groovy | 2 - .../src/test/groovy/Jetty76Test.groovy | 2 - .../jetty904/JettyOnCommitBlockingHelper.java | 4 +- .../JettyContinuationHandlerTest.groovy | 2 - .../JettyContinuationHandlerTest.groovy | 2 - .../groovy/test/JettyServer.groovy | 27 +- .../JettyContinuationHandlerTest.groovy | 2 - .../JettyContinuationHandlerTest.groovy | 2 - .../src/latestDepTest/groovy/JMS2Test.groovy | 1 - .../jms/src/test/groovy/JMS1Test.groovy | 1 - .../jms/src/test/groovy/MDBBad.groovy | 1 - ...kaClientCustomPropagationConfigTest.groovy | 1 - .../test/groovy/KafkaClientTestBase.groovy | 7 - .../test/groovy/KafkaReactorForkedTest.groovy | 43 ++- .../ConnectWorkerInstrumentationTest.groovy | 30 +- .../test/groovy/KafkaStreamsTestBase.groovy | 1 - .../kotlin/KotlinCoroutineTests.kt | 32 +- .../src/test/kotlin/KotlinCoroutineTests.kt | 32 +- .../coroutines/CoreKotlinCoroutineTests.kt | 66 ++-- .../groovy/Lettuce5ReactiveClientTest.groovy | 1 - .../instrumentation/liberty-20/build.gradle | 6 +- .../liberty20/Liberty20Test.groovy | 9 +- .../instrumentation/liberty-23/build.gradle | 6 +- .../liberty23/Liberty23Test.groovy | 9 +- .../test/groovy/mule4/MuleForkedTest.groovy | 1 - .../src/test/groovy/Netty40ClientTest.groovy | 2 - .../test/groovy/NettyWebsocketClient.groovy | 10 +- .../src/test/groovy/Netty41ClientTest.groovy | 1 - .../src/test/groovy/Netty41ServerTest.groovy | 2 - .../test/groovy/NettyWebsocketClient.groovy | 10 +- .../W3cPropagatorTracestateTest.groovy | 8 +- .../JSONTokenerInstrumentationTest.groovy | 1 - .../PekkoHttpClientInstrumentationTest.groovy | 1 - .../scala/PekkoHttpTestWebServer.scala | 5 +- .../src/test/groovy/PlayWSClientTest.groovy | 2 - .../src/test/groovy/PlayWSClientTest.groovy | 2 - .../test/groovy/PlayWSClientTestBase.groovy | 1 - .../HttpErrorHandlerInstrumentation.java | 4 +- .../appsec/PathPatternInstrumentation.java | 4 +- .../PlayBodyParsersInstrumentation.java | 4 +- .../appsec/RoutingDslInstrumentation.java | 4 +- .../SirdPathExtractorInstrumentation.java | 4 +- .../appsec/TolerantJsonInstrumentation.java | 4 +- ...ParserDelegatingBodyParserApplyAdvice.java | 4 +- .../BodyParserFormUrlEncodedParseAdvice.java | 4 +- ...layBodyParsersMultipartFormDataAdvice.java | 4 +- .../PlayBodyParsersTolerantJsonAdvice.java | 4 +- .../SirdPathExtractorExtractAdvice.java | 4 +- .../DelegatingBodyParserInstrumentation.java | 4 +- .../appsec/FormUrlEncodedInstrumentation.java | 4 +- .../HttpErrorHandlerInstrumentation.java | 4 +- .../appsec/PathPatternInstrumentation.java | 4 +- .../PlayBodyParsersInstrumentation.java | 4 +- .../appsec/RoutingDslInstrumentation.java | 4 +- .../SirdPathExtractorInstrumentation.java | 4 +- .../appsec/TolerantJsonInstrumentation.java | 4 +- .../appsec/TolerantTextInstrumentation.java | 4 +- .../appsec/TolerantXmlInstrumentation.java | 4 +- .../appsec/RoutingDsl27Instrumentation.java | 4 +- .../protobuf_java/SchemaExtractor.java | 4 +- .../AbstractMessageInstrumentationTest.groovy | 18 +- .../instrumentation/quartz-2.0/build.gradle | 1 - .../src/test/groovy/RabbitMQTest.groovy | 1 - .../ratpack/ErrorHandlerAdvice.java | 4 +- .../ratpack/PathHandlerAdvice.java | 4 +- .../RatpackRequestBodyInstrumentation.java | 4 +- .../reactor-core-3.1/build.gradle | 1 - .../groovy/ReactorCoreTest.groovy | 62 ++-- .../src/test/groovy/ReactorCoreTest.groovy | 62 ++-- .../test/groovy/StackedDecoratorsTest.groovy | 3 +- .../src/test/groovy/FallbackTest.groovy | 33 +- .../scala/ScalaConcurrentTests.scala | 12 +- .../src/test/scala/ScalaConcurrentTests.scala | 12 +- .../src/test/groovy/ScalatestTest.groovy | 1 - .../servlet5/AsyncRumServlet.groovy | 1 - .../src/test/groovy/JettyServlet2Test.groovy | 3 - .../src/test/groovy/JettyServlet3Test.groovy | 3 - .../src/test/groovy/TomcatServlet3Test.groovy | 5 - .../spark/AbstractSpark32SqlTest.groovy | 3 +- .../spring/spring-cloud-zuul-2.0/build.gradle | 1 - .../spring/spring-messaging-4.0/build.gradle | 1 - .../springsecurity5/AppConfig.groovy | 1 - .../springsecurity6/AppConfig.groovy | 1 - .../bootTest/groovy/SpringWebfluxTest.groovy | 28 +- .../iast/DataBufferInstrumentation.java | 4 +- .../iast/HttpHeadersInstrumentation.java | 4 +- .../iast/Json2TokenizerInstrumentation.java | 4 +- .../ServerHttpRequestInstrumentation.java | 4 +- .../server/iast/TaintGetBodyAdvice.java | 4 +- .../iast/TaintHttpHeadersGetAdvice.java | 4 +- .../iast/TaintHttpHeadersGetFirstAdvice.java | 4 +- ...aintHttpHeadersToSingleValueMapAdvice.java | 4 +- .../iast/TaintReadOnlyHttpHeadersAdvice.java | 4 +- .../bootTest/groovy/SpringWebfluxTest.groovy | 30 +- ...HandlerCompositeInstrumentationTest.groovy | 1 - ...HandlerCompositeInstrumentationTest.groovy | 1 - .../spymemcached/SpymemcachedTest.groovy | 1 - .../src/test/groovy/SslSocketTest.groovy | 3 +- .../latestDepTest/groovy/TomcatServer.groovy | 10 +- .../src/test/groovy/TomcatServletTest.groovy | 1 - .../tomcat9Test/groovy/TomcatServer.groovy | 10 +- .../tomcat55/CommitActionInstrumentation.java | 4 +- .../tomcat7/CommitActionInstrumentation.java | 4 +- ...tpServerExchangeSenderInstrumentation.java | 4 +- .../src/test/groovy/VertxRedisTestBase.groovy | 12 +- .../HttpServerRequestInstrumentation.java | 4 +- .../groovy/server/IastVertx34Server.groovy | 2 - .../groovy/server/IastVertx39Server.groovy | 2 - .../HttpServerRequestInstrumentation.java | 4 +- .../HttpServerRequestInstrumentation.java | 4 +- .../weaver/WeaverIntegrationTestRunner.scala | 4 +- .../src/test/groovy/Endpoints.groovy | 1 - .../src/test/groovy/Endpoints.groovy | 1 - .../jvmbootstraptest/TestSecurityManager.java | 12 +- .../agent/test/asserts/TagsAssert.groovy | 3 +- .../agent/test/asserts/TraceAssert.groovy | 1 - .../SpringBootGraphqlSmokeTest.groovy | 1 - .../smoketest/appsec/AIGuardSmokeTest.groovy | 4 +- .../ExtendedDataCollectionSmokeTest.groovy | 7 - .../appsec/SpringBootSmokeTest.groovy | 8 +- .../appsec/TraceTaggingSmokeTest.groovy | 2 - .../AbstractAppSecServerSmokeTest.groovy | 16 +- .../smoketest/CliApplicationSmokeTest.groovy | 1 - .../concurrent/AbstractConcurrentTest.groovy | 12 +- .../concurrent/AbstractDemoTest.groovy | 12 +- .../kafkaschemaregistry/Message.java | 19 + .../smoketest/GradleDaemonSmokeTest.groovy | 2 - .../AbstractIastSpringBootTest.groovy | 14 +- dd-smoke-tests/java9-modules/build.gradle | 13 +- .../smoketest/LogInjectionSmokeTest.groovy | 140 ++++++-- .../smoketest/AppSecPlayNettySmokeTest.groovy | 6 +- .../smoketest/IastPlayNettySmokeTest.groovy | 1 - .../smoketest/AppSecPlayNettySmokeTest.groovy | 6 +- .../smoketest/IastPlayNettySmokeTest.groovy | 1 - .../smoketest/AppSecPlaySmokeTest.groovy | 6 +- .../smoketest/AppSecPlaySmokeTest.groovy | 7 +- .../smoketest/IastPlaySmokeTest.groovy | 3 +- .../smoketest/AppSecPlaySmokeTest.groovy | 7 +- dd-smoke-tests/quarkus-native/build.gradle | 1 - .../springboot/controller/WebController.java | 1 + .../AppSecSpringBootSmokeTest.groovy | 63 ++-- .../SpringBootOpenLibertySmokeTest.groovy | 4 +- ...otOpenLibertySmokeVulnerabilityTest.groovy | 5 +- .../SpringBootOpenLibertySmokeTest.groovy | 4 +- ...otOpenLibertySmokeVulnerabilityTest.groovy | 5 +- ...tOverheadControlSpringBootSmokeTest.groovy | 1 - .../smoketest/AbstractServerSmokeTest.groovy | 3 +- .../smoketest/TracerFlareSmokeTest.groovy | 1 - .../smoketest/AppSecVertxSmokeTest.groovy | 3 +- .../smoketest/IastVertxSmokeTest.groovy | 3 +- .../smoketest/VertxRouteSmokeTest.groovy | 3 +- .../datadog/smoketest/VertxSmokeTest.groovy | 3 +- .../test/groovy/AppSecVertxSmokeTest.groovy | 3 +- .../trace/api/CorrelationIdentifier.java | 8 +- .../java/datadog/trace/api/DD128bTraceId.java | 4 + .../java/datadog/trace/api/DDTraceId.java | 1 + .../java/datadog/trace/api/GlobalTracer.java | 4 +- .../trace/api/config/ProfilingConfig.java | 2 + .../config/TraceInstrumentationConfig.java | 2 + .../trace/api/config/TracerConfig.java | 1 + .../DataStreamsContextCarrier.java | 4 +- .../trace/api/interceptor/MutableSpan.java | 12 +- .../trace/api/sampling/PrioritySampling.java | 4 + .../datadog/trace/context/TraceScope.java | 4 +- .../datadog/trace/common/metrics/Batch.java | 1 + .../common/sampling/PrioritySampling.java | 8 +- .../trace/common/writer/ddagent/Caching.java | 3 +- .../java/datadog/trace/core/CoreSpan.java | 4 +- .../java/datadog/trace/core/CoreTracer.java | 1 + .../datadog/trace/core/DDSpanContext.java | 15 +- .../java/datadog/trace/core/DDSpanLink.java | 1 + .../java/datadog/trace/core/PendingTrace.java | 4 +- .../trace/core/monitor/HealthMetrics.java | 4 +- .../trace/core/propagation/HttpCodec.java | 1 + .../core/propagation/ptags/W3CPTagsCodec.java | 2 + .../payloadtags/json/JsonStreamParser.java | 8 +- .../CiTestCycleMapperV1PayloadTest.groovy | 1 - .../common/metrics/OkHttpSinkTest.groovy | 1 - .../sampling/AsmStandaloneSamplerTest.groovy | 9 +- .../sampling/RuleBasedSamplingTest.groovy | 1 - .../writer/DDIntakeWriterCombinedTest.groovy | 1 - .../common/writer/DDIntakeWriterTest.groovy | 1 - .../writer/SpanSamplingWorkerTest.groovy | 1 - .../writer/TraceProcessingWorkerTest.groovy | 7 +- .../common/writer/WriterFactoryTest.groovy | 18 +- .../ddagent/TraceMapperV05PayloadTest.groovy | 1 - .../writer/ddintake/DDEvpProxyApiTest.groovy | 14 +- .../writer/ddintake/DDIntakeApiTest.groovy | 4 +- .../datastreams/DataStreamsWritingTest.groovy | 6 +- .../ddintake/LLMObsSpanMapperTest.groovy | 5 +- .../java/datadog/opentracing/DDTracer.java | 4 +- gradle/java_no_deps.gradle | 63 +++- gradle/spotless.gradle | 2 +- gradle/tries.gradle | 3 +- .../main/java/datadog/trace/api/Config.java | 13 +- .../java/datadog/trace/api/StatsDClient.java | 3 +- .../java/datadog/trace/api/TraceConfig.java | 1 + .../civisibility/coverage/CoverageStore.java | 4 +- .../execution/TestExecutionHistory.java | 8 +- .../datadog/trace/api/gateway/Events.java | 19 + .../api/gateway/InstrumentationGateway.java | 8 + .../trace/api/http/StoredByteBody.java | 4 +- .../trace/api/http/StoredCharBody.java | 4 +- .../iast/propagation/PropagationModule.java | 156 ++++++--- .../trace/api/metrics/SpanMetricRegistry.java | 4 +- .../trace/api/naming/v1/CloudNamingV1.java | 4 +- .../api/profiling/ProfilingEnablement.java | 2 +- .../trace/api/rum/RumInjectorConfig.java | 14 + .../trace/api/sampling/SamplingMechanism.java | 9 + .../datadog/trace/bootstrap/ContextStore.java | 8 +- .../instrumentation/api/AgentPropagation.java | 4 +- .../instrumentation/api/AgentSpanLink.java | 1 + .../instrumentation/api/AgentTracer.java | 16 +- .../instrumentation/api/Baggage.java | 1 + .../instrumentation/api/ProfilerContext.java | 4 +- .../api/ProfilingContextIntegration.java | 1 + .../datadog/trace/relocate/api/IOLogger.java | 20 +- .../trace/relocate/api/RatelimitedLogger.java | 4 +- .../main/java/datadog/trace/util/Strings.java | 4 +- .../trace/api/InstrumenterConfigTest.groovy | 1 - .../trace/api/UserIdCollectionModeTest.groovy | 1 - .../trace/api/cache/FixedSizeCacheTest.groovy | 33 +- .../OtelEnvMetricCollectorImplTest.groovy | 1 - .../api/sampling/AdaptiveSamplerTest.java | 12 +- ...ultConfigurationPollerSpecification.groovy | 10 +- .../telemetry/TelemetryRequestBody.java | 4 +- .../datadog/telemetry/TelemetryService.java | 8 +- .../SupportedConfigurationSource.java | 16 +- .../common/container/ContainerInfo.java | 4 +- 325 files changed, 2282 insertions(+), 1224 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 92d2633f0df..88bb9becc73 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -144,7 +144,8 @@ testAggregate("instrumentation", listOf(":dd-java-agent:instrumentation"), empty testAggregate("profiling", listOf(":dd-java-agent:agent-profiling"), emptyList()) testAggregate("debugger", listOf(":dd-java-agent:agent-debugger"), forceCoverage = true) testAggregate( - "base", listOf(":"), + "base", + listOf(":"), listOf( ":dd-java-agent:instrumentation", ":dd-smoke-tests", diff --git a/components/context/src/main/java/datadog/context/ContextKey.java b/components/context/src/main/java/datadog/context/ContextKey.java index 0308fe8c1dc..cc1cd6d8cb0 100644 --- a/components/context/src/main/java/datadog/context/ContextKey.java +++ b/components/context/src/main/java/datadog/context/ContextKey.java @@ -10,8 +10,10 @@ */ public final class ContextKey { private static final AtomicInteger NEXT_INDEX = new AtomicInteger(0); + /** The key name, for debugging purpose only. */ private final String name; + /** The key unique context, related to {@link IndexedContext} implementation. */ final int index; diff --git a/components/context/src/main/java/datadog/context/propagation/Concern.java b/components/context/src/main/java/datadog/context/propagation/Concern.java index 0e79a688c1c..ed7681369ac 100644 --- a/components/context/src/main/java/datadog/context/propagation/Concern.java +++ b/components/context/src/main/java/datadog/context/propagation/Concern.java @@ -8,8 +8,10 @@ public class Concern { /** The concern default priority. */ public static final int DEFAULT_PRIORITY = 100; + /** The concern name, for debugging purpose only. */ private final String name; + /** The concern priority, lower value means higher priority. */ private final int priority; diff --git a/dd-java-agent/agent-bootstrap/build.gradle b/dd-java-agent/agent-bootstrap/build.gradle index 1ee2d9a6cde..a27b5a035b2 100644 --- a/dd-java-agent/agent-bootstrap/build.gradle +++ b/dd-java-agent/agent-bootstrap/build.gradle @@ -75,5 +75,4 @@ tasks.withType(Test).configureEach { JavaVersion.VERSION_16, ['--add-opens', 'java.base/java.net=ALL-UNNAMED'] // for HostNameResolverForkedTest ) - } diff --git a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Agent.java b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Agent.java index 654ce1ba411..e971bc04517 100644 --- a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Agent.java +++ b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Agent.java @@ -1468,7 +1468,9 @@ private static boolean isDebugMode() { return false; } - /** @return {@code true} if the agent feature is enabled */ + /** + * @return {@code true} if the agent feature is enabled + */ private static boolean isFeatureEnabled(AgentFeature feature) { // must be kept in sync with logic from Config! final String featureConfigKey = feature.getConfigKey(); @@ -1498,7 +1500,9 @@ private static boolean isFeatureEnabled(AgentFeature feature) { } } - /** @see datadog.trace.api.ProductActivation#fromString(String) */ + /** + * @see datadog.trace.api.ProductActivation#fromString(String) + */ private static boolean isFullyDisabled(final AgentFeature feature) { // must be kept in sync with logic from Config! final String featureConfigKey = feature.getConfigKey(); @@ -1536,7 +1540,9 @@ private static String getNullIfEmpty(final String value) { return value; } - /** @return configured JMX start delay in seconds */ + /** + * @return configured JMX start delay in seconds + */ private static int getJmxStartDelay() { String startDelay = ddGetProperty("dd.dogstatsd.start-delay"); if (startDelay == null) { diff --git a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/InitializationTelemetry.java b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/InitializationTelemetry.java index d6cf0958ca9..e55ceb4f270 100644 --- a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/InitializationTelemetry.java +++ b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/InitializationTelemetry.java @@ -97,7 +97,9 @@ static final class BootstrapProxy extends InitializationTelemetry { // DQH - Decided not to eager access MethodHandles, since exceptions are uncommon // However, MethodHandles are cached on lookup - /** @param bootstrapInitTelemetry - non-null BootstrapInitializationTelemetry */ + /** + * @param bootstrapInitTelemetry - non-null BootstrapInitializationTelemetry + */ BootstrapProxy(final Object bootstrapInitTelemetry) { this.bootstrapInitTelemetry = bootstrapInitTelemetry; } diff --git a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/InstanceStore.java b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/InstanceStore.java index 67612ac1eed..765f0df6a6c 100644 --- a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/InstanceStore.java +++ b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/InstanceStore.java @@ -19,7 +19,9 @@ public final class InstanceStore { private static final ClassValue classInstanceStore = GenericClassValue.of(type -> new InstanceStore<>()); - /** @return global store of instances with the same common type */ + /** + * @return global store of instances with the same common type + */ @SuppressWarnings("unchecked") public static InstanceStore of(Class type) { return classInstanceStore.get(type); diff --git a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/api/Java8BytecodeBridge.java b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/api/Java8BytecodeBridge.java index 867473b5d30..6d3f43b5139 100644 --- a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/api/Java8BytecodeBridge.java +++ b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/api/Java8BytecodeBridge.java @@ -10,27 +10,37 @@ * were not supported prior to Java 8 and will lead to a class verification error. */ public class Java8BytecodeBridge { - /** @see Context#root() */ + /** + * @see Context#root() + */ public static Context getRootContext() { return Context.root(); } - /** @see Context#current() */ + /** + * @see Context#current() + */ public static Context getCurrentContext() { return Context.current(); } - /** @see Context#from(Object) */ + /** + * @see Context#from(Object) + */ public static Context getContextFrom(Object carrier) { return Context.from(carrier); } - /** @see Context#detachFrom(Object) */ + /** + * @see Context#detachFrom(Object) + */ public static Context detachContextFrom(Object carrier) { return Context.detachFrom(carrier); } - /** @see AgentSpan#fromContext(Context) */ + /** + * @see AgentSpan#fromContext(Context) + */ public static AgentSpan spanFromContext(Context context) { return AgentSpan.fromContext(context); } diff --git a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/rmi/ContextPropagator.java b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/rmi/ContextPropagator.java index bd2add5f663..f25a0f1ffe2 100644 --- a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/rmi/ContextPropagator.java +++ b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/rmi/ContextPropagator.java @@ -62,7 +62,9 @@ private boolean checkIfContextCanBePassed( return result; } - /** @return {@code true} when no error happened during call */ + /** + * @return {@code true} when no error happened during call + */ private boolean syntheticCall( final Connection c, final ContextPayload payload, final int operationId) { final StreamRemoteCall shareContextCall = new StreamRemoteCall(c); diff --git a/dd-java-agent/agent-builder/src/main/java/datadog/trace/agent/tooling/bytebuddy/matcher/SafeHasSuperTypeMatcher.java b/dd-java-agent/agent-builder/src/main/java/datadog/trace/agent/tooling/bytebuddy/matcher/SafeHasSuperTypeMatcher.java index b659c828775..b688286c809 100644 --- a/dd-java-agent/agent-builder/src/main/java/datadog/trace/agent/tooling/bytebuddy/matcher/SafeHasSuperTypeMatcher.java +++ b/dd-java-agent/agent-builder/src/main/java/datadog/trace/agent/tooling/bytebuddy/matcher/SafeHasSuperTypeMatcher.java @@ -41,6 +41,7 @@ class SafeHasSuperTypeMatcher private final boolean interfacesOnly; private final boolean rejectInterfaceTargets; private final boolean checkInterfaces; + /** * Creates a new matcher for a super type. * diff --git a/dd-java-agent/agent-ci-visibility/civisibility-test-fixtures/src/main/groovy/datadog/trace/civisibility/CiVisibilityTestUtils.groovy b/dd-java-agent/agent-ci-visibility/civisibility-test-fixtures/src/main/groovy/datadog/trace/civisibility/CiVisibilityTestUtils.groovy index a77570a2721..e433a69efc8 100644 --- a/dd-java-agent/agent-ci-visibility/civisibility-test-fixtures/src/main/groovy/datadog/trace/civisibility/CiVisibilityTestUtils.groovy +++ b/dd-java-agent/agent-ci-visibility/civisibility-test-fixtures/src/main/groovy/datadog/trace/civisibility/CiVisibilityTestUtils.groovy @@ -188,7 +188,9 @@ abstract class CiVisibilityTestUtils { } static List getTestIdentifiers(List> events) { - events.sort(Comparator.comparing { it['content']['start'] as Long }) + events.sort(Comparator.comparing { + it['content']['start'] as Long + }) def testIdentifiers = [] for (Map event : events) { if (event['content']['meta']['test.name']) { @@ -275,7 +277,6 @@ abstract class CiVisibilityTestUtils { StringWriter coveragesOut = new StringWriter() coveragesTemplate.process(replacements, coveragesOut) return coveragesOut.toString() - } catch (Exception e) { throw new RuntimeException("Could not get Freemarker template " + templatePath + "; replacements map: " + replacements + "; replacements source: " + replacementsSource, e) } @@ -304,7 +305,6 @@ abstract class CiVisibilityTestUtils { return label.forTemplateKey(dynamicPath.rawPath) }) } - } return JSON_MAPPER .writeValueAsString(objects) diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/CIInfo.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/CIInfo.java index 8387207d8ed..090e366d35f 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/CIInfo.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/ci/CIInfo.java @@ -232,7 +232,9 @@ private String sanitizeWorkspace(String workspace) { : (realCiWorkspace.substring(0, realCiWorkspace.length() - 1)); } - /** @return Workspace path without the trailing separator */ + /** + * @return Workspace path without the trailing separator + */ public String getCiWorkspace() { return ciWorkspace; } diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/codeowners/Codeowners.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/codeowners/Codeowners.java index 15bcd2d911e..3ac7aead31f 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/codeowners/Codeowners.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/codeowners/Codeowners.java @@ -13,6 +13,8 @@ public interface Codeowners { @Nullable Collection getOwners(@Nonnull String path); - /** @return {@code true} if {@code CODEOWNERS} file could be located and parsed */ + /** + * @return {@code true} if {@code CODEOWNERS} file could be located and parsed + */ boolean exist(); } diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ExecutionSettingsFactoryImpl.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ExecutionSettingsFactoryImpl.java index 5fcc776edce..1c1e31ec12f 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ExecutionSettingsFactoryImpl.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/config/ExecutionSettingsFactoryImpl.java @@ -73,7 +73,9 @@ public ExecutionSettingsFactoryImpl( this.repositoryRoot = repositoryRoot; } - /** @return Executions settings by module name */ + /** + * @return Executions settings by module name + */ public Map create(@Nonnull JvmInfo jvmInfo) { TracerEnvironment tracerEnvironment = buildTracerEnvironment(jvmInfo, null); return create(tracerEnvironment); diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/source/index/PackageResolver.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/source/index/PackageResolver.java index 82ec4ea641d..f8e239dfc04 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/source/index/PackageResolver.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/source/index/PackageResolver.java @@ -5,7 +5,9 @@ import javax.annotation.Nullable; public interface PackageResolver { - /** @return the package path or null if the file is in the default package */ + /** + * @return the package path or null if the file is in the default package + */ @Nullable Path getPackage(Path sourceFile) throws IOException; } diff --git a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/telemetry/CiVisibilityMetricCollectorImpl.java b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/telemetry/CiVisibilityMetricCollectorImpl.java index e9cf22caa6c..68902e2def8 100644 --- a/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/telemetry/CiVisibilityMetricCollectorImpl.java +++ b/dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/telemetry/CiVisibilityMetricCollectorImpl.java @@ -26,6 +26,7 @@ public class CiVisibilityMetricCollectorImpl implements CiVisibilityMetricCollec private final BlockingQueue rawMetricsQueue; private final BlockingQueue rawDistributionPointsQueue; private final AtomicLongArray counters; + /** * Cards are used to avoid iterating over the entire {@link * CiVisibilityMetricCollectorImpl#counters} array every time {@link diff --git a/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/telemetry/CiVisibilityMetricCollectorTest.groovy b/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/telemetry/CiVisibilityMetricCollectorTest.groovy index 9fa8c47209b..2f9f6e65c27 100644 --- a/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/telemetry/CiVisibilityMetricCollectorTest.groovy +++ b/dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/telemetry/CiVisibilityMetricCollectorTest.groovy @@ -161,7 +161,8 @@ class CiVisibilityMetricCollectorTest extends Specification { def metricTags = metric.getTags() int cartesianProductSizeLimit = 2000 // limiting the number of combinations to avoid OOM/timeout - for (TagValue[] tags : cartesianProduct(metricTags, cartesianProductSizeLimit)) { // iterate over combinations of metric tags + for (TagValue[] tags : cartesianProduct(metricTags, cartesianProductSizeLimit)) { + // iterate over combinations of metric tags possibleMetrics += new PossibleMetric(metric, tags) } } @@ -231,5 +232,4 @@ class CiVisibilityMetricCollectorTest extends Specification { this.tags = tags } } - } diff --git a/dd-java-agent/agent-debugger/debugger-bootstrap/src/main/java/datadog/trace/bootstrap/debugger/DebuggerContext.java b/dd-java-agent/agent-debugger/debugger-bootstrap/src/main/java/datadog/trace/bootstrap/debugger/DebuggerContext.java index 36bd7dd6f86..3d002704f4e 100644 --- a/dd-java-agent/agent-debugger/debugger-bootstrap/src/main/java/datadog/trace/bootstrap/debugger/DebuggerContext.java +++ b/dd-java-agent/agent-debugger/debugger-bootstrap/src/main/java/datadog/trace/bootstrap/debugger/DebuggerContext.java @@ -292,6 +292,7 @@ public static boolean checkAndSetInProbe() { IN_PROBE.set(Boolean.TRUE); return true; } + /** * resolve probe details based on probe ids and evaluate the captured context regarding summary & * conditions. This is for method probes. diff --git a/dd-java-agent/agent-debugger/debugger-bootstrap/src/main/java/datadog/trace/bootstrap/debugger/ProbeId.java b/dd-java-agent/agent-debugger/debugger-bootstrap/src/main/java/datadog/trace/bootstrap/debugger/ProbeId.java index 751ab450fb7..efdd02bc523 100644 --- a/dd-java-agent/agent-debugger/debugger-bootstrap/src/main/java/datadog/trace/bootstrap/debugger/ProbeId.java +++ b/dd-java-agent/agent-debugger/debugger-bootstrap/src/main/java/datadog/trace/bootstrap/debugger/ProbeId.java @@ -43,7 +43,9 @@ public int getVersion() { return version; } - /** @return the encoded id as a string with format uuid:version */ + /** + * @return the encoded id as a string with format uuid:version + */ public String getEncodedId() { return encoded; } diff --git a/dd-java-agent/agent-debugger/debugger-bootstrap/src/main/java/datadog/trace/bootstrap/debugger/el/ReflectiveFieldValueResolver.java b/dd-java-agent/agent-debugger/debugger-bootstrap/src/main/java/datadog/trace/bootstrap/debugger/el/ReflectiveFieldValueResolver.java index dba64343266..c5c6f5dcc29 100644 --- a/dd-java-agent/agent-debugger/debugger-bootstrap/src/main/java/datadog/trace/bootstrap/debugger/el/ReflectiveFieldValueResolver.java +++ b/dd-java-agent/agent-debugger/debugger-bootstrap/src/main/java/datadog/trace/bootstrap/debugger/el/ReflectiveFieldValueResolver.java @@ -29,6 +29,7 @@ public class ReflectiveFieldValueResolver { } TRY_SET_ACCESSIBLE = methodHandle; } + // We cannot create a Field instance from scratch to be used as special constant, // so need to reflectively access itself private static final Field INACCESSIBLE_FIELD; diff --git a/dd-java-agent/agent-debugger/debugger-bootstrap/src/main/java/datadog/trace/bootstrap/debugger/util/WellKnownClasses.java b/dd-java-agent/agent-debugger/debugger-bootstrap/src/main/java/datadog/trace/bootstrap/debugger/util/WellKnownClasses.java index 72aa94612a8..c802422c968 100644 --- a/dd-java-agent/agent-debugger/debugger-bootstrap/src/main/java/datadog/trace/bootstrap/debugger/util/WellKnownClasses.java +++ b/dd-java-agent/agent-debugger/debugger-bootstrap/src/main/java/datadog/trace/bootstrap/debugger/util/WellKnownClasses.java @@ -221,7 +221,9 @@ public static boolean isToStringSafe(String concreteType) { return SAFE_TO_STRING_FUNCTIONS.containsKey(concreteType); } - /** @return true if collection implementation is safe to call (only in-memory) */ + /** + * @return true if collection implementation is safe to call (only in-memory) + */ public static boolean isSafe(Collection collection) { String className = collection.getClass().getTypeName(); for (String safePackage : SAFE_COLLECTION_PACKAGES) { @@ -232,7 +234,9 @@ public static boolean isSafe(Collection collection) { return false; } - /** @return true if map implementation is safe to call (only in-memory) */ + /** + * @return true if map implementation is safe to call (only in-memory) + */ public static boolean isSafe(Map map) { String className = map.getClass().getTypeName(); for (String safePackage : SAFE_MAP_PACKAGES) { diff --git a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/agent/StringTemplateBuilder.java b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/agent/StringTemplateBuilder.java index 754d5cc06b7..814e4e9a8b7 100644 --- a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/agent/StringTemplateBuilder.java +++ b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/agent/StringTemplateBuilder.java @@ -17,6 +17,7 @@ public class StringTemplateBuilder { private static final Logger LOGGER = LoggerFactory.getLogger(StringTemplateBuilder.class); + /** * Serialization limits for log messages. Most values are lower than snapshot because you can * directly reference values that are in your interest with Expression Language: diff --git a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/agent/Trie.java b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/agent/Trie.java index 202d558278f..3ba2737c156 100644 --- a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/agent/Trie.java +++ b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/agent/Trie.java @@ -51,23 +51,31 @@ public void insert(String str) { } } - /** @return if the string is in the trie. */ + /** + * @return if the string is in the trie. + */ public boolean contains(String str) { TrieNode t = searchNode(str, false); return t != null && t.isLeaf; } - /** @return if there is any word in the trie that starts with the given prefix */ + /** + * @return if there is any word in the trie that starts with the given prefix + */ public boolean containsPrefix(String prefix) { return searchNode(prefix, false) != null; } - /** @return true if str matches one of the prefixes stored into the trie */ + /** + * @return true if str matches one of the prefixes stored into the trie + */ public boolean hasMatchingPrefix(String str) { return searchNode(str, true) != null; } - /** @return true is there is no string inserted into the Trie, otherwise false */ + /** + * @return true is there is no string inserted into the Trie, otherwise false + */ public boolean isEmpty() { return root.children.isEmpty(); } diff --git a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/util/MoshiSnapshotHelper.java b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/util/MoshiSnapshotHelper.java index a9ec00bb385..3b5116b8478 100644 --- a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/util/MoshiSnapshotHelper.java +++ b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/util/MoshiSnapshotHelper.java @@ -244,7 +244,9 @@ enum SerializationResult { TIMEOUT } - /** @return true if all items where serialized or whether we reach the max field count */ + /** + * @return true if all items where serialized or whether we reach the max field count + */ private SerializationResult toJsonCapturedValues( JsonWriter jsonWriter, Map map, diff --git a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/util/WeakIdentityHashMap.java b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/util/WeakIdentityHashMap.java index c08b66dc89d..5c77095831c 100644 --- a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/util/WeakIdentityHashMap.java +++ b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/util/WeakIdentityHashMap.java @@ -466,7 +466,8 @@ boolean removeMapping(Object o) { public void clear() { // clear out ref queue. We don't need to expunge entries // since table is getting cleared. - while (queue.poll() != null) ; + while (queue.poll() != null) + ; modCount++; Arrays.fill(table, null); @@ -475,7 +476,8 @@ public void clear() { // Allocation of array may have caused GC, which may have caused // additional entries to go stale. Removing these entries from the // reference queue will make them eligible for reclamation. - while (queue.poll() != null) ; + while (queue.poll() != null) + ; } /** diff --git a/dd-java-agent/agent-iast/src/main/java/com/datadog/iast/sensitive/UrlRegexpTokenizer.java b/dd-java-agent/agent-iast/src/main/java/com/datadog/iast/sensitive/UrlRegexpTokenizer.java index 9f81d172f92..30371a6d0b5 100644 --- a/dd-java-agent/agent-iast/src/main/java/com/datadog/iast/sensitive/UrlRegexpTokenizer.java +++ b/dd-java-agent/agent-iast/src/main/java/com/datadog/iast/sensitive/UrlRegexpTokenizer.java @@ -4,7 +4,9 @@ import com.datadog.iast.util.Ranged; import java.util.regex.Pattern; -/** @see Uniform Resource Locators (URL) + */ public class UrlRegexpTokenizer extends AbstractRegexTokenizer { private static final String AUTHORITY_GROUP = "AUTHORITY"; diff --git a/dd-java-agent/agent-iast/src/main/java/com/datadog/iast/taint/Ranges.java b/dd-java-agent/agent-iast/src/main/java/com/datadog/iast/taint/Ranges.java index 5f7389841d7..f3e8dec789b 100644 --- a/dd-java-agent/agent-iast/src/main/java/com/datadog/iast/taint/Ranges.java +++ b/dd-java-agent/agent-iast/src/main/java/com/datadog/iast/taint/Ranges.java @@ -199,7 +199,9 @@ public static boolean allRangesFromHeader( return true; } - /** @see #allRangesFromHeader(String, Range[]) */ + /** + * @see #allRangesFromHeader(String, Range[]) + */ public static boolean allRangesFromHeader( @Nonnull final HttpHeader header, @Nonnull final Range[] ranges) { return allRangesFromHeader(header.name, ranges); diff --git a/dd-java-agent/agent-iast/src/test/groovy/com/datadog/iast/ReporterTest.groovy b/dd-java-agent/agent-iast/src/test/groovy/com/datadog/iast/ReporterTest.groovy index 28898db89a6..88562e89b3a 100644 --- a/dd-java-agent/agent-iast/src/test/groovy/com/datadog/iast/ReporterTest.groovy +++ b/dd-java-agent/agent-iast/src/test/groovy/com/datadog/iast/ReporterTest.groovy @@ -55,10 +55,10 @@ class ReporterTest extends DDSpecification { span.getSpanId() >> spanId final v = new Vulnerability( - VulnerabilityType.WEAK_HASH, - Location.forSpanAndStack(span, new StackTraceElement("foo", "foo", "foo", 1)), - new Evidence("MD5") - ) + VulnerabilityType.WEAK_HASH, + Location.forSpanAndStack(span, new StackTraceElement("foo", "foo", "foo", 1)), + new Evidence("MD5") + ) when: reporter.report(span, v) @@ -108,10 +108,10 @@ class ReporterTest extends DDSpecification { span.getSpanId() >> spanId final v = new Vulnerability( - VulnerabilityType.WEAK_HASH, - Location.forSpanAndStack(span, new StackTraceElement("foo", "foo", "foo", 1)), - new Evidence("MD5") - ) + VulnerabilityType.WEAK_HASH, + Location.forSpanAndStack(span, new StackTraceElement("foo", "foo", "foo", 1)), + new Evidence("MD5") + ) when: reporter.report(span, v) @@ -154,15 +154,15 @@ class ReporterTest extends DDSpecification { span.getSpanId() >> spanId final v1 = new Vulnerability( - VulnerabilityType.WEAK_HASH, - Location.forSpanAndStack(span, new StackTraceElement("foo", "foo", "foo", 1)), - new Evidence("MD5") - ) + VulnerabilityType.WEAK_HASH, + Location.forSpanAndStack(span, new StackTraceElement("foo", "foo", "foo", 1)), + new Evidence("MD5") + ) final v2 = new Vulnerability( - VulnerabilityType.WEAK_HASH, - Location.forSpanAndStack(span, new StackTraceElement("foo", "foo", "foo", 2)), - new Evidence("MD4") - ) + VulnerabilityType.WEAK_HASH, + Location.forSpanAndStack(span, new StackTraceElement("foo", "foo", "foo", 2)), + new Evidence("MD4") + ) when: reporter.report(span, v1) @@ -291,10 +291,10 @@ class ReporterTest extends DDSpecification { span.getRequestContext() >> null span.getSpanId() >> 12345L final v = new Vulnerability( - VulnerabilityType.WEAK_HASH, - Location.forSpanAndStack(null, new StackTraceElement("foo", "foo", "foo", 1)), - new Evidence("MD5") - ) + VulnerabilityType.WEAK_HASH, + Location.forSpanAndStack(null, new StackTraceElement("foo", "foo", "foo", 1)), + new Evidence("MD5") + ) when: reporter.report(span, v) @@ -315,10 +315,10 @@ class ReporterTest extends DDSpecification { span.getRequestContext() >> reqCtx span.getSpanId() >> spanId final v = new Vulnerability( - VulnerabilityType.WEAK_HASH, - Location.forSpanAndStack(span, new StackTraceElement("foo", "foo", "foo", 1)), - new Evidence("MD5") - ) + VulnerabilityType.WEAK_HASH, + Location.forSpanAndStack(span, new StackTraceElement("foo", "foo", "foo", 1)), + new Evidence("MD5") + ) when: reporter.report(span, v) @@ -342,17 +342,17 @@ class ReporterTest extends DDSpecification { final span1 = Mock(AgentSpan) span1.getSpanId() >> 123456 final vulnerability1 = new Vulnerability( - VulnerabilityType.WEAK_HASH, - Location.forSpanAndStack(span1, new StackTraceElement("foo", "foo", "foo", 1)), - new Evidence("GOOD") - ) + VulnerabilityType.WEAK_HASH, + Location.forSpanAndStack(span1, new StackTraceElement("foo", "foo", "foo", 1)), + new Evidence("GOOD") + ) final span2 = Mock(AgentSpan) span1.getSpanId() >> 7890 final vulnerability2 = new Vulnerability( - VulnerabilityType.WEAK_HASH, - Location.forSpanAndStack(span2, new StackTraceElement("foo", "foo", "foo", 1)), - new Evidence("BAD") - ) + VulnerabilityType.WEAK_HASH, + Location.forSpanAndStack(span2, new StackTraceElement("foo", "foo", "foo", 1)), + new Evidence("BAD") + ) expect: vulnerability1 == vulnerability2 @@ -363,17 +363,17 @@ class ReporterTest extends DDSpecification { final span1 = Mock(AgentSpan) span1.getSpanId() >> 123456 final vulnerability1 = new Vulnerability( - VulnerabilityType.WEAK_HASH, - Location.forSpanAndStack(span1, new StackTraceElement("foo", "foo", "foo", 1)), - new Evidence("GOOD") - ) + VulnerabilityType.WEAK_HASH, + Location.forSpanAndStack(span1, new StackTraceElement("foo", "foo", "foo", 1)), + new Evidence("GOOD") + ) final span2 = Mock(AgentSpan) span1.getSpanId() >> 7890 final vulnerability2 = new Vulnerability( - VulnerabilityType.WEAK_HASH, - Location.forSpanAndStack(span2, new StackTraceElement("foo", "foo", "foo", 2)), - new Evidence("BAD") - ) + VulnerabilityType.WEAK_HASH, + Location.forSpanAndStack(span2, new StackTraceElement("foo", "foo", "foo", 2)), + new Evidence("BAD") + ) expect: vulnerability1 != vulnerability2 @@ -386,10 +386,10 @@ class ReporterTest extends DDSpecification { final batch = new VulnerabilityBatch() final span = spanWithBatch(batch) final vulnerability = new Vulnerability( - VulnerabilityType.WEAK_HASH, - Location.forSpanAndStack(span, new StackTraceElement("foo", "foo", "foo", 1)), - new Evidence("GOOD") - ) + VulnerabilityType.WEAK_HASH, + Location.forSpanAndStack(span, new StackTraceElement("foo", "foo", "foo", 1)), + new Evidence("GOOD") + ) when: 'first time a vulnerability is reported' reporter.report(span, vulnerability) @@ -411,10 +411,10 @@ class ReporterTest extends DDSpecification { final batch = new VulnerabilityBatch() final span = spanWithBatch(batch) final vulnerability = new Vulnerability( - VulnerabilityType.WEAK_HASH, - Location.forSpanAndStack(span, new StackTraceElement("foo", "foo", "foo", 1)), - new Evidence("GOOD") - ) + VulnerabilityType.WEAK_HASH, + Location.forSpanAndStack(span, new StackTraceElement("foo", "foo", "foo", 1)), + new Evidence("GOOD") + ) when: 'first time a vulnerability is reported' reporter.report(span, vulnerability) @@ -438,10 +438,10 @@ class ReporterTest extends DDSpecification { final span = spanWithBatch(batch) final vulnerabilityBuilder = { int index -> new Vulnerability( - VulnerabilityType.WEAK_HASH, - Location.forSpanAndStack(span, new StackTraceElement(index.toString(), index.toString(), index.toString(), index)), - new Evidence("GOOD") - ) + VulnerabilityType.WEAK_HASH, + Location.forSpanAndStack(span, new StackTraceElement(index.toString(), index.toString(), index.toString(), index)), + new Evidence("GOOD") + ) } when: 'the deduplication cache is filled for the first time' @@ -478,10 +478,10 @@ class ReporterTest extends DDSpecification { final span = spanWithBatch(batch) final vulnerabilityBuilder = { int index -> new Vulnerability( - VulnerabilityType.WEAK_HASH, - Location.forSpanAndStack(span, new StackTraceElement(index.toString(), index.toString(), index.toString(), index)), - new Evidence("GOOD") - ) + VulnerabilityType.WEAK_HASH, + Location.forSpanAndStack(span, new StackTraceElement(index.toString(), index.toString(), index.toString(), index)), + new Evidence("GOOD") + ) } when: 'a few duplicates are reported in a concurrent scenario' @@ -514,10 +514,10 @@ class ReporterTest extends DDSpecification { final batch = new VulnerabilityBatch() final span = spanWithBatch(batch) final vulnerability = new Vulnerability( - VulnerabilityType.SESSION_REWRITING, - Location.forSpan(span), - new Evidence("SESSION_REWRITING") - ) + VulnerabilityType.SESSION_REWRITING, + Location.forSpan(span), + new Evidence("SESSION_REWRITING") + ) when: 'first time a vulnerability is reported' reporter.report(span, vulnerability) @@ -549,15 +549,15 @@ class ReporterTest extends DDSpecification { final location = Location.forSpanAndStack(span, new StackTraceElement("foo", "foo", "foo", 1)) final v1 = new Vulnerability( - VulnerabilityType.INSECURE_COOKIE, - location, - new Evidence("JSESSIONID") - ) + VulnerabilityType.INSECURE_COOKIE, + location, + new Evidence("JSESSIONID") + ) final v2 = new Vulnerability( - VulnerabilityType.NO_SAMESITE_COOKIE, - location, - new Evidence("JSESSIONID") - ) + VulnerabilityType.NO_SAMESITE_COOKIE, + location, + new Evidence("JSESSIONID") + ) when: reporter.report(span, v1) @@ -627,23 +627,23 @@ class ReporterTest extends DDSpecification { private Vulnerability defaultVulnerability(){ return new Vulnerability( - VulnerabilityType.WEAK_HASH, - Location.forSpanAndStack(null, new StackTraceElement("foo", "foo", "foo", 1)), - new Evidence("MD5") - ) + VulnerabilityType.WEAK_HASH, + Location.forSpanAndStack(null, new StackTraceElement("foo", "foo", "foo", 1)), + new Evidence("MD5") + ) } private Vulnerability cookieVulnerability(){ return new Vulnerability( - VulnerabilityType.INSECURE_COOKIE, - Location.forSpanAndStack(null, new StackTraceElement("foo", "foo", "foo", 1)), - new Evidence("cookie-name") - ) + VulnerabilityType.INSECURE_COOKIE, + Location.forSpanAndStack(null, new StackTraceElement("foo", "foo", "foo", 1)), + new Evidence("cookie-name") + ) } private Vulnerability headerVulnerability(){ return new Vulnerability( - VulnerabilityType.XCONTENTTYPE_HEADER_MISSING, Location.forSpan(null), null) + VulnerabilityType.XCONTENTTYPE_HEADER_MISSING, Location.forSpan(null), null) } private void assertStackTrace(Map batch, Vulnerability[] vulnerabilities) { diff --git a/dd-java-agent/agent-iast/src/test/groovy/com/datadog/iast/model/json/VulnerabilityEncodingTest.groovy b/dd-java-agent/agent-iast/src/test/groovy/com/datadog/iast/model/json/VulnerabilityEncodingTest.groovy index b1103f3c94c..965b9be688f 100644 --- a/dd-java-agent/agent-iast/src/test/groovy/com/datadog/iast/model/json/VulnerabilityEncodingTest.groovy +++ b/dd-java-agent/agent-iast/src/test/groovy/com/datadog/iast/model/json/VulnerabilityEncodingTest.groovy @@ -512,7 +512,6 @@ class VulnerabilityEncodingTest extends DDSpecification { !result.contains("source") //sources have been removed countGenericEvidenceOccurrences(result) == value.getVulnerabilities().size() //All the vulnerabilities have generic evidence 1 * metricCollector.addMetric(IastMetric.JSON_TAG_SIZE_EXCEED, -1, 1) - } void 'exception during serialization is caught'() { diff --git a/dd-java-agent/agent-iast/src/test/groovy/com/datadog/iast/propagation/CodecModuleTest.groovy b/dd-java-agent/agent-iast/src/test/groovy/com/datadog/iast/propagation/CodecModuleTest.groovy index ed15a3fc63f..887894ad065 100644 --- a/dd-java-agent/agent-iast/src/test/groovy/com/datadog/iast/propagation/CodecModuleTest.groovy +++ b/dd-java-agent/agent-iast/src/test/groovy/com/datadog/iast/propagation/CodecModuleTest.groovy @@ -405,5 +405,4 @@ class CodecModuleTest extends IastModuleImplTestBase { '}' } } - } diff --git a/dd-java-agent/agent-iast/src/test/groovy/com/datadog/iast/sink/HttpResponseHeaderModuleTest.groovy b/dd-java-agent/agent-iast/src/test/groovy/com/datadog/iast/sink/HttpResponseHeaderModuleTest.groovy index d530fefa6d3..5367a2736b3 100644 --- a/dd-java-agent/agent-iast/src/test/groovy/com/datadog/iast/sink/HttpResponseHeaderModuleTest.groovy +++ b/dd-java-agent/agent-iast/src/test/groovy/com/datadog/iast/sink/HttpResponseHeaderModuleTest.groovy @@ -160,5 +160,4 @@ class HttpResponseHeaderModuleTest extends IastModuleImplTestBase { 'Location' | 1 'headerName' | 0 } - } diff --git a/dd-java-agent/agent-logging/src/main/java/datadog/trace/logging/PrintStreamWrapper.java b/dd-java-agent/agent-logging/src/main/java/datadog/trace/logging/PrintStreamWrapper.java index 133572eff34..cd1e1b4a9c9 100644 --- a/dd-java-agent/agent-logging/src/main/java/datadog/trace/logging/PrintStreamWrapper.java +++ b/dd-java-agent/agent-logging/src/main/java/datadog/trace/logging/PrintStreamWrapper.java @@ -16,6 +16,7 @@ public class PrintStreamWrapper extends PrintStream { public PrintStreamWrapper(PrintStream ps) { super(ps); } + // use for tests only public OutputStream getOriginalPrintStream() { return super.out; diff --git a/dd-java-agent/agent-otel/otel-bootstrap/build.gradle b/dd-java-agent/agent-otel/otel-bootstrap/build.gradle index 8a4533d7875..eb4067e0d7f 100644 --- a/dd-java-agent/agent-otel/otel-bootstrap/build.gradle +++ b/dd-java-agent/agent-otel/otel-bootstrap/build.gradle @@ -62,7 +62,11 @@ tasks.register('unpackJars', Copy) { exclude '**/module-info.class' exclude '**/package-info.class' - from(configurations.named('embeddedClasspath').map { it.collect { zipTree(it) } }) + from(configurations.named('embeddedClasspath').map { + it.collect { + zipTree(it) + } + }) into compileJava.destinationDirectory } diff --git a/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/trace/OtelSpan.java b/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/trace/OtelSpan.java index cbef49e3463..e34dc43b734 100644 --- a/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/trace/OtelSpan.java +++ b/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/trace/OtelSpan.java @@ -35,6 +35,7 @@ public class OtelSpan implements Span, WithAgentSpan { private final AgentSpan delegate; private StatusCode statusCode; private boolean recording; + /** Span events ({@code null} until an event is added). */ private List events; diff --git a/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/trace/OtelSpanBuilder.java b/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/trace/OtelSpanBuilder.java index e5bd100608b..63b8f8a6ddf 100644 --- a/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/trace/OtelSpanBuilder.java +++ b/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/trace/OtelSpanBuilder.java @@ -30,17 +30,20 @@ public class OtelSpanBuilder implements SpanBuilder { private final AgentTracer.SpanBuilder delegate; private boolean spanKindSet; private boolean ignoreActiveSpan; + /** * Operation name overridden value by {@link OtelConventions#OPERATION_NAME_SPECIFIC_ATTRIBUTE} * reserved attribute ({@code null} if not set). */ private String overriddenOperationName; + /** * Analytics sample rate metric value from {@link * OtelConventions#ANALYTICS_EVENT_SPECIFIC_ATTRIBUTES} reserved attribute ({@code -1} if not * set). */ private int overriddenAnalyticsSampleRate; + /** * HTTP status code overridden value by {@link * OtelConventions#HTTP_RESPONSE_STATUS_CODE_ATTRIBUTE} reserved attribute ({@code -1} if not diff --git a/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/trace/OtelSpanEvent.java b/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/trace/OtelSpanEvent.java index 0f2f3f82805..6bd1802aebb 100644 --- a/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/trace/OtelSpanEvent.java +++ b/dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/trace/OtelSpanEvent.java @@ -27,6 +27,7 @@ public class OtelSpanEvent { private final String name; private final String attributes; + /** Event timestamp in nanoseconds. */ private final long timestamp; @@ -124,6 +125,7 @@ public static String toJson(Attributes attributes) { jsonBuilder.append('}'); return jsonBuilder.toString(); } + /** * Recursively adds the value of an {@link Attributes} to the active StringBuilder in JSON * format, depending on the value's type. diff --git a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/InstrumenterModule.java b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/InstrumenterModule.java index 42ea6b7207f..62ddf7c32fe 100644 --- a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/InstrumenterModule.java +++ b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/InstrumenterModule.java @@ -107,7 +107,9 @@ public static ReferenceMatcher loadStaticMuzzleReferences( } } - /** @return Class names of helpers to inject into the user's classloader */ + /** + * @return Class names of helpers to inject into the user's classloader + */ public String[] helperClassNames() { return NO_HELPERS; } @@ -149,7 +151,9 @@ public ElementMatcher.Junction classLoaderMatcher() { return ANY_CLASS_LOADER; } - /** @return A type matcher used to ignore some methods when applying transformation. */ + /** + * @return A type matcher used to ignore some methods when applying transformation. + */ public ElementMatcher methodIgnoreMatcher() { // By default ByteBuddy will skip all methods that are synthetic at the top level, but since // we need to instrument some synthetic methods in Scala and changed that, we make the default diff --git a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/TracerInstaller.java b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/TracerInstaller.java index 10021717f79..38387847bd6 100644 --- a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/TracerInstaller.java +++ b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/TracerInstaller.java @@ -17,6 +17,7 @@ public class TracerInstaller { private static final Logger log = LoggerFactory.getLogger(TracerInstaller.class); + /** Register a global tracer if no global tracer is already registered. */ public static synchronized void installGlobalTracer( SharedCommunicationObjects sharedCommunicationObjects, diff --git a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/bytebuddy/reqctx/LocalVariablesSorter.java b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/bytebuddy/reqctx/LocalVariablesSorter.java index 864090b7d98..7ddf0e0facc 100644 --- a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/bytebuddy/reqctx/LocalVariablesSorter.java +++ b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/bytebuddy/reqctx/LocalVariablesSorter.java @@ -280,7 +280,7 @@ public int newLocal(final Type type) { case Type.ARRAY: t = type.getDescriptor(); break; - // case Type.OBJECT: + // case Type.OBJECT: default: t = type.getInternalName(); break; diff --git a/dd-java-agent/appsec/src/main/java/com/datadog/appsec/api/security/ApiSecuritySamplerImpl.java b/dd-java-agent/appsec/src/main/java/com/datadog/appsec/api/security/ApiSecuritySamplerImpl.java index c51bd46ef44..c222bbe45c9 100644 --- a/dd-java-agent/appsec/src/main/java/com/datadog/appsec/api/security/ApiSecuritySamplerImpl.java +++ b/dd-java-agent/appsec/src/main/java/com/datadog/appsec/api/security/ApiSecuritySamplerImpl.java @@ -22,10 +22,13 @@ public class ApiSecuritySamplerImpl implements ApiSecuritySampler { * should also prevent memory leaks. */ private static final int MAX_POST_PROCESSING_TASKS = 4; + /** Maximum number of entries in the access map. */ private static final int MAX_SIZE = 4096; + /** Mapping from endpoint hash to last access timestamp in millis. */ private final ConcurrentHashMap accessMap; + /** Deque of endpoint hashes ordered by access time. Oldest is always first. */ private final Deque accessDeque; diff --git a/dd-java-agent/appsec/src/main/java/com/datadog/appsec/event/data/Address.java b/dd-java-agent/appsec/src/main/java/com/datadog/appsec/event/data/Address.java index d4149d5c365..c97624afac2 100644 --- a/dd-java-agent/appsec/src/main/java/com/datadog/appsec/event/data/Address.java +++ b/dd-java-agent/appsec/src/main/java/com/datadog/appsec/event/data/Address.java @@ -2,7 +2,9 @@ import java.util.concurrent.atomic.AtomicInteger; -/** @param the type of data associated with the address */ +/** + * @param the type of data associated with the address + */ public final class Address { private static final int MAX_SERIAL = 0x3FFF; private static final AtomicInteger NEXT_SERIAL = new AtomicInteger(); diff --git a/dd-java-agent/appsec/src/main/java/com/datadog/appsec/event/data/MapDataBundle.java b/dd-java-agent/appsec/src/main/java/com/datadog/appsec/event/data/MapDataBundle.java index 14797179eef..db10dcd5a8b 100644 --- a/dd-java-agent/appsec/src/main/java/com/datadog/appsec/event/data/MapDataBundle.java +++ b/dd-java-agent/appsec/src/main/java/com/datadog/appsec/event/data/MapDataBundle.java @@ -72,7 +72,9 @@ public static class Builder { public static final int CAPACITY_11_21 = 32; public static final int CAPACITY_22_42 = 64; - /** @param capacity 2^ceil(log2(ceil(expected_elements 3/2))) */ + /** + * @param capacity 2^ceil(log2(ceil(expected_elements 3/2))) + */ public Builder(int capacity) { map = new IdentityHashMap<>(capacity); } diff --git a/dd-java-agent/appsec/src/main/java/com/datadog/appsec/gateway/AppSecRequestContext.java b/dd-java-agent/appsec/src/main/java/com/datadog/appsec/gateway/AppSecRequestContext.java index 7e3241ab4bc..c6a3579a546 100644 --- a/dd-java-agent/appsec/src/main/java/com/datadog/appsec/gateway/AppSecRequestContext.java +++ b/dd-java-agent/appsec/src/main/java/com/datadog/appsec/gateway/AppSecRequestContext.java @@ -658,7 +658,9 @@ public void close() { } } - /** @return the portion of the body read so far, if any */ + /** + * @return the portion of the body read so far, if any + */ public CharSequence getStoredRequestBody() { StoredBodySupplier storedRequestBodySupplier = this.storedRequestBodySupplier; if (storedRequestBodySupplier == null) { diff --git a/dd-java-agent/appsec/src/main/java/com/datadog/appsec/util/StandardizedLogging.java b/dd-java-agent/appsec/src/main/java/com/datadog/appsec/util/StandardizedLogging.java index beac1dd9371..73374f113d2 100644 --- a/dd-java-agent/appsec/src/main/java/com/datadog/appsec/util/StandardizedLogging.java +++ b/dd-java-agent/appsec/src/main/java/com/datadog/appsec/util/StandardizedLogging.java @@ -66,6 +66,7 @@ public String toString() { return "invalid JSON file"; } }; + // ALL_RULES_INVALID { // @Override // public String toString() { diff --git a/dd-java-agent/appsec/src/test/groovy/com/datadog/appsec/ddwaf/WAFModuleSpecification.groovy b/dd-java-agent/appsec/src/test/groovy/com/datadog/appsec/ddwaf/WAFModuleSpecification.groovy index 7589dd06a91..d683006de7e 100644 --- a/dd-java-agent/appsec/src/test/groovy/com/datadog/appsec/ddwaf/WAFModuleSpecification.groovy +++ b/dd-java-agent/appsec/src/test/groovy/com/datadog/appsec/ddwaf/WAFModuleSpecification.groovy @@ -722,7 +722,9 @@ class WAFModuleSpecification extends DDSpecification { truncatedStringTooLongCount = new AtomicLong(0) truncatedListMapTooLargeCount = new AtomicLong(0) truncatedObjectTooDeepCount = new AtomicLong(0) - it } } + it + } + } 1 * segment.setTagTop('_dd.appsec.waf.duration', 1) 1 * segment.setTagTop('_dd.appsec.waf.duration_ext', 2) @@ -787,7 +789,6 @@ class WAFModuleSpecification extends DDSpecification { stackTrace.frames.size() >= 1 stackTrace.frames[0].class_name == 'org.codehaus.groovy.runtime.callsite.CallSiteArray' stackTrace.frames[0].function == 'defaultCall' - } void 'redaction with default settings'() { @@ -1193,7 +1194,8 @@ class WAFModuleSpecification extends DDSpecification { // no attack 1 * ctx.getOrCreateWafContext(_, true, false) >> { WafHandle wafHandle = it[0] as WafHandle - wafContext = new WafContext(wafHandle)} + wafContext = new WafContext(wafHandle) + } 2 * ctx.getWafMetrics() 1 * ctx.isWafContextClosed() >> false 1 * ctx.closeWafContext() >> { @@ -1215,7 +1217,8 @@ class WAFModuleSpecification extends DDSpecification { // no attack 1 * ctx.getOrCreateWafContext(_, true, false) >> { WafHandle wafHandle = it[0] as WafHandle - wafContext = new WafContext(wafHandle)} + wafContext = new WafContext(wafHandle) + } 2 * ctx.getWafMetrics() 1 * ctx.isWafContextClosed() >> false 1 * ctx.closeWafContext() >> { @@ -1238,7 +1241,8 @@ class WAFModuleSpecification extends DDSpecification { // attack found 1 * ctx.getOrCreateWafContext(_, true, false) >> { WafHandle wafHandle = it[0] as WafHandle - wafContext = new WafContext(wafHandle)} + wafContext = new WafContext(wafHandle) + } 2 * ctx.getWafMetrics() 1 * flow.isBlocking() 1 * flow.setAction({ it.blocking }) @@ -1268,7 +1272,8 @@ class WAFModuleSpecification extends DDSpecification { // no attack 1 * ctx.getOrCreateWafContext(_, true, false) >> { WafHandle wafHandle = it[0] as WafHandle - wafContext = new WafContext(wafHandle)} + wafContext = new WafContext(wafHandle) + } 2 * ctx.getWafMetrics() 1 * ctx.isWafContextClosed() >> false 1 * ctx.closeWafContext() >> { @@ -1459,7 +1464,6 @@ class WAFModuleSpecification extends DDSpecification { then: waf.rateLimiter.limitPerSec == 5 - } void 'suspicious attacker blocking'() { diff --git a/dd-java-agent/appsec/src/test/groovy/com/datadog/appsec/event/data/ObjectIntrospectionSpecification.groovy b/dd-java-agent/appsec/src/test/groovy/com/datadog/appsec/event/data/ObjectIntrospectionSpecification.groovy index 7d91c64ddda..a76fff8c5e3 100644 --- a/dd-java-agent/appsec/src/test/groovy/com/datadog/appsec/event/data/ObjectIntrospectionSpecification.groovy +++ b/dd-java-agent/appsec/src/test/groovy/com/datadog/appsec/event/data/ObjectIntrospectionSpecification.groovy @@ -176,7 +176,6 @@ class ObjectIntrospectionSpecification extends DDSpecification { result3.size() == 127 // +1 for the map, 2 for each entry (key and value) 2 * ctx.setWafTruncated() 2 * wafMetricCollector.wafInputTruncated(false, true, false) - } void 'max depth is honored — array version'() { diff --git a/dd-java-agent/appsec/src/test/groovy/com/datadog/appsec/gateway/GatewayBridgeSpecification.groovy b/dd-java-agent/appsec/src/test/groovy/com/datadog/appsec/gateway/GatewayBridgeSpecification.groovy index cd8248e6fa1..b48f882ebe3 100644 --- a/dd-java-agent/appsec/src/test/groovy/com/datadog/appsec/gateway/GatewayBridgeSpecification.groovy +++ b/dd-java-agent/appsec/src/test/groovy/com/datadog/appsec/gateway/GatewayBridgeSpecification.groovy @@ -462,36 +462,96 @@ class GatewayBridgeSpecification extends DDSpecification { // force all callbacks to be registered _ * eventDispatcher.allSubscribedDataAddresses() >> [KnownAddresses.REQUEST_PATH_PARAMS, KnownAddresses.REQUEST_BODY_OBJECT] - 1 * ig.registerCallback(EVENTS.requestStarted(), _) >> { requestStartedCB = it[1]; null } - 1 * ig.registerCallback(EVENTS.requestEnded(), _) >> { requestEndedCB = it[1]; null } - 1 * ig.registerCallback(EVENTS.requestMethodUriRaw(), _) >> { requestMethodURICB = it[1]; null } - 1 * ig.registerCallback(EVENTS.requestPathParams(), _) >> { pathParamsCB = it[1]; null } - 1 * ig.registerCallback(EVENTS.requestHeader(), _) >> { reqHeaderCB = it[1]; null } - 1 * ig.registerCallback(EVENTS.requestHeaderDone(), _) >> { reqHeadersDoneCB = it[1]; null } - 1 * ig.registerCallback(EVENTS.requestClientSocketAddress(), _) >> { requestSocketAddressCB = it[1]; null } - 1 * ig.registerCallback(EVENTS.requestInferredClientAddress(), _) >> { requestInferredAddressCB = it[1]; null } - 1 * ig.registerCallback(EVENTS.requestBodyStart(), _) >> { requestBodyStartCB = it[1]; null } - 1 * ig.registerCallback(EVENTS.requestBodyDone(), _) >> { requestBodyDoneCB = it[1]; null } - 1 * ig.registerCallback(EVENTS.requestBodyProcessed(), _) >> { requestBodyProcessedCB = it[1]; null } - 1 * ig.registerCallback(EVENTS.responseBody(), _) >> { responseBodyCB = it[1]; null } - 1 * ig.registerCallback(EVENTS.responseStarted(), _) >> { responseStartedCB = it[1]; null } - 1 * ig.registerCallback(EVENTS.responseHeader(), _) >> { respHeaderCB = it[1]; null } - 1 * ig.registerCallback(EVENTS.responseHeaderDone(), _) >> { respHeadersDoneCB = it[1]; null } - 1 * ig.registerCallback(EVENTS.grpcServerMethod(), _) >> { grpcServerMethodCB = it[1]; null } - 1 * ig.registerCallback(EVENTS.grpcServerRequestMessage(), _) >> { grpcServerRequestMessageCB = it[1]; null } - 1 * ig.registerCallback(EVENTS.graphqlServerRequestMessage(), _) >> { graphqlServerRequestMessageCB = it[1]; null } - 1 * ig.registerCallback(EVENTS.databaseConnection(), _) >> { databaseConnectionCB = it[1]; null } - 1 * ig.registerCallback(EVENTS.databaseSqlQuery(), _) >> { databaseSqlQueryCB = it[1]; null } - 1 * ig.registerCallback(EVENTS.httpClientRequest(), _) >> { httpClientRequestCB = it[1]; null } - 1 * ig.registerCallback(EVENTS.httpClientResponse(), _) >> { httpClientResponseCB = it[1]; null } - 1 * ig.registerCallback(EVENTS.httpClientSampling(), _) >> { httpClientSamplingCB = it[1]; null } - 1 * ig.registerCallback(EVENTS.fileLoaded(), _) >> { fileLoadedCB = it[1]; null } - 1 * ig.registerCallback(EVENTS.requestSession(), _) >> { requestSessionCB = it[1]; null } - 1 * ig.registerCallback(EVENTS.execCmd(), _) >> { execCmdCB = it[1]; null } - 1 * ig.registerCallback(EVENTS.shellCmd(), _) >> { shellCmdCB = it[1]; null } - 1 * ig.registerCallback(EVENTS.user(), _) >> { userCB = it[1]; null } - 1 * ig.registerCallback(EVENTS.loginEvent(), _) >> { loginEventCB = it[1]; null } - 1 * ig.registerCallback(EVENTS.httpRoute(), _) >> { httpRouteCB = it[1]; null } + 1 * ig.registerCallback(EVENTS.requestStarted(), _) >> { + requestStartedCB = it[1]; null + } + 1 * ig.registerCallback(EVENTS.requestEnded(), _) >> { + requestEndedCB = it[1]; null + } + 1 * ig.registerCallback(EVENTS.requestMethodUriRaw(), _) >> { + requestMethodURICB = it[1]; null + } + 1 * ig.registerCallback(EVENTS.requestPathParams(), _) >> { + pathParamsCB = it[1]; null + } + 1 * ig.registerCallback(EVENTS.requestHeader(), _) >> { + reqHeaderCB = it[1]; null + } + 1 * ig.registerCallback(EVENTS.requestHeaderDone(), _) >> { + reqHeadersDoneCB = it[1]; null + } + 1 * ig.registerCallback(EVENTS.requestClientSocketAddress(), _) >> { + requestSocketAddressCB = it[1]; null + } + 1 * ig.registerCallback(EVENTS.requestInferredClientAddress(), _) >> { + requestInferredAddressCB = it[1]; null + } + 1 * ig.registerCallback(EVENTS.requestBodyStart(), _) >> { + requestBodyStartCB = it[1]; null + } + 1 * ig.registerCallback(EVENTS.requestBodyDone(), _) >> { + requestBodyDoneCB = it[1]; null + } + 1 * ig.registerCallback(EVENTS.requestBodyProcessed(), _) >> { + requestBodyProcessedCB = it[1]; null + } + 1 * ig.registerCallback(EVENTS.responseBody(), _) >> { + responseBodyCB = it[1]; null + } + 1 * ig.registerCallback(EVENTS.responseStarted(), _) >> { + responseStartedCB = it[1]; null + } + 1 * ig.registerCallback(EVENTS.responseHeader(), _) >> { + respHeaderCB = it[1]; null + } + 1 * ig.registerCallback(EVENTS.responseHeaderDone(), _) >> { + respHeadersDoneCB = it[1]; null + } + 1 * ig.registerCallback(EVENTS.grpcServerMethod(), _) >> { + grpcServerMethodCB = it[1]; null + } + 1 * ig.registerCallback(EVENTS.grpcServerRequestMessage(), _) >> { + grpcServerRequestMessageCB = it[1]; null + } + 1 * ig.registerCallback(EVENTS.graphqlServerRequestMessage(), _) >> { + graphqlServerRequestMessageCB = it[1]; null + } + 1 * ig.registerCallback(EVENTS.databaseConnection(), _) >> { + databaseConnectionCB = it[1]; null + } + 1 * ig.registerCallback(EVENTS.databaseSqlQuery(), _) >> { + databaseSqlQueryCB = it[1]; null + } + 1 * ig.registerCallback(EVENTS.httpClientRequest(), _) >> { + httpClientRequestCB = it[1]; null + } + 1 * ig.registerCallback(EVENTS.httpClientResponse(), _) >> { + httpClientResponseCB = it[1]; null + } + 1 * ig.registerCallback(EVENTS.httpClientSampling(), _) >> { + httpClientSamplingCB = it[1]; null + } + 1 * ig.registerCallback(EVENTS.fileLoaded(), _) >> { + fileLoadedCB = it[1]; null + } + 1 * ig.registerCallback(EVENTS.requestSession(), _) >> { + requestSessionCB = it[1]; null + } + 1 * ig.registerCallback(EVENTS.execCmd(), _) >> { + execCmdCB = it[1]; null + } + 1 * ig.registerCallback(EVENTS.shellCmd(), _) >> { + shellCmdCB = it[1]; null + } + 1 * ig.registerCallback(EVENTS.user(), _) >> { + userCB = it[1]; null + } + 1 * ig.registerCallback(EVENTS.loginEvent(), _) >> { + loginEventCB = it[1]; null + } + 1 * ig.registerCallback(EVENTS.httpRoute(), _) >> { + httpRouteCB = it[1]; null + } 0 * ig.registerCallback(_, _) bridge.init() @@ -622,9 +682,12 @@ class GatewayBridgeSpecification extends DDSpecification { setup: supplier.get() >> 'foobar' - eventDispatcher.getDataSubscribers({ KnownAddresses.REQUEST_BODY_RAW in it }) >> nonEmptyDsInfo - eventDispatcher.publishDataEvent(nonEmptyDsInfo, ctx.data, _ as DataBundle, _ as GatewayContext) >> - { bundle = it[2]; gatewayContext = it[3]; NoopFlow.INSTANCE } + eventDispatcher.getDataSubscribers({ + KnownAddresses.REQUEST_BODY_RAW in it + }) >> nonEmptyDsInfo + eventDispatcher.publishDataEvent(nonEmptyDsInfo, ctx.data, _ as DataBundle, _ as GatewayContext) >> { + bundle = it[2]; gatewayContext = it[3]; NoopFlow.INSTANCE + } when: requestBodyDoneCB.apply(ctx, supplier) @@ -657,9 +720,13 @@ class GatewayBridgeSpecification extends DDSpecification { Object obj = 'hello' setup: - eventDispatcher.getDataSubscribers({ KnownAddresses.REQUEST_BODY_OBJECT in it }) >> nonEmptyDsInfo + eventDispatcher.getDataSubscribers({ + KnownAddresses.REQUEST_BODY_OBJECT in it + }) >> nonEmptyDsInfo eventDispatcher.publishDataEvent(nonEmptyDsInfo, ctx.data, _ as DataBundle, _ as GatewayContext) - >> { bundle = it[2]; gatewayContext = it[3]; NoopFlow.INSTANCE } + >> { + bundle = it[2]; gatewayContext = it[3]; NoopFlow.INSTANCE + } when: requestBodyProcessedCB.apply(ctx, obj) @@ -685,7 +752,9 @@ class GatewayBridgeSpecification extends DDSpecification { void 'request body transforms object and publishes'() { setup: - eventDispatcher.getDataSubscribers({ KnownAddresses.REQUEST_BODY_OBJECT in it }) >> nonEmptyDsInfo + eventDispatcher.getDataSubscribers({ + KnownAddresses.REQUEST_BODY_OBJECT in it + }) >> nonEmptyDsInfo DataBundle bundle GatewayContext gatewayContext @@ -696,8 +765,9 @@ class GatewayBridgeSpecification extends DDSpecification { }) then: - 1 * eventDispatcher.publishDataEvent(nonEmptyDsInfo, ctx.data, _ as DataBundle, _ as GatewayContext) >> - { a, b, db, gw -> bundle = db; gatewayContext = gw; NoopFlow.INSTANCE } + 1 * eventDispatcher.publishDataEvent(nonEmptyDsInfo, ctx.data, _ as DataBundle, _ as GatewayContext) >> { + a, b, db, gw -> bundle = db; gatewayContext = gw; NoopFlow.INSTANCE + } bundle.get(KnownAddresses.REQUEST_BODY_OBJECT) == [foo: 'bar'] flow.result == null flow.action == Flow.Action.Noop.INSTANCE @@ -711,9 +781,12 @@ class GatewayBridgeSpecification extends DDSpecification { def adapter = TestURIDataAdapter.create('http://example.com/') setup: - eventDispatcher.getDataSubscribers({ KnownAddresses.REQUEST_METHOD in it }) >> nonEmptyDsInfo - eventDispatcher.publishDataEvent(nonEmptyDsInfo, ctx.data, _ as DataBundle, _ as GatewayContext) >> - { bundle = it[2]; gatewayContext = it[3]; NoopFlow.INSTANCE } + eventDispatcher.getDataSubscribers({ + KnownAddresses.REQUEST_METHOD in it + }) >> nonEmptyDsInfo + eventDispatcher.publishDataEvent(nonEmptyDsInfo, ctx.data, _ as DataBundle, _ as GatewayContext) >> { + bundle = it[2]; gatewayContext = it[3]; NoopFlow.INSTANCE + } when: requestMethodURICB.apply(ctx, 'POST', adapter) @@ -732,9 +805,12 @@ class GatewayBridgeSpecification extends DDSpecification { def adapter = TestURIDataAdapter.create('https://example.com/') when: - eventDispatcher.getDataSubscribers({ KnownAddresses.REQUEST_SCHEME in it }) >> nonEmptyDsInfo - eventDispatcher.publishDataEvent(nonEmptyDsInfo, ctx.data, _ as DataBundle, _ as GatewayContext) >> - { bundle = it[2]; gatewayContext = it[3]; NoopFlow.INSTANCE } + eventDispatcher.getDataSubscribers({ + KnownAddresses.REQUEST_SCHEME in it + }) >> nonEmptyDsInfo + eventDispatcher.publishDataEvent(nonEmptyDsInfo, ctx.data, _ as DataBundle, _ as GatewayContext) >> { + bundle = it[2]; gatewayContext = it[3]; NoopFlow.INSTANCE + } and: requestMethodURICB.apply(ctx, 'GET', adapter) @@ -767,15 +843,18 @@ class GatewayBridgeSpecification extends DDSpecification { void 'response_start produces appsec context and publishes event'() { - eventDispatcher.getDataSubscribers({ KnownAddresses.RESPONSE_STATUS in it }) >> nonEmptyDsInfo + eventDispatcher.getDataSubscribers({ + KnownAddresses.RESPONSE_STATUS in it + }) >> nonEmptyDsInfo when: Flow flow1 = responseStartedCB.apply(ctx, 404) Flow flow2 = respHeadersDoneCB.apply(ctx) then: - 1 * eventDispatcher.publishDataEvent(nonEmptyDsInfo, ctx.data, _ as DataBundle, _ as GatewayContext) >> - { NoopFlow.INSTANCE } + 1 * eventDispatcher.publishDataEvent(nonEmptyDsInfo, ctx.data, _ as DataBundle, _ as GatewayContext) >> { + NoopFlow.INSTANCE + } flow1.result == null flow1.action == Flow.Action.Noop.INSTANCE flow2.result == null @@ -784,7 +863,9 @@ class GatewayBridgeSpecification extends DDSpecification { void 'grpc server message recv transforms object and publishes'() { setup: - eventDispatcher.getDataSubscribers({ KnownAddresses.GRPC_SERVER_REQUEST_MESSAGE in it }) >> nonEmptyDsInfo + eventDispatcher.getDataSubscribers({ + KnownAddresses.GRPC_SERVER_REQUEST_MESSAGE in it + }) >> nonEmptyDsInfo DataBundle bundle GatewayContext gatewayContext @@ -795,8 +876,9 @@ class GatewayBridgeSpecification extends DDSpecification { }) then: - 1 * eventDispatcher.publishDataEvent(nonEmptyDsInfo, ctx.data, _ as DataBundle, _ as GatewayContext) >> - { a, b, db, gw -> bundle = db; gatewayContext = gw; NoopFlow.INSTANCE } + 1 * eventDispatcher.publishDataEvent(nonEmptyDsInfo, ctx.data, _ as DataBundle, _ as GatewayContext) >> { + a, b, db, gw -> bundle = db; gatewayContext = gw; NoopFlow.INSTANCE + } bundle.get(KnownAddresses.GRPC_SERVER_REQUEST_MESSAGE) == [foo: 'bar'] flow.result == null flow.action == Flow.Action.Noop.INSTANCE @@ -814,8 +896,9 @@ class GatewayBridgeSpecification extends DDSpecification { Flow flow = grpcServerMethodCB.apply(ctx, '/my.package.Greeter/SayHello') then: - 1 * eventDispatcher.publishDataEvent(nonEmptyDsInfo, ctx.data, _ as DataBundle, _ as GatewayContext) >> - { args -> bundle = args[2]; gatewayContext = args[3]; NoopFlow.INSTANCE } + 1 * eventDispatcher.publishDataEvent(nonEmptyDsInfo, ctx.data, _ as DataBundle, _ as GatewayContext) >> { + args -> bundle = args[2]; gatewayContext = args[3]; NoopFlow.INSTANCE + } bundle.get(KnownAddresses.GRPC_SERVER_METHOD) == '/my.package.Greeter/SayHello' gatewayContext != null gatewayContext.isTransient == true @@ -826,7 +909,9 @@ class GatewayBridgeSpecification extends DDSpecification { void 'process database type'() { setup: - eventDispatcher.getDataSubscribers({ KnownAddresses.DB_TYPE in it }) >> nonEmptyDsInfo + eventDispatcher.getDataSubscribers({ + KnownAddresses.DB_TYPE in it + }) >> nonEmptyDsInfo when: databaseConnectionCB.accept(ctx, 'postgresql') @@ -837,7 +922,9 @@ class GatewayBridgeSpecification extends DDSpecification { void 'process jdbc statement query object'() { setup: - eventDispatcher.getDataSubscribers({ KnownAddresses.DB_SQL_QUERY in it }) >> nonEmptyDsInfo + eventDispatcher.getDataSubscribers({ + KnownAddresses.DB_SQL_QUERY in it + }) >> nonEmptyDsInfo DataBundle bundle GatewayContext gatewayContext @@ -845,8 +932,9 @@ class GatewayBridgeSpecification extends DDSpecification { Flow flow = databaseSqlQueryCB.apply(ctx, 'SELECT * FROM foo') then: - 1 * eventDispatcher.publishDataEvent(nonEmptyDsInfo, ctx.data, _ as DataBundle, _ as GatewayContext) >> - { a, b, db, gw -> bundle = db; gatewayContext = gw; NoopFlow.INSTANCE } + 1 * eventDispatcher.publishDataEvent(nonEmptyDsInfo, ctx.data, _ as DataBundle, _ as GatewayContext) >> { + a, b, db, gw -> bundle = db; gatewayContext = gw; NoopFlow.INSTANCE + } bundle.get(KnownAddresses.DB_SQL_QUERY) == 'SELECT * FROM foo' flow.result == null flow.action == Flow.Action.Noop.INSTANCE @@ -856,13 +944,17 @@ class GatewayBridgeSpecification extends DDSpecification { void 'process http client request sampling'() { setup: - eventDispatcher.getDataSubscribers({ KnownAddresses.IO_NET_URL in it }) >> nonEmptyDsInfo + eventDispatcher.getDataSubscribers({ + KnownAddresses.IO_NET_URL in it + }) >> nonEmptyDsInfo when: Flow flow = httpClientSamplingCB.apply(ctx, 1L) then: - 1 * downstreamSampler.sampleHttpClientRequest(arCtx, 1L) >> { sampled } + 1 * downstreamSampler.sampleHttpClientRequest(arCtx, 1L) >> { + sampled + } flow.result == sampled where: @@ -876,7 +968,9 @@ class GatewayBridgeSpecification extends DDSpecification { final headers = ['X-AppSec-TEst': ['true']] final contentType = MediaType.parse('application/json') final body = new ByteArrayInputStream('{"hello": "World!"}'.bytes) - eventDispatcher.getDataSubscribers({ KnownAddresses.IO_NET_URL in it }) >> nonEmptyDsInfo + eventDispatcher.getDataSubscribers({ + KnownAddresses.IO_NET_URL in it + }) >> nonEmptyDsInfo DataBundle bundle GatewayContext gatewayContext @@ -886,9 +980,12 @@ class GatewayBridgeSpecification extends DDSpecification { Flow flow = httpClientRequestCB.apply(ctx, request) then: - downstreamSampler.isSampled(arCtx, _ as long) >> { sampled } - 1 * eventDispatcher.publishDataEvent(nonEmptyDsInfo, ctx.data, _ as DataBundle, _ as GatewayContext) >> - { a, b, db, gw -> bundle = db; gatewayContext = gw; NoopFlow.INSTANCE } + downstreamSampler.isSampled(arCtx, _ as long) >> { + sampled + } + 1 * eventDispatcher.publishDataEvent(nonEmptyDsInfo, ctx.data, _ as DataBundle, _ as GatewayContext) >> { + a, b, db, gw -> bundle = db; gatewayContext = gw; NoopFlow.INSTANCE + } bundle.size() == (sampled ? 4 : 3) bundle.get(KnownAddresses.IO_NET_URL) == url bundle.get(KnownAddresses.IO_NET_REQUEST_METHOD) == method @@ -912,7 +1009,9 @@ class GatewayBridgeSpecification extends DDSpecification { final headers = ['X-AppSec-TEst': ['true']] final contentType = MediaType.parse('application/json') final body = new ByteArrayInputStream('{"hello": "World!"}'.bytes) - eventDispatcher.getDataSubscribers({ KnownAddresses.IO_NET_RESPONSE_STATUS in it }) >> nonEmptyDsInfo + eventDispatcher.getDataSubscribers({ + KnownAddresses.IO_NET_RESPONSE_STATUS in it + }) >> nonEmptyDsInfo DataBundle bundle GatewayContext gatewayContext @@ -922,9 +1021,12 @@ class GatewayBridgeSpecification extends DDSpecification { Flow flow = httpClientResponseCB.apply(ctx, response) then: - downstreamSampler.isSampled(arCtx, _ as long) >> { sampled } - 1 * eventDispatcher.publishDataEvent(nonEmptyDsInfo, ctx.data, _ as DataBundle, _ as GatewayContext) >> - { a, b, db, gw -> bundle = db; gatewayContext = gw; NoopFlow.INSTANCE } + downstreamSampler.isSampled(arCtx, _ as long) >> { + sampled + } + 1 * eventDispatcher.publishDataEvent(nonEmptyDsInfo, ctx.data, _ as DataBundle, _ as GatewayContext) >> { + a, b, db, gw -> bundle = db; gatewayContext = gw; NoopFlow.INSTANCE + } bundle.size() == (sampled ? 3 : 2) bundle.get(KnownAddresses.IO_NET_RESPONSE_STATUS) == Integer.toString(status) bundle.get(KnownAddresses.IO_NET_RESPONSE_HEADERS) == headers @@ -944,7 +1046,9 @@ class GatewayBridgeSpecification extends DDSpecification { void 'process file loaded'() { setup: final path = 'https://www.datadoghq.com/demo/file.txt' - eventDispatcher.getDataSubscribers({ KnownAddresses.IO_FS_FILE in it }) >> nonEmptyDsInfo + eventDispatcher.getDataSubscribers({ + KnownAddresses.IO_FS_FILE in it + }) >> nonEmptyDsInfo DataBundle bundle GatewayContext gatewayContext @@ -952,8 +1056,9 @@ class GatewayBridgeSpecification extends DDSpecification { Flow flow = fileLoadedCB.apply(ctx, path) then: - 1 * eventDispatcher.publishDataEvent(nonEmptyDsInfo, ctx.data, _ as DataBundle, _ as GatewayContext) >> - { a, b, db, gw -> bundle = db; gatewayContext = gw; NoopFlow.INSTANCE } + 1 * eventDispatcher.publishDataEvent(nonEmptyDsInfo, ctx.data, _ as DataBundle, _ as GatewayContext) >> { + a, b, db, gw -> bundle = db; gatewayContext = gw; NoopFlow.INSTANCE + } bundle.get(KnownAddresses.IO_FS_FILE) == path flow.result == null flow.action == Flow.Action.Noop.INSTANCE @@ -964,7 +1069,9 @@ class GatewayBridgeSpecification extends DDSpecification { void 'process exec cmd'() { setup: final cmd = ['/bin/../usr/bin/reboot', '-f'] as String[] - eventDispatcher.getDataSubscribers({ KnownAddresses.EXEC_CMD in it }) >> nonEmptyDsInfo + eventDispatcher.getDataSubscribers({ + KnownAddresses.EXEC_CMD in it + }) >> nonEmptyDsInfo DataBundle bundle GatewayContext gatewayContext @@ -972,8 +1079,9 @@ class GatewayBridgeSpecification extends DDSpecification { Flow flow = execCmdCB.apply(ctx, cmd) then: - 1 * eventDispatcher.publishDataEvent(nonEmptyDsInfo, ctx.data, _ as DataBundle, _ as GatewayContext) >> - { a, b, db, gw -> bundle = db; gatewayContext = gw; NoopFlow.INSTANCE } + 1 * eventDispatcher.publishDataEvent(nonEmptyDsInfo, ctx.data, _ as DataBundle, _ as GatewayContext) >> { + a, b, db, gw -> bundle = db; gatewayContext = gw; NoopFlow.INSTANCE + } bundle.get(KnownAddresses.EXEC_CMD) == cmd flow.result == null flow.action == Flow.Action.Noop.INSTANCE @@ -984,7 +1092,9 @@ class GatewayBridgeSpecification extends DDSpecification { void 'process shell cmd'() { setup: final cmd = '$(cat /etc/passwd 1>&2 ; echo .)' - eventDispatcher.getDataSubscribers({ KnownAddresses.SHELL_CMD in it }) >> nonEmptyDsInfo + eventDispatcher.getDataSubscribers({ + KnownAddresses.SHELL_CMD in it + }) >> nonEmptyDsInfo DataBundle bundle GatewayContext gatewayContext @@ -992,8 +1102,9 @@ class GatewayBridgeSpecification extends DDSpecification { Flow flow = shellCmdCB.apply(ctx, cmd) then: - 1 * eventDispatcher.publishDataEvent(nonEmptyDsInfo, ctx.data, _ as DataBundle, _ as GatewayContext) >> - { a, b, db, gw -> bundle = db; gatewayContext = gw; NoopFlow.INSTANCE } + 1 * eventDispatcher.publishDataEvent(nonEmptyDsInfo, ctx.data, _ as DataBundle, _ as GatewayContext) >> { + a, b, db, gw -> bundle = db; gatewayContext = gw; NoopFlow.INSTANCE + } bundle.get(KnownAddresses.SHELL_CMD) == cmd flow.result == null flow.action == Flow.Action.Noop.INSTANCE @@ -1163,8 +1274,9 @@ class GatewayBridgeSpecification extends DDSpecification { requestSessionCB.apply(ctx, sessionId) then: - 1 * eventDispatcher.publishDataEvent(nonEmptyDsInfo, ctx.data, _ as DataBundle, _ as GatewayContext) >> - { a, b, db, gw -> bundle = db; gatewayContext = gw; NoopFlow.INSTANCE } + 1 * eventDispatcher.publishDataEvent(nonEmptyDsInfo, ctx.data, _ as DataBundle, _ as GatewayContext) >> { + a, b, db, gw -> bundle = db; gatewayContext = gw; NoopFlow.INSTANCE + } bundle.get(KnownAddresses.SESSION_ID) == sessionId gatewayContext.isTransient == false } @@ -1177,7 +1289,8 @@ class GatewayBridgeSpecification extends DDSpecification { userCB.apply(ctx, USER_ID) then: - 1 * eventDispatcher.publishDataEvent(nonEmptyDsInfo, ctx.data, _ as DataBundle, _ as GatewayContext) >> { a, b, DataBundle db, GatewayContext gw -> + 1 * eventDispatcher.publishDataEvent(nonEmptyDsInfo, ctx.data, _ as DataBundle, _ as GatewayContext) >> { + a, b, DataBundle db, GatewayContext gw -> assert db.get(KnownAddresses.USER_ID) == USER_ID assert !gw.isTransient return NoopFlow.INSTANCE @@ -1198,7 +1311,8 @@ class GatewayBridgeSpecification extends DDSpecification { loginEventCB.apply(ctx, SIGN_UP, USER_ID) then: - 1 * eventDispatcher.publishDataEvent(nonEmptyDsInfo, ctx.data, _ as DataBundle, _ as GatewayContext) >> { a, b, DataBundle db, GatewayContext gw -> + 1 * eventDispatcher.publishDataEvent(nonEmptyDsInfo, ctx.data, _ as DataBundle, _ as GatewayContext) >> { + a, b, DataBundle db, GatewayContext gw -> assert db.get(KnownAddresses.USER_LOGIN) == USER_ID assert db.get(KnownAddresses.SIGN_UP) != null assert !gw.isTransient @@ -1214,7 +1328,8 @@ class GatewayBridgeSpecification extends DDSpecification { loginEventCB.apply(ctx, LOGIN_SUCCESS, USER_ID) then: - 1 * eventDispatcher.publishDataEvent(nonEmptyDsInfo, ctx.data, _ as DataBundle, _ as GatewayContext) >> { a, b, DataBundle db, GatewayContext gw -> + 1 * eventDispatcher.publishDataEvent(nonEmptyDsInfo, ctx.data, _ as DataBundle, _ as GatewayContext) >> { + a, b, DataBundle db, GatewayContext gw -> assert db.get(KnownAddresses.USER_LOGIN) == USER_ID assert db.get(KnownAddresses.LOGIN_SUCCESS) != null assert !gw.isTransient @@ -1230,7 +1345,8 @@ class GatewayBridgeSpecification extends DDSpecification { loginEventCB.apply(ctx, LOGIN_FAILURE, USER_ID) then: - 1 * eventDispatcher.publishDataEvent(nonEmptyDsInfo, ctx.data, _ as DataBundle, _ as GatewayContext) >> { a, b, DataBundle db, GatewayContext gw -> + 1 * eventDispatcher.publishDataEvent(nonEmptyDsInfo, ctx.data, _ as DataBundle, _ as GatewayContext) >> { + a, b, DataBundle db, GatewayContext gw -> assert db.get(KnownAddresses.USER_LOGIN) == USER_ID assert db.get(KnownAddresses.LOGIN_FAILURE) != null assert !gw.isTransient @@ -1498,5 +1614,4 @@ class GatewayBridgeSpecification extends DDSpecification { assert body['test'] == 'this is a test' } } - } diff --git a/dd-java-agent/benchmark-integration/play-perftest/app/controllers/HomeController.scala b/dd-java-agent/benchmark-integration/play-perftest/app/controllers/HomeController.scala index 7359ce48ec3..845e197eafa 100644 --- a/dd-java-agent/benchmark-integration/play-perftest/app/controllers/HomeController.scala +++ b/dd-java-agent/benchmark-integration/play-perftest/app/controllers/HomeController.scala @@ -7,8 +7,8 @@ import javax.inject.Inject import play.api.mvc._ -/** This controller creates an `Action` to handle HTTP requests to the - * application's work page which does busy wait to simulate some work +/** This controller creates an `Action` to handle HTTP requests to the application's work page which + * does busy wait to simulate some work */ class HomeController @Inject() (cc: ControllerComponents) extends AbstractController(cc) { diff --git a/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/InstrumentationSpecification.groovy b/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/InstrumentationSpecification.groovy index 491af0df614..cc64bc5af61 100644 --- a/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/InstrumentationSpecification.groovy +++ b/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/InstrumentationSpecification.groovy @@ -119,7 +119,7 @@ abstract class InstrumentationSpecification extends DDSpecification implements A for (Map.Entry entry : System.getProperties().entrySet()) { if (entry.getKey().toString().startsWith("dd.")) { ddEnvVars.append(ConfigStrings.systemPropertyNameToEnvironmentVariableName(entry.getKey().toString())) - .append("=").append(entry.getValue()).append(",") + .append("=").append(entry.getValue()).append(",") } } ddEnvVars.append("DD_SERVICE=").append(Config.get().getServiceName()) @@ -352,10 +352,10 @@ abstract class InstrumentationSpecification extends DDSpecification implements A DDAgentFeaturesDiscovery features = new MockFeaturesDiscovery(true) Sink sink = new Sink() { - void accept(int messageCount, ByteBuffer buffer) {} + void accept(int messageCount, ByteBuffer buffer) {} - void register(EventListener listener) {} - } + void register(EventListener listener) {} + } // Fast enough so tests don't take forever long bucketDuration = dataStreamsBucketDuration() @@ -378,15 +378,15 @@ abstract class InstrumentationSpecification extends DDSpecification implements A } TEST_TRACER = - Spy( - CoreTracer.builder() - .writer(TEST_WRITER) - .idGenerationStrategy(IdGenerationStrategy.fromName(idGenerationStrategyName())) - .statsDClient(STATS_D_CLIENT) - .strictTraceWrites(useStrictTraceWrites()) - .dataStreamsMonitoring(TEST_DATA_STREAMS_MONITORING) - .profilingContextIntegration(TEST_PROFILING_CONTEXT_INTEGRATION) - .build()) + Spy( + CoreTracer.builder() + .writer(TEST_WRITER) + .idGenerationStrategy(IdGenerationStrategy.fromName(idGenerationStrategyName())) + .statsDClient(STATS_D_CLIENT) + .strictTraceWrites(useStrictTraceWrites()) + .dataStreamsMonitoring(TEST_DATA_STREAMS_MONITORING) + .profilingContextIntegration(TEST_PROFILING_CONTEXT_INTEGRATION) + .build()) TracerInstaller.forceInstallGlobalTracer(TEST_TRACER) boolean enabledFinishTimingChecks = this.enabledFinishTimingChecks() @@ -409,7 +409,7 @@ abstract class InstrumentationSpecification extends DDSpecification implements A .iterator() .hasNext(): "No instrumentation found" activeTransformer = AgentInstaller.installBytebuddyAgent( - INSTRUMENTATION, true, AgentInstaller.getEnabledSystems(), this) + INSTRUMENTATION, true, AgentInstaller.getEnabledSystems(), this) } protected String idGenerationStrategyName() { @@ -517,7 +517,7 @@ abstract class InstrumentationSpecification extends DDSpecification implements A def st = e.stackTrace int loc = st.findIndexOf { it.className.startsWith(TrackingSpanDecorator.class.name) && - it.methodName.startsWith('finish') + it.methodName.startsWith('finish') } for (int j = loc == -1 ? 0 : loc; j < st.length; j++) { pw.println("\tat ${st[j]}") @@ -555,23 +555,23 @@ abstract class InstrumentationSpecification extends DDSpecification implements A } void assertTraces( - final int size, - @ClosureParams( - value = SimpleType, - options = "datadog.trace.agent.test.asserts.ListWriterAssert") - @DelegatesTo(value = ListWriterAssert, strategy = Closure.DELEGATE_FIRST) - final Closure spec) { + final int size, + @ClosureParams( + value = SimpleType, + options = "datadog.trace.agent.test.asserts.ListWriterAssert") + @DelegatesTo(value = ListWriterAssert, strategy = Closure.DELEGATE_FIRST) + final Closure spec) { assertTraces(size, false, spec) } void assertTraces( - final int size, - final boolean ignoreAdditionalTraces, - @ClosureParams( - value = SimpleType, - options = "datadog.trace.agent.test.asserts.ListWriterAssert") - @DelegatesTo(value = ListWriterAssert, strategy = Closure.DELEGATE_FIRST) - final Closure spec) { + final int size, + final boolean ignoreAdditionalTraces, + @ClosureParams( + value = SimpleType, + options = "datadog.trace.agent.test.asserts.ListWriterAssert") + @DelegatesTo(value = ListWriterAssert, strategy = Closure.DELEGATE_FIRST) + final Closure spec) { ListWriterAssert.assertTraces(TEST_WRITER, size, ignoreAdditionalTraces, spec) } @@ -580,13 +580,13 @@ abstract class InstrumentationSpecification extends DDSpecification implements A protected static final Comparator> SORT_TRACES_BY_NAMES = ListWriterAssert.SORT_TRACES_BY_NAMES void assertTraces( - final int size, - final Comparator> traceSorter, - @ClosureParams( - value = SimpleType, - options = "datadog.trace.agent.test.asserts.ListWriterAssert") - @DelegatesTo(value = ListWriterAssert, strategy = Closure.DELEGATE_FIRST) - final Closure spec) { + final int size, + final Comparator> traceSorter, + @ClosureParams( + value = SimpleType, + options = "datadog.trace.agent.test.asserts.ListWriterAssert") + @DelegatesTo(value = ListWriterAssert, strategy = Closure.DELEGATE_FIRST) + final Closure spec) { ListWriterAssert.assertTraces(TEST_WRITER, size, false, traceSorter, spec) } @@ -631,7 +631,7 @@ abstract class InstrumentationSpecification extends DDSpecification implements A // Incorrect* classes assert on incorrect api usage. Error expected. if (typeName.startsWith('context.FieldInjectionTestInstrumentation$Incorrect') - && throwable.getMessage().startsWith("Incorrect Context Api Usage detected.")) { + && throwable.getMessage().startsWith("Incorrect Context Api Usage detected.")) { return } diff --git a/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/base/HttpClientTest.groovy b/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/base/HttpClientTest.groovy index 1e2b025e727..229def7d5f8 100644 --- a/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/base/HttpClientTest.groovy +++ b/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/base/HttpClientTest.groovy @@ -95,8 +95,8 @@ abstract class HttpClientTest extends VersionedNamingTestBase { handleDistributedRequest() String msg = "Hello." response.status(200) - .addHeader('x-datadog-test-response-header', 'baz') - .send(msg) + .addHeader('x-datadog-test-response-header', 'baz') + .send(msg) } prefix("/timeout") { Thread.sleep(10_000) @@ -107,10 +107,10 @@ abstract class HttpClientTest extends VersionedNamingTestBase { response.status(400).send('Bad content type') } else { response - .status(200) - .addHeader('Content-Type', 'application/json') - .addHeader('X-AppSec-Test', 'true') - .sendWithType('application/json', request.body) + .status(200) + .addHeader('Content-Type', 'application/json') + .addHeader('X-AppSec-Test', 'true') + .sendWithType('application/json', request.body) } } } @@ -146,19 +146,19 @@ abstract class HttpClientTest extends VersionedNamingTestBase { def setupSpec() { List proxyList = Collections.singletonList(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxy.port))) proxySelector = new ProxySelector() { - @Override - List select(URI uri) { - if (uri.fragment == "proxy") { - return proxyList + @Override + List select(URI uri) { + if (uri.fragment == "proxy") { + return proxyList + } + return getDefault().select(uri) } - return getDefault().select(uri) - } - @Override - void connectFailed(URI uri, SocketAddress sa, IOException ioe) { - getDefault().connectFailed(uri, sa, ioe) + @Override + void connectFailed(URI uri, SocketAddress sa, IOException ioe) { + getDefault().connectFailed(uri, sa, ioe) + } } - } // Register the Instrumentation Gateway callbacks def ss = get().getSubscriptionService(RequestContextSlot.APPSEC) @@ -230,8 +230,12 @@ abstract class HttpClientTest extends VersionedNamingTestBase { } // IBM JVM has different protocol support for TLS - @Requires({ !System.getProperty("java.vm.name").contains("IBM J9 VM") }) - @IgnoreIf({ !instance.testSecure() }) + @Requires({ + !System.getProperty("java.vm.name").contains("IBM J9 VM") + }) + @IgnoreIf({ + !instance.testSecure() + }) def "basic secure #method request"() { when: def status = doRequest(method, url) @@ -250,7 +254,9 @@ abstract class HttpClientTest extends VersionedNamingTestBase { and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { getTags() == DSM_EDGE_TAGS } @@ -266,8 +272,12 @@ abstract class HttpClientTest extends VersionedNamingTestBase { } // IBM JVM has different protocol support for TLS - @Requires({ !System.getProperty("java.vm.name").contains("IBM J9 VM") }) - @IgnoreIf({ !(instance.testSecure() && instance.testProxy()) }) + @Requires({ + !System.getProperty("java.vm.name").contains("IBM J9 VM") + }) + @IgnoreIf({ + !(instance.testSecure() && instance.testProxy()) + }) def "secure #method proxied request"() { when: def status = runUnderTrace("parent") { @@ -295,7 +305,9 @@ abstract class HttpClientTest extends VersionedNamingTestBase { and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { getTags() == DSM_EDGE_TAGS } @@ -330,7 +342,9 @@ abstract class HttpClientTest extends VersionedNamingTestBase { and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { getTags() == DSM_EDGE_TAGS } @@ -367,7 +381,9 @@ abstract class HttpClientTest extends VersionedNamingTestBase { and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { getTags() == DSM_EDGE_TAGS } @@ -405,7 +421,9 @@ abstract class HttpClientTest extends VersionedNamingTestBase { and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { getTags() == DSM_EDGE_TAGS } @@ -438,7 +456,9 @@ abstract class HttpClientTest extends VersionedNamingTestBase { and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { getTags() == DSM_EDGE_TAGS } @@ -471,7 +491,9 @@ abstract class HttpClientTest extends VersionedNamingTestBase { and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { getTags() == DSM_EDGE_TAGS } @@ -483,7 +505,9 @@ abstract class HttpClientTest extends VersionedNamingTestBase { } @Flaky(value = 'Futures timed out after [1 second]', suites = ['PlayWSClientTest']) - @IgnoreIf({ !instance.testCallbackWithParent() }) + @IgnoreIf({ + !instance.testCallbackWithParent() + }) def "trace request with callback and parent"() { given: def method = 'GET' @@ -515,7 +539,9 @@ abstract class HttpClientTest extends VersionedNamingTestBase { and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { getTags() == DSM_EDGE_TAGS } @@ -538,7 +564,8 @@ abstract class HttpClientTest extends VersionedNamingTestBase { // Java 7 CopyOnWrite lists cannot be sorted in place List> traces = TEST_WRITER.toList() - traces.sort({ t1, t2 -> + traces.sort({ + t1, t2 -> return t1[0].startTimeNano <=> t2[0].startTimeNano }) for (int i = 0; i < traces.size(); i++) { @@ -562,7 +589,9 @@ abstract class HttpClientTest extends VersionedNamingTestBase { and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { getTags() == DSM_EDGE_TAGS } @@ -572,7 +601,9 @@ abstract class HttpClientTest extends VersionedNamingTestBase { method = "GET" } - @IgnoreIf({ !instance.testRedirects() }) + @IgnoreIf({ + !instance.testRedirects() + }) def "basic #method request with 1 redirect"() { // TODO quite a few clients create an extra span for the redirect // This test should handle both types or we should unify how the clients work @@ -598,7 +629,9 @@ abstract class HttpClientTest extends VersionedNamingTestBase { and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { getTags() == DSM_EDGE_TAGS } @@ -608,7 +641,9 @@ abstract class HttpClientTest extends VersionedNamingTestBase { method = "GET" } - @IgnoreIf({ !instance.testRedirects() }) + @IgnoreIf({ + !instance.testRedirects() + }) def "basic #method request with 2 redirects"() { given: def uri = server.address.resolve("/another-redirect") @@ -632,7 +667,9 @@ abstract class HttpClientTest extends VersionedNamingTestBase { and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { getTags() == DSM_EDGE_TAGS } @@ -642,7 +679,9 @@ abstract class HttpClientTest extends VersionedNamingTestBase { method = "GET" } - @IgnoreIf({ !(instance.testRedirects() && instance.testCircularRedirects()) }) + @IgnoreIf({ + !(instance.testRedirects() && instance.testCircularRedirects()) + }) def "basic #method request with circular redirects"() { given: def uri = server.address.resolve("/circular-redirect") @@ -667,7 +706,9 @@ abstract class HttpClientTest extends VersionedNamingTestBase { method = "GET" } - @IgnoreIf({ !instance.testRedirects() }) + @IgnoreIf({ + !instance.testRedirects() + }) def "redirect #method to secured endpoint copies auth header"() { given: def uri = server.address.resolve("/to-secured") @@ -690,7 +731,9 @@ abstract class HttpClientTest extends VersionedNamingTestBase { and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { getTags() == DSM_EDGE_TAGS } @@ -700,7 +743,9 @@ abstract class HttpClientTest extends VersionedNamingTestBase { method = "GET" } - @IgnoreIf({ !instance.testConnectionFailure() }) + @IgnoreIf({ + !instance.testConnectionFailure() + }) def "connection error (unopened port)"() { given: def uri = new URI("http://localhost:$UNUSABLE_PORT/") @@ -726,7 +771,9 @@ abstract class HttpClientTest extends VersionedNamingTestBase { method = "GET" } - @IgnoreIf({ !instance.testRemoteConnection() }) + @IgnoreIf({ + !instance.testRemoteConnection() + }) def "connection error non routable address"() { given: def uri = new URI("https://192.0.2.1/") @@ -752,8 +799,12 @@ abstract class HttpClientTest extends VersionedNamingTestBase { } // IBM JVM has different protocol support for TLS - @Requires({ !System.getProperty("java.vm.name").contains("IBM J9 VM") }) - @IgnoreIf({ !instance.testRemoteConnection() }) + @Requires({ + !System.getProperty("java.vm.name").contains("IBM J9 VM") + }) + @IgnoreIf({ + !instance.testRemoteConnection() + }) def "test https request"() { given: def uri = new URI("https://www.google.com/") @@ -774,7 +825,9 @@ abstract class HttpClientTest extends VersionedNamingTestBase { and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { getTags() == DSM_EDGE_TAGS } @@ -802,7 +855,9 @@ abstract class HttpClientTest extends VersionedNamingTestBase { } and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { getTags() == DSM_EDGE_TAGS } @@ -835,7 +890,9 @@ abstract class HttpClientTest extends VersionedNamingTestBase { } and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { getTags() == DSM_EDGE_TAGS } @@ -847,7 +904,9 @@ abstract class HttpClientTest extends VersionedNamingTestBase { } - @IgnoreIf({ !instance.testAppSecClientRequest() }) + @IgnoreIf({ + !instance.testAppSecClientRequest() + }) void 'test appsec client request analysis'() { given: final url = server.address.resolve(endpoint) @@ -861,7 +920,8 @@ abstract class HttpClientTest extends VersionedNamingTestBase { when: final status = runUnderAppSecTrace { - doRequest(method, url, ['Content-Type': contentType] + headers, body) { InputStream response -> + doRequest(method, url, ['Content-Type': contentType] + headers, body) { + InputStream response -> assert response.text == body } } @@ -869,7 +929,9 @@ abstract class HttpClientTest extends VersionedNamingTestBase { then: status == 200 TEST_WRITER.waitForTraces(1) - final span = TEST_WRITER.get(0).find { it.spanType == 'http'} + final span = TEST_WRITER.get(0).find { + it.spanType == 'http' + } tags.each { assert span.getTag(it.key) == it.value } @@ -921,9 +983,15 @@ abstract class HttpClientTest extends VersionedNamingTestBase { tags { "$Tags.COMPONENT" component "$Tags.SPAN_KIND" Tags.SPAN_KIND_CLIENT - "$Tags.PEER_HOSTNAME" { it == uri.host || ignorePeer } - "$Tags.PEER_HOST_IPV4" { it == null || it == "127.0.0.1" || ignorePeer } // Optional - "$Tags.PEER_PORT" { it == null || it == uri.port || it == proxy.port || it == 443 || ignorePeer } + "$Tags.PEER_HOSTNAME" { + it == uri.host || ignorePeer + } + "$Tags.PEER_HOST_IPV4" { + it == null || it == "127.0.0.1" || ignorePeer + } // Optional + "$Tags.PEER_PORT" { + it == null || it == uri.port || it == proxy.port || it == 443 || ignorePeer + } "$Tags.HTTP_URL" expectedUrl "$Tags.HTTP_METHOD" method if (status) { @@ -931,10 +999,16 @@ abstract class HttpClientTest extends VersionedNamingTestBase { } if (tagQueryString) { "$DDTags.HTTP_QUERY" expectedQuery - "$DDTags.HTTP_FRAGMENT" { it == null || it == uri.fragment } // Optional + "$DDTags.HTTP_FRAGMENT" { + it == null || it == uri.fragment + } // Optional } - if ({ isDataStreamsEnabled() }) { - "$DDTags.PATHWAY_HASH" { String } + if ({ + isDataStreamsEnabled() + }) { + "$DDTags.PATHWAY_HASH" { + String + } } if (exception) { this.assertErrorTags(it, exception) @@ -1012,13 +1086,13 @@ abstract class HttpClientTest extends VersionedNamingTestBase { boolean hasAppSecData } - final BiFunction> httpClientBodySamplingCb = - { RequestContext rqCtxt, final long requestId -> + final BiFunction> httpClientBodySamplingCb = { + RequestContext rqCtxt, final long requestId -> return new Flow.ResultFlow<>(true) } as BiFunction> - final BiFunction> httpClientRequestCb = - { RequestContext rqCtxt, HttpClientRequest req -> + final BiFunction> httpClientRequestCb = { + RequestContext rqCtxt, HttpClientRequest req -> if (req.headers?.containsKey('X-AppSec-Test')) { final context = rqCtxt.getData(RequestContextSlot.APPSEC) as Context if (context != null) { @@ -1029,13 +1103,12 @@ abstract class HttpClientTest extends VersionedNamingTestBase { .setTag('downstream.request.headers', JsonOutput.toJson(req.headers)) .setTag('downstream.request.body', req.body?.text) } - } Flow.ResultFlow.empty() } as BiFunction> - final BiFunction> httpClientResponseCb = - { RequestContext rqCtxt, HttpClientResponse res -> + final BiFunction> httpClientResponseCb = { + RequestContext rqCtxt, HttpClientResponse res -> final context = rqCtxt.getData(RequestContextSlot.APPSEC) as Context if (context?.hasAppSecData) { activeSpan() @@ -1045,7 +1118,5 @@ abstract class HttpClientTest extends VersionedNamingTestBase { } Flow.ResultFlow.empty() } as BiFunction> - - } } diff --git a/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/base/HttpServerTest.groovy b/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/base/HttpServerTest.groovy index 6bca5c21f3d..f51353954ec 100644 --- a/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/base/HttpServerTest.groovy +++ b/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/base/HttpServerTest.groovy @@ -230,9 +230,15 @@ abstract class HttpServerTest extends WithHttpServer { // Only used if hasExtraErrorInformation is true Map expectedExtraErrorInformation(ServerEndpoint endpoint) { if (endpoint.errored) { - ["error.message": { it == null || it == EXCEPTION.body }, - "error.type" : { it == null || it == Exception.name }, - "error.stack" : { it == null || it instanceof String }] + ["error.message": { + it == null || it == EXCEPTION.body + }, + "error.type" : { + it == null || it == Exception.name + }, + "error.stack" : { + it == null || it instanceof String + }] } else { Collections.emptyMap() } @@ -551,12 +557,18 @@ abstract class HttpServerTest extends WithHttpServer { } static { - assert values().length == values().collect { it.path }.toSet().size(): "paths should be unique" + assert values().length == values().collect { + it.path + }.toSet().size(): "paths should be unique" } private static final Map PATH_MAP = { - Map map = values().collectEntries { [it.path, it] } - map.putAll(values().collectEntries { [it.rawPath, it] }) + Map map = values().collectEntries { + [it.path, it] + } + map.putAll(values().collectEntries { + [it.rawPath, it] + }) map }.call() @@ -603,9 +615,13 @@ abstract class HttpServerTest extends WithHttpServer { client.newCall(request).execute() } } - responses = (1..count).collect { completionService.take().get() } + responses = (1..count).collect { + completionService.take().get() + } } else { - responses = (1..count).collect { client.newCall(request).execute() } + responses = (1..count).collect { + client.newCall(request).execute() + } } if (isDataStreamsEnabled()) { @@ -613,14 +629,16 @@ abstract class HttpServerTest extends WithHttpServer { } expect: - responses.each { response -> + responses.each { + response -> assert response.code() == SUCCESS.status assert response.body().string() == SUCCESS.body } and: assertTraces(count) { - (1..count).eachWithIndex { val, i -> + (1..count).eachWithIndex { + val, i -> trace(spanCount(SUCCESS)) { sortSpansByStart() serverSpan(it) @@ -636,7 +654,9 @@ abstract class HttpServerTest extends WithHttpServer { } and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { tags == DSM_EDGE_TAGS } @@ -679,7 +699,9 @@ abstract class HttpServerTest extends WithHttpServer { } and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { tags == DSM_EDGE_TAGS } @@ -724,7 +746,9 @@ abstract class HttpServerTest extends WithHttpServer { } and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { tags == DSM_EDGE_TAGS } @@ -767,7 +791,9 @@ abstract class HttpServerTest extends WithHttpServer { and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { tags == DSM_EDGE_TAGS } @@ -782,8 +808,10 @@ abstract class HttpServerTest extends WithHttpServer { def "test baggage span tags are properly added"() { setup: def recordedBaggageTags = [:] - TEST_WRITER.metadataConsumer = { Metadata md -> - md.baggage.forEach { k, v -> + TEST_WRITER.metadataConsumer = { + Metadata md -> + md.baggage.forEach { + k, v -> // record non-internal baggage sent to agent as trace metadata if (!k.startsWith("_dd.")) { recordedBaggageTags.put(k, v) @@ -828,7 +856,9 @@ abstract class HttpServerTest extends WithHttpServer { and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { tags == DSM_EDGE_TAGS } @@ -876,7 +906,9 @@ abstract class HttpServerTest extends WithHttpServer { and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { tags == DSM_EDGE_TAGS } @@ -918,7 +950,9 @@ abstract class HttpServerTest extends WithHttpServer { and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { tags == DSM_EDGE_TAGS } @@ -972,7 +1006,9 @@ abstract class HttpServerTest extends WithHttpServer { and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { tags == DSM_EDGE_TAGS } @@ -1019,7 +1055,9 @@ abstract class HttpServerTest extends WithHttpServer { and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { tags == DSM_EDGE_TAGS } @@ -1042,12 +1080,16 @@ abstract class HttpServerTest extends WithHttpServer { } then: - DDSpan span = TEST_WRITER.flatten().find { it.operationName == 'appsec-span' } + DDSpan span = TEST_WRITER.flatten().find { + it.operationName == 'appsec-span' + } span.getTag(IG_PATH_PARAMS_TAG) == expectedIGPathParams() and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { tags == DSM_EDGE_TAGS } @@ -1090,7 +1132,9 @@ abstract class HttpServerTest extends WithHttpServer { and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { tags == DSM_EDGE_TAGS } @@ -1136,7 +1180,9 @@ abstract class HttpServerTest extends WithHttpServer { and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { tags == DSM_EDGE_TAGS } @@ -1176,7 +1222,9 @@ abstract class HttpServerTest extends WithHttpServer { and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { tags == DSM_EDGE_TAGS } @@ -1219,7 +1267,9 @@ abstract class HttpServerTest extends WithHttpServer { and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { tags == DSM_EDGE_TAGS } @@ -1260,7 +1310,9 @@ abstract class HttpServerTest extends WithHttpServer { and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { tags == DSM_EDGE_TAGS } @@ -1301,7 +1353,9 @@ abstract class HttpServerTest extends WithHttpServer { and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { tags == DSM_EDGE_TAGS } @@ -1341,7 +1395,9 @@ abstract class HttpServerTest extends WithHttpServer { and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { tags == DSM_EDGE_TAGS } @@ -1358,8 +1414,12 @@ abstract class HttpServerTest extends WithHttpServer { def traces = extraSpan ? 2 : 1 def extraTags = [(IG_RESPONSE_STATUS): String.valueOf(endpoint.status)] as Map if (hasPeerInformation()) { - extraTags.put(IG_PEER_ADDRESS, { it == "127.0.0.1" || it == "0.0.0.0" || it == "0:0:0:0:0:0:0:1" }) - extraTags.put(IG_PEER_PORT, { Integer.parseInt(it as String) instanceof Integer }) + extraTags.put(IG_PEER_ADDRESS, { + it == "127.0.0.1" || it == "0.0.0.0" || it == "0:0:0:0:0:0:0:1" + }) + extraTags.put(IG_PEER_PORT, { + Integer.parseInt(it as String) instanceof Integer + }) } extraTags.put(IG_RESPONSE_HEADER_TAG, IG_RESPONSE_HEADER_VALUE) @@ -1395,7 +1455,9 @@ abstract class HttpServerTest extends WithHttpServer { and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { tags == DSM_EDGE_TAGS } @@ -1441,7 +1503,9 @@ abstract class HttpServerTest extends WithHttpServer { and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { tags == DSM_EDGE_TAGS } @@ -1473,7 +1537,9 @@ abstract class HttpServerTest extends WithHttpServer { and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { tags == DSM_EDGE_TAGS } @@ -1505,7 +1571,9 @@ abstract class HttpServerTest extends WithHttpServer { and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { tags == DSM_EDGE_TAGS } @@ -1538,7 +1606,9 @@ abstract class HttpServerTest extends WithHttpServer { and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { tags == DSM_EDGE_TAGS } @@ -1570,7 +1640,9 @@ abstract class HttpServerTest extends WithHttpServer { and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { tags == DSM_EDGE_TAGS } @@ -1611,14 +1683,18 @@ abstract class HttpServerTest extends WithHttpServer { then: !trace.isEmpty() - def rootSpan = trace.find { it.parentId == 0 } + def rootSpan = trace.find { + it.parentId == 0 + } assert rootSpan != null rootSpan.tags['http.status_code'] == 418 rootSpan.tags['appsec.blocked'] == 'true' and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { tags == DSM_EDGE_TAGS } @@ -1654,14 +1730,18 @@ abstract class HttpServerTest extends WithHttpServer { then: !trace.isEmpty() - def rootSpan = trace.find { it.parentId == 0 } + def rootSpan = trace.find { + it.parentId == 0 + } assert rootSpan != null final responseBody = rootSpan.getTag('response.body') as String new JsonSlurper().parseText(responseBody) == body and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { tags == DSM_EDGE_TAGS } @@ -1699,7 +1779,9 @@ abstract class HttpServerTest extends WithHttpServer { and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { tags == DSM_EDGE_TAGS } @@ -1735,7 +1817,9 @@ abstract class HttpServerTest extends WithHttpServer { and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { tags == DSM_EDGE_TAGS } @@ -1756,7 +1840,9 @@ abstract class HttpServerTest extends WithHttpServer { then: TEST_WRITER.waitForTraces(1) def trace = TEST_WRITER.get(0) - assert trace.find { it.isError() } == null + assert trace.find { + it.isError() + } == null } def 'test blocking of request for path parameters'() { @@ -1784,14 +1870,18 @@ abstract class HttpServerTest extends WithHttpServer { then: !trace.isEmpty() - def rootSpan = trace.find { it.parentId == 0 } + def rootSpan = trace.find { + it.parentId == 0 + } assert rootSpan != null rootSpan.tags['http.status_code'] == 413 rootSpan.tags['appsec.blocked'] == 'true' and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { tags == DSM_EDGE_TAGS } @@ -1832,8 +1922,12 @@ abstract class HttpServerTest extends WithHttpServer { then: List spans = TEST_WRITER.flatten() - spans.find { it.tags['http.status_code'] == 413 } != null - spans.find { it.tags['appsec.blocked'] == 'true' } != null + spans.find { + it.tags['http.status_code'] == 413 + } != null + spans.find { + it.tags['appsec.blocked'] == 'true' + } != null if (testBlockingErrorTypeSet()) { spans.find { it.error && @@ -1843,7 +1937,9 @@ abstract class HttpServerTest extends WithHttpServer { and: if (isDataStreamsEnabled()) { - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { tags == DSM_EDGE_TAGS } @@ -1917,19 +2013,22 @@ abstract class HttpServerTest extends WithHttpServer { def trace = TEST_WRITER.get(0) then: 'there is an error span' - trace.find { span -> + trace.find { + span -> def errorMsg = span.getTag(DDTags.ERROR_MSG) if (!errorMsg) { return false } "Blocking user with id 'user-to-block'" in errorMsg } != null - trace.find { span -> + trace.find { + span -> span.getTag('appsec.blocked') == 'true' } != null and: 'there is a span with status code 403' - trace.find { span -> + trace.find { + span -> span.httpStatusCode == 403 } != null @@ -1961,7 +2060,9 @@ abstract class HttpServerTest extends WithHttpServer { then: !trace.isEmpty() - def rootSpan = trace.find { it.parentId == 0 } + def rootSpan = trace.find { + it.parentId == 0 + } assert rootSpan != null rootSpan.tags['http.status_code'] == 413 rootSpan.tags['appsec.blocked'] == 'true' @@ -1990,7 +2091,9 @@ abstract class HttpServerTest extends WithHttpServer { then: !trace.isEmpty() - def rootSpan = trace.find { it.parentId == 0 } + def rootSpan = trace.find { + it.parentId == 0 + } assert rootSpan != null rootSpan.tags['http.status_code'] == 301 rootSpan.tags['appsec.blocked'] == 'true' @@ -2019,7 +2122,9 @@ abstract class HttpServerTest extends WithHttpServer { if (isDataStreamsEnabled()) { TEST_DATA_STREAMS_WRITER.waitForGroups(1) } - DDSpan span = TEST_WRITER.flatten().find { it.operationName == 'appsec-span' } + DDSpan span = TEST_WRITER.flatten().find { + it.operationName == 'appsec-span' + } span != null final sessionId = span.tags[IG_SESSION_ID_TAG] sessionId != null @@ -2135,7 +2240,9 @@ abstract class HttpServerTest extends WithHttpServer { static void websocketReceiveSpan(TraceAssert trace, DDSpan handshake, String messageType, int messageLength, int nbOfChunks = 1, Map extraTags = [:]) { websocketSpan(trace, handshake, "websocket.receive", messageType, messageLength, nbOfChunks, true, Config.get().isWebsocketMessagesSeparateTraces() ? null : handshake, - extraTags + [(InstrumentationTags.WEBSOCKET_MESSAGE_RECEIVE_TIME): { Number }]) + extraTags + [(InstrumentationTags.WEBSOCKET_MESSAGE_RECEIVE_TIME): { + Number + }]) } static void websocketCloseSpan(TraceAssert trace, DDSpan handshake, boolean closeStarter, int closeCode, closeReason = null, @@ -2197,9 +2304,13 @@ abstract class HttpServerTest extends WithHttpServer { tag(InstrumentationTags.WEBSOCKET_MESSAGE_FRAMES, nbOfChunks) tag(Tags.PEER_HOSTNAME, handshake.getTag(Tags.PEER_HOSTNAME)) if (Config.get().isWebsocketTagSessionId()) { - tag(InstrumentationTags.WEBSOCKET_SESSION_ID, { it != null }) // it can be an incremental thing + tag(InstrumentationTags.WEBSOCKET_SESSION_ID, { + it != null + }) // it can be an incremental thing + } + extraTags.each { + tag(it.key, it.value) } - extraTags.each { tag(it.key, it.value) } defaultTagsNoPeerService() } } @@ -2211,16 +2322,20 @@ abstract class HttpServerTest extends WithHttpServer { when: final endpoints = EndpointCollector.get().drain().toList() - final discovered = endpoints.findAll { it.path == ServerEndpoint.ENDPOINT_DISCOVERY.path } + final discovered = endpoints.findAll { + it.path == ServerEndpoint.ENDPOINT_DISCOVERY.path + } then: !endpoints.isEmpty() - endpoints.eachWithIndex { Endpoint entry, int i -> + endpoints.eachWithIndex { + Endpoint entry, int i -> assert entry.first == (i == 0) } !discovered.isEmpty() - discovered.eachWithIndex { endpoint, index -> + discovered.eachWithIndex { + endpoint, index -> assert endpoint.path == ServerEndpoint.ENDPOINT_DISCOVERY.path assert endpoint.type == Endpoint.Type.REST assert endpoint.operation == Endpoint.Operation.HTTP_REQUEST @@ -2333,11 +2448,19 @@ abstract class HttpServerTest extends WithHttpServer { "$Tags.PEER_PORT" Integer } if (span.getTag(Tags.PEER_HOST_IPV6) != null) { - "$Tags.PEER_HOST_IPV6" { it == "0:0:0:0:0:0:0:1" || (endpoint == FORWARDED && it == endpoint.body) } - "$Tags.HTTP_CLIENT_IP" { it == "0:0:0:0:0:0:0:1" || (endpoint == FORWARDED && it == endpoint.body) } + "$Tags.PEER_HOST_IPV6" { + it == "0:0:0:0:0:0:0:1" || (endpoint == FORWARDED && it == endpoint.body) + } + "$Tags.HTTP_CLIENT_IP" { + it == "0:0:0:0:0:0:0:1" || (endpoint == FORWARDED && it == endpoint.body) + } } else { - "$Tags.PEER_HOST_IPV4" { it == "127.0.0.1" || (endpoint == FORWARDED && it == endpoint.body) } - "$Tags.HTTP_CLIENT_IP" { it == "127.0.0.1" || (endpoint == FORWARDED && it == endpoint.body) } + "$Tags.PEER_HOST_IPV4" { + it == "127.0.0.1" || (endpoint == FORWARDED && it == endpoint.body) + } + "$Tags.HTTP_CLIENT_IP" { + it == "127.0.0.1" || (endpoint == FORWARDED && it == endpoint.body) + } } } else { "$Tags.HTTP_CLIENT_IP" clientIp @@ -2362,8 +2485,12 @@ abstract class HttpServerTest extends WithHttpServer { if (endpoint.query) { "$DDTags.HTTP_QUERY" expectedQueryTag } - if ({ isDataStreamsEnabled() }) { - "$DDTags.PATHWAY_HASH" { String } + if ({ + isDataStreamsEnabled() + }) { + "$DDTags.PATHWAY_HASH" { + String + } } if (expectedIntegrationName != null) { withCustomIntegrationName(expectedIntegrationName) @@ -2431,7 +2558,8 @@ abstract class HttpServerTest extends WithHttpServer { } as Supplier>) final BiFunction> requestEndedCb = - ({ RequestContext rqCtxt, IGSpanInfo info -> + ({ + RequestContext rqCtxt, IGSpanInfo info -> Context context = rqCtxt.getData(RequestContextSlot.APPSEC) if (context.responseBodyTag) { rqCtxt.traceSegment.setTagTop('response.body', context.responseBody) @@ -2439,7 +2567,8 @@ abstract class HttpServerTest extends WithHttpServer { if (context.extraSpanName) { runUnderTrace(context.extraSpanName, false) { def span = activeSpan() - context.tags.each { key, val -> + context.tags.each { + key, val -> span.setTag(key, val) } } @@ -2447,8 +2576,8 @@ abstract class HttpServerTest extends WithHttpServer { Flow.ResultFlow.empty() } as BiFunction>) - final TriConsumer requestHeaderCb = - { RequestContext rqCtxt, String key, String value -> + final TriConsumer requestHeaderCb = { + RequestContext rqCtxt, String key, String value -> Context context = rqCtxt.getData(RequestContextSlot.APPSEC) if (IG_TEST_HEADER.equalsIgnoreCase(key)) { context.matchingHeaderValue = stringOrEmpty(context.matchingHeaderValue) + value @@ -2480,7 +2609,8 @@ abstract class HttpServerTest extends WithHttpServer { } as TriConsumer final Function> requestHeaderDoneCb = - ({ RequestContext rqCtxt -> + ({ + RequestContext rqCtxt -> Context context = rqCtxt.getData(RequestContextSlot.APPSEC) if (null != context.matchingHeaderValue) { context.doneHeaderValue = stringOrEmpty(context.doneHeaderValue) + context.matchingHeaderValue @@ -2501,7 +2631,8 @@ abstract class HttpServerTest extends WithHttpServer { private static final String EXPECTED = "${QUERY_ENCODED_BOTH.rawPath}?${QUERY_ENCODED_BOTH.rawQuery}" final TriFunction> requestUriRawCb = - ({ RequestContext rqCtxt, String method, URIDataAdapter uri -> + ({ + RequestContext rqCtxt, String method, URIDataAdapter uri -> Context context = rqCtxt.getData(RequestContextSlot.APPSEC) String raw = uri.supportsRaw() ? uri.raw() : '' raw = uri.hasPlusEncodedSpaces() ? raw.replace('+', '%20') : raw @@ -2516,22 +2647,24 @@ abstract class HttpServerTest extends WithHttpServer { } as TriFunction>) final TriFunction> requestClientSocketAddressCb = - ({ RequestContext rqCtxt, String address, Integer port -> + ({ + RequestContext rqCtxt, String address, Integer port -> Context context = rqCtxt.getData(RequestContextSlot.APPSEC) context.tags.put(IG_PEER_ADDRESS, address) context.tags.put(IG_PEER_PORT, String.valueOf(port)) Flow.ResultFlow.empty() } as TriFunction>) - final BiFunction requestBodyStartCb = - { RequestContext rqCtxt, StoredBodySupplier supplier -> + final BiFunction requestBodyStartCb = { + RequestContext rqCtxt, StoredBodySupplier supplier -> Context context = rqCtxt.getData(RequestContextSlot.APPSEC) context.requestBodySupplier = supplier null } as BiFunction final BiFunction> requestBodyEndCb = - ({ RequestContext rqCtxt, StoredBodySupplier supplier -> + ({ + RequestContext rqCtxt, StoredBodySupplier supplier -> Context context = rqCtxt.getData(RequestContextSlot.APPSEC) if (!context.requestBodySupplier.is(supplier)) { throw new RuntimeException("Expected same instance: ${context.requestBodySupplier} and $supplier") @@ -2547,7 +2680,8 @@ abstract class HttpServerTest extends WithHttpServer { } as BiFunction>) final BiFunction> requestBodyObjectCb = - ({ RequestContext rqCtxt, Object obj -> + ({ + RequestContext rqCtxt, Object obj -> if (obj instanceof Map) { obj = obj.collectEntries { [ @@ -2557,8 +2691,12 @@ abstract class HttpServerTest extends WithHttpServer { } } else if (!(obj instanceof String) && !(obj instanceof List)) { obj = obj.properties - .findAll { it.key != 'class' } - .collectEntries { [it.key, it.value instanceof Iterable ? it.value : [it.value]] } + .findAll { + it.key != 'class' + } + .collectEntries { + [it.key, it.value instanceof Iterable ? it.value : [it.value]] + } } rqCtxt.traceSegment.setTagTop('request.body.converted', obj as String) Context context = rqCtxt.getData(RequestContextSlot.APPSEC) @@ -2572,7 +2710,8 @@ abstract class HttpServerTest extends WithHttpServer { } as BiFunction>) final BiFunction> responseBodyObjectCb = - ({ RequestContext rqCtxt, Object obj -> + ({ + RequestContext rqCtxt, Object obj -> String body // we need to extract a JSON representation of the response object, some frameworks classes might need updating // as they might not work with a simple toString() call @@ -2595,14 +2734,15 @@ abstract class HttpServerTest extends WithHttpServer { } as BiFunction>) final BiFunction> responseStartedCb = - ({ RequestContext rqCtxt, Integer resultCode -> + ({ + RequestContext rqCtxt, Integer resultCode -> Context context = rqCtxt.getData(RequestContextSlot.APPSEC) context.tags.put(IG_RESPONSE_STATUS, String.valueOf(resultCode)) Flow.ResultFlow.empty() } as BiFunction>) - final TriConsumer responseHeaderCb = - { RequestContext rqCtxt, String key, String value -> + final TriConsumer responseHeaderCb = { + RequestContext rqCtxt, String key, String value -> Context context = rqCtxt.getData(RequestContextSlot.APPSEC) if (context.responseHeadersInTags) { context.tags["response.header.${key.toLowerCase()}"] = value @@ -2613,7 +2753,8 @@ abstract class HttpServerTest extends WithHttpServer { } as TriConsumer final Function> responseHeaderDoneCb = - ({ RequestContext rqCtxt -> + ({ + RequestContext rqCtxt -> Context context = rqCtxt.getData(RequestContextSlot.APPSEC) if (null != context.igResponseHeaderValue) { context.tags.put(IG_RESPONSE_HEADER_TAG, context.igResponseHeaderValue) @@ -2632,8 +2773,8 @@ abstract class HttpServerTest extends WithHttpServer { } } as Function>) - final BiFunction, Flow> requestParamsCb = - { RequestContext rqCtxt, Map map -> + final BiFunction, Flow> requestParamsCb = { + RequestContext rqCtxt, Map map -> Context context = rqCtxt.getData(RequestContextSlot.APPSEC) if (context.parametersBlock) { return new RbaFlow( @@ -2647,8 +2788,8 @@ abstract class HttpServerTest extends WithHttpServer { Flow.ResultFlow.empty() } as BiFunction, Flow> - final BiFunction> requestSessionCb = - { RequestContext rqCtxt, String sessionId -> + final BiFunction> requestSessionCb = { + RequestContext rqCtxt, String sessionId -> Context context = rqCtxt.getData(RequestContextSlot.APPSEC) if (sessionId != null) { context.extraSpanName = 'appsec-span' @@ -2679,7 +2820,8 @@ abstract class HttpServerTest extends WithHttpServer { } as Supplier>) final BiFunction> requestEndedCb = - ({ RequestContext rqCtxt, IGSpanInfo info -> + ({ + RequestContext rqCtxt, IGSpanInfo info -> Context context = rqCtxt.getData(RequestContextSlot.IAST) assert context != null Flow.ResultFlow.empty() diff --git a/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/log/injection/LogContextInjectionTestBase.groovy b/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/log/injection/LogContextInjectionTestBase.groovy index a4ef34c5527..372841717b4 100644 --- a/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/log/injection/LogContextInjectionTestBase.groovy +++ b/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/log/injection/LogContextInjectionTestBase.groovy @@ -148,6 +148,5 @@ abstract class LogContextInjectionTestBase extends InstrumentationSpecification expect: context == getMap() } - } diff --git a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/baseTest/groovy/AkkaHttpClientInstrumentationTest.groovy b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/baseTest/groovy/AkkaHttpClientInstrumentationTest.groovy index 6ae3c72deaf..7e6cccfb878 100644 --- a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/baseTest/groovy/AkkaHttpClientInstrumentationTest.groovy +++ b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/baseTest/groovy/AkkaHttpClientInstrumentationTest.groovy @@ -170,5 +170,4 @@ class AkkaHttpScalaClientInstrumentationV0ForkedTest extends AkkaHttpScalaClient } class AkkaHttpScalaClientInstrumentationV1ForkedTest extends AkkaHttpScalaClientInstrumentationTest implements TestingGenericHttpNamingConventions.ClientV1{ - } diff --git a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/baseTest/scala/AkkaHttpTestWebServer.scala b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/baseTest/scala/AkkaHttpTestWebServer.scala index c69197df2a3..1e712d1d7aa 100644 --- a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/baseTest/scala/AkkaHttpTestWebServer.scala +++ b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/baseTest/scala/AkkaHttpTestWebServer.scala @@ -177,8 +177,9 @@ object AkkaHttpTestWebServer { endpoint, new Closure[Future[RouteResult]](()) { def doCall(): Future[RouteResult] = { - try inner(())(ctx).fast - .recoverWith(handleException)(ctx.executionContext) + try + inner(())(ctx).fast + .recoverWith(handleException)(ctx.executionContext) catch { case NonFatal(e) => handleException @@ -480,7 +481,7 @@ object AkkaHttpTestWebServer { val toFormDataUnmarshaller = MultipartUnmarshallers.multipartFormDataUnmarshaller val downcastUnmarshaller = Unmarshaller.strict[Multipart.FormData, Multipart.FormData.Strict] { case strict: Multipart.FormData.Strict => strict - case _ => throw new RuntimeException("Expected Strict form data at this point") + case _ => throw new RuntimeException("Expected Strict form data at this point") } toStrictUnmarshaller.andThen(toFormDataUnmarshaller).andThen(downcastUnmarshaller) diff --git a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/appsec/FormDataToStrictInstrumentation.java b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/appsec/FormDataToStrictInstrumentation.java index d5ec4773986..38c8c64170c 100644 --- a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/appsec/FormDataToStrictInstrumentation.java +++ b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/appsec/FormDataToStrictInstrumentation.java @@ -15,7 +15,9 @@ import net.bytebuddy.asm.Advice; import scala.concurrent.duration.FiniteDuration; -/** @see akka.http.scaladsl.model.Multipart.FormData#toStrict(FiniteDuration, Materializer) */ +/** + * @see akka.http.scaladsl.model.Multipart.FormData#toStrict(FiniteDuration, Materializer) + */ @AutoService(InstrumenterModule.class) public class FormDataToStrictInstrumentation extends InstrumenterModule.AppSec implements Instrumenter.ForSingleType, diff --git a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/appsec/MultipartUnmarshallersInstrumentation.java b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/appsec/MultipartUnmarshallersInstrumentation.java index af45bde0fc9..3d74ad319b6 100644 --- a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/appsec/MultipartUnmarshallersInstrumentation.java +++ b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/appsec/MultipartUnmarshallersInstrumentation.java @@ -11,7 +11,9 @@ import datadog.trace.agent.tooling.InstrumenterModule; import net.bytebuddy.asm.Advice; -/** @see MultipartUnmarshallers */ +/** + * @see MultipartUnmarshallers + */ @AutoService(InstrumenterModule.class) public class MultipartUnmarshallersInstrumentation extends InstrumenterModule.AppSec implements Instrumenter.ForKnownTypes, Instrumenter.HasMethodAdvice { diff --git a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/appsec/StrictFormCompanionInstrumentation.java b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/appsec/StrictFormCompanionInstrumentation.java index f9d87fbe954..9ee0eae4bf7 100644 --- a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/appsec/StrictFormCompanionInstrumentation.java +++ b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/appsec/StrictFormCompanionInstrumentation.java @@ -17,7 +17,9 @@ import datadog.trace.agent.tooling.muzzle.Reference; import net.bytebuddy.asm.Advice; -/** @see akka.http.scaladsl.common.StrictForm$#unmarshaller(Unmarshaller, Unmarshaller) */ +/** + * @see akka.http.scaladsl.common.StrictForm$#unmarshaller(Unmarshaller, Unmarshaller) + */ @AutoService(InstrumenterModule.class) public class StrictFormCompanionInstrumentation extends InstrumenterModule.AppSec implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice { diff --git a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.6/build.gradle b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.6/build.gradle index ffbc70668d3..5b8c864eee5 100644 --- a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.6/build.gradle +++ b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.6/build.gradle @@ -22,7 +22,6 @@ muzzle { assertInverse = true } - } repositories { diff --git a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.6/src/test/groovy/AkkaHttpClientInstrumentationTest.groovy b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.6/src/test/groovy/AkkaHttpClientInstrumentationTest.groovy index 7d4513b5570..7df89a233af 100644 --- a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.6/src/test/groovy/AkkaHttpClientInstrumentationTest.groovy +++ b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.6/src/test/groovy/AkkaHttpClientInstrumentationTest.groovy @@ -147,5 +147,4 @@ class AkkaHttpScalaClientInstrumentationV0Test extends AkkaHttpScalaClientInstru } class AkkaHttpScalaClientInstrumentationV1ForkedTest extends AkkaHttpScalaClientInstrumentationTest implements TestingGenericHttpNamingConventions.ClientV1{ - } diff --git a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.6/src/test/scala/AkkaHttpTestWebServer.scala b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.6/src/test/scala/AkkaHttpTestWebServer.scala index c69197df2a3..1e712d1d7aa 100644 --- a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.6/src/test/scala/AkkaHttpTestWebServer.scala +++ b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.6/src/test/scala/AkkaHttpTestWebServer.scala @@ -177,8 +177,9 @@ object AkkaHttpTestWebServer { endpoint, new Closure[Future[RouteResult]](()) { def doCall(): Future[RouteResult] = { - try inner(())(ctx).fast - .recoverWith(handleException)(ctx.executionContext) + try + inner(())(ctx).fast + .recoverWith(handleException)(ctx.executionContext) catch { case NonFatal(e) => handleException @@ -480,7 +481,7 @@ object AkkaHttpTestWebServer { val toFormDataUnmarshaller = MultipartUnmarshallers.multipartFormDataUnmarshaller val downcastUnmarshaller = Unmarshaller.strict[Multipart.FormData, Multipart.FormData.Strict] { case strict: Multipart.FormData.Strict => strict - case _ => throw new RuntimeException("Expected Strict form data at this point") + case _ => throw new RuntimeException("Expected Strict form data at this point") } toStrictUnmarshaller.andThen(toFormDataUnmarshaller).andThen(downcastUnmarshaller) diff --git a/dd-java-agent/instrumentation/avro/src/test/groovy/AvroDatumReaderTest.groovy b/dd-java-agent/instrumentation/avro/src/test/groovy/AvroDatumReaderTest.groovy index e885c778476..4bf935d70b3 100644 --- a/dd-java-agent/instrumentation/avro/src/test/groovy/AvroDatumReaderTest.groovy +++ b/dd-java-agent/instrumentation/avro/src/test/groovy/AvroDatumReaderTest.groovy @@ -61,7 +61,9 @@ class AvroDatumReaderTest extends InstrumentationSpecification { datum.put("floatField", 7.89f) datum.put("doubleField", 1.23e2) datum.put("booleanField", true) - datum.put("bytesField", ByteBuffer.wrap(new byte[]{0x01, 0x02, 0x03})) + datum.put("bytesField", ByteBuffer.wrap(new byte[]{ + 0x01, 0x02, 0x03 + })) datum.put("nullField", null) datum.put("enumField", new GenericData.EnumSymbol(schemaDef.getField("enumField").schema(), "A")) datum.put("fixedField", new GenericData.Fixed(schemaDef.getField("fixedField").schema(), new byte[16])) @@ -148,7 +150,9 @@ class AvroDatumReaderTest extends InstrumentationSpecification { datum.put("floatField", 7.89f) datum.put("doubleField", 1.23e2) datum.put("booleanField", true) - datum.put("bytesField", ByteBuffer.wrap(new byte[]{0x01, 0x02, 0x03})) + datum.put("bytesField", ByteBuffer.wrap(new byte[]{ + 0x01, 0x02, 0x03 + })) datum.put("nullField", null) datum.put("enumField", new GenericData.EnumSymbol(schemaDef.getField("enumField").schema(), "A")) datum.put("fixedField", new GenericData.Fixed(schemaDef.getField("fixedField").schema(), new byte[16])) diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sdk-2.2/src/dsmTest/groovy/Aws2KinesisDataStreamsTest.groovy b/dd-java-agent/instrumentation/aws-java/aws-java-sdk-2.2/src/dsmTest/groovy/Aws2KinesisDataStreamsTest.groovy index 39aba2e2225..29c5f654d15 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sdk-2.2/src/dsmTest/groovy/Aws2KinesisDataStreamsTest.groovy +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sdk-2.2/src/dsmTest/groovy/Aws2KinesisDataStreamsTest.groovy @@ -125,7 +125,11 @@ abstract class Aws2KinesisDataStreamsTest extends VersionedNamingTestBase { boolean executed = false def client = builder // tests that our instrumentation doesn't disturb any overridden configuration - .overrideConfiguration({ watch(it, { executed = true }) }) + .overrideConfiguration({ + watch(it, { + executed = true + }) + }) .endpointOverride(server.address) .region(Region.AP_NORTHEAST_1) .credentialsProvider(CREDENTIALS_PROVIDER) @@ -148,11 +152,14 @@ abstract class Aws2KinesisDataStreamsTest extends VersionedNamingTestBase { and: conditions.eventually { - List results = TEST_DATA_STREAMS_WRITER.groups.findAll { it.parentHash == 0 } + List results = TEST_DATA_STREAMS_WRITER.groups.findAll { + it.parentHash == 0 + } assert results.size() >= 1 def pathwayLatencyCount = 0 def edgeLatencyCount = 0 - results.each { group -> + results.each { + group -> pathwayLatencyCount += group.pathwayLatency.count edgeLatencyCount += group.edgeLatency.count verifyAll(group) { @@ -192,7 +199,9 @@ abstract class Aws2KinesisDataStreamsTest extends VersionedNamingTestBase { "aws.requestId" "$requestId" "aws.stream.name" "somestream" "streamname" "somestream" - "$DDTags.PATHWAY_HASH" { String } + "$DDTags.PATHWAY_HASH" { + String + } peerServiceFrom("aws.stream.name") checkPeerService = true defaultTags(false, checkPeerService) @@ -206,7 +215,9 @@ abstract class Aws2KinesisDataStreamsTest extends VersionedNamingTestBase { where: service | operation | dsmDirection | dsmStatCount | method | path | requestId | builder | call | body - "Kinesis" | "GetRecords" | "in" | 1 | "POST" | "/" | "7a62c49f-347e-4fc4-9331-6e8e7a96aa73" | KinesisClient.builder() | { KinesisClient c -> c.getRecords(GetRecordsRequest.builder().streamARN("arnprefix:stream/somestream").build()) } | """{ + "Kinesis" | "GetRecords" | "in" | 1 | "POST" | "/" | "7a62c49f-347e-4fc4-9331-6e8e7a96aa73" | KinesisClient.builder() | { + KinesisClient c -> c.getRecords(GetRecordsRequest.builder().streamARN("arnprefix:stream/somestream").build()) + } | """{ "MillisBehindLatest": 2100, "NextShardIterator": "AAA", "Records": [ @@ -218,7 +229,9 @@ abstract class Aws2KinesisDataStreamsTest extends VersionedNamingTestBase { } ] }""" - "Kinesis" | "GetRecords" | "in" | 2 | "POST" | "/" | "7a62c49f-347e-4fc4-9331-6e8e7a96aa73" | KinesisClient.builder() | { KinesisClient c -> c.getRecords(GetRecordsRequest.builder().streamARN("arnprefix:stream/somestream").build()) } | """{ + "Kinesis" | "GetRecords" | "in" | 2 | "POST" | "/" | "7a62c49f-347e-4fc4-9331-6e8e7a96aa73" | KinesisClient.builder() | { + KinesisClient c -> c.getRecords(GetRecordsRequest.builder().streamARN("arnprefix:stream/somestream").build()) + } | """{ "MillisBehindLatest": 2100, "NextShardIterator": "AAA", "Records": [ @@ -236,9 +249,15 @@ abstract class Aws2KinesisDataStreamsTest extends VersionedNamingTestBase { } ] }""" - "Kinesis" | "PutRecord" | "out" | 1 | "POST" | "/" | "UNKNOWN" | KinesisClient.builder() | { KinesisClient c -> c.putRecord(PutRecordRequest.builder().streamARN("arnprefix:stream/somestream").data(SdkBytes.fromUtf8String("message")).build()) } | "" - "Kinesis" | "PutRecords" | "out" | 1 | "POST" | "/" | "UNKNOWN" | KinesisClient.builder() | { KinesisClient c -> c.putRecords(PutRecordsRequest.builder().streamARN("arnprefix:stream/somestream").records(PutRecordsRequestEntry.builder().data(SdkBytes.fromUtf8String("message")).build()).build()) } | "" - "Kinesis" | "PutRecords" | "out" | 2 | "POST" | "/" | "UNKNOWN" | KinesisClient.builder() | { KinesisClient c -> c.putRecords(PutRecordsRequest.builder().streamARN("arnprefix:stream/somestream").records(PutRecordsRequestEntry.builder().data(SdkBytes.fromUtf8String("message")).build(), PutRecordsRequestEntry.builder().data(SdkBytes.fromUtf8String("message")).build()).build()) } | "" + "Kinesis" | "PutRecord" | "out" | 1 | "POST" | "/" | "UNKNOWN" | KinesisClient.builder() | { + KinesisClient c -> c.putRecord(PutRecordRequest.builder().streamARN("arnprefix:stream/somestream").data(SdkBytes.fromUtf8String("message")).build()) + } | "" + "Kinesis" | "PutRecords" | "out" | 1 | "POST" | "/" | "UNKNOWN" | KinesisClient.builder() | { + KinesisClient c -> c.putRecords(PutRecordsRequest.builder().streamARN("arnprefix:stream/somestream").records(PutRecordsRequestEntry.builder().data(SdkBytes.fromUtf8String("message")).build()).build()) + } | "" + "Kinesis" | "PutRecords" | "out" | 2 | "POST" | "/" | "UNKNOWN" | KinesisClient.builder() | { + KinesisClient c -> c.putRecords(PutRecordsRequest.builder().streamARN("arnprefix:stream/somestream").records(PutRecordsRequestEntry.builder().data(SdkBytes.fromUtf8String("message")).build(), PutRecordsRequestEntry.builder().data(SdkBytes.fromUtf8String("message")).build()).build()) + } | "" } def "send #operation async request with builder #builder.class.getSimpleName() mocked response"() { @@ -247,7 +266,11 @@ abstract class Aws2KinesisDataStreamsTest extends VersionedNamingTestBase { boolean executed = false def client = builder // tests that our instrumentation doesn't disturb any overridden configuration - .overrideConfiguration({ watch(it, { executed = true }) }) + .overrideConfiguration({ + watch(it, { + executed = true + }) + }) .endpointOverride(server.address) .region(Region.AP_NORTHEAST_1) .credentialsProvider(CREDENTIALS_PROVIDER) @@ -269,11 +292,14 @@ abstract class Aws2KinesisDataStreamsTest extends VersionedNamingTestBase { and: conditions.eventually { - List results = TEST_DATA_STREAMS_WRITER.groups.findAll { it.parentHash == 0 } + List results = TEST_DATA_STREAMS_WRITER.groups.findAll { + it.parentHash == 0 + } assert results.size() >= 1 def pathwayLatencyCount = 0 def edgeLatencyCount = 0 - results.each { group -> + results.each { + group -> pathwayLatencyCount += group.pathwayLatency.count edgeLatencyCount += group.edgeLatency.count verifyAll(group) { @@ -312,7 +338,9 @@ abstract class Aws2KinesisDataStreamsTest extends VersionedNamingTestBase { "aws.requestId" "$requestId" "aws.stream.name" "somestream" "streamname" "somestream" - "$DDTags.PATHWAY_HASH" { String } + "$DDTags.PATHWAY_HASH" { + String + } peerServiceFrom("aws.stream.name") defaultTags(false, true) } @@ -325,7 +353,9 @@ abstract class Aws2KinesisDataStreamsTest extends VersionedNamingTestBase { where: service | operation | dsmDirection | dsmStatCount | method | path | requestId | builder | call | body - "Kinesis" | "GetRecords" | "in" | 1 | "POST" | "/" | "7a62c49f-347e-4fc4-9331-6e8e7a96aa73" | KinesisAsyncClient.builder() | { KinesisAsyncClient c -> c.getRecords(GetRecordsRequest.builder().streamARN("arnprefix:stream/somestream").build()) } | """{ + "Kinesis" | "GetRecords" | "in" | 1 | "POST" | "/" | "7a62c49f-347e-4fc4-9331-6e8e7a96aa73" | KinesisAsyncClient.builder() | { + KinesisAsyncClient c -> c.getRecords(GetRecordsRequest.builder().streamARN("arnprefix:stream/somestream").build()) + } | """{ "MillisBehindLatest": 2100, "NextShardIterator": "AAA", "Records": [ @@ -337,7 +367,9 @@ abstract class Aws2KinesisDataStreamsTest extends VersionedNamingTestBase { } ] }""" - "Kinesis" | "GetRecords" | "in" | 2 | "POST" | "/" | "7a62c49f-347e-4fc4-9331-6e8e7a96aa73" | KinesisAsyncClient.builder() | { KinesisAsyncClient c -> c.getRecords(GetRecordsRequest.builder().streamARN("arnprefix:stream/somestream").build()) } | """{ + "Kinesis" | "GetRecords" | "in" | 2 | "POST" | "/" | "7a62c49f-347e-4fc4-9331-6e8e7a96aa73" | KinesisAsyncClient.builder() | { + KinesisAsyncClient c -> c.getRecords(GetRecordsRequest.builder().streamARN("arnprefix:stream/somestream").build()) + } | """{ "MillisBehindLatest": 2100, "NextShardIterator": "AAA", "Records": [ @@ -355,9 +387,15 @@ abstract class Aws2KinesisDataStreamsTest extends VersionedNamingTestBase { } ] }""" - "Kinesis" | "PutRecord" | "out" | 1 | "POST" | "/" | "UNKNOWN" | KinesisAsyncClient.builder() | { KinesisAsyncClient c -> c.putRecord(PutRecordRequest.builder().streamARN("arnprefix:stream/somestream").data(SdkBytes.fromUtf8String("message")).build()) } | "" - "Kinesis" | "PutRecords" | "out" | 1 | "POST" | "/" | "UNKNOWN" | KinesisAsyncClient.builder() | { KinesisAsyncClient c -> c.putRecords(PutRecordsRequest.builder().streamARN("arnprefix:stream/somestream").records(PutRecordsRequestEntry.builder().data(SdkBytes.fromUtf8String("message")).build()).build()) } | "" - "Kinesis" | "PutRecords" | "out" | 2 | "POST" | "/" | "UNKNOWN" | KinesisAsyncClient.builder() | { KinesisAsyncClient c -> c.putRecords(PutRecordsRequest.builder().streamARN("arnprefix:stream/somestream").records(PutRecordsRequestEntry.builder().data(SdkBytes.fromUtf8String("message")).build(), PutRecordsRequestEntry.builder().data(SdkBytes.fromUtf8String("message")).build()).build()) } | "" + "Kinesis" | "PutRecord" | "out" | 1 | "POST" | "/" | "UNKNOWN" | KinesisAsyncClient.builder() | { + KinesisAsyncClient c -> c.putRecord(PutRecordRequest.builder().streamARN("arnprefix:stream/somestream").data(SdkBytes.fromUtf8String("message")).build()) + } | "" + "Kinesis" | "PutRecords" | "out" | 1 | "POST" | "/" | "UNKNOWN" | KinesisAsyncClient.builder() | { + KinesisAsyncClient c -> c.putRecords(PutRecordsRequest.builder().streamARN("arnprefix:stream/somestream").records(PutRecordsRequestEntry.builder().data(SdkBytes.fromUtf8String("message")).build()).build()) + } | "" + "Kinesis" | "PutRecords" | "out" | 2 | "POST" | "/" | "UNKNOWN" | KinesisAsyncClient.builder() | { + KinesisAsyncClient c -> c.putRecords(PutRecordsRequest.builder().streamARN("arnprefix:stream/somestream").records(PutRecordsRequestEntry.builder().data(SdkBytes.fromUtf8String("message")).build(), PutRecordsRequestEntry.builder().data(SdkBytes.fromUtf8String("message")).build()).build()) + } | "" } } diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sdk-2.2/src/dsmTest/groovy/Aws2SnsDataStreamsTest.groovy b/dd-java-agent/instrumentation/aws-java/aws-java-sdk-2.2/src/dsmTest/groovy/Aws2SnsDataStreamsTest.groovy index a312e4196fe..f5b21944651 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sdk-2.2/src/dsmTest/groovy/Aws2SnsDataStreamsTest.groovy +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sdk-2.2/src/dsmTest/groovy/Aws2SnsDataStreamsTest.groovy @@ -112,7 +112,11 @@ abstract class Aws2SnsDataStreamsTest extends VersionedNamingTestBase { boolean executed = false def client = builder // tests that our instrumentation doesn't disturb any overridden configuration - .overrideConfiguration({ watch(it, { executed = true }) }) + .overrideConfiguration({ + watch(it, { + executed = true + }) + }) .endpointOverride(server.address) .region(Region.AP_NORTHEAST_1) .credentialsProvider(CREDENTIALS_PROVIDER) @@ -136,11 +140,14 @@ abstract class Aws2SnsDataStreamsTest extends VersionedNamingTestBase { and: conditions.eventually { - List results = TEST_DATA_STREAMS_WRITER.groups.findAll { it.parentHash == 0 } + List results = TEST_DATA_STREAMS_WRITER.groups.findAll { + it.parentHash == 0 + } assert results.size() >= 1 def pathwayLatencyCount = 0 def edgeLatencyCount = 0 - results.each { group -> + results.each { + group -> pathwayLatencyCount += group.pathwayLatency.count edgeLatencyCount += group.edgeLatency.count verifyAll(group) { @@ -179,7 +186,9 @@ abstract class Aws2SnsDataStreamsTest extends VersionedNamingTestBase { "aws.requestId" "$requestId" "aws.topic.name" "mytopic" "topicname" "mytopic" - "$DDTags.PATHWAY_HASH" { String } + "$DDTags.PATHWAY_HASH" { + String + } checkPeerService = true urlTags("${server.address}${path}", ExpectedQueryParams.getExpectedQueryParams(operation)) defaultTags(false, checkPeerService) @@ -193,8 +202,12 @@ abstract class Aws2SnsDataStreamsTest extends VersionedNamingTestBase { where: service | operation | dsmDirection | dsmStatCount | method | path | requestId | builder | call | body - "Sns" | "Publish" | "out" | 1 | "POST" | "/" | "7a62c49f-347e-4fc4-9331-6e8e7a96aa73" | SnsClient.builder() | { SnsClient c -> c.publish(PublishRequest.builder().topicArn("arnprefix:mytopic").message("hello").build()) } | """f2edefec-298a-58d7-bcc0-b1bd2077fccb""" - "Sns" | "PublishBatch" | "out" | 2 | "POST" | "/" | "7a62c49f-347e-4fc4-9331-6e8e7a96aa73" | SnsClient.builder() | { SnsClient c -> c.publishBatch(PublishBatchRequest.builder().topicArn("arnprefix:mytopic").publishBatchRequestEntries(PublishBatchRequestEntry.builder().id("1").message("hello").build(), PublishBatchRequestEntry.builder().id("2").message("world").build()).build()) } | """ + "Sns" | "Publish" | "out" | 1 | "POST" | "/" | "7a62c49f-347e-4fc4-9331-6e8e7a96aa73" | SnsClient.builder() | { + SnsClient c -> c.publish(PublishRequest.builder().topicArn("arnprefix:mytopic").message("hello").build()) + } | """f2edefec-298a-58d7-bcc0-b1bd2077fccb""" + "Sns" | "PublishBatch" | "out" | 2 | "POST" | "/" | "7a62c49f-347e-4fc4-9331-6e8e7a96aa73" | SnsClient.builder() | { + SnsClient c -> c.publishBatch(PublishBatchRequest.builder().topicArn("arnprefix:mytopic").publishBatchRequestEntries(PublishBatchRequestEntry.builder().id("1").message("hello").build(), PublishBatchRequestEntry.builder().id("2").message("world").build()).build()) + } | """ 1 4898a3df-db3a-5078-a6a9-fd895f9acb64 @@ -212,7 +225,11 @@ abstract class Aws2SnsDataStreamsTest extends VersionedNamingTestBase { boolean executed = false def client = builder // tests that our instrumentation doesn't disturb any overridden configuration - .overrideConfiguration({ watch(it, { executed = true }) }) + .overrideConfiguration({ + watch(it, { + executed = true + }) + }) .endpointOverride(server.address) .region(Region.AP_NORTHEAST_1) .credentialsProvider(CREDENTIALS_PROVIDER) @@ -234,11 +251,14 @@ abstract class Aws2SnsDataStreamsTest extends VersionedNamingTestBase { and: conditions.eventually { - List results = TEST_DATA_STREAMS_WRITER.groups.findAll { it.parentHash == 0 } + List results = TEST_DATA_STREAMS_WRITER.groups.findAll { + it.parentHash == 0 + } assert results.size() >= 1 def pathwayLatencyCount = 0 def edgeLatencyCount = 0 - results.each { group -> + results.each { + group -> pathwayLatencyCount += group.pathwayLatency.count edgeLatencyCount += group.edgeLatency.count verifyAll(group) { @@ -276,7 +296,9 @@ abstract class Aws2SnsDataStreamsTest extends VersionedNamingTestBase { "aws.requestId" "$requestId" "aws.topic.name" "mytopic" "topicname" "mytopic" - "$DDTags.PATHWAY_HASH" { String } + "$DDTags.PATHWAY_HASH" { + String + } urlTags("${server.address}${path}", ExpectedQueryParams.getExpectedQueryParams(operation)) defaultTags(false, true) } @@ -289,8 +311,12 @@ abstract class Aws2SnsDataStreamsTest extends VersionedNamingTestBase { where: service | operation | dsmDirection | dsmStatCount | method | path | requestId | builder | call | body - "Sns" | "Publish" | "out" | 1 | "POST" | "/" | "7a62c49f-347e-4fc4-9331-6e8e7a96aa73" | SnsAsyncClient.builder() | { SnsAsyncClient c -> c.publish(PublishRequest.builder().topicArn("arnprefix:mytopic").message("hello").build()) } | """f2edefec-298a-58d7-bcc0-b1bd2077fccb""" - "Sns" | "PublishBatch" | "out" | 2 | "POST" | "/" | "7a62c49f-347e-4fc4-9331-6e8e7a96aa73" | SnsAsyncClient.builder() | { SnsAsyncClient c -> c.publishBatch(PublishBatchRequest.builder().topicArn("arnprefix:mytopic").publishBatchRequestEntries(PublishBatchRequestEntry.builder().id("1").message("hello").build(), PublishBatchRequestEntry.builder().id("2").message("world").build()).build()) } | """ + "Sns" | "Publish" | "out" | 1 | "POST" | "/" | "7a62c49f-347e-4fc4-9331-6e8e7a96aa73" | SnsAsyncClient.builder() | { + SnsAsyncClient c -> c.publish(PublishRequest.builder().topicArn("arnprefix:mytopic").message("hello").build()) + } | """f2edefec-298a-58d7-bcc0-b1bd2077fccb""" + "Sns" | "PublishBatch" | "out" | 2 | "POST" | "/" | "7a62c49f-347e-4fc4-9331-6e8e7a96aa73" | SnsAsyncClient.builder() | { + SnsAsyncClient c -> c.publishBatch(PublishBatchRequest.builder().topicArn("arnprefix:mytopic").publishBatchRequestEntries(PublishBatchRequestEntry.builder().id("1").message("hello").build(), PublishBatchRequestEntry.builder().id("2").message("world").build()).build()) + } | """ 1 4898a3df-db3a-5078-a6a9-fd895f9acb64 diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sns-2.0/src/test/groovy/SnsClientTest.groovy b/dd-java-agent/instrumentation/aws-java/aws-java-sns-2.0/src/test/groovy/SnsClientTest.groovy index 1a52006e07f..d09563a85bc 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sns-2.0/src/test/groovy/SnsClientTest.groovy +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sns-2.0/src/test/groovy/SnsClientTest.groovy @@ -41,15 +41,15 @@ abstract class SnsClientTest extends VersionedNamingTestBase { LOCALSTACK.start() def endPoint = "http://" + LOCALSTACK.getHost() + ":" + LOCALSTACK.getMappedPort(4566) snsClient = SnsClient.builder() - .endpointOverride(URI.create(endPoint)) - .region(Region.of("us-east-1")) - .credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create("test", "test"))) - .build() + .endpointOverride(URI.create(endPoint)) + .region(Region.of("us-east-1")) + .credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create("test", "test"))) + .build() sqsClient = SqsClient.builder() - .endpointOverride(URI.create(endPoint)) - .region(Region.of("us-east-1")) - .credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create("test", "test"))) - .build() + .endpointOverride(URI.create(endPoint)) + .region(Region.of("us-east-1")) + .credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create("test", "test"))) + .build() testQueueURL = sqsClient.createQueue { it.queueName("testqueue") }.queueUrl() testQueueARN = sqsClient.getQueueAttributes {it.queueUrl(testQueueURL).attributeNames(QueueAttributeName.QUEUE_ARN)}.attributes().get(QueueAttributeName.QUEUE_ARN) testTopicARN = snsClient.createTopic { it.name("testtopic") }.topicArn() @@ -91,7 +91,9 @@ abstract class SnsClientTest extends VersionedNamingTestBase { def readonlyHeaders = Collections.unmodifiableMap(headers) snsClient.publish(b -> b.message("sometext").topicArn(testTopicARN).messageAttributes(readonlyHeaders)) - def message = sqsClient.receiveMessage { it.queueUrl(testQueueURL).waitTimeSeconds(3) }.messages().get(0) + def message = sqsClient.receiveMessage { + it.queueUrl(testQueueURL).waitTimeSeconds(3) + }.messages().get(0) def messageBody = new JsonSlurper().parseText(message.body()) @@ -193,7 +195,7 @@ abstract class SnsClientTest extends VersionedNamingTestBase { TEST_WRITER.clear() snsClient.publish { req -> req.message("test message") - .topicArn(testTopicARN) + .topicArn(testTopicARN) } def message = sqsClient.receiveMessage { it.queueUrl(testQueueURL).waitTimeSeconds(3) }.messages().get(0) diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sqs-1.0/src/test/groovy/SqsClientTest.groovy b/dd-java-agent/instrumentation/aws-java/aws-java-sqs-1.0/src/test/groovy/SqsClientTest.groovy index 927fcfd110d..28b5169cb54 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sqs-1.0/src/test/groovy/SqsClientTest.groovy +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sqs-1.0/src/test/groovy/SqsClientTest.groovy @@ -411,7 +411,8 @@ abstract class SqsClientTest extends VersionedNamingTestBase { defaultTags(!timeInQueue) } } - if (timeInQueue) { // only v1 has this automatically without legacy disabled + if (timeInQueue) { + // only v1 has this automatically without legacy disabled span { serviceName "sqs-queue" operationName "aws.sqs.deliver" diff --git a/dd-java-agent/instrumentation/axway-api/src/main/java/datadog/trace/instrumentation/axway/AxwayHTTPPluginDecorator.java b/dd-java-agent/instrumentation/axway-api/src/main/java/datadog/trace/instrumentation/axway/AxwayHTTPPluginDecorator.java index ca38cc973f5..148c08eef1b 100644 --- a/dd-java-agent/instrumentation/axway-api/src/main/java/datadog/trace/instrumentation/axway/AxwayHTTPPluginDecorator.java +++ b/dd-java-agent/instrumentation/axway-api/src/main/java/datadog/trace/instrumentation/axway/AxwayHTTPPluginDecorator.java @@ -184,14 +184,18 @@ protected int peerPort(Object serverTransaction) { return getRemoteAddr(serverTransaction).getPort(); } - /** @param serverTransaction instance of {@value #SERVERTRANSACTION_CLASSNAME} */ + /** + * @param serverTransaction instance of {@value #SERVERTRANSACTION_CLASSNAME} + */ @Override protected int status(final Object serverTransaction) { // TODO will be done manually return 0; } - /** @param stateInstance type com.vordel.circuit.net.State */ + /** + * @param stateInstance type com.vordel.circuit.net.State + */ public AgentSpan onTransaction(AgentSpan span, Object stateInstance) { if (span != null) { setStringTagFromStateField(span, Tags.PEER_HOSTNAME, stateInstance, hostField_mh); diff --git a/dd-java-agent/instrumentation/build.gradle b/dd-java-agent/instrumentation/build.gradle index 897b96c6ce1..1702ee7c8f3 100644 --- a/dd-java-agent/instrumentation/build.gradle +++ b/dd-java-agent/instrumentation/build.gradle @@ -98,7 +98,11 @@ dependencies { if (project.gradle.startParameter.taskNames.any { it.endsWith("generateMuzzleReport") }) { apply plugin: 'muzzle' tasks.register('muzzleInstrumentationReport') { - dependsOn(subprojects.collect { p -> p.tasks.matching { it.name == "generateMuzzleReport" } }) + dependsOn(subprojects.collect { p -> + p.tasks.matching { + it.name == "generateMuzzleReport" + } + }) finalizedBy(tasks.named('mergeMuzzleReports')) } } diff --git a/dd-java-agent/instrumentation/commons-fileupload-1.5/src/test/java/foo/bar/smoketest/MockHttpServletRequest.java b/dd-java-agent/instrumentation/commons-fileupload-1.5/src/test/java/foo/bar/smoketest/MockHttpServletRequest.java index 3cd7c56986b..2ed2096ad73 100644 --- a/dd-java-agent/instrumentation/commons-fileupload-1.5/src/test/java/foo/bar/smoketest/MockHttpServletRequest.java +++ b/dd-java-agent/instrumentation/commons-fileupload-1.5/src/test/java/foo/bar/smoketest/MockHttpServletRequest.java @@ -166,7 +166,9 @@ public RequestDispatcher getRequestDispatcher(String var1) { } @Override - /** @deprecated */ + /** + * @deprecated + */ public String getRealPath(String var1) { return null; } @@ -348,7 +350,9 @@ public boolean isRequestedSessionIdFromURL() { } @Override - /** @deprecated */ + /** + * @deprecated + */ public boolean isRequestedSessionIdFromUrl() { return false; } diff --git a/dd-java-agent/instrumentation/couchbase/couchbase-2.0/src/test/groovy/CouchbaseAsyncClientTest.groovy b/dd-java-agent/instrumentation/couchbase/couchbase-2.0/src/test/groovy/CouchbaseAsyncClientTest.groovy index 8df2f6caeb0..3042c820235 100644 --- a/dd-java-agent/instrumentation/couchbase/couchbase-2.0/src/test/groovy/CouchbaseAsyncClientTest.groovy +++ b/dd-java-agent/instrumentation/couchbase/couchbase-2.0/src/test/groovy/CouchbaseAsyncClientTest.groovy @@ -182,7 +182,6 @@ abstract class CouchbaseAsyncClientTest extends AbstractCouchbaseTest { } class CouchbaseAsyncClientV0ForkedTest extends CouchbaseAsyncClientTest { - } class CouchbaseAsyncClientV1ForkedTest extends CouchbaseAsyncClientTest { diff --git a/dd-java-agent/instrumentation/couchbase/couchbase-2.0/src/test/groovy/CouchbaseClientTest.groovy b/dd-java-agent/instrumentation/couchbase/couchbase-2.0/src/test/groovy/CouchbaseClientTest.groovy index 47578cf1b4e..933caa825c8 100644 --- a/dd-java-agent/instrumentation/couchbase/couchbase-2.0/src/test/groovy/CouchbaseClientTest.groovy +++ b/dd-java-agent/instrumentation/couchbase/couchbase-2.0/src/test/groovy/CouchbaseClientTest.groovy @@ -124,7 +124,6 @@ abstract class CouchbaseClientTest extends AbstractCouchbaseTest { } class CouchbaseClientV0ForkedTest extends CouchbaseClientTest { - } class CouchbaseClientV1ForkedTest extends CouchbaseClientTest { diff --git a/dd-java-agent/instrumentation/couchbase/couchbase-2.0/src/test/groovy/springdata/CouchbaseConfig.groovy b/dd-java-agent/instrumentation/couchbase/couchbase-2.0/src/test/groovy/springdata/CouchbaseConfig.groovy index d3be0094454..edd6e1036c0 100644 --- a/dd-java-agent/instrumentation/couchbase/couchbase-2.0/src/test/groovy/springdata/CouchbaseConfig.groovy +++ b/dd-java-agent/instrumentation/couchbase/couchbase-2.0/src/test/groovy/springdata/CouchbaseConfig.groovy @@ -37,5 +37,4 @@ class CouchbaseConfig extends AbstractCouchbaseConfiguration { protected String getBucketPassword() { return bucketSettings.password() } - } diff --git a/dd-java-agent/instrumentation/finatra-2.9/src/latestDepTest/groovy/FinatraServer270Test.groovy b/dd-java-agent/instrumentation/finatra-2.9/src/latestDepTest/groovy/FinatraServer270Test.groovy index f5294fe4b49..a1026140298 100644 --- a/dd-java-agent/instrumentation/finatra-2.9/src/latestDepTest/groovy/FinatraServer270Test.groovy +++ b/dd-java-agent/instrumentation/finatra-2.9/src/latestDepTest/groovy/FinatraServer270Test.groovy @@ -52,7 +52,6 @@ class FinatraServer270Test extends HttpServerTest { } void onEntry(Event event) { - } @Override diff --git a/dd-java-agent/instrumentation/grizzly/grizzly-http-2.3.20/src/main/java/datadog/trace/instrumentation/grizzlyhttp232/GrizzlyHttpBlockingHelper.java b/dd-java-agent/instrumentation/grizzly/grizzly-http-2.3.20/src/main/java/datadog/trace/instrumentation/grizzlyhttp232/GrizzlyHttpBlockingHelper.java index d16cee1bbff..3ac61b25ac7 100644 --- a/dd-java-agent/instrumentation/grizzly/grizzly-http-2.3.20/src/main/java/datadog/trace/instrumentation/grizzlyhttp232/GrizzlyHttpBlockingHelper.java +++ b/dd-java-agent/instrumentation/grizzly/grizzly-http-2.3.20/src/main/java/datadog/trace/instrumentation/grizzlyhttp232/GrizzlyHttpBlockingHelper.java @@ -36,7 +36,9 @@ public class GrizzlyHttpBlockingHelper { private static final Logger log = LoggerFactory.getLogger(GrizzlyHttpBlockingHelper.class); - /** @see HttpServerFilter#encodeHttpPacket(FilterChainContext, HttpPacket) */ + /** + * @see HttpServerFilter#encodeHttpPacket(FilterChainContext, HttpPacket) + */ private static final MethodHandle ENCODE_HTTP_PACKET; private static final CompletionHandler CLOSE_COMPLETION_HANDLER = new CloseCompletionHandler(); diff --git a/dd-java-agent/instrumentation/grizzly/grizzly-http-2.3.20/src/test/groovy/GrizzlyTest.groovy b/dd-java-agent/instrumentation/grizzly/grizzly-http-2.3.20/src/test/groovy/GrizzlyTest.groovy index 8b1c2f39920..b10c86f6fff 100644 --- a/dd-java-agent/instrumentation/grizzly/grizzly-http-2.3.20/src/test/groovy/GrizzlyTest.groovy +++ b/dd-java-agent/instrumentation/grizzly/grizzly-http-2.3.20/src/test/groovy/GrizzlyTest.groovy @@ -75,5 +75,4 @@ class GrizzlyTest extends HttpServerTest { Map expectedIGPathParams() { [id: ['123']] } - } diff --git a/dd-java-agent/instrumentation/hazelcast/hazelcast-3.9/src/test/groovy/test/hazelcast/v39/HazelcastTest.groovy b/dd-java-agent/instrumentation/hazelcast/hazelcast-3.9/src/test/groovy/test/hazelcast/v39/HazelcastTest.groovy index b25e9838b02..3297955abd8 100644 --- a/dd-java-agent/instrumentation/hazelcast/hazelcast-3.9/src/test/groovy/test/hazelcast/v39/HazelcastTest.groovy +++ b/dd-java-agent/instrumentation/hazelcast/hazelcast-3.9/src/test/groovy/test/hazelcast/v39/HazelcastTest.groovy @@ -286,7 +286,6 @@ abstract class HazelcastTest extends VersionedNamingTestBase { hazelcastTrace(it, "Set.add $randomName") hazelcastTrace(it, "Set.add $randomName") } - } def "list"() { diff --git a/dd-java-agent/instrumentation/hibernate/core-3.3/src/test/groovy/QueryTest.groovy b/dd-java-agent/instrumentation/hibernate/core-3.3/src/test/groovy/QueryTest.groovy index 367dbb8d9a3..6f78c189904 100644 --- a/dd-java-agent/instrumentation/hibernate/core-3.3/src/test/groovy/QueryTest.groovy +++ b/dd-java-agent/instrumentation/hibernate/core-3.3/src/test/groovy/QueryTest.groovy @@ -219,5 +219,4 @@ class QueryTest extends AbstractHibernateTest { } } } - } diff --git a/dd-java-agent/instrumentation/hibernate/core-3.3/src/test/groovy/SessionTest.groovy b/dd-java-agent/instrumentation/hibernate/core-3.3/src/test/groovy/SessionTest.groovy index 91905803796..430ff87cb32 100644 --- a/dd-java-agent/instrumentation/hibernate/core-3.3/src/test/groovy/SessionTest.groovy +++ b/dd-java-agent/instrumentation/hibernate/core-3.3/src/test/groovy/SessionTest.groovy @@ -285,7 +285,6 @@ class SessionTest extends AbstractHibernateTest { } } } - } where: @@ -360,7 +359,6 @@ class SessionTest extends AbstractHibernateTest { } } } - } } @@ -433,7 +431,6 @@ class SessionTest extends AbstractHibernateTest { defaultTags() } } - } } diff --git a/dd-java-agent/instrumentation/hibernate/core-4.0/src/test/groovy/QueryTest.groovy b/dd-java-agent/instrumentation/hibernate/core-4.0/src/test/groovy/QueryTest.groovy index 99666ef90d5..0b52024e15a 100644 --- a/dd-java-agent/instrumentation/hibernate/core-4.0/src/test/groovy/QueryTest.groovy +++ b/dd-java-agent/instrumentation/hibernate/core-4.0/src/test/groovy/QueryTest.groovy @@ -219,5 +219,4 @@ class QueryTest extends AbstractHibernateTest { } } } - } diff --git a/dd-java-agent/instrumentation/hibernate/core-4.0/src/test/groovy/SessionTest.groovy b/dd-java-agent/instrumentation/hibernate/core-4.0/src/test/groovy/SessionTest.groovy index b0ebd371515..951f27cc952 100644 --- a/dd-java-agent/instrumentation/hibernate/core-4.0/src/test/groovy/SessionTest.groovy +++ b/dd-java-agent/instrumentation/hibernate/core-4.0/src/test/groovy/SessionTest.groovy @@ -209,7 +209,6 @@ class SessionTest extends AbstractHibernateTest { } } } - } where: @@ -284,7 +283,6 @@ class SessionTest extends AbstractHibernateTest { } } } - } } @@ -357,7 +355,6 @@ class SessionTest extends AbstractHibernateTest { defaultTags() } } - } } diff --git a/dd-java-agent/instrumentation/http-url-connection/src/test/groovy/HttpUrlConnectionTest.groovy b/dd-java-agent/instrumentation/http-url-connection/src/test/groovy/HttpUrlConnectionTest.groovy index 85203268014..77f7c9b2269 100644 --- a/dd-java-agent/instrumentation/http-url-connection/src/test/groovy/HttpUrlConnectionTest.groovy +++ b/dd-java-agent/instrumentation/http-url-connection/src/test/groovy/HttpUrlConnectionTest.groovy @@ -365,7 +365,8 @@ abstract class HttpUrlConnectionTest extends HttpClientTest { @IgnoreIf({ System.getProperty("java.vm.name").contains("IBM J9 VM") || // TODO Java 17: we can't access HttpsURLConnectionImpl on Java 17 - new BigDecimal(System.getProperty("java.specification.version")).isAtLeast(17.0) }) + new BigDecimal(System.getProperty("java.specification.version")).isAtLeast(17.0) + }) def "Make sure we can load HttpsURLConnectionImpl"() { when: def instance = new HttpsURLConnectionImpl(null, null, null) diff --git a/dd-java-agent/instrumentation/ignite-2.0/src/test/groovy/test/IgniteCacheAsyncTest.groovy b/dd-java-agent/instrumentation/ignite-2.0/src/test/groovy/test/IgniteCacheAsyncTest.groovy index f305dc13e10..1fff5cbdfa6 100644 --- a/dd-java-agent/instrumentation/ignite-2.0/src/test/groovy/test/IgniteCacheAsyncTest.groovy +++ b/dd-java-agent/instrumentation/ignite-2.0/src/test/groovy/test/IgniteCacheAsyncTest.groovy @@ -35,7 +35,6 @@ abstract class IgniteCacheAsyncTest extends AbstractIgniteTest { def future = cache.putAsync("abc", "123") return future.get(1, TimeUnit.SECONDS) - } then: diff --git a/dd-java-agent/instrumentation/ignite-2.0/src/test/groovy/test/IgniteCacheSyncTest.groovy b/dd-java-agent/instrumentation/ignite-2.0/src/test/groovy/test/IgniteCacheSyncTest.groovy index dffa9e1f443..a5916ddf94c 100644 --- a/dd-java-agent/instrumentation/ignite-2.0/src/test/groovy/test/IgniteCacheSyncTest.groovy +++ b/dd-java-agent/instrumentation/ignite-2.0/src/test/groovy/test/IgniteCacheSyncTest.groovy @@ -305,7 +305,6 @@ abstract class IgniteCacheSyncTest extends AbstractIgniteTest { farCache?.close() nearCache?.close() } - } class IgniteCacheSyncV0ForkedTest extends IgniteCacheSyncTest { diff --git a/dd-java-agent/instrumentation/jakarta-jms/src/test/groovy/JMS2Test.groovy b/dd-java-agent/instrumentation/jakarta-jms/src/test/groovy/JMS2Test.groovy index e8f8ec7050b..a3f0d05ae03 100644 --- a/dd-java-agent/instrumentation/jakarta-jms/src/test/groovy/JMS2Test.groovy +++ b/dd-java-agent/instrumentation/jakarta-jms/src/test/groovy/JMS2Test.groovy @@ -211,7 +211,6 @@ class JMS2Test extends InstrumentationSpecification { cleanup: producer.close() consumer.close() - } static producerTrace(ListWriterAssert writer, String jmsResourceName) { diff --git a/dd-java-agent/instrumentation/jakarta-jms/src/test/groovy/MDBBad.groovy b/dd-java-agent/instrumentation/jakarta-jms/src/test/groovy/MDBBad.groovy index 382ca76a8dc..1dbb6b1c643 100644 --- a/dd-java-agent/instrumentation/jakarta-jms/src/test/groovy/MDBBad.groovy +++ b/dd-java-agent/instrumentation/jakarta-jms/src/test/groovy/MDBBad.groovy @@ -9,7 +9,6 @@ class MDBBad implements MessageListener { throw new Exception("null message") } } - } diff --git a/dd-java-agent/instrumentation/java/java-concurrent/java-concurrent-1.8/src/test/groovy/CrossedContextTest.groovy b/dd-java-agent/instrumentation/java/java-concurrent/java-concurrent-1.8/src/test/groovy/CrossedContextTest.groovy index b3eb6690e92..66ee256edb4 100644 --- a/dd-java-agent/instrumentation/java/java-concurrent/java-concurrent-1.8/src/test/groovy/CrossedContextTest.groovy +++ b/dd-java-agent/instrumentation/java/java-concurrent/java-concurrent-1.8/src/test/groovy/CrossedContextTest.groovy @@ -138,5 +138,4 @@ class CrossedContextTest extends InstrumentationSpecification { // new UnorderedThreadPoolEventExecutor(10) ] } - } diff --git a/dd-java-agent/instrumentation/java/java-io-1.8/src/test/groovy/datadog/trace/instrumentation/java/io/StringReaderCallSiteTest.groovy b/dd-java-agent/instrumentation/java/java-io-1.8/src/test/groovy/datadog/trace/instrumentation/java/io/StringReaderCallSiteTest.groovy index e106adfb98f..b34a5944a3e 100644 --- a/dd-java-agent/instrumentation/java/java-io-1.8/src/test/groovy/datadog/trace/instrumentation/java/io/StringReaderCallSiteTest.groovy +++ b/dd-java-agent/instrumentation/java/java-io-1.8/src/test/groovy/datadog/trace/instrumentation/java/io/StringReaderCallSiteTest.groovy @@ -32,9 +32,9 @@ class StringReaderCallSiteTest extends BaseIoCallSiteTest { then: // new StringReader 3 * iastModule.taintObjectIfTainted( - { it -> !(it instanceof TestCustomStringReader) }, - { String it -> - it.startsWith("New") } + { it -> !(it instanceof TestCustomStringReader) }, { String it -> + it.startsWith("New") + } ) // super(...) diff --git a/dd-java-agent/instrumentation/java/java-net/java-net-1.8/src/main/java/datadog/trace/instrumentation/java/net/URICallSite.java b/dd-java-agent/instrumentation/java/java-net/java-net-1.8/src/main/java/datadog/trace/instrumentation/java/net/URICallSite.java index b0244563f59..e47ee8ea613 100644 --- a/dd-java-agent/instrumentation/java/java-net/java-net-1.8/src/main/java/datadog/trace/instrumentation/java/net/URICallSite.java +++ b/dd-java-agent/instrumentation/java/java-net/java-net-1.8/src/main/java/datadog/trace/instrumentation/java/net/URICallSite.java @@ -75,7 +75,9 @@ public static String afterToString( return result; } - /** @see #afterToString(URI, String) */ + /** + * @see #afterToString(URI, String) + */ @CallSite.After("java.lang.String java.net.URI.toASCIIString()") public static String afterToASCIIString( @CallSite.This final URI url, @CallSite.Return final String result) { @@ -91,7 +93,9 @@ public static String afterToASCIIString( return result; } - /** @see #afterToString(URI, String) */ + /** + * @see #afterToString(URI, String) + */ @CallSite.After("java.net.URI java.net.URI.normalize()") public static URI afterNormalize( @CallSite.This final URI url, @CallSite.Return final URI result) { diff --git a/dd-java-agent/instrumentation/java/java-net/java-net-1.8/src/main/java/datadog/trace/instrumentation/java/net/URLCallSite.java b/dd-java-agent/instrumentation/java/java-net/java-net-1.8/src/main/java/datadog/trace/instrumentation/java/net/URLCallSite.java index bf7bb6b0cf1..f3d9803a10a 100644 --- a/dd-java-agent/instrumentation/java/java-net/java-net-1.8/src/main/java/datadog/trace/instrumentation/java/net/URLCallSite.java +++ b/dd-java-agent/instrumentation/java/java-net/java-net-1.8/src/main/java/datadog/trace/instrumentation/java/net/URLCallSite.java @@ -60,7 +60,9 @@ public static String afterToString( return result; } - /** @see #afterToString(URL, String) */ + /** + * @see #afterToString(URL, String) + */ @Propagation @CallSite.After("java.lang.String java.net.URL.toExternalForm()") public static String afterToExternalForm( @@ -77,7 +79,9 @@ public static String afterToExternalForm( return result; } - /** @see #afterToString(URL, String) */ + /** + * @see #afterToString(URL, String) + */ @Propagation @CallSite.After("java.net.URI java.net.URL.toURI()") public static URI afterToURI(@CallSite.This final URL url, @CallSite.Return final URI result) { diff --git a/dd-java-agent/instrumentation/jax-rs-annotations-2/src/test/groovy/JaxRsFilterTest.groovy b/dd-java-agent/instrumentation/jax-rs-annotations-2/src/test/groovy/JaxRsFilterTest.groovy index 7027e0bf100..eb1dc3e71cd 100644 --- a/dd-java-agent/instrumentation/jax-rs-annotations-2/src/test/groovy/JaxRsFilterTest.groovy +++ b/dd-java-agent/instrumentation/jax-rs-annotations-2/src/test/groovy/JaxRsFilterTest.groovy @@ -236,5 +236,4 @@ class ResteasyFilterTest extends JaxRsFilterTest { return [response.contentAsString, response.status] } - } diff --git a/dd-java-agent/instrumentation/jdbc/src/test/groovy/JDBCInstrumentationTestBase.groovy b/dd-java-agent/instrumentation/jdbc/src/test/groovy/JDBCInstrumentationTestBase.groovy index 6eed4c69686..3e270e1b5bf 100644 --- a/dd-java-agent/instrumentation/jdbc/src/test/groovy/JDBCInstrumentationTestBase.groovy +++ b/dd-java-agent/instrumentation/jdbc/src/test/groovy/JDBCInstrumentationTestBase.groovy @@ -647,7 +647,11 @@ abstract class JDBCInstrumentationTest extends VersionedNamingTestBase { datasource.getConnection().close() then: - !TEST_WRITER.any { it.any { it.operationName.toString() == "database.connection" } } + !TEST_WRITER.any { + it.any { + it.operationName.toString() == "database.connection" + } + } TEST_WRITER.clear() when: @@ -1000,12 +1004,12 @@ abstract class JDBCInstrumentationTest extends VersionedNamingTestBase { Driver newDriver(String driverClass) { return ((Driver) Class.forName(driverClass) - .getDeclaredConstructor().newInstance()) + .getDeclaredConstructor().newInstance()) } Connection connect(String driverClass, String url, Properties properties) { return newDriver(driverClass) - .connect(url, properties) + .connect(url, properties) } @Override diff --git a/dd-java-agent/instrumentation/jdbc/src/test/groovy/RemoteJDBCInstrumentationTest.groovy b/dd-java-agent/instrumentation/jdbc/src/test/groovy/RemoteJDBCInstrumentationTest.groovy index 92a7ceb50d7..9f6e422c19e 100644 --- a/dd-java-agent/instrumentation/jdbc/src/test/groovy/RemoteJDBCInstrumentationTest.groovy +++ b/dd-java-agent/instrumentation/jdbc/src/test/groovy/RemoteJDBCInstrumentationTest.groovy @@ -34,7 +34,9 @@ import static datadog.trace.api.config.TraceInstrumentationConfig.DB_CLIENT_HOST import static datadog.trace.api.config.TraceInstrumentationConfig.DB_DBM_TRACE_PREPARED_STATEMENTS // workaround for SSLHandShakeException on J9 only with Hikari/MySQL -@Requires({ !System.getProperty("java.vendor").contains("IBM") }) +@Requires({ + !System.getProperty("java.vendor").contains("IBM") +}) abstract class RemoteJDBCInstrumentationTest extends VersionedNamingTestBase { static final String POSTGRESQL = "postgresql" static final String MYSQL = "mysql" diff --git a/dd-java-agent/instrumentation/jetty/jetty-common/src/main/java/datadog/trace/instrumentation/jetty9/HandleVisitor.java b/dd-java-agent/instrumentation/jetty/jetty-common/src/main/java/datadog/trace/instrumentation/jetty9/HandleVisitor.java index 6fe101a3a10..096c656cb7e 100644 --- a/dd-java-agent/instrumentation/jetty/jetty-common/src/main/java/datadog/trace/instrumentation/jetty9/HandleVisitor.java +++ b/dd-java-agent/instrumentation/jetty/jetty-common/src/main/java/datadog/trace/instrumentation/jetty9/HandleVisitor.java @@ -109,6 +109,7 @@ */ public class HandleVisitor extends MethodVisitor { private static final Logger log = LoggerFactory.getLogger(HandleVisitor.class); + /** Whether the handle() method injection was successful . */ private boolean success; diff --git a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-11.0/src/testFixtures/groovy/JettyServer.groovy b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-11.0/src/testFixtures/groovy/JettyServer.groovy index e033ca35713..dcf0c30a4c0 100644 --- a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-11.0/src/testFixtures/groovy/JettyServer.groovy +++ b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-11.0/src/testFixtures/groovy/JettyServer.groovy @@ -119,7 +119,9 @@ class JettyServer implements WebsocketServer { Lock.activeSession.getBasicRemote().sendBinary(ByteBuffer.wrap(binaries[0])) } else { try (def stream = Lock.activeSession.getBasicRemote().getSendStream()) { - binaries.each { stream.write(it) } + binaries.each { + stream.write(it) + } } } } @@ -172,7 +174,6 @@ class JettyServer implements WebsocketServer { @OnMessage void onText(String text, Session session, boolean last) { runUnderTrace("onRead", {}) - } @OnMessage @@ -191,18 +192,18 @@ class JettyServer implements WebsocketServer { @Override void onOpen(Session session, EndpointConfig endpointConfig) { session.addMessageHandler(new MessageHandler.Partial() { - @Override - void onMessage(String s, boolean b) { - runUnderTrace("onRead", {}) - } - }) + @Override + void onMessage(String s, boolean b) { + runUnderTrace("onRead", {}) + } + }) session.addMessageHandler(new MessageHandler.Whole() { - @Override - void onMessage(ByteBuffer buffer) { - runUnderTrace("onRead", {}) - } - }) + @Override + void onMessage(ByteBuffer buffer) { + runUnderTrace("onRead", {}) + } + }) Lock.activeSession = session synchronized (Lock) { Lock.notifyAll() diff --git a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-12.0/src/test/ee10/groovy/JettyServer.groovy b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-12.0/src/test/ee10/groovy/JettyServer.groovy index 36052bfb261..b8dc4a23007 100644 --- a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-12.0/src/test/ee10/groovy/JettyServer.groovy +++ b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-12.0/src/test/ee10/groovy/JettyServer.groovy @@ -63,10 +63,10 @@ class JettyServer implements WebsocketServer { ServletContextHandler handler = new ServletContextHandler("/context-path") handler.errorHandler = errorHandler HttpServerTest.ServerEndpoint.values() - .findAll { !(it in [NOT_FOUND, UNKNOWN]) } - .each { - handler.servletHandler.addServletWithMapping(servlet, it.path) - } + .findAll { !(it in [NOT_FOUND, UNKNOWN]) } + .each { + handler.servletHandler.addServletWithMapping(servlet, it.path) + } handler } @@ -90,7 +90,9 @@ class JettyServer implements WebsocketServer { Lock.activeSession.getBasicRemote().sendBinary(ByteBuffer.wrap(binaries[0])) } else { try (def stream = Lock.activeSession.getBasicRemote().getSendStream()) { - binaries.each { stream.write(it) } + binaries.each { + stream.write(it) + } } } } @@ -143,7 +145,6 @@ class JettyServer implements WebsocketServer { @OnMessage void onText(String text, Session session, boolean last) { runUnderTrace("onRead", {}) - } @OnMessage @@ -162,18 +163,18 @@ class JettyServer implements WebsocketServer { @Override void onOpen(Session session, EndpointConfig endpointConfig) { session.addMessageHandler(new MessageHandler.Partial() { - @Override - void onMessage(String s, boolean b) { - runUnderTrace("onRead", {}) - } - }) + @Override + void onMessage(String s, boolean b) { + runUnderTrace("onRead", {}) + } + }) session.addMessageHandler(new MessageHandler.Whole() { - @Override - void onMessage(ByteBuffer buffer) { - runUnderTrace("onRead", {}) - } - }) + @Override + void onMessage(ByteBuffer buffer) { + runUnderTrace("onRead", {}) + } + }) Lock.activeSession = session synchronized (Lock) { Lock.notifyAll() diff --git a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-12.0/src/test/ee8/groovy/JettyServer.groovy b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-12.0/src/test/ee8/groovy/JettyServer.groovy index b7f11c3238e..a176b24b646 100644 --- a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-12.0/src/test/ee8/groovy/JettyServer.groovy +++ b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-12.0/src/test/ee8/groovy/JettyServer.groovy @@ -70,17 +70,17 @@ class JettyServer implements WebsocketServer { handler.sessionHandler = new EE8SessionHandler() handler.errorHandler = errorHandler HttpServerTest.ServerEndpoint.values() - .findAll { !(it in [NOT_FOUND, UNKNOWN]) } - .each { - handler.servletHandler.addServletWithMapping(servlet, it.path) - } + .findAll { !(it in [NOT_FOUND, UNKNOWN]) } + .each { + handler.servletHandler.addServletWithMapping(servlet, it.path) + } handler } static errorHandler = new ErrorHandler() { @Override protected void writeErrorPage(HttpServletRequest request, Writer writer, int code, - String message, boolean showStacks) throws IOException { + String message, boolean showStacks) throws IOException { ServletException th = (ServletException) request.getAttribute("javax.servlet.error.exception") message = th ? th.getRootCause().message : message if (message) { @@ -107,7 +107,9 @@ class JettyServer implements WebsocketServer { Lock.activeSession.getBasicRemote().sendBinary(ByteBuffer.wrap(binaries[0])) } else { try (def stream = Lock.activeSession.getBasicRemote().getSendStream()) { - binaries.each { stream.write(it) } + binaries.each { + stream.write(it) + } } } } @@ -160,7 +162,6 @@ class JettyServer implements WebsocketServer { @OnMessage void onText(String text, Session session, boolean last) { runUnderTrace("onRead", {}) - } @OnMessage @@ -179,18 +180,18 @@ class JettyServer implements WebsocketServer { @Override void onOpen(Session session, EndpointConfig endpointConfig) { session.addMessageHandler(new MessageHandler.Partial() { - @Override - void onMessage(String s, boolean b) { - runUnderTrace("onRead", {}) - } - }) + @Override + void onMessage(String s, boolean b) { + runUnderTrace("onRead", {}) + } + }) session.addMessageHandler(new MessageHandler.Whole() { - @Override - void onMessage(ByteBuffer buffer) { - runUnderTrace("onRead", {}) - } - }) + @Override + void onMessage(ByteBuffer buffer) { + runUnderTrace("onRead", {}) + } + }) Lock.activeSession = session synchronized (Lock) { Lock.notifyAll() diff --git a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-12.0/src/test/ee9/groovy/JettyServer.groovy b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-12.0/src/test/ee9/groovy/JettyServer.groovy index 367bcb3da59..806731fec6d 100644 --- a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-12.0/src/test/ee9/groovy/JettyServer.groovy +++ b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-12.0/src/test/ee9/groovy/JettyServer.groovy @@ -64,17 +64,17 @@ class JettyServer implements WebsocketServer { ServletContextHandler handler = new ServletContextHandler(null, "/context-path") handler.errorHandler = errorHandler HttpServerTest.ServerEndpoint.values() - .findAll { !(it in [NOT_FOUND, UNKNOWN]) } - .each { - handler.servletHandler.addServletWithMapping(servlet, it.path) - } + .findAll { !(it in [NOT_FOUND, UNKNOWN]) } + .each { + handler.servletHandler.addServletWithMapping(servlet, it.path) + } handler } static errorHandler = new ErrorHandler() { @Override protected void writeErrorPage(HttpServletRequest request, Writer writer, int code, - String message, boolean showStacks) throws IOException { + String message, boolean showStacks) throws IOException { Throwable th = (Throwable) request.getAttribute("jakarta.servlet.error.exception") message = th == null ? message : th instanceof ServletException ? th.getRootCause().message : th.message if (message) { @@ -101,7 +101,9 @@ class JettyServer implements WebsocketServer { Lock.activeSession.getBasicRemote().sendBinary(ByteBuffer.wrap(binaries[0])) } else { try (def stream = Lock.activeSession.getBasicRemote().getSendStream()) { - binaries.each { stream.write(it) } + binaries.each { + stream.write(it) + } } } } @@ -154,7 +156,6 @@ class JettyServer implements WebsocketServer { @OnMessage void onText(String text, Session session, boolean last) { runUnderTrace("onRead", {}) - } @OnMessage @@ -173,18 +174,18 @@ class JettyServer implements WebsocketServer { @Override void onOpen(Session session, EndpointConfig endpointConfig) { session.addMessageHandler(new MessageHandler.Partial() { - @Override - void onMessage(String s, boolean b) { - runUnderTrace("onRead", {}) - } - }) + @Override + void onMessage(String s, boolean b) { + runUnderTrace("onRead", {}) + } + }) session.addMessageHandler(new MessageHandler.Whole() { - @Override - void onMessage(ByteBuffer buffer) { - runUnderTrace("onRead", {}) - } - }) + @Override + void onMessage(ByteBuffer buffer) { + runUnderTrace("onRead", {}) + } + }) Lock.activeSession = session synchronized (Lock) { Lock.notifyAll() diff --git a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-7.0/src/test/groovy/Jetty70Test.groovy b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-7.0/src/test/groovy/Jetty70Test.groovy index 06d5d40c7b5..627f379a238 100644 --- a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-7.0/src/test/groovy/Jetty70Test.groovy +++ b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-7.0/src/test/groovy/Jetty70Test.groovy @@ -169,9 +169,7 @@ abstract class Jetty70Test extends HttpServerTest { } class Jetty70V0ForkedTest extends Jetty70Test implements TestingGenericHttpNamingConventions.ServerV0 { - } class Jetty70V1ForkedTest extends Jetty70Test implements TestingGenericHttpNamingConventions.ServerV1 { - } diff --git a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-7.6/src/test/groovy/Jetty76Test.groovy b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-7.6/src/test/groovy/Jetty76Test.groovy index f9e984041c0..daab5ac7473 100644 --- a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-7.6/src/test/groovy/Jetty76Test.groovy +++ b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-7.6/src/test/groovy/Jetty76Test.groovy @@ -170,9 +170,7 @@ abstract class Jetty76Test extends HttpServerTest { } class Jetty76V0ForkedTest extends Jetty76Test implements TestingGenericHttpNamingConventions.ServerV0 { - } class Jetty76V1ForkedTest extends Jetty76Test implements TestingGenericHttpNamingConventions.ServerV1 { - } diff --git a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-9.0.4/src/main/java/datadog/trace/instrumentation/jetty904/JettyOnCommitBlockingHelper.java b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-9.0.4/src/main/java/datadog/trace/instrumentation/jetty904/JettyOnCommitBlockingHelper.java index fc4793b4f36..59ee13dc229 100644 --- a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-9.0.4/src/main/java/datadog/trace/instrumentation/jetty904/JettyOnCommitBlockingHelper.java +++ b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-9.0.4/src/main/java/datadog/trace/instrumentation/jetty904/JettyOnCommitBlockingHelper.java @@ -99,7 +99,9 @@ public CloseCallback(Callback delegate, HttpChannel channel) { this.channel = channel; } - /** @see org.eclipse.jetty.server.HttpChannel.CommitCallback */ + /** + * @see org.eclipse.jetty.server.HttpChannel.CommitCallback + */ private void close() { closed(channel.getResponse().getHttpOutput()); channel.getEndPoint().close(); diff --git a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-9.0.4/src/test/groovy/datadog/trace/instrumentation/jetty9/JettyContinuationHandlerTest.groovy b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-9.0.4/src/test/groovy/datadog/trace/instrumentation/jetty9/JettyContinuationHandlerTest.groovy index a9999d16b8b..d32f386a387 100644 --- a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-9.0.4/src/test/groovy/datadog/trace/instrumentation/jetty9/JettyContinuationHandlerTest.groovy +++ b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-9.0.4/src/test/groovy/datadog/trace/instrumentation/jetty9/JettyContinuationHandlerTest.groovy @@ -90,9 +90,7 @@ abstract class JettyContinuationHandlerTest extends Jetty9Test { } class JettyContinuationHandlerV0ForkedTest extends JettyContinuationHandlerTest implements TestingGenericHttpNamingConventions.ServerV0 { - } class JettyContinuationHandlerV1ForkedTest extends JettyContinuationHandlerTest implements TestingGenericHttpNamingConventions.ServerV1 { - } diff --git a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-9.0/src/test/groovy/datadog/trace/instrumentation/jetty9/JettyContinuationHandlerTest.groovy b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-9.0/src/test/groovy/datadog/trace/instrumentation/jetty9/JettyContinuationHandlerTest.groovy index a9999d16b8b..d32f386a387 100644 --- a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-9.0/src/test/groovy/datadog/trace/instrumentation/jetty9/JettyContinuationHandlerTest.groovy +++ b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-9.0/src/test/groovy/datadog/trace/instrumentation/jetty9/JettyContinuationHandlerTest.groovy @@ -90,9 +90,7 @@ abstract class JettyContinuationHandlerTest extends Jetty9Test { } class JettyContinuationHandlerV0ForkedTest extends JettyContinuationHandlerTest implements TestingGenericHttpNamingConventions.ServerV0 { - } class JettyContinuationHandlerV1ForkedTest extends JettyContinuationHandlerTest implements TestingGenericHttpNamingConventions.ServerV1 { - } diff --git a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-9.0/src/testFixtures/groovy/test/JettyServer.groovy b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-9.0/src/testFixtures/groovy/test/JettyServer.groovy index 24922c6d5dd..76490305283 100644 --- a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-9.0/src/testFixtures/groovy/test/JettyServer.groovy +++ b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-9.0/src/testFixtures/groovy/test/JettyServer.groovy @@ -29,13 +29,11 @@ class JettyServer implements WebsocketServer { try { def container = ("org.eclipse.jetty.websocket.jsr356.server.deploy.WebSocketServerContainerInitializer" as Class)."configureContext"(handler) container."addEndpoint"(ServerEndpointConfig.Builder.create(endpointClass, "/websocket").build()) - } catch (Throwable ignored) { try { ("org.eclipse.jetty.websocket.javax.server.config.JavaxWebSocketServletContainerInitializer" as Class)."configure"(handler, { servletContext, container -> container.addEndpoint(ServerEndpointConfig.Builder.create(endpointClass, "/websocket").build()) }) - } catch (Throwable ignored2) { websocketAvailable = false } @@ -82,7 +80,9 @@ class JettyServer implements WebsocketServer { Lock.activeSession.getBasicRemote().sendBinary(ByteBuffer.wrap(binaries[0])) } else { try (def stream = Lock.activeSession.getBasicRemote().getSendStream()) { - binaries.each { stream.write(it) } + binaries.each { + stream.write(it) + } } } } @@ -135,7 +135,6 @@ class JettyServer implements WebsocketServer { @OnMessage void onText(String text, Session session, boolean last) { runUnderTrace("onRead", {}) - } @OnMessage @@ -154,18 +153,18 @@ class JettyServer implements WebsocketServer { @Override void onOpen(Session session, EndpointConfig endpointConfig) { session.addMessageHandler(new MessageHandler.Partial() { - @Override - void onMessage(String s, boolean b) { - runUnderTrace("onRead", {}) - } - }) + @Override + void onMessage(String s, boolean b) { + runUnderTrace("onRead", {}) + } + }) session.addMessageHandler(new MessageHandler.Whole() { - @Override - void onMessage(ByteBuffer buffer) { - runUnderTrace("onRead", {}) - } - }) + @Override + void onMessage(ByteBuffer buffer) { + runUnderTrace("onRead", {}) + } + }) Lock.activeSession = session synchronized (Lock) { Lock.notifyAll() diff --git a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-9.3/src/test/groovy/datadog/trace/instrumentation/jetty9/JettyContinuationHandlerTest.groovy b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-9.3/src/test/groovy/datadog/trace/instrumentation/jetty9/JettyContinuationHandlerTest.groovy index a9999d16b8b..d32f386a387 100644 --- a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-9.3/src/test/groovy/datadog/trace/instrumentation/jetty9/JettyContinuationHandlerTest.groovy +++ b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-9.3/src/test/groovy/datadog/trace/instrumentation/jetty9/JettyContinuationHandlerTest.groovy @@ -90,9 +90,7 @@ abstract class JettyContinuationHandlerTest extends Jetty9Test { } class JettyContinuationHandlerV0ForkedTest extends JettyContinuationHandlerTest implements TestingGenericHttpNamingConventions.ServerV0 { - } class JettyContinuationHandlerV1ForkedTest extends JettyContinuationHandlerTest implements TestingGenericHttpNamingConventions.ServerV1 { - } diff --git a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-9.4.21/src/test/groovy/datadog/trace/instrumentation/jetty9/JettyContinuationHandlerTest.groovy b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-9.4.21/src/test/groovy/datadog/trace/instrumentation/jetty9/JettyContinuationHandlerTest.groovy index a9999d16b8b..d32f386a387 100644 --- a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-9.4.21/src/test/groovy/datadog/trace/instrumentation/jetty9/JettyContinuationHandlerTest.groovy +++ b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-9.4.21/src/test/groovy/datadog/trace/instrumentation/jetty9/JettyContinuationHandlerTest.groovy @@ -90,9 +90,7 @@ abstract class JettyContinuationHandlerTest extends Jetty9Test { } class JettyContinuationHandlerV0ForkedTest extends JettyContinuationHandlerTest implements TestingGenericHttpNamingConventions.ServerV0 { - } class JettyContinuationHandlerV1ForkedTest extends JettyContinuationHandlerTest implements TestingGenericHttpNamingConventions.ServerV1 { - } diff --git a/dd-java-agent/instrumentation/jms/src/latestDepTest/groovy/JMS2Test.groovy b/dd-java-agent/instrumentation/jms/src/latestDepTest/groovy/JMS2Test.groovy index c6796b5cf4e..196ebccae37 100644 --- a/dd-java-agent/instrumentation/jms/src/latestDepTest/groovy/JMS2Test.groovy +++ b/dd-java-agent/instrumentation/jms/src/latestDepTest/groovy/JMS2Test.groovy @@ -212,7 +212,6 @@ class JMS2Test extends InstrumentationSpecification { cleanup: producer.close() consumer.close() - } static producerTrace(ListWriterAssert writer, String jmsResourceName) { diff --git a/dd-java-agent/instrumentation/jms/src/test/groovy/JMS1Test.groovy b/dd-java-agent/instrumentation/jms/src/test/groovy/JMS1Test.groovy index 495c8c84320..3165d2d01f6 100644 --- a/dd-java-agent/instrumentation/jms/src/test/groovy/JMS1Test.groovy +++ b/dd-java-agent/instrumentation/jms/src/test/groovy/JMS1Test.groovy @@ -1014,7 +1014,6 @@ abstract class JMS1Test extends VersionedNamingTestBase { @Trace(operationName = "do.stuff") def doStuff() { - } } diff --git a/dd-java-agent/instrumentation/jms/src/test/groovy/MDBBad.groovy b/dd-java-agent/instrumentation/jms/src/test/groovy/MDBBad.groovy index 59519791b94..f6f1004befd 100644 --- a/dd-java-agent/instrumentation/jms/src/test/groovy/MDBBad.groovy +++ b/dd-java-agent/instrumentation/jms/src/test/groovy/MDBBad.groovy @@ -9,7 +9,6 @@ class MDBBad implements MessageListener { throw new Exception("null message") } } - } diff --git a/dd-java-agent/instrumentation/kafka/kafka-clients-0.11/src/test/groovy/KafkaClientCustomPropagationConfigTest.groovy b/dd-java-agent/instrumentation/kafka/kafka-clients-0.11/src/test/groovy/KafkaClientCustomPropagationConfigTest.groovy index c9e45ac6a12..9ca7958f129 100644 --- a/dd-java-agent/instrumentation/kafka/kafka-clients-0.11/src/test/groovy/KafkaClientCustomPropagationConfigTest.groovy +++ b/dd-java-agent/instrumentation/kafka/kafka-clients-0.11/src/test/groovy/KafkaClientCustomPropagationConfigTest.groovy @@ -302,5 +302,4 @@ class KafkaClientCustomPropagationConfigTest extends InstrumentationSpecificatio return Class.forName("org.springframework.kafka.listener.ContainerProperties").newInstance(topic) } } - } diff --git a/dd-java-agent/instrumentation/kafka/kafka-clients-0.11/src/test/groovy/KafkaClientTestBase.groovy b/dd-java-agent/instrumentation/kafka/kafka-clients-0.11/src/test/groovy/KafkaClientTestBase.groovy index 9870627fda3..da8a172de68 100644 --- a/dd-java-agent/instrumentation/kafka/kafka-clients-0.11/src/test/groovy/KafkaClientTestBase.groovy +++ b/dd-java-agent/instrumentation/kafka/kafka-clients-0.11/src/test/groovy/KafkaClientTestBase.groovy @@ -605,7 +605,6 @@ abstract class KafkaClientTestBase extends VersionedNamingTestBase { cleanup: consumer.close() producer.close() - } def "test records(TopicPartition).subList kafka consume"() { @@ -661,7 +660,6 @@ abstract class KafkaClientTestBase extends VersionedNamingTestBase { cleanup: consumer.close() producer.close() - } def "test records(TopicPartition).forEach kafka consume"() { @@ -717,7 +715,6 @@ abstract class KafkaClientTestBase extends VersionedNamingTestBase { cleanup: consumer.close() producer.close() - } def "test iteration backwards over ConsumerRecords"() { @@ -826,7 +823,6 @@ abstract class KafkaClientTestBase extends VersionedNamingTestBase { cleanup: consumer.close() producer.close() - } @Flaky("Repeatedly fails with a partition set to 1 but expects 0 https://github.com/DataDog/dd-trace-java/issues/3864") @@ -889,7 +885,6 @@ abstract class KafkaClientTestBase extends VersionedNamingTestBase { def headers = received.headers() assert headers.iterator().hasNext() - } assert receivedSet.isEmpty() @@ -1279,8 +1274,6 @@ abstract class KafkaClientLegacyTracingForkedTest extends KafkaClientTestBase { } class KafkaClientLegacyTracingV0ForkedTest extends KafkaClientLegacyTracingForkedTest { - - } class KafkaClientLegacyTracingV1ForkedTest extends KafkaClientLegacyTracingForkedTest { diff --git a/dd-java-agent/instrumentation/kafka/kafka-clients-0.11/src/test/groovy/KafkaReactorForkedTest.groovy b/dd-java-agent/instrumentation/kafka/kafka-clients-0.11/src/test/groovy/KafkaReactorForkedTest.groovy index 8bb8314421a..3661bdea752 100644 --- a/dd-java-agent/instrumentation/kafka/kafka-clients-0.11/src/test/groovy/KafkaReactorForkedTest.groovy +++ b/dd-java-agent/instrumentation/kafka/kafka-clients-0.11/src/test/groovy/KafkaReactorForkedTest.groovy @@ -52,7 +52,9 @@ class KafkaReactorForkedTest extends InstrumentationSpecification { final KafkaReceiver kafkaReceiver = KafkaReceiver.create(ReceiverOptions. create(consumerProperties) .subscription([KafkaClientTestBase.SHARED_TOPIC]) .addAssignListener { - it.each { subscriptionReady.countDown() } + it.each { + subscriptionReady.countDown() + } }) // create a thread safe queue to store the received message @@ -60,8 +62,8 @@ class KafkaReactorForkedTest extends InstrumentationSpecification { kafkaReceiver.receive() // publish on another thread to be sure we're propagating that receive span correctly .publishOn(Schedulers.parallel()) - .flatMap { receiverRecord -> - { + .flatMap { + receiverRecord -> { records.add(receiverRecord) receiverRecord.receiverOffset().commit() } @@ -75,8 +77,12 @@ class KafkaReactorForkedTest extends InstrumentationSpecification { String greeting = "Hello Reactor Kafka Sender!" runUnderTrace("parent") { kafkaSender.send(Mono.just(SenderRecord.create(new ProducerRecord<>(KafkaClientTestBase.SHARED_TOPIC, greeting), null))) - .doOnError { ex -> runUnderTrace("producer exception: " + ex) {} } - .doOnNext { runUnderTrace("producer callback") {} } + .doOnError { + ex -> runUnderTrace("producer exception: " + ex) {} + } + .doOnNext { + runUnderTrace("producer callback") {} + } .blockFirst() blockUntilChildSpansFinished(2) } @@ -114,15 +120,17 @@ class KafkaReactorForkedTest extends InstrumentationSpecification { final KafkaReceiver kafkaReceiver = KafkaReceiver.create(ReceiverOptions. create(consumerProperties) .subscription([KafkaClientTestBase.SHARED_TOPIC]) .addAssignListener { - it.each { subscriptionReady.countDown() } + it.each { + subscriptionReady.countDown() + } }) // create a thread safe queue to store the received message kafkaReceiver.receive() // publish on another thread to be sure we're propagating that receive span correctly .publishOn(Schedulers.parallel()) - .flatMap { receiverRecord -> - { + .flatMap { + receiverRecord -> { receiverRecord.receiverOffset().commit() } } @@ -136,13 +144,16 @@ class KafkaReactorForkedTest extends InstrumentationSpecification { when: String greeting = "Hello Reactor Kafka Sender!" Flux.range(0, 100) - .flatMap { kafkaSender.send(Mono.just(SenderRecord.create(new ProducerRecord<>(KafkaClientTestBase.SHARED_TOPIC, greeting), null))) } + .flatMap { + kafkaSender.send(Mono.just(SenderRecord.create(new ProducerRecord<>(KafkaClientTestBase.SHARED_TOPIC, greeting), null))) + } .publishOn(Schedulers.parallel()) .subscribe() then: // check that the all the consume (100) and the send (100) are reported TEST_WRITER.waitForTraces(200) - Map> traces = TEST_WRITER.inject([:]) { map, entry -> + Map> traces = TEST_WRITER.inject([:]) { + map, entry -> def key = entry.get(0).getTraceId().toString() map[key] = (map[key] ?: []) + entry return map @@ -162,9 +173,9 @@ class KafkaReactorForkedTest extends InstrumentationSpecification { } def producerSpan( - TraceAssert trace, - Map config, - DDSpan parentSpan = null) { + TraceAssert trace, + Map config, + DDSpan parentSpan = null) { trace.span { serviceName "kafka" operationName "kafka.produce" @@ -189,9 +200,9 @@ class KafkaReactorForkedTest extends InstrumentationSpecification { } def consumerSpan( - TraceAssert trace, - Map config, - DDSpan parentSpan = null) { + TraceAssert trace, + Map config, + DDSpan parentSpan = null) { trace.span { serviceName "kafka" operationName "kafka.consume" diff --git a/dd-java-agent/instrumentation/kafka/kafka-connect-0.11/src/test/groovy/ConnectWorkerInstrumentationTest.groovy b/dd-java-agent/instrumentation/kafka/kafka-connect-0.11/src/test/groovy/ConnectWorkerInstrumentationTest.groovy index bc7857d1f7a..fe50abc776c 100644 --- a/dd-java-agent/instrumentation/kafka/kafka-connect-0.11/src/test/groovy/ConnectWorkerInstrumentationTest.groovy +++ b/dd-java-agent/instrumentation/kafka/kafka-connect-0.11/src/test/groovy/ConnectWorkerInstrumentationTest.groovy @@ -70,7 +70,9 @@ class ConnectWorkerInstrumentationTest extends InstrumentationSpecification { workerProps.put("plugin.scan.classpath", "true") Map workerPropsMap = workerProps.stringPropertyNames() - .collectEntries { [(it): workerProps.getProperty(it)] } + .collectEntries { + [(it): workerProps.getProperty(it)] + } // Create the Connect worker Time time = Time.SYSTEM @@ -134,7 +136,8 @@ class ConnectWorkerInstrumentationTest extends InstrumentationSpecification { consumer.subscribe(['test-topic']) String receivedMessage = null - for (int i = 0; i < 10; i++) { // Try for up to 10 seconds + for (int i = 0; i < 10; i++) { + // Try for up to 10 seconds ConsumerRecords records = consumer.poll(Duration.ofSeconds(1)) if (!records.isEmpty()) { receivedMessage = records.iterator().next().value() @@ -146,7 +149,9 @@ class ConnectWorkerInstrumentationTest extends InstrumentationSpecification { then: receivedMessage == "Hello Kafka" - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { tags.hasAllTags( "direction:out", @@ -155,7 +160,9 @@ class ConnectWorkerInstrumentationTest extends InstrumentationSpecification { ) } - StatsGroup second = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == first.hash } + StatsGroup second = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == first.hash + } verifyAll(second) { tags.hasAllTags("direction:in", "group:test-consumer-group", "topic:test-topic", "type:kafka") } @@ -199,7 +206,9 @@ class ConnectWorkerInstrumentationTest extends InstrumentationSpecification { workerProps.put("plugin.scan.classpath", "true") Map workerPropsMap = workerProps.stringPropertyNames() - .collectEntries { [(it): workerProps.getProperty(it)] } + .collectEntries { + [(it): workerProps.getProperty(it)] + } // Create the Connect worker Time time = Time.SYSTEM @@ -260,7 +269,8 @@ class ConnectWorkerInstrumentationTest extends InstrumentationSpecification { producer.flush() producer.close() - for (int i = 0; i < 100; i++) { // Try for up to 10 seconds + for (int i = 0; i < 100; i++) { + // Try for up to 10 seconds Thread.sleep(100) if (sinkFile.text.contains("Hello Kafka Sink")) { break @@ -273,12 +283,16 @@ class ConnectWorkerInstrumentationTest extends InstrumentationSpecification { then: fileContents.contains("Hello Kafka Sink") - StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == 0 } + StatsGroup first = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == 0 + } verifyAll(first) { tags.hasAllTags("direction:out", "topic:test-topic", "type:kafka") } - StatsGroup second = TEST_DATA_STREAMS_WRITER.groups.find { it.parentHash == first.hash } + StatsGroup second = TEST_DATA_STREAMS_WRITER.groups.find { + it.parentHash == first.hash + } verifyAll(second) { tags.hasAllTags("direction:in", "group:connect-file-sink-connector", "topic:test-topic", "type:kafka") } diff --git a/dd-java-agent/instrumentation/kafka/kafka-streams-0.11/src/test/groovy/KafkaStreamsTestBase.groovy b/dd-java-agent/instrumentation/kafka/kafka-streams-0.11/src/test/groovy/KafkaStreamsTestBase.groovy index c7f2b5d20c6..b1b022108c0 100644 --- a/dd-java-agent/instrumentation/kafka/kafka-streams-0.11/src/test/groovy/KafkaStreamsTestBase.groovy +++ b/dd-java-agent/instrumentation/kafka/kafka-streams-0.11/src/test/groovy/KafkaStreamsTestBase.groovy @@ -342,7 +342,6 @@ abstract class KafkaStreamsForkedTest extends KafkaStreamsTestBase { } class KafkaStreamsV0ForkedTest extends KafkaStreamsForkedTest { - } class KafkaStreamsV1ForkedTest extends KafkaStreamsForkedTest { diff --git a/dd-java-agent/instrumentation/kotlin-coroutines/src/latestDepTest/kotlin/KotlinCoroutineTests.kt b/dd-java-agent/instrumentation/kotlin-coroutines/src/latestDepTest/kotlin/KotlinCoroutineTests.kt index beaeddd5c31..77be265ed46 100644 --- a/dd-java-agent/instrumentation/kotlin-coroutines/src/latestDepTest/kotlin/KotlinCoroutineTests.kt +++ b/dd-java-agent/instrumentation/kotlin-coroutines/src/latestDepTest/kotlin/KotlinCoroutineTests.kt @@ -52,44 +52,28 @@ class KotlinCoroutineTests(dispatcher: CoroutineDispatcher) : CoreKotlinCoroutin } @Trace - override fun tracePreventedByCancellation(): Int { - return super.tracePreventedByCancellation() - } + override fun tracePreventedByCancellation(): Int = super.tracePreventedByCancellation() @Trace - override fun tracedAcrossThreadsWithNested(): Int { - return super.tracedAcrossThreadsWithNested() - } + override fun tracedAcrossThreadsWithNested(): Int = super.tracedAcrossThreadsWithNested() @Trace - override fun traceWithDeferred(): Int { - return super.traceWithDeferred() - } + override fun traceWithDeferred(): Int = super.traceWithDeferred() @Trace - override fun tracedWithDeferredFirstCompletions(): Int { - return super.tracedWithDeferredFirstCompletions() - } + override fun tracedWithDeferredFirstCompletions(): Int = super.tracedWithDeferredFirstCompletions() @Trace - override fun tracedWithSuspendingCoroutines(): Int { - return super.tracedWithSuspendingCoroutines() - } + override fun tracedWithSuspendingCoroutines(): Int = super.tracedWithSuspendingCoroutines() @Trace - override fun tracedWithLazyStarting(): Int { - return super.tracedWithLazyStarting() - } + override fun tracedWithLazyStarting(): Int = super.tracedWithLazyStarting() @Trace - override fun traceAfterTimeout(): Int { - return super.traceAfterTimeout() - } + override fun traceAfterTimeout(): Int = super.traceAfterTimeout() @Trace - override fun traceAfterDelay(): Int { - return super.traceAfterDelay() - } + override fun traceAfterDelay(): Int = super.traceAfterDelay() @Trace override fun tracedChild(opName: String) { diff --git a/dd-java-agent/instrumentation/kotlin-coroutines/src/test/kotlin/KotlinCoroutineTests.kt b/dd-java-agent/instrumentation/kotlin-coroutines/src/test/kotlin/KotlinCoroutineTests.kt index c809fdb2d7e..8ba909ae74d 100644 --- a/dd-java-agent/instrumentation/kotlin-coroutines/src/test/kotlin/KotlinCoroutineTests.kt +++ b/dd-java-agent/instrumentation/kotlin-coroutines/src/test/kotlin/KotlinCoroutineTests.kt @@ -33,44 +33,28 @@ class KotlinCoroutineTests(dispatcher: CoroutineDispatcher) : CoreKotlinCoroutin } @Trace - override fun tracePreventedByCancellation(): Int { - return super.tracePreventedByCancellation() - } + override fun tracePreventedByCancellation(): Int = super.tracePreventedByCancellation() @Trace - override fun tracedAcrossThreadsWithNested(): Int { - return super.tracedAcrossThreadsWithNested() - } + override fun tracedAcrossThreadsWithNested(): Int = super.tracedAcrossThreadsWithNested() @Trace - override fun traceWithDeferred(): Int { - return super.traceWithDeferred() - } + override fun traceWithDeferred(): Int = super.traceWithDeferred() @Trace - override fun tracedWithDeferredFirstCompletions(): Int { - return super.tracedWithDeferredFirstCompletions() - } + override fun tracedWithDeferredFirstCompletions(): Int = super.tracedWithDeferredFirstCompletions() @Trace - override fun tracedWithSuspendingCoroutines(): Int { - return super.tracedWithSuspendingCoroutines() - } + override fun tracedWithSuspendingCoroutines(): Int = super.tracedWithSuspendingCoroutines() @Trace - override fun tracedWithLazyStarting(): Int { - return super.tracedWithLazyStarting() - } + override fun tracedWithLazyStarting(): Int = super.tracedWithLazyStarting() @Trace - override fun traceAfterTimeout(): Int { - return super.traceAfterTimeout() - } + override fun traceAfterTimeout(): Int = super.traceAfterTimeout() @Trace - override fun traceAfterDelay(): Int { - return super.traceAfterDelay() - } + override fun traceAfterDelay(): Int = super.traceAfterDelay() @Trace override fun tracedChild(opName: String) { diff --git a/dd-java-agent/instrumentation/kotlin-coroutines/src/testFixtures/kotlin/datadog/trace/instrumentation/kotlin/coroutines/CoreKotlinCoroutineTests.kt b/dd-java-agent/instrumentation/kotlin-coroutines/src/testFixtures/kotlin/datadog/trace/instrumentation/kotlin/coroutines/CoreKotlinCoroutineTests.kt index 1d36be03c5b..ef870d6a9fe 100644 --- a/dd-java-agent/instrumentation/kotlin-coroutines/src/testFixtures/kotlin/datadog/trace/instrumentation/kotlin/coroutines/CoreKotlinCoroutineTests.kt +++ b/dd-java-agent/instrumentation/kotlin-coroutines/src/testFixtures/kotlin/datadog/trace/instrumentation/kotlin/coroutines/CoreKotlinCoroutineTests.kt @@ -31,7 +31,6 @@ abstract class CoreKotlinCoroutineTests(private val dispatcher: CoroutineDispatc @Trace open fun tracePreventedByCancellation(): Int { - kotlin.runCatching { runTest { tracedChild("preLaunch") @@ -65,7 +64,6 @@ abstract class CoreKotlinCoroutineTests(private val dispatcher: CoroutineDispatc @Trace open fun traceWithDeferred(): Int = runTest { - val keptPromise = CompletableDeferred() val brokenPromise = CompletableDeferred() val afterPromise = async(jobName("afterPromise")) { @@ -98,7 +96,6 @@ abstract class CoreKotlinCoroutineTests(private val dispatcher: CoroutineDispatc */ @Trace open fun tracedWithDeferredFirstCompletions(): Int = runTest { - val children = listOf( async(jobName("timeout1")) { tracedChild("timeout1") @@ -216,45 +213,44 @@ abstract class CoreKotlinCoroutineTests(private val dispatcher: CoroutineDispatc return spans.get() } - private suspend fun createAndWaitForCoroutines(lazy: Boolean = false, throwing: Boolean = false, spans: AtomicInteger) = - coroutineScope { - val jobs = mutableListOf>() - val start = if (lazy) CoroutineStart.LAZY else CoroutineStart.DEFAULT - - childSpan("top-level").activateAndUse { - spans.incrementAndGet() - async(jobName("first"), start) { - childSpan("first-span").activateAndUse { - spans.incrementAndGet() - if (throwing) { - throw IllegalStateException("first") - } - delay(1) + private suspend fun createAndWaitForCoroutines(lazy: Boolean = false, throwing: Boolean = false, spans: AtomicInteger) = coroutineScope { + val jobs = mutableListOf>() + val start = if (lazy) CoroutineStart.LAZY else CoroutineStart.DEFAULT + + childSpan("top-level").activateAndUse { + spans.incrementAndGet() + async(jobName("first"), start) { + childSpan("first-span").activateAndUse { + spans.incrementAndGet() + if (throwing) { + throw IllegalStateException("first") } - }.run(jobs::add) + delay(1) + } + }.run(jobs::add) - async(jobName("second"), start) { - childSpan("second-span").activateAndUse { - spans.incrementAndGet() - if (throwing) { - throw IllegalStateException("second") - } - delay(1) + async(jobName("second"), start) { + childSpan("second-span").activateAndUse { + spans.incrementAndGet() + if (throwing) { + throw IllegalStateException("second") } - }.run(jobs::add) - } + delay(1) + } + }.run(jobs::add) + } - if (lazy) { - jobs.forEach { it.start() } - } + if (lazy) { + jobs.forEach { it.start() } + } - jobs.forEach { - try { - it.await() - } catch (_: Exception) { - } + jobs.forEach { + try { + it.await() + } catch (_: Exception) { } } + } open fun withNoParentSpan(lazy: Boolean): Int = runTest { val jobs = mutableListOf>() diff --git a/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/test/groovy/Lettuce5ReactiveClientTest.groovy b/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/test/groovy/Lettuce5ReactiveClientTest.groovy index 8716f34b786..e4c26a75bbb 100644 --- a/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/test/groovy/Lettuce5ReactiveClientTest.groovy +++ b/dd-java-agent/instrumentation/lettuce/lettuce-5.0/src/test/groovy/Lettuce5ReactiveClientTest.groovy @@ -128,7 +128,6 @@ abstract class Lettuce5ReactiveClientTest extends Lettuce5ClientTestBase { } } } - } def "command with no arguments"() { diff --git a/dd-java-agent/instrumentation/liberty-20/build.gradle b/dd-java-agent/instrumentation/liberty-20/build.gradle index 05aaa11b0a6..dbcfd926425 100644 --- a/dd-java-agent/instrumentation/liberty-20/build.gradle +++ b/dd-java-agent/instrumentation/liberty-20/build.gradle @@ -98,7 +98,11 @@ abstract class UnpackOpenLiberty extends Copy { final Provider serverXmlFile = project.providers.provider { extractDir.get().file("wlp/usr/servers/defaultServer/server.xml").asFile } UnpackOpenLiberty() { - from project.zipTree(configurationName.map {project.configurations.named(it).map { it.singleFile } }) + from project.zipTree(configurationName.map { + project.configurations.named(it).map { + it.singleFile + } + }) eachFile { FileCopyDetails fcd -> fcd.path = fcd.path.replaceAll(/\/templates\/(servers\/defaultServer\/.+)/, '/usr/$1') } diff --git a/dd-java-agent/instrumentation/liberty-20/src/test/groovy/datadog/trace/instrumentation/liberty20/Liberty20Test.groovy b/dd-java-agent/instrumentation/liberty-20/src/test/groovy/datadog/trace/instrumentation/liberty20/Liberty20Test.groovy index c451f0855bb..43c7aef4ae7 100644 --- a/dd-java-agent/instrumentation/liberty-20/src/test/groovy/datadog/trace/instrumentation/liberty20/Liberty20Test.groovy +++ b/dd-java-agent/instrumentation/liberty-20/src/test/groovy/datadog/trace/instrumentation/liberty20/Liberty20Test.groovy @@ -206,7 +206,8 @@ class Liberty20AsyncForkedTest extends Liberty20Test implements TestingGenericHt // failing because org.apache.xalan.transformer.TransformerImpl is // instrumented while on the the global ignores list System.getProperty('java.vm.name') == 'IBM J9 VM' && - System.getProperty('java.specification.version') == '1.8' }) + System.getProperty('java.specification.version') == '1.8' +}) class LibertyServletClassloaderNamingForkedTest extends Liberty20V0ForkedTest { @Override protected void configurePreAgent() { @@ -220,7 +221,8 @@ class LibertyServletClassloaderNamingForkedTest extends Liberty20V0ForkedTest { // failing because org.apache.xalan.transformer.TransformerImpl is // instrumented while on the the global ignores list System.getProperty('java.vm.name') == 'IBM J9 VM' && - System.getProperty('java.specification.version') == '1.8' }) + System.getProperty('java.specification.version') == '1.8' +}) class Liberty20V0ForkedTest extends Liberty20Test implements TestingGenericHttpNamingConventions.ServerV0 { } @@ -228,6 +230,7 @@ class Liberty20V0ForkedTest extends Liberty20Test implements TestingGenericHttpN // failing because org.apache.xalan.transformer.TransformerImpl is // instrumented while on the the global ignores list System.getProperty('java.vm.name') == 'IBM J9 VM' && - System.getProperty('java.specification.version') == '1.8' }) + System.getProperty('java.specification.version') == '1.8' +}) class Liberty20V1ForkedTest extends Liberty20Test implements TestingGenericHttpNamingConventions.ServerV1 { } diff --git a/dd-java-agent/instrumentation/liberty-23/build.gradle b/dd-java-agent/instrumentation/liberty-23/build.gradle index 99707c31d38..bd0446c5b82 100644 --- a/dd-java-agent/instrumentation/liberty-23/build.gradle +++ b/dd-java-agent/instrumentation/liberty-23/build.gradle @@ -103,7 +103,11 @@ abstract class UnpackOpenLiberty extends Copy { final Provider serverXmlFile = project.providers.provider { extractDir.get().file("wlp/usr/servers/defaultServer/server.xml").asFile } UnpackOpenLiberty() { - from project.zipTree(configurationName.map {project.configurations.named(it).map { it.singleFile } }) + from project.zipTree(configurationName.map { + project.configurations.named(it).map { + it.singleFile + } + }) eachFile { FileCopyDetails fcd -> fcd.path = fcd.path.replaceAll(/\/templates\/(servers\/defaultServer\/.+)/, '/usr/$1') } diff --git a/dd-java-agent/instrumentation/liberty-23/src/test/groovy/datadog/trace/instrumentation/liberty23/Liberty23Test.groovy b/dd-java-agent/instrumentation/liberty-23/src/test/groovy/datadog/trace/instrumentation/liberty23/Liberty23Test.groovy index 661a2dc9ec9..2cca5f6c574 100644 --- a/dd-java-agent/instrumentation/liberty-23/src/test/groovy/datadog/trace/instrumentation/liberty23/Liberty23Test.groovy +++ b/dd-java-agent/instrumentation/liberty-23/src/test/groovy/datadog/trace/instrumentation/liberty23/Liberty23Test.groovy @@ -148,7 +148,8 @@ abstract class Liberty23Test extends HttpServerTest { // failing because org.apache.xalan.transformer.TransformerImpl is // instrumented while on the the global ignores list System.getProperty('java.vm.name') == 'IBM J9 VM' && - System.getProperty('java.specification.version') == '1.8' }) + System.getProperty('java.specification.version') == '1.8' +}) class Liberty23V0ForkedTest extends Liberty23Test implements TestingGenericHttpNamingConventions.ServerV0 { } @@ -156,7 +157,8 @@ class Liberty23V0ForkedTest extends Liberty23Test implements TestingGenericHttpN // failing because org.apache.xalan.transformer.TransformerImpl is // instrumented while on the the global ignores list System.getProperty('java.vm.name') == 'IBM J9 VM' && - System.getProperty('java.specification.version') == '1.8' }) + System.getProperty('java.specification.version') == '1.8' +}) class Liberty23V1ForkedTest extends Liberty23Test implements TestingGenericHttpNamingConventions.ServerV1 { } @@ -164,7 +166,8 @@ class Liberty23V1ForkedTest extends Liberty23Test implements TestingGenericHttpN // failing because org.apache.xalan.transformer.TransformerImpl is // instrumented while on the the global ignores list System.getProperty('java.vm.name') == 'IBM J9 VM' && - System.getProperty('java.specification.version') == '1.8' }) + System.getProperty('java.specification.version') == '1.8' +}) class LibertyServletClassloaderNamingForkedTest extends Liberty23V0ForkedTest { @Override protected void configurePreAgent() { diff --git a/dd-java-agent/instrumentation/mule-4.5/src/test/groovy/mule4/MuleForkedTest.groovy b/dd-java-agent/instrumentation/mule-4.5/src/test/groovy/mule4/MuleForkedTest.groovy index 0dd061659d1..07f201d3cae 100644 --- a/dd-java-agent/instrumentation/mule-4.5/src/test/groovy/mule4/MuleForkedTest.groovy +++ b/dd-java-agent/instrumentation/mule-4.5/src/test/groovy/mule4/MuleForkedTest.groovy @@ -258,5 +258,4 @@ class MuleForkedTest extends WithHttpServer { String operation() { return "grizzly.request" } - } diff --git a/dd-java-agent/instrumentation/netty/netty-4.0/src/test/groovy/Netty40ClientTest.groovy b/dd-java-agent/instrumentation/netty/netty-4.0/src/test/groovy/Netty40ClientTest.groovy index 313039cbbd5..898454d6267 100644 --- a/dd-java-agent/instrumentation/netty/netty-4.0/src/test/groovy/Netty40ClientTest.groovy +++ b/dd-java-agent/instrumentation/netty/netty-4.0/src/test/groovy/Netty40ClientTest.groovy @@ -156,10 +156,8 @@ abstract class Netty40ClientTest extends HttpClientTest { @Timeout(5) class Netty40ClientV0ForkedTest extends Netty40ClientTest implements TestingNettyHttpNamingConventions.ClientV0 { - } @Timeout(5) class Netty40ClientV1ForkedTest extends Netty40ClientTest implements TestingNettyHttpNamingConventions.ClientV1 { - } diff --git a/dd-java-agent/instrumentation/netty/netty-4.0/src/test/groovy/NettyWebsocketClient.groovy b/dd-java-agent/instrumentation/netty/netty-4.0/src/test/groovy/NettyWebsocketClient.groovy index baf5c3a29b5..9c45fbeb701 100644 --- a/dd-java-agent/instrumentation/netty/netty-4.0/src/test/groovy/NettyWebsocketClient.groovy +++ b/dd-java-agent/instrumentation/netty/netty-4.0/src/test/groovy/NettyWebsocketClient.groovy @@ -75,7 +75,11 @@ class NettyWebsocketClient implements WebsocketClient { pipeline.addLast(new HttpObjectAggregator(1024)) pipeline.addLast(wsHandler) // remove our handler since we do not want to trace that client - pipeline.names().findAll { it.contains("HttpClientTracingHandler") }.each { pipeline.remove(it) } + pipeline.names().findAll { + it.contains("HttpClientTracingHandler") + }.each { + pipeline.remove(it) + } } }).channel(NioSocketChannel) channel = b.connect(uri.host, uri.port).sync().channel() @@ -103,7 +107,9 @@ class NettyWebsocketClient implements WebsocketClient { byte[][] split(byte[] src) { if (chunkSize <= 0) { - return new byte[][]{src} + return new byte[][]{ + src + } } def ret = new byte[(int) Math.ceil(src.length / chunkSize)][] def offset = 0 diff --git a/dd-java-agent/instrumentation/netty/netty-4.1/src/test/groovy/Netty41ClientTest.groovy b/dd-java-agent/instrumentation/netty/netty-4.1/src/test/groovy/Netty41ClientTest.groovy index 860bc6b5f8e..31e5349f01f 100644 --- a/dd-java-agent/instrumentation/netty/netty-4.1/src/test/groovy/Netty41ClientTest.groovy +++ b/dd-java-agent/instrumentation/netty/netty-4.1/src/test/groovy/Netty41ClientTest.groovy @@ -146,7 +146,6 @@ abstract class Netty41ClientTest extends HttpClientTest { } class Netty41ClientV0ForkedTest extends Netty41ClientTest implements TestingNettyHttpNamingConventions.ClientV0 { - } class Netty41ClientV1ForkedTest extends Netty41ClientTest implements TestingNettyHttpNamingConventions.ClientV1 { diff --git a/dd-java-agent/instrumentation/netty/netty-4.1/src/test/groovy/Netty41ServerTest.groovy b/dd-java-agent/instrumentation/netty/netty-4.1/src/test/groovy/Netty41ServerTest.groovy index 36d479207d9..4eb59a6a0a8 100644 --- a/dd-java-agent/instrumentation/netty/netty-4.1/src/test/groovy/Netty41ServerTest.groovy +++ b/dd-java-agent/instrumentation/netty/netty-4.1/src/test/groovy/Netty41ServerTest.groovy @@ -287,11 +287,9 @@ abstract class Netty41ServerTest extends HttpServerTest { } class Netty41ServerV0Test extends Netty41ServerTest implements TestingNettyHttpNamingConventions.ServerV0 { - } class Netty41ServerV1ForkedTest extends Netty41ServerTest implements TestingNettyHttpNamingConventions.ServerV1 { - } diff --git a/dd-java-agent/instrumentation/netty/netty-4.1/src/test/groovy/NettyWebsocketClient.groovy b/dd-java-agent/instrumentation/netty/netty-4.1/src/test/groovy/NettyWebsocketClient.groovy index baf5c3a29b5..9c45fbeb701 100644 --- a/dd-java-agent/instrumentation/netty/netty-4.1/src/test/groovy/NettyWebsocketClient.groovy +++ b/dd-java-agent/instrumentation/netty/netty-4.1/src/test/groovy/NettyWebsocketClient.groovy @@ -75,7 +75,11 @@ class NettyWebsocketClient implements WebsocketClient { pipeline.addLast(new HttpObjectAggregator(1024)) pipeline.addLast(wsHandler) // remove our handler since we do not want to trace that client - pipeline.names().findAll { it.contains("HttpClientTracingHandler") }.each { pipeline.remove(it) } + pipeline.names().findAll { + it.contains("HttpClientTracingHandler") + }.each { + pipeline.remove(it) + } } }).channel(NioSocketChannel) channel = b.connect(uri.host, uri.port).sync().channel() @@ -103,7 +107,9 @@ class NettyWebsocketClient implements WebsocketClient { byte[][] split(byte[] src) { if (chunkSize <= 0) { - return new byte[][]{src} + return new byte[][]{ + src + } } def ret = new byte[(int) Math.ceil(src.length / chunkSize)][] def offset = 0 diff --git a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.4/src/test/groovy/opentelemetry14/context/propagation/W3cPropagatorTracestateTest.groovy b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.4/src/test/groovy/opentelemetry14/context/propagation/W3cPropagatorTracestateTest.groovy index 76575d26484..fe08288f85a 100644 --- a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.4/src/test/groovy/opentelemetry14/context/propagation/W3cPropagatorTracestateTest.groovy +++ b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.4/src/test/groovy/opentelemetry14/context/propagation/W3cPropagatorTracestateTest.groovy @@ -30,7 +30,9 @@ class W3cPropagatorTracestateTest extends InstrumentationSpecification { if (tracestate) { headers['tracestate'] = tracestate members = Arrays.stream(tracestate.split(',')) - .filter { !it.startsWith("dd=")} + .filter { + !it.startsWith("dd=") + } .toArray(String[]::new) } @@ -42,8 +44,8 @@ class W3cPropagatorTracestateTest extends InstrumentationSpecification { when: def localSpan = tracer.spanBuilder("some-name") - .setParent(context) - .startSpan() + .setParent(context) + .startSpan() def scope = localSpan.makeCurrent() Map injectedHeaders = [:] propagator.inject(current(), injectedHeaders, TextMap.INSTANCE) diff --git a/dd-java-agent/instrumentation/org-json/src/test/groovy/JSONTokenerInstrumentationTest.groovy b/dd-java-agent/instrumentation/org-json/src/test/groovy/JSONTokenerInstrumentationTest.groovy index e1ea55153d6..424b69c3a4e 100644 --- a/dd-java-agent/instrumentation/org-json/src/test/groovy/JSONTokenerInstrumentationTest.groovy +++ b/dd-java-agent/instrumentation/org-json/src/test/groovy/JSONTokenerInstrumentationTest.groovy @@ -38,5 +38,4 @@ class JSONTokenerInstrumentationTest extends InstrumentationSpecification { new StringReader(JSON_STRING) // Reader input ] } - } diff --git a/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/baseTest/groovy/PekkoHttpClientInstrumentationTest.groovy b/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/baseTest/groovy/PekkoHttpClientInstrumentationTest.groovy index a8d38623d1d..628ccbd366b 100644 --- a/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/baseTest/groovy/PekkoHttpClientInstrumentationTest.groovy +++ b/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/baseTest/groovy/PekkoHttpClientInstrumentationTest.groovy @@ -150,5 +150,4 @@ class PekkoHttpScalaClientInstrumentationV0ForkedTest extends PekkoHttpScalaClie } class PekkoHttpScalaClientInstrumentationV1ForkedTest extends PekkoHttpScalaClientInstrumentationTest implements TestingGenericHttpNamingConventions.ClientV1{ - } diff --git a/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/baseTest/scala/PekkoHttpTestWebServer.scala b/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/baseTest/scala/PekkoHttpTestWebServer.scala index 9145991bca5..54a4983daff 100644 --- a/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/baseTest/scala/PekkoHttpTestWebServer.scala +++ b/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/baseTest/scala/PekkoHttpTestWebServer.scala @@ -158,8 +158,9 @@ object PekkoHttpTestWebServer { endpoint, new Closure[Future[RouteResult]](()) { def doCall(): Future[RouteResult] = { - try inner(())(ctx).fast - .recoverWith(handleException)(ctx.executionContext) + try + inner(())(ctx).fast + .recoverWith(handleException)(ctx.executionContext) catch { case NonFatal(e) => handleException diff --git a/dd-java-agent/instrumentation/play-ws/play-ws-1.0/src/test/groovy/PlayWSClientTest.groovy b/dd-java-agent/instrumentation/play-ws/play-ws-1.0/src/test/groovy/PlayWSClientTest.groovy index db35a8baec7..c7c21648d88 100644 --- a/dd-java-agent/instrumentation/play-ws/play-ws-1.0/src/test/groovy/PlayWSClientTest.groovy +++ b/dd-java-agent/instrumentation/play-ws/play-ws-1.0/src/test/groovy/PlayWSClientTest.groovy @@ -137,10 +137,8 @@ class PlayScalaStreamedWSClientTest extends PlayWSClientTestBase { @Timeout(5) class PlayJavaWSClientV0ForkedTest extends PlayJavaWSClientTest { - } @Timeout(5) class PlayJavaWSClientV1ForkedTest extends PlayJavaWSClientTest implements TestingGenericHttpNamingConventions.ClientV1 { - } diff --git a/dd-java-agent/instrumentation/play-ws/play-ws-2.0/src/test/groovy/PlayWSClientTest.groovy b/dd-java-agent/instrumentation/play-ws/play-ws-2.0/src/test/groovy/PlayWSClientTest.groovy index 983f74c9157..3763b4555f0 100644 --- a/dd-java-agent/instrumentation/play-ws/play-ws-2.0/src/test/groovy/PlayWSClientTest.groovy +++ b/dd-java-agent/instrumentation/play-ws/play-ws-2.0/src/test/groovy/PlayWSClientTest.groovy @@ -132,9 +132,7 @@ class PlayScalaStreamedWSClientTest extends PlayWSClientTestBase { } class PlayJavaWSClientV0ForkedTest extends PlayJavaWSClientTest { - } class PlayJavaWSClientV1ForkedTest extends PlayJavaWSClientTest implements TestingGenericHttpNamingConventions.ClientV1 { - } diff --git a/dd-java-agent/instrumentation/play-ws/play-ws-common/src/test/groovy/PlayWSClientTestBase.groovy b/dd-java-agent/instrumentation/play-ws/play-ws-common/src/test/groovy/PlayWSClientTestBase.groovy index 22b1a54fa29..f5c0ffbb471 100644 --- a/dd-java-agent/instrumentation/play-ws/play-ws-common/src/test/groovy/PlayWSClientTestBase.groovy +++ b/dd-java-agent/instrumentation/play-ws/play-ws-common/src/test/groovy/PlayWSClientTestBase.groovy @@ -99,5 +99,4 @@ abstract class PlayWSClientTestBase extends HttpClientTest { super.assertErrorTags(tagsAssert, exception) } } - } diff --git a/dd-java-agent/instrumentation/play/play-2.4/src/main/java/datadog/trace/instrumentation/play25/appsec/HttpErrorHandlerInstrumentation.java b/dd-java-agent/instrumentation/play/play-2.4/src/main/java/datadog/trace/instrumentation/play25/appsec/HttpErrorHandlerInstrumentation.java index 398778e3b3f..64e9cbc216f 100644 --- a/dd-java-agent/instrumentation/play/play-2.4/src/main/java/datadog/trace/instrumentation/play25/appsec/HttpErrorHandlerInstrumentation.java +++ b/dd-java-agent/instrumentation/play/play-2.4/src/main/java/datadog/trace/instrumentation/play25/appsec/HttpErrorHandlerInstrumentation.java @@ -21,7 +21,9 @@ import play.api.http.HttpErrorHandler; import play.api.mvc.RequestHeader; -/** @see HttpErrorHandler#onServerError(RequestHeader, Throwable) */ +/** + * @see HttpErrorHandler#onServerError(RequestHeader, Throwable) + */ @AutoService(InstrumenterModule.class) public class HttpErrorHandlerInstrumentation extends InstrumenterModule.AppSec implements Instrumenter.ForTypeHierarchy, Instrumenter.HasMethodAdvice { diff --git a/dd-java-agent/instrumentation/play/play-2.4/src/main/java/datadog/trace/instrumentation/play25/appsec/PathPatternInstrumentation.java b/dd-java-agent/instrumentation/play/play-2.4/src/main/java/datadog/trace/instrumentation/play25/appsec/PathPatternInstrumentation.java index cce17b342ec..3392458cd70 100644 --- a/dd-java-agent/instrumentation/play/play-2.4/src/main/java/datadog/trace/instrumentation/play25/appsec/PathPatternInstrumentation.java +++ b/dd-java-agent/instrumentation/play/play-2.4/src/main/java/datadog/trace/instrumentation/play25/appsec/PathPatternInstrumentation.java @@ -12,7 +12,9 @@ import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.agent.tooling.muzzle.Reference; -/** @see play.core.routing.PathPattern#apply(String) */ +/** + * @see play.core.routing.PathPattern#apply(String) + */ @AutoService(InstrumenterModule.class) public class PathPatternInstrumentation extends InstrumenterModule.AppSec implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice { diff --git a/dd-java-agent/instrumentation/play/play-2.4/src/main/java/datadog/trace/instrumentation/play25/appsec/PlayBodyParsersInstrumentation.java b/dd-java-agent/instrumentation/play/play-2.4/src/main/java/datadog/trace/instrumentation/play25/appsec/PlayBodyParsersInstrumentation.java index da48a0aa606..73789c747c5 100644 --- a/dd-java-agent/instrumentation/play/play-2.4/src/main/java/datadog/trace/instrumentation/play25/appsec/PlayBodyParsersInstrumentation.java +++ b/dd-java-agent/instrumentation/play/play-2.4/src/main/java/datadog/trace/instrumentation/play25/appsec/PlayBodyParsersInstrumentation.java @@ -12,7 +12,9 @@ import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.agent.tooling.muzzle.Reference; -/** @see play.api.mvc.BodyParsers.parse$#tolerantText(long) */ +/** + * @see play.api.mvc.BodyParsers.parse$#tolerantText(long) + */ @AutoService(InstrumenterModule.class) public class PlayBodyParsersInstrumentation extends InstrumenterModule.AppSec implements Instrumenter.ForKnownTypes, Instrumenter.HasMethodAdvice { diff --git a/dd-java-agent/instrumentation/play/play-2.4/src/main/java/datadog/trace/instrumentation/play25/appsec/RoutingDslInstrumentation.java b/dd-java-agent/instrumentation/play/play-2.4/src/main/java/datadog/trace/instrumentation/play25/appsec/RoutingDslInstrumentation.java index 6b8aebcb01f..9d5b074e9c6 100644 --- a/dd-java-agent/instrumentation/play/play-2.4/src/main/java/datadog/trace/instrumentation/play25/appsec/RoutingDslInstrumentation.java +++ b/dd-java-agent/instrumentation/play/play-2.4/src/main/java/datadog/trace/instrumentation/play25/appsec/RoutingDslInstrumentation.java @@ -9,7 +9,9 @@ import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.agent.tooling.muzzle.Reference; -/** @see play.routing.RoutingDsl.Route */ +/** + * @see play.routing.RoutingDsl.Route + */ @AutoService(InstrumenterModule.class) public class RoutingDslInstrumentation extends InstrumenterModule.AppSec implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice { diff --git a/dd-java-agent/instrumentation/play/play-2.4/src/main/java/datadog/trace/instrumentation/play25/appsec/SirdPathExtractorInstrumentation.java b/dd-java-agent/instrumentation/play/play-2.4/src/main/java/datadog/trace/instrumentation/play25/appsec/SirdPathExtractorInstrumentation.java index a11dc743f49..75a10e1c9e4 100644 --- a/dd-java-agent/instrumentation/play/play-2.4/src/main/java/datadog/trace/instrumentation/play25/appsec/SirdPathExtractorInstrumentation.java +++ b/dd-java-agent/instrumentation/play/play-2.4/src/main/java/datadog/trace/instrumentation/play25/appsec/SirdPathExtractorInstrumentation.java @@ -11,7 +11,9 @@ import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.agent.tooling.muzzle.Reference; -/** @see play.api.routing.sird.PathExtractor */ +/** + * @see play.api.routing.sird.PathExtractor + */ @AutoService(InstrumenterModule.class) public class SirdPathExtractorInstrumentation extends InstrumenterModule.AppSec implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice { diff --git a/dd-java-agent/instrumentation/play/play-2.4/src/main/java/datadog/trace/instrumentation/play25/appsec/TolerantJsonInstrumentation.java b/dd-java-agent/instrumentation/play/play-2.4/src/main/java/datadog/trace/instrumentation/play25/appsec/TolerantJsonInstrumentation.java index e94cfc0bc81..2b29fce0459 100644 --- a/dd-java-agent/instrumentation/play/play-2.4/src/main/java/datadog/trace/instrumentation/play25/appsec/TolerantJsonInstrumentation.java +++ b/dd-java-agent/instrumentation/play/play-2.4/src/main/java/datadog/trace/instrumentation/play25/appsec/TolerantJsonInstrumentation.java @@ -12,7 +12,9 @@ import datadog.trace.agent.tooling.muzzle.Reference; import play.mvc.Http; -/** @see play.mvc.BodyParser.TolerantJson#parse(Http.RequestHeader, ByteString) */ +/** + * @see play.mvc.BodyParser.TolerantJson#parse(Http.RequestHeader, ByteString) + */ @AutoService(InstrumenterModule.class) public class TolerantJsonInstrumentation extends InstrumenterModule.AppSec implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice { diff --git a/dd-java-agent/instrumentation/play/play-2.4/src/main/java_play25/datadog/trace/instrumentation/play25/appsec/BodyParserDelegatingBodyParserApplyAdvice.java b/dd-java-agent/instrumentation/play/play-2.4/src/main/java_play25/datadog/trace/instrumentation/play25/appsec/BodyParserDelegatingBodyParserApplyAdvice.java index c74ca29dace..8ad4565fb25 100644 --- a/dd-java-agent/instrumentation/play/play-2.4/src/main/java_play25/datadog/trace/instrumentation/play25/appsec/BodyParserDelegatingBodyParserApplyAdvice.java +++ b/dd-java-agent/instrumentation/play/play-2.4/src/main/java_play25/datadog/trace/instrumentation/play25/appsec/BodyParserDelegatingBodyParserApplyAdvice.java @@ -6,7 +6,9 @@ import play.mvc.BodyParser; import play.mvc.Http; -/** @see BodyParser.DelegatingBodyParser#apply(Http.RequestHeader) */ +/** + * @see BodyParser.DelegatingBodyParser#apply(Http.RequestHeader) + */ public class BodyParserDelegatingBodyParserApplyAdvice { @Advice.OnMethodExit(suppress = Throwable.class) static void after( diff --git a/dd-java-agent/instrumentation/play/play-2.4/src/main/java_play25/datadog/trace/instrumentation/play25/appsec/BodyParserFormUrlEncodedParseAdvice.java b/dd-java-agent/instrumentation/play/play-2.4/src/main/java_play25/datadog/trace/instrumentation/play25/appsec/BodyParserFormUrlEncodedParseAdvice.java index a73eed6a3dc..f253c55a65d 100644 --- a/dd-java-agent/instrumentation/play/play-2.4/src/main/java_play25/datadog/trace/instrumentation/play25/appsec/BodyParserFormUrlEncodedParseAdvice.java +++ b/dd-java-agent/instrumentation/play/play-2.4/src/main/java_play25/datadog/trace/instrumentation/play25/appsec/BodyParserFormUrlEncodedParseAdvice.java @@ -6,7 +6,9 @@ import net.bytebuddy.asm.Advice; import play.mvc.Http; -/** @see play.mvc.BodyParser.FormUrlEncoded#parse(Http.RequestHeader, ByteString) */ +/** + * @see play.mvc.BodyParser.FormUrlEncoded#parse(Http.RequestHeader, ByteString) + */ public class BodyParserFormUrlEncodedParseAdvice { @Advice.OnMethodExit(suppress = Throwable.class, onThrowable = Throwable.class) static void after( diff --git a/dd-java-agent/instrumentation/play/play-2.4/src/main/java_play25/datadog/trace/instrumentation/play25/appsec/PlayBodyParsersMultipartFormDataAdvice.java b/dd-java-agent/instrumentation/play/play-2.4/src/main/java_play25/datadog/trace/instrumentation/play25/appsec/PlayBodyParsersMultipartFormDataAdvice.java index 58c364e1675..1250bc4a40a 100644 --- a/dd-java-agent/instrumentation/play/play-2.4/src/main/java_play25/datadog/trace/instrumentation/play25/appsec/PlayBodyParsersMultipartFormDataAdvice.java +++ b/dd-java-agent/instrumentation/play/play-2.4/src/main/java_play25/datadog/trace/instrumentation/play25/appsec/PlayBodyParsersMultipartFormDataAdvice.java @@ -5,7 +5,9 @@ import play.core.Execution; import scala.Function1; -/** @see play.api.mvc.BodyParsers.parse$#multipartFormData(Function1, long) */ +/** + * @see play.api.mvc.BodyParsers.parse$#multipartFormData(Function1, long) + */ public class PlayBodyParsersMultipartFormDataAdvice { @Advice.OnMethodExit(suppress = Throwable.class) static void after( diff --git a/dd-java-agent/instrumentation/play/play-2.4/src/main/java_play25/datadog/trace/instrumentation/play25/appsec/PlayBodyParsersTolerantJsonAdvice.java b/dd-java-agent/instrumentation/play/play-2.4/src/main/java_play25/datadog/trace/instrumentation/play25/appsec/PlayBodyParsersTolerantJsonAdvice.java index ac72c6eadc9..76272033305 100644 --- a/dd-java-agent/instrumentation/play/play-2.4/src/main/java_play25/datadog/trace/instrumentation/play25/appsec/PlayBodyParsersTolerantJsonAdvice.java +++ b/dd-java-agent/instrumentation/play/play-2.4/src/main/java_play25/datadog/trace/instrumentation/play25/appsec/PlayBodyParsersTolerantJsonAdvice.java @@ -5,7 +5,9 @@ import play.api.mvc.BodyParser; import play.core.Execution; -/** @see play.api.mvc.BodyParsers.parse$#tolerantJson(int) */ +/** + * @see play.api.mvc.BodyParsers.parse$#tolerantJson(int) + */ public class PlayBodyParsersTolerantJsonAdvice { @Advice.OnMethodExit(suppress = Throwable.class) static void after(@Advice.Return(readOnly = false) BodyParser parser) { diff --git a/dd-java-agent/instrumentation/play/play-2.4/src/main/java_play25/datadog/trace/instrumentation/play25/appsec/SirdPathExtractorExtractAdvice.java b/dd-java-agent/instrumentation/play/play-2.4/src/main/java_play25/datadog/trace/instrumentation/play25/appsec/SirdPathExtractorExtractAdvice.java index 2b42660650a..7de650729c0 100644 --- a/dd-java-agent/instrumentation/play/play-2.4/src/main/java_play25/datadog/trace/instrumentation/play25/appsec/SirdPathExtractorExtractAdvice.java +++ b/dd-java-agent/instrumentation/play/play-2.4/src/main/java_play25/datadog/trace/instrumentation/play25/appsec/SirdPathExtractorExtractAdvice.java @@ -9,7 +9,9 @@ import net.bytebuddy.asm.Advice; import scala.collection.immutable.List; -/** @see play.api.routing.sird.PathExtractor#extract(java.lang.String) */ +/** + * @see play.api.routing.sird.PathExtractor#extract(java.lang.String) + */ @RequiresRequestContext(RequestContextSlot.APPSEC) public class SirdPathExtractorExtractAdvice { @Advice.OnMethodExit(suppress = Throwable.class, onThrowable = Throwable.class) diff --git a/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play26/appsec/DelegatingBodyParserInstrumentation.java b/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play26/appsec/DelegatingBodyParserInstrumentation.java index 07d4ebf571d..5eef4e9d065 100644 --- a/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play26/appsec/DelegatingBodyParserInstrumentation.java +++ b/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play26/appsec/DelegatingBodyParserInstrumentation.java @@ -15,7 +15,9 @@ import play.mvc.BodyParser; import play.mvc.Http; -/** @see play.mvc.BodyParser.DelegatingBodyParser */ +/** + * @see play.mvc.BodyParser.DelegatingBodyParser + */ @AutoService(InstrumenterModule.class) public class DelegatingBodyParserInstrumentation extends InstrumenterModule.AppSec implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice { diff --git a/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play26/appsec/FormUrlEncodedInstrumentation.java b/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play26/appsec/FormUrlEncodedInstrumentation.java index a4f6c197ae9..1fedaad2fb6 100644 --- a/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play26/appsec/FormUrlEncodedInstrumentation.java +++ b/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play26/appsec/FormUrlEncodedInstrumentation.java @@ -14,7 +14,9 @@ import net.bytebuddy.asm.Advice; import play.mvc.Http; -/** @see play.mvc.BodyParser.FormUrlEncoded#parse(Http.RequestHeader, ByteString) */ +/** + * @see play.mvc.BodyParser.FormUrlEncoded#parse(Http.RequestHeader, ByteString) + */ @AutoService(InstrumenterModule.class) public class FormUrlEncodedInstrumentation extends InstrumenterModule.AppSec implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice { diff --git a/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play26/appsec/HttpErrorHandlerInstrumentation.java b/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play26/appsec/HttpErrorHandlerInstrumentation.java index 5bb87c9e7ac..fdbb4bcc693 100644 --- a/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play26/appsec/HttpErrorHandlerInstrumentation.java +++ b/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play26/appsec/HttpErrorHandlerInstrumentation.java @@ -22,7 +22,9 @@ import play.api.http.HttpErrorHandler; import play.api.mvc.RequestHeader; -/** @see HttpErrorHandler#onServerError(RequestHeader, Throwable) */ +/** + * @see HttpErrorHandler#onServerError(RequestHeader, Throwable) + */ @AutoService(InstrumenterModule.class) public class HttpErrorHandlerInstrumentation extends InstrumenterModule.AppSec implements Instrumenter.ForTypeHierarchy, Instrumenter.HasMethodAdvice { diff --git a/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play26/appsec/PathPatternInstrumentation.java b/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play26/appsec/PathPatternInstrumentation.java index 66253f4b29e..becc3b54a44 100644 --- a/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play26/appsec/PathPatternInstrumentation.java +++ b/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play26/appsec/PathPatternInstrumentation.java @@ -22,7 +22,9 @@ import scala.collection.Iterator; import scala.util.Either; -/** @see play.core.routing.PathPattern#apply(String) */ +/** + * @see play.core.routing.PathPattern#apply(String) + */ @AutoService(InstrumenterModule.class) public class PathPatternInstrumentation extends InstrumenterModule.AppSec implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice { diff --git a/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play26/appsec/PlayBodyParsersInstrumentation.java b/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play26/appsec/PlayBodyParsersInstrumentation.java index 07fa55a46fa..6e92ff8eab8 100644 --- a/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play26/appsec/PlayBodyParsersInstrumentation.java +++ b/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play26/appsec/PlayBodyParsersInstrumentation.java @@ -20,7 +20,9 @@ import scala.collection.immutable.Map; import scala.xml.NodeSeq; -/** @see play.api.mvc.PlayBodyParsers$class#tolerantFormUrlEncoded(PlayBodyParsers, int) */ +/** + * @see play.api.mvc.PlayBodyParsers$class#tolerantFormUrlEncoded(PlayBodyParsers, int) + */ @AutoService(InstrumenterModule.class) public class PlayBodyParsersInstrumentation extends InstrumenterModule.AppSec implements Instrumenter.ForKnownTypes, Instrumenter.HasMethodAdvice { diff --git a/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play26/appsec/RoutingDslInstrumentation.java b/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play26/appsec/RoutingDslInstrumentation.java index 3a748eb17e1..d181146f9e6 100644 --- a/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play26/appsec/RoutingDslInstrumentation.java +++ b/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play26/appsec/RoutingDslInstrumentation.java @@ -15,7 +15,9 @@ import play.libs.F; import play.routing.RoutingDsl; -/** @see RoutingDsl.Route */ +/** + * @see RoutingDsl.Route + */ @AutoService(InstrumenterModule.class) public class RoutingDslInstrumentation extends InstrumenterModule.AppSec implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice { diff --git a/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play26/appsec/SirdPathExtractorInstrumentation.java b/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play26/appsec/SirdPathExtractorInstrumentation.java index f361a39e699..375c17897ff 100644 --- a/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play26/appsec/SirdPathExtractorInstrumentation.java +++ b/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play26/appsec/SirdPathExtractorInstrumentation.java @@ -19,7 +19,9 @@ import net.bytebuddy.asm.Advice; import scala.collection.immutable.List; -/** @see play.api.routing.sird.PathExtractor */ +/** + * @see play.api.routing.sird.PathExtractor + */ @AutoService(InstrumenterModule.class) public class SirdPathExtractorInstrumentation extends InstrumenterModule.AppSec implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice { diff --git a/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play26/appsec/TolerantJsonInstrumentation.java b/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play26/appsec/TolerantJsonInstrumentation.java index a5fc8e4e2ce..bac21e81579 100644 --- a/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play26/appsec/TolerantJsonInstrumentation.java +++ b/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play26/appsec/TolerantJsonInstrumentation.java @@ -18,7 +18,9 @@ import net.bytebuddy.asm.Advice; import play.mvc.Http; -/** @see play.mvc.BodyParser.TolerantJson#parse(Http.RequestHeader, ByteString) */ +/** + * @see play.mvc.BodyParser.TolerantJson#parse(Http.RequestHeader, ByteString) + */ @AutoService(InstrumenterModule.class) public class TolerantJsonInstrumentation extends InstrumenterModule.AppSec implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice { diff --git a/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play26/appsec/TolerantTextInstrumentation.java b/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play26/appsec/TolerantTextInstrumentation.java index 32a52810237..e10524cbcfc 100644 --- a/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play26/appsec/TolerantTextInstrumentation.java +++ b/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play26/appsec/TolerantTextInstrumentation.java @@ -15,7 +15,9 @@ import net.bytebuddy.asm.Advice; import play.mvc.Http; -/** @see play.mvc.BodyParser.TolerantText#parse(Http.RequestHeader, ByteString) */ +/** + * @see play.mvc.BodyParser.TolerantText#parse(Http.RequestHeader, ByteString) + */ @AutoService(InstrumenterModule.class) public class TolerantTextInstrumentation extends InstrumenterModule.AppSec implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice { diff --git a/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play26/appsec/TolerantXmlInstrumentation.java b/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play26/appsec/TolerantXmlInstrumentation.java index f0e24fcf284..8c0fb1c27ad 100644 --- a/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play26/appsec/TolerantXmlInstrumentation.java +++ b/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play26/appsec/TolerantXmlInstrumentation.java @@ -15,7 +15,9 @@ import net.bytebuddy.asm.Advice; import play.mvc.Http; -/** @see play.mvc.BodyParser.TolerantXml#parse(Http.RequestHeader, ByteString) */ +/** + * @see play.mvc.BodyParser.TolerantXml#parse(Http.RequestHeader, ByteString) + */ @AutoService(InstrumenterModule.class) public class TolerantXmlInstrumentation extends InstrumenterModule.AppSec implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice { diff --git a/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play27/appsec/RoutingDsl27Instrumentation.java b/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play27/appsec/RoutingDsl27Instrumentation.java index e8f5da07dc7..930fc97b218 100644 --- a/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play27/appsec/RoutingDsl27Instrumentation.java +++ b/dd-java-agent/instrumentation/play/play-2.6/src/main/java/datadog/trace/instrumentation/play27/appsec/RoutingDsl27Instrumentation.java @@ -10,7 +10,9 @@ import datadog.trace.agent.tooling.muzzle.Reference; import play.routing.RoutingDsl; -/** @see RoutingDsl.Route */ +/** + * @see RoutingDsl.Route + */ @AutoService(InstrumenterModule.class) public class RoutingDsl27Instrumentation extends InstrumenterModule.AppSec implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice { diff --git a/dd-java-agent/instrumentation/protobuf-3.0/src/main/java/datadog/trace/instrumentation/protobuf_java/SchemaExtractor.java b/dd-java-agent/instrumentation/protobuf-3.0/src/main/java/datadog/trace/instrumentation/protobuf_java/SchemaExtractor.java index fb8317211a0..0ba99cb8260 100644 --- a/dd-java-agent/instrumentation/protobuf-3.0/src/main/java/datadog/trace/instrumentation/protobuf_java/SchemaExtractor.java +++ b/dd-java-agent/instrumentation/protobuf-3.0/src/main/java/datadog/trace/instrumentation/protobuf_java/SchemaExtractor.java @@ -44,7 +44,9 @@ public SchemaExtractor(Descriptor descriptor) { this.descriptor = descriptor; } - /** @return false if no more properties should be extracted */ + /** + * @return false if no more properties should be extracted + */ public static boolean extractProperty( FieldDescriptor field, String schemaName, diff --git a/dd-java-agent/instrumentation/protobuf-3.0/src/test/groovy/com/datadog/instrumentation/protobuf/AbstractMessageInstrumentationTest.groovy b/dd-java-agent/instrumentation/protobuf-3.0/src/test/groovy/com/datadog/instrumentation/protobuf/AbstractMessageInstrumentationTest.groovy index 7a7a289f526..91de032c9b3 100644 --- a/dd-java-agent/instrumentation/protobuf-3.0/src/test/groovy/com/datadog/instrumentation/protobuf/AbstractMessageInstrumentationTest.groovy +++ b/dd-java-agent/instrumentation/protobuf-3.0/src/test/groovy/com/datadog/instrumentation/protobuf/AbstractMessageInstrumentationTest.groovy @@ -81,10 +81,10 @@ class AbstractMessageInstrumentationTest extends InstrumentationSpecification { setup: MyMessage message = MyMessage.newBuilder() - .setId("1") - .setValue("Hello from Protobuf!") - .setNested(OtherMessage.newBuilder().setName("hello").setAge(10).build()) - .build() + .setId("1") + .setValue("Hello from Protobuf!") + .setNested(OtherMessage.newBuilder().setName("hello").setAge(10).build()) + .build() when: var bytes runUnderTrace("parent_serialize") { @@ -171,8 +171,8 @@ class AbstractMessageInstrumentationTest extends InstrumentationSpecification { setup: getTEST_DATA_STREAMS_MONITORING() RecursiveMessage message = RecursiveMessage.newBuilder() - .setValue(12) - .build() + .setValue(12) + .build() when: byte[] bytes runUnderTrace("parent_serialize") { @@ -230,9 +230,9 @@ class AbstractMessageInstrumentationTest extends InstrumentationSpecification { void "test error when de-serializing"() { setup: MyMessage message = MyMessage.newBuilder() - .setId("1") - .setValue("Hello from Protobuf!") - .build() + .setId("1") + .setValue("Hello from Protobuf!") + .build() when: runUnderTrace("parent_deserialize") { AgentSpan span = activeSpan() diff --git a/dd-java-agent/instrumentation/quartz-2.0/build.gradle b/dd-java-agent/instrumentation/quartz-2.0/build.gradle index b2798c9d115..90eb0d84f9f 100644 --- a/dd-java-agent/instrumentation/quartz-2.0/build.gradle +++ b/dd-java-agent/instrumentation/quartz-2.0/build.gradle @@ -29,7 +29,6 @@ dependencies { latestDepTestImplementation group: 'org.quartz-scheduler', name: 'quartz-jobs', version: '+' latestDepTestImplementation group: 'jakarta.transaction', name: 'jakarta.transaction-api', version: '2.0.1' latestDepTestImplementation group: 'org.quartz-scheduler', name: 'quartz', version: '+' - } [ diff --git a/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/test/groovy/RabbitMQTest.groovy b/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/test/groovy/RabbitMQTest.groovy index c3c69a167fd..6f9c420ed9c 100644 --- a/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/test/groovy/RabbitMQTest.groovy +++ b/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/src/test/groovy/RabbitMQTest.groovy @@ -884,7 +884,6 @@ abstract class RabbitMQForkedTest extends RabbitMQTestBase { } class RabbitMQNamingV0Test extends RabbitMQForkedTest { - } class RabbitMQNamingV1ForkedTest extends RabbitMQForkedTest { diff --git a/dd-java-agent/instrumentation/ratpack-1.5/src/main/java/datadog/trace/instrumentation/ratpack/ErrorHandlerAdvice.java b/dd-java-agent/instrumentation/ratpack-1.5/src/main/java/datadog/trace/instrumentation/ratpack/ErrorHandlerAdvice.java index 202911d4297..0b22a95af31 100644 --- a/dd-java-agent/instrumentation/ratpack-1.5/src/main/java/datadog/trace/instrumentation/ratpack/ErrorHandlerAdvice.java +++ b/dd-java-agent/instrumentation/ratpack-1.5/src/main/java/datadog/trace/instrumentation/ratpack/ErrorHandlerAdvice.java @@ -7,7 +7,9 @@ import net.bytebuddy.asm.Advice; import ratpack.handling.Context; -/** @see ratpack.error.ServerErrorHandler#error(Context, Throwable) */ +/** + * @see ratpack.error.ServerErrorHandler#error(Context, Throwable) + */ public class ErrorHandlerAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) public static void captureThrowable( diff --git a/dd-java-agent/instrumentation/ratpack-1.5/src/main/java/datadog/trace/instrumentation/ratpack/PathHandlerAdvice.java b/dd-java-agent/instrumentation/ratpack-1.5/src/main/java/datadog/trace/instrumentation/ratpack/PathHandlerAdvice.java index ba42265d1b9..1c901ccfc5e 100644 --- a/dd-java-agent/instrumentation/ratpack-1.5/src/main/java/datadog/trace/instrumentation/ratpack/PathHandlerAdvice.java +++ b/dd-java-agent/instrumentation/ratpack-1.5/src/main/java/datadog/trace/instrumentation/ratpack/PathHandlerAdvice.java @@ -7,7 +7,9 @@ import ratpack.path.PathBinder; import ratpack.path.internal.TokenPathBinder; -/** @see ratpack.path.internal.PathBindingStorage */ +/** + * @see ratpack.path.internal.PathBindingStorage + */ public class PathHandlerAdvice { // limitation: we can publish tokens for more than one handler in the same request diff --git a/dd-java-agent/instrumentation/ratpack-1.5/src/main/java/datadog/trace/instrumentation/ratpack/RatpackRequestBodyInstrumentation.java b/dd-java-agent/instrumentation/ratpack-1.5/src/main/java/datadog/trace/instrumentation/ratpack/RatpackRequestBodyInstrumentation.java index b4b18a91ec8..f967f88c211 100644 --- a/dd-java-agent/instrumentation/ratpack-1.5/src/main/java/datadog/trace/instrumentation/ratpack/RatpackRequestBodyInstrumentation.java +++ b/dd-java-agent/instrumentation/ratpack-1.5/src/main/java/datadog/trace/instrumentation/ratpack/RatpackRequestBodyInstrumentation.java @@ -8,7 +8,9 @@ import datadog.trace.agent.tooling.InstrumenterModule; import ratpack.server.internal.RequestBody; -/** @see RequestBody#readStream() the instrumented method */ +/** + * @see RequestBody#readStream() the instrumented method + */ @AutoService(InstrumenterModule.class) public class RatpackRequestBodyInstrumentation extends InstrumenterModule.AppSec implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice { diff --git a/dd-java-agent/instrumentation/reactor-core-3.1/build.gradle b/dd-java-agent/instrumentation/reactor-core-3.1/build.gradle index 0aaaab3b118..2eb21f19787 100644 --- a/dd-java-agent/instrumentation/reactor-core-3.1/build.gradle +++ b/dd-java-agent/instrumentation/reactor-core-3.1/build.gradle @@ -28,5 +28,4 @@ dependencies { latestDepTestImplementation group: 'io.projectreactor', name: 'reactor-core', version: '+' // Looks like later versions on reactor need this dependency for some reason even though it is marked as optional. latestDepTestImplementation group: 'io.micrometer', name: 'micrometer-core', version: '1.+' - } diff --git a/dd-java-agent/instrumentation/reactor-core-3.1/src/latestDepTest/groovy/ReactorCoreTest.groovy b/dd-java-agent/instrumentation/reactor-core-3.1/src/latestDepTest/groovy/ReactorCoreTest.groovy index c78aa9b51c7..ce27953ee37 100644 --- a/dd-java-agent/instrumentation/reactor-core-3.1/src/latestDepTest/groovy/ReactorCoreTest.groovy +++ b/dd-java-agent/instrumentation/reactor-core-3.1/src/latestDepTest/groovy/ReactorCoreTest.groovy @@ -260,8 +260,8 @@ class ReactorCoreTest extends InstrumentationSpecification { def "Publisher chain spans have the correct parents from subscription time"() { when: def mono = Mono.just(42) - .map(addOne) - .map(addTwo) + .map(addOne) + .map(addTwo) runUnderTrace("trace-parent") { mono.block() @@ -365,12 +365,12 @@ class ReactorCoreTest extends InstrumentationSpecification { def "Fluxes produce the right number of results on '#schedulerName' scheduler"() { when: List values = Flux.fromIterable(Arrays.asList(1, 2, 3, 4)) - .parallel() - .runOn(scheduler) - .flatMap({ num -> Mono.just(num.toString() + " on " + Thread.currentThread().getName()) }) - .sequential() - .collectList() - .block() + .parallel() + .runOn(scheduler) + .flatMap({ num -> Mono.just(num.toString() + " on " + Thread.currentThread().getName()) }) + .sequential() + .collectList() + .block() then: values.size() == 4 @@ -390,7 +390,9 @@ class ReactorCoreTest extends InstrumentationSpecification { def span = buildSpan() Mono.just(0) .contextWrite(Context.of("dd.span", span)) - .doFinally { ignored -> finishSpan(span) } + .doFinally { + ignored -> finishSpan(span) + } } .map(this::addOneFunc) .block() @@ -399,7 +401,9 @@ class ReactorCoreTest extends InstrumentationSpecification { assertTraces(1, { trace(3) { basicSpan(it, "parent") - basicSpan(it, "contextual", span(0), null, ['span.kind': { true }]) // otel spans sets span.kind + basicSpan(it, "contextual", span(0), null, ['span.kind': { + true + }]) // otel spans sets span.kind span { operationName "addOne" childOfPrevious() @@ -412,9 +416,21 @@ class ReactorCoreTest extends InstrumentationSpecification { }) where: spanType | buildSpan | finishSpan - "datadog" | { TEST_TRACER.buildSpan("contextual").start() } | { AgentSpan span -> span.finish() } - "opentracing" | { GlobalTracer.get().buildSpan("contextual").start() } | { io.opentracing.Span span -> span.finish() } - "otel" | { GlobalOpenTelemetry.get().getTracer("").spanBuilder("contextual").setAttribute("operation.name", "contextual").startSpan() } | { Span span -> span.end() } + "datadog" | { + TEST_TRACER.buildSpan("contextual").start() + } | { + AgentSpan span -> span.finish() + } + "opentracing" | { + GlobalTracer.get().buildSpan("contextual").start() + } | { + io.opentracing.Span span -> span.finish() + } + "otel" | { + GlobalOpenTelemetry.get().getTracer("").spanBuilder("contextual").setAttribute("operation.name", "contextual").startSpan() + } | { + Span span -> span.end() + } } def "Bad values for dd.span are tolerated"() { @@ -508,19 +524,19 @@ class ReactorCoreTest extends InstrumentationSpecification { def publisher = publisherSupplier() publisher.subscribe(new Subscriber() { - void onSubscribe(Subscription subscription) { - subscription.cancel() - } + void onSubscribe(Subscription subscription) { + subscription.cancel() + } - void onNext(Integer t) { - } + void onNext(Integer t) { + } - void onError(Throwable error) { - } + void onError(Throwable error) { + } - void onComplete() { - } - }) + void onComplete() { + } + }) scope.close() span.finish() diff --git a/dd-java-agent/instrumentation/reactor-core-3.1/src/test/groovy/ReactorCoreTest.groovy b/dd-java-agent/instrumentation/reactor-core-3.1/src/test/groovy/ReactorCoreTest.groovy index 2d7715068c7..6507485abb9 100644 --- a/dd-java-agent/instrumentation/reactor-core-3.1/src/test/groovy/ReactorCoreTest.groovy +++ b/dd-java-agent/instrumentation/reactor-core-3.1/src/test/groovy/ReactorCoreTest.groovy @@ -260,8 +260,8 @@ class ReactorCoreTest extends InstrumentationSpecification { def "Publisher chain spans have the correct parents from subscription time"() { when: def mono = Mono.just(42) - .map(addOne) - .map(addTwo) + .map(addOne) + .map(addTwo) runUnderTrace("trace-parent") { mono.block() @@ -365,12 +365,12 @@ class ReactorCoreTest extends InstrumentationSpecification { def "Fluxes produce the right number of results on '#schedulerName' scheduler"() { when: List values = Flux.fromIterable(Arrays.asList(1, 2, 3, 4)) - .parallel() - .runOn(scheduler) - .flatMap({ num -> Mono.just(num.toString() + " on " + Thread.currentThread().getName()) }) - .sequential() - .collectList() - .block() + .parallel() + .runOn(scheduler) + .flatMap({ num -> Mono.just(num.toString() + " on " + Thread.currentThread().getName()) }) + .sequential() + .collectList() + .block() then: values.size() == 4 @@ -390,7 +390,9 @@ class ReactorCoreTest extends InstrumentationSpecification { def span = buildSpan() Mono.just(0) .subscriberContext(Context.of("dd.span", span)) - .doFinally { ignored -> finishSpan(span) } + .doFinally { + ignored -> finishSpan(span) + } } .map(this::addOneFunc) .block() @@ -399,7 +401,9 @@ class ReactorCoreTest extends InstrumentationSpecification { assertTraces(1, { trace(3) { basicSpan(it, "parent") - basicSpan(it, "contextual", span(0), null, ['span.kind': { true }]) // otel spans sets span.kind + basicSpan(it, "contextual", span(0), null, ['span.kind': { + true + }]) // otel spans sets span.kind span { operationName "addOne" childOfPrevious() @@ -412,9 +416,21 @@ class ReactorCoreTest extends InstrumentationSpecification { }) where: spanType | buildSpan | finishSpan - "datadog" | { TEST_TRACER.buildSpan("contextual").start() } | { AgentSpan span -> span.finish() } - "opentracing" | { GlobalTracer.get().buildSpan("contextual").start() } | { io.opentracing.Span span -> span.finish() } - "otel" | { GlobalOpenTelemetry.get().getTracer("").spanBuilder("contextual").setAttribute("operation.name", "contextual").startSpan() } | { Span span -> span.end() } + "datadog" | { + TEST_TRACER.buildSpan("contextual").start() + } | { + AgentSpan span -> span.finish() + } + "opentracing" | { + GlobalTracer.get().buildSpan("contextual").start() + } | { + io.opentracing.Span span -> span.finish() + } + "otel" | { + GlobalOpenTelemetry.get().getTracer("").spanBuilder("contextual").setAttribute("operation.name", "contextual").startSpan() + } | { + Span span -> span.end() + } } def "Bad values for dd.span are tolerated"() { @@ -508,19 +524,19 @@ class ReactorCoreTest extends InstrumentationSpecification { def publisher = publisherSupplier() publisher.subscribe(new Subscriber() { - void onSubscribe(Subscription subscription) { - subscription.cancel() - } + void onSubscribe(Subscription subscription) { + subscription.cancel() + } - void onNext(Integer t) { - } + void onNext(Integer t) { + } - void onError(Throwable error) { - } + void onError(Throwable error) { + } - void onComplete() { - } - }) + void onComplete() { + } + }) scope.close() span.finish() diff --git a/dd-java-agent/instrumentation/resilience4j/resilience4j-2.0/src/test/groovy/StackedDecoratorsTest.groovy b/dd-java-agent/instrumentation/resilience4j/resilience4j-2.0/src/test/groovy/StackedDecoratorsTest.groovy index 513a2635d54..35b6fc86a4f 100644 --- a/dd-java-agent/instrumentation/resilience4j/resilience4j-2.0/src/test/groovy/StackedDecoratorsTest.groovy +++ b/dd-java-agent/instrumentation/resilience4j/resilience4j-2.0/src/test/groovy/StackedDecoratorsTest.groovy @@ -73,7 +73,8 @@ class StackedDecoratorsTest extends InstrumentationSpecification { } } - def T serviceCall(T value, String name) { AgentTracer.startSpan("test", name).finish() + def T serviceCall(T value, String name) { + AgentTracer.startSpan("test", name).finish() value } } diff --git a/dd-java-agent/instrumentation/resilience4j/resilience4j-reactor-2.0/src/test/groovy/FallbackTest.groovy b/dd-java-agent/instrumentation/resilience4j/resilience4j-reactor-2.0/src/test/groovy/FallbackTest.groovy index bc007f44018..50fe95d2cc7 100644 --- a/dd-java-agent/instrumentation/resilience4j/resilience4j-reactor-2.0/src/test/groovy/FallbackTest.groovy +++ b/dd-java-agent/instrumentation/resilience4j/resilience4j-reactor-2.0/src/test/groovy/FallbackTest.groovy @@ -19,11 +19,19 @@ class FallbackTest extends InstrumentationSpecification { .failAfterMaxAttempts(true) .build() Retry retry = Retry.of("R0", config) - def fallback = Flux.just(-1, -2).map({ v -> runUnderTrace("in"+v) { v } }) + def fallback = Flux.just(-1, -2).map({ + v -> runUnderTrace("in"+v) { + v + } + }) def retryOperator = ReactorOperatorFallbackDecorator.decorateRetry(RetryOperator.of(retry), fallback) Flux flux = Flux - .just(1, 2).map({ v -> runUnderTrace("in"+v) { v } }) + .just(1, 2).map({ + v -> runUnderTrace("in"+v) { + v + } + }) .transformDeferred(retryOperator) when: @@ -103,11 +111,19 @@ class FallbackTest extends InstrumentationSpecification { .failAfterMaxAttempts(true) .build() Retry retry = Retry.of("R0", config) - def fallback = Mono.just(-1).map({ v -> runUnderTrace("in"+v) { v } }) + def fallback = Mono.just(-1).map({ + v -> runUnderTrace("in"+v) { + v + } + }) def retryOperator = ReactorOperatorFallbackDecorator.decorateRetry(RetryOperator.of(retry), fallback) Mono source = Mono - .just(1).map({ v -> runUnderTrace("in"+v) { v } }) + .just(1).map({ + v -> runUnderTrace("in"+v) { + v + } + }) .transformDeferred(retryOperator) when: @@ -129,17 +145,20 @@ class FallbackTest extends InstrumentationSpecification { childOf span(0) errored false } - span(2) { // first attempt + span(2) { + // first attempt operationName "in1" childOf span(1) errored false } - span(3) { // second attempt + span(3) { + // second attempt operationName "in1" childOf span(1) errored false } - span(4) {// fallback + span(4) { + // fallback operationName "in-1" childOf span(1) errored false diff --git a/dd-java-agent/instrumentation/scala-concurrent/src/latestDepTest/scala/ScalaConcurrentTests.scala b/dd-java-agent/instrumentation/scala-concurrent/src/latestDepTest/scala/ScalaConcurrentTests.scala index 369d15e5342..91150f6739f 100644 --- a/dd-java-agent/instrumentation/scala-concurrent/src/latestDepTest/scala/ScalaConcurrentTests.scala +++ b/dd-java-agent/instrumentation/scala-concurrent/src/latestDepTest/scala/ScalaConcurrentTests.scala @@ -11,7 +11,8 @@ import scala.concurrent.{Await, Future, Promise} class ScalaConcurrentTests { - /** @return Number of expected spans in the trace + /** @return + * Number of expected spans in the trace */ @Trace def traceWithFutureAndCallbacks(): Integer = { @@ -47,7 +48,8 @@ class ScalaConcurrentTests { return 2 } - /** @return Number of expected spans in the trace + /** @return + * Number of expected spans in the trace */ @Trace def traceWithPromises(): Integer = { @@ -73,7 +75,8 @@ class ScalaConcurrentTests { return 5 } - /** @return Number of expected spans in the trace + /** @return + * Number of expected spans in the trace */ @Trace def tracedWithFutureFirstCompletions(): Integer = { @@ -100,7 +103,8 @@ class ScalaConcurrentTests { return 4 } - /** @return Number of expected spans in the trace + /** @return + * Number of expected spans in the trace */ @Trace def tracedTimeout(): Integer = { diff --git a/dd-java-agent/instrumentation/scala-concurrent/src/test/scala/ScalaConcurrentTests.scala b/dd-java-agent/instrumentation/scala-concurrent/src/test/scala/ScalaConcurrentTests.scala index 369d15e5342..91150f6739f 100644 --- a/dd-java-agent/instrumentation/scala-concurrent/src/test/scala/ScalaConcurrentTests.scala +++ b/dd-java-agent/instrumentation/scala-concurrent/src/test/scala/ScalaConcurrentTests.scala @@ -11,7 +11,8 @@ import scala.concurrent.{Await, Future, Promise} class ScalaConcurrentTests { - /** @return Number of expected spans in the trace + /** @return + * Number of expected spans in the trace */ @Trace def traceWithFutureAndCallbacks(): Integer = { @@ -47,7 +48,8 @@ class ScalaConcurrentTests { return 2 } - /** @return Number of expected spans in the trace + /** @return + * Number of expected spans in the trace */ @Trace def traceWithPromises(): Integer = { @@ -73,7 +75,8 @@ class ScalaConcurrentTests { return 5 } - /** @return Number of expected spans in the trace + /** @return + * Number of expected spans in the trace */ @Trace def tracedWithFutureFirstCompletions(): Integer = { @@ -100,7 +103,8 @@ class ScalaConcurrentTests { return 4 } - /** @return Number of expected spans in the trace + /** @return + * Number of expected spans in the trace */ @Trace def tracedTimeout(): Integer = { diff --git a/dd-java-agent/instrumentation/scalatest/src/test/groovy/ScalatestTest.groovy b/dd-java-agent/instrumentation/scalatest/src/test/groovy/ScalatestTest.groovy index 7686255dcd7..bf105bb747e 100644 --- a/dd-java-agent/instrumentation/scalatest/src/test/groovy/ScalatestTest.groovy +++ b/dd-java-agent/instrumentation/scalatest/src/test/groovy/ScalatestTest.groovy @@ -206,5 +206,4 @@ class ScalatestTest extends CiVisibilityInstrumentationTest { throw new AssertionError("Expected $expectSuccess execution status, got $result") } } - } diff --git a/dd-java-agent/instrumentation/servlet/jakarta-servlet-5.0/src/testFixtures/groovy/datadog/trace/instrumentation/servlet5/AsyncRumServlet.groovy b/dd-java-agent/instrumentation/servlet/jakarta-servlet-5.0/src/testFixtures/groovy/datadog/trace/instrumentation/servlet5/AsyncRumServlet.groovy index 7a1f736ceca..536bc3d9b27 100644 --- a/dd-java-agent/instrumentation/servlet/jakarta-servlet-5.0/src/testFixtures/groovy/datadog/trace/instrumentation/servlet5/AsyncRumServlet.groovy +++ b/dd-java-agent/instrumentation/servlet/jakarta-servlet-5.0/src/testFixtures/groovy/datadog/trace/instrumentation/servlet5/AsyncRumServlet.groovy @@ -40,7 +40,6 @@ class AsyncRumServlet extends HttpServlet { asyncContext.complete() } } - }, 2000) } } diff --git a/dd-java-agent/instrumentation/servlet/javax-servlet/javax-servlet-2.2/src/test/groovy/JettyServlet2Test.groovy b/dd-java-agent/instrumentation/servlet/javax-servlet/javax-servlet-2.2/src/test/groovy/JettyServlet2Test.groovy index a9d75ed3751..c4783375736 100644 --- a/dd-java-agent/instrumentation/servlet/javax-servlet/javax-servlet-2.2/src/test/groovy/JettyServlet2Test.groovy +++ b/dd-java-agent/instrumentation/servlet/javax-servlet/javax-servlet-2.2/src/test/groovy/JettyServlet2Test.groovy @@ -204,11 +204,9 @@ abstract class JettyServlet2Test extends HttpServerTest { } class JettyServlet2V0ForkedTest extends JettyServlet2Test implements TestingGenericHttpNamingConventions.ServerV0 { - } class JettyServlet2V1ForkedTest extends JettyServlet2Test implements TestingGenericHttpNamingConventions.ServerV1 { - } class IastJettyServlet2ForkedTest extends JettyServlet2Test implements TestingGenericHttpNamingConventions.ServerV0 { @@ -252,5 +250,4 @@ class IastJettyServlet2ForkedTest extends JettyServlet2Test implements TestingGe 0 * appModule.onRealPath(_) 0 * _ } - } diff --git a/dd-java-agent/instrumentation/servlet/javax-servlet/javax-servlet-3.0/src/test/groovy/JettyServlet3Test.groovy b/dd-java-agent/instrumentation/servlet/javax-servlet/javax-servlet-3.0/src/test/groovy/JettyServlet3Test.groovy index 11bf3eb20e7..9a857fd3e2b 100644 --- a/dd-java-agent/instrumentation/servlet/javax-servlet/javax-servlet-3.0/src/test/groovy/JettyServlet3Test.groovy +++ b/dd-java-agent/instrumentation/servlet/javax-servlet/javax-servlet-3.0/src/test/groovy/JettyServlet3Test.groovy @@ -250,7 +250,6 @@ class JettyServlet3SyncRumInjectionForkedTest extends JettyServlet3TestSync { } class JettyServlet3SyncV1ForkedTest extends JettyServlet3TestSync implements TestingGenericHttpNamingConventions.ServerV1 { - } class JettyServlet3TestAsync extends JettyServlet3Test { @@ -273,7 +272,6 @@ class JettyServlet3TestAsync extends JettyServlet3Test { } class JettyServlet3ASyncV1ForkedTest extends JettyServlet3TestAsync implements TestingGenericHttpNamingConventions.ServerV1 { - } class JettyServlet3TestFakeAsync extends JettyServlet3Test { @@ -614,5 +612,4 @@ class IastJettyServlet3ForkedTest extends JettyServlet3TestSync { 0 * appModule.checkSessionTrackingModes(_) 0 * _ } - } diff --git a/dd-java-agent/instrumentation/servlet/javax-servlet/javax-servlet-3.0/src/test/groovy/TomcatServlet3Test.groovy b/dd-java-agent/instrumentation/servlet/javax-servlet/javax-servlet-3.0/src/test/groovy/TomcatServlet3Test.groovy index d59e5de7d26..4537045b703 100644 --- a/dd-java-agent/instrumentation/servlet/javax-servlet/javax-servlet-3.0/src/test/groovy/TomcatServlet3Test.groovy +++ b/dd-java-agent/instrumentation/servlet/javax-servlet/javax-servlet-3.0/src/test/groovy/TomcatServlet3Test.groovy @@ -320,7 +320,6 @@ class ErrorHandlerValve extends ErrorReportValve { } else if (response.message) { response.reporter.write(response.message) } - } catch (IOException e) { e.printStackTrace() } @@ -373,7 +372,6 @@ class TomcatServlet3TestSync extends TomcatServlet3Test { } class TomcatServlet3SyncV1ForkedTest extends TomcatServlet3TestSync implements TestingGenericHttpNamingConventions.ServerV1 { - } class TomcatServlet3TestAsync extends TomcatServlet3Test { @@ -393,11 +391,9 @@ class TomcatServlet3TestAsync extends TomcatServlet3Test { // The exception will just cause an async timeout false } - } class TomcatServlet3AsyncV1ForkedTest extends TomcatServlet3TestAsync implements TestingGenericHttpNamingConventions.ServerV1 { - } class TomcatServlet3TestFakeAsync extends TomcatServlet3Test { @@ -581,5 +577,4 @@ class IastTomcatServlet3ForkedTest extends TomcatServlet3TestSync { 0 * appModule.checkSessionTrackingModes(_) 0 * _ } - } diff --git a/dd-java-agent/instrumentation/spark/src/testFixtures/groovy/datadog/trace/instrumentation/spark/AbstractSpark32SqlTest.groovy b/dd-java-agent/instrumentation/spark/src/testFixtures/groovy/datadog/trace/instrumentation/spark/AbstractSpark32SqlTest.groovy index ee97f8ed87b..a80eb6ab1cf 100644 --- a/dd-java-agent/instrumentation/spark/src/testFixtures/groovy/datadog/trace/instrumentation/spark/AbstractSpark32SqlTest.groovy +++ b/dd-java-agent/instrumentation/spark/src/testFixtures/groovy/datadog/trace/instrumentation/spark/AbstractSpark32SqlTest.groovy @@ -1302,7 +1302,8 @@ abstract class AbstractSpark32SqlTest extends InstrumentationSpecification { def actualParsed = jsonSlurper.parseText(actualPlans[i]) // Extract all nodeIds from actual plans and create mapping - extractNodeIds(actualParsed).each { nodeId -> + extractNodeIds(actualParsed).each { + nodeId -> if (nodeId != null && nodeId != "any" && !actualToNormalized.containsKey(nodeId)) { actualToNormalized[nodeId] = "nodeId_${nodeIdCounter++}" } diff --git a/dd-java-agent/instrumentation/spring/spring-cloud-zuul-2.0/build.gradle b/dd-java-agent/instrumentation/spring/spring-cloud-zuul-2.0/build.gradle index d846f5afea2..9343bd05c8a 100644 --- a/dd-java-agent/instrumentation/spring/spring-cloud-zuul-2.0/build.gradle +++ b/dd-java-agent/instrumentation/spring/spring-cloud-zuul-2.0/build.gradle @@ -20,7 +20,6 @@ tasks.named("compileJava", JavaCompile) { configureCompiler(it, 17, JavaVersion.VERSION_1_8) doFirst { println it.javaCompiler.get().executablePath - } } diff --git a/dd-java-agent/instrumentation/spring/spring-messaging-4.0/build.gradle b/dd-java-agent/instrumentation/spring/spring-messaging-4.0/build.gradle index aaee162df55..1815e56cd32 100644 --- a/dd-java-agent/instrumentation/spring/spring-messaging-4.0/build.gradle +++ b/dd-java-agent/instrumentation/spring/spring-messaging-4.0/build.gradle @@ -40,5 +40,4 @@ dependencies { latestDepTestImplementation group: 'org.springframework', name: 'spring-messaging', version: '6.+', { exclude group: 'org.slf4j', module: 'slf4j-api' } - } diff --git a/dd-java-agent/instrumentation/spring/spring-security/spring-security-5.0/src/test/groovy/datadog/trace/instrumentation/springsecurity5/AppConfig.groovy b/dd-java-agent/instrumentation/spring/spring-security/spring-security-5.0/src/test/groovy/datadog/trace/instrumentation/springsecurity5/AppConfig.groovy index de5b6442990..4928b34627c 100644 --- a/dd-java-agent/instrumentation/spring/spring-security/spring-security-5.0/src/test/groovy/datadog/trace/instrumentation/springsecurity5/AppConfig.groovy +++ b/dd-java-agent/instrumentation/spring/spring-security/spring-security-5.0/src/test/groovy/datadog/trace/instrumentation/springsecurity5/AppConfig.groovy @@ -7,5 +7,4 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer // Component scan defeats the purpose of configuring with specific classes @SpringBootApplication(exclude = [ErrorMvcAutoConfiguration]) class AppConfig implements WebMvcConfigurer { - } diff --git a/dd-java-agent/instrumentation/spring/spring-security/spring-security-6.0/src/test/groovy/datadog/trace/instrumentation/springsecurity6/AppConfig.groovy b/dd-java-agent/instrumentation/spring/spring-security/spring-security-6.0/src/test/groovy/datadog/trace/instrumentation/springsecurity6/AppConfig.groovy index c33b48693a4..058321686f3 100644 --- a/dd-java-agent/instrumentation/spring/spring-security/spring-security-6.0/src/test/groovy/datadog/trace/instrumentation/springsecurity6/AppConfig.groovy +++ b/dd-java-agent/instrumentation/spring/spring-security/spring-security-6.0/src/test/groovy/datadog/trace/instrumentation/springsecurity6/AppConfig.groovy @@ -7,5 +7,4 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer // Component scan defeats the purpose of configuring with specific classes @SpringBootApplication(exclude = [ErrorMvcAutoConfiguration]) class AppConfig implements WebMvcConfigurer { - } diff --git a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/bootTest/groovy/SpringWebfluxTest.groovy b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/bootTest/groovy/SpringWebfluxTest.groovy index ece3826d269..b055f7b62fd 100644 --- a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/bootTest/groovy/SpringWebfluxTest.groovy +++ b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/bootTest/groovy/SpringWebfluxTest.groovy @@ -546,7 +546,8 @@ class SpringWebfluxTest extends InstrumentationSpecification { "$Tags.COMPONENT" "spring-webflux-controller" "$Tags.SPAN_KIND" Tags.SPAN_KIND_SERVER "request.predicate" "(GET && /double-greet-redirect)" - "handler.type" { String tagVal -> + "handler.type" { + String tagVal -> return (tagVal.contains(INNER_HANDLER_FUNCTION_CLASS_TAG_PREFIX) || tagVal.contains("Lambda")) } @@ -590,7 +591,8 @@ class SpringWebfluxTest extends InstrumentationSpecification { "$Tags.COMPONENT" "spring-webflux-controller" "$Tags.SPAN_KIND" Tags.SPAN_KIND_SERVER "request.predicate" "(GET && /double-greet)" - "handler.type" { String tagVal -> + "handler.type" { + String tagVal -> return tagVal.contains(INNER_HANDLER_FUNCTION_CLASS_TAG_PREFIX) } defaultTags() @@ -745,17 +747,17 @@ class SpringWebfluxTest extends InstrumentationSpecification { } def clientSpan( - TraceAssert trace, - Object parentSpan, - String operation, - String component, - String method = "GET", - URI uri, - Integer status = 200, - boolean error = false, - Throwable exception = null, - boolean tagQueryString = false, - Map extraTags = null) { + TraceAssert trace, + Object parentSpan, + String operation, + String component, + String method = "GET", + URI uri, + Integer status = 200, + boolean error = false, + Throwable exception = null, + boolean tagQueryString = false, + Map extraTags = null) { def ret def expectedQuery = tagQueryString ? uri.query : null diff --git a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/iast/DataBufferInstrumentation.java b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/iast/DataBufferInstrumentation.java index 80c36ff191d..98e471dc6d7 100644 --- a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/iast/DataBufferInstrumentation.java +++ b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/iast/DataBufferInstrumentation.java @@ -9,7 +9,9 @@ import datadog.trace.agent.tooling.InstrumenterModule; import org.springframework.core.io.buffer.DataBuffer; -/** @see DataBuffer#asInputStream() */ +/** + * @see DataBuffer#asInputStream() + */ @AutoService(InstrumenterModule.class) public class DataBufferInstrumentation extends InstrumenterModule.Iast implements Instrumenter.ForKnownTypes, Instrumenter.HasMethodAdvice { diff --git a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/iast/HttpHeadersInstrumentation.java b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/iast/HttpHeadersInstrumentation.java index abfa303e104..2b669b91418 100644 --- a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/iast/HttpHeadersInstrumentation.java +++ b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/iast/HttpHeadersInstrumentation.java @@ -8,7 +8,9 @@ import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -/** @see org.springframework.http.HttpHeaders */ +/** + * @see org.springframework.http.HttpHeaders + */ @AutoService(InstrumenterModule.class) public class HttpHeadersInstrumentation extends InstrumenterModule.Iast implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice { diff --git a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/iast/Json2TokenizerInstrumentation.java b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/iast/Json2TokenizerInstrumentation.java index 8244fe15f15..6f98f2cd8c9 100644 --- a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/iast/Json2TokenizerInstrumentation.java +++ b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/iast/Json2TokenizerInstrumentation.java @@ -10,7 +10,9 @@ import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -/** @see org.springframework.http.codec.json.Jackson2Tokenizer */ +/** + * @see org.springframework.http.codec.json.Jackson2Tokenizer + */ @AutoService(InstrumenterModule.class) public class Json2TokenizerInstrumentation extends InstrumenterModule.Iast implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice { diff --git a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/iast/ServerHttpRequestInstrumentation.java b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/iast/ServerHttpRequestInstrumentation.java index b04fd93c7fa..aa6b7a7084b 100644 --- a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/iast/ServerHttpRequestInstrumentation.java +++ b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/iast/ServerHttpRequestInstrumentation.java @@ -12,7 +12,9 @@ import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; -/** @see org.springframework.http.server.reactive.ServerHttpRequest */ +/** + * @see org.springframework.http.server.reactive.ServerHttpRequest + */ @AutoService(InstrumenterModule.class) public class ServerHttpRequestInstrumentation extends InstrumenterModule.Iast implements Instrumenter.ForTypeHierarchy, Instrumenter.HasMethodAdvice { diff --git a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/iast/TaintGetBodyAdvice.java b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/iast/TaintGetBodyAdvice.java index ec2eaeaa155..584698983cd 100644 --- a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/iast/TaintGetBodyAdvice.java +++ b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/iast/TaintGetBodyAdvice.java @@ -13,7 +13,9 @@ import org.springframework.http.ReactiveHttpInputMessage; import reactor.core.publisher.Flux; -/** @see ReactiveHttpInputMessage#getBody() */ +/** + * @see ReactiveHttpInputMessage#getBody() + */ @RequiresRequestContext(RequestContextSlot.IAST) class TaintGetBodyAdvice { @Advice.OnMethodExit(suppress = Throwable.class) diff --git a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/iast/TaintHttpHeadersGetAdvice.java b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/iast/TaintHttpHeadersGetAdvice.java index 58305275194..bbd9cad5f25 100644 --- a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/iast/TaintHttpHeadersGetAdvice.java +++ b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/iast/TaintHttpHeadersGetAdvice.java @@ -13,7 +13,9 @@ import java.util.Locale; import net.bytebuddy.asm.Advice; -/** @see org.springframework.http.HttpHeaders#get(Object) */ +/** + * @see org.springframework.http.HttpHeaders#get(Object) + */ @RequiresRequestContext(RequestContextSlot.IAST) class TaintHttpHeadersGetAdvice { @Advice.OnMethodExit(suppress = Throwable.class) diff --git a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/iast/TaintHttpHeadersGetFirstAdvice.java b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/iast/TaintHttpHeadersGetFirstAdvice.java index 9a882277008..0d88cd22381 100644 --- a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/iast/TaintHttpHeadersGetFirstAdvice.java +++ b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/iast/TaintHttpHeadersGetFirstAdvice.java @@ -11,7 +11,9 @@ import datadog.trace.api.iast.propagation.PropagationModule; import net.bytebuddy.asm.Advice; -/** @see org.springframework.http.HttpHeaders#getFirst(String) */ +/** + * @see org.springframework.http.HttpHeaders#getFirst(String) + */ @RequiresRequestContext(RequestContextSlot.IAST) class TaintHttpHeadersGetFirstAdvice { @Advice.OnMethodExit(suppress = Throwable.class) diff --git a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/iast/TaintHttpHeadersToSingleValueMapAdvice.java b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/iast/TaintHttpHeadersToSingleValueMapAdvice.java index 5a64eb49ff9..64c59001ba9 100644 --- a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/iast/TaintHttpHeadersToSingleValueMapAdvice.java +++ b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/iast/TaintHttpHeadersToSingleValueMapAdvice.java @@ -13,7 +13,9 @@ import net.bytebuddy.asm.Advice; import org.springframework.http.HttpHeaders; -/** @see HttpHeaders#toSingleValueMap() */ +/** + * @see HttpHeaders#toSingleValueMap() + */ @RequiresRequestContext(RequestContextSlot.IAST) class TaintHttpHeadersToSingleValueMapAdvice { @Advice.OnMethodExit(suppress = Throwable.class) diff --git a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/iast/TaintReadOnlyHttpHeadersAdvice.java b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/iast/TaintReadOnlyHttpHeadersAdvice.java index 2efe52c6c79..98bb4a8ca4b 100644 --- a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/iast/TaintReadOnlyHttpHeadersAdvice.java +++ b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-5.0/src/main/java/datadog/trace/instrumentation/springwebflux/server/iast/TaintReadOnlyHttpHeadersAdvice.java @@ -11,7 +11,9 @@ import datadog.trace.api.iast.propagation.PropagationModule; import net.bytebuddy.asm.Advice; -/** @see org.springframework.http.HttpHeaders#get(Object) */ +/** + * @see org.springframework.http.HttpHeaders#get(Object) + */ @RequiresRequestContext(RequestContextSlot.IAST) class TaintReadOnlyHttpHeadersAdvice { @Advice.OnMethodExit(suppress = Throwable.class) diff --git a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-6.0/src/bootTest/groovy/SpringWebfluxTest.groovy b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-6.0/src/bootTest/groovy/SpringWebfluxTest.groovy index 79a7c31362e..eb15597f102 100644 --- a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-6.0/src/bootTest/groovy/SpringWebfluxTest.groovy +++ b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-6.0/src/bootTest/groovy/SpringWebfluxTest.groovy @@ -539,7 +539,8 @@ class SpringWebfluxHttp11Test extends InstrumentationSpecification { "$Tags.COMPONENT" "spring-webflux-controller" "$Tags.SPAN_KIND" Tags.SPAN_KIND_SERVER "request.predicate" "(GET && /double-greet-redirect)" - "handler.type" { String tagVal -> + "handler.type" { + String tagVal -> return (tagVal.contains(INNER_HANDLER_FUNCTION_CLASS_TAG_PREFIX) || tagVal.contains("Lambda")) } @@ -583,7 +584,8 @@ class SpringWebfluxHttp11Test extends InstrumentationSpecification { "$Tags.COMPONENT" "spring-webflux-controller" "$Tags.SPAN_KIND" Tags.SPAN_KIND_SERVER "request.predicate" "(GET && /double-greet)" - "handler.type" { String tagVal -> + "handler.type" { + String tagVal -> return tagVal.contains(INNER_HANDLER_FUNCTION_CLASS_TAG_PREFIX) } defaultTags() @@ -684,7 +686,7 @@ class SpringWebfluxHttp11Test extends InstrumentationSpecification { sortSpansByStart() trace(2) { clientSpan(it, null, "http.request", "spring-webflux-client", "GET", URI.create(url), null, false, null, false, - ["message": "The subscription was cancelled", "event": "cancelled"]) + ["message": "The subscription was cancelled", "event": "cancelled"]) traceParent = clientSpan(it, span(0), "netty.client.request", "netty-client", "GET", URI.create(url), null) } trace(2) { @@ -792,17 +794,17 @@ class SpringWebfluxHttp11Test extends InstrumentationSpecification { def clientSpan( - TraceAssert trace, - Object parentSpan, - String operation, - String component, - String method = "GET", - URI uri, - Integer status = 200, - boolean error = false, - Throwable exception = null, - boolean tagQueryString = false, - Map extraTags = null) { + TraceAssert trace, + Object parentSpan, + String operation, + String component, + String method = "GET", + URI uri, + Integer status = 200, + boolean error = false, + Throwable exception = null, + boolean tagQueryString = false, + Map extraTags = null) { def ret def expectedQuery = tagQueryString ? uri.query : null diff --git a/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-3.1/src/latestDepTest/groovy/test/iast/HandlerMethodReturnValueHandlerCompositeInstrumentationTest.groovy b/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-3.1/src/latestDepTest/groovy/test/iast/HandlerMethodReturnValueHandlerCompositeInstrumentationTest.groovy index 1b6eac319a4..0a70be79edd 100644 --- a/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-3.1/src/latestDepTest/groovy/test/iast/HandlerMethodReturnValueHandlerCompositeInstrumentationTest.groovy +++ b/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-3.1/src/latestDepTest/groovy/test/iast/HandlerMethodReturnValueHandlerCompositeInstrumentationTest.groovy @@ -62,6 +62,5 @@ class HandlerMethodReturnValueHandlerCompositeInstrumentationTest extends Instru ModelAndView| false | 1 | 0 String | true | 0 | 1 String | false | 1 | 0 - } } diff --git a/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-3.1/src/test/groovy/test/iast/HandlerMethodReturnValueHandlerCompositeInstrumentationTest.groovy b/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-3.1/src/test/groovy/test/iast/HandlerMethodReturnValueHandlerCompositeInstrumentationTest.groovy index 1b6eac319a4..0a70be79edd 100644 --- a/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-3.1/src/test/groovy/test/iast/HandlerMethodReturnValueHandlerCompositeInstrumentationTest.groovy +++ b/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-3.1/src/test/groovy/test/iast/HandlerMethodReturnValueHandlerCompositeInstrumentationTest.groovy @@ -62,6 +62,5 @@ class HandlerMethodReturnValueHandlerCompositeInstrumentationTest extends Instru ModelAndView| false | 1 | 0 String | true | 0 | 1 String | false | 1 | 0 - } } diff --git a/dd-java-agent/instrumentation/spymemcached-2.10/src/test/groovy/datadog/trace/instrumentation/spymemcached/SpymemcachedTest.groovy b/dd-java-agent/instrumentation/spymemcached-2.10/src/test/groovy/datadog/trace/instrumentation/spymemcached/SpymemcachedTest.groovy index e55405e7e47..f8d8d3d593d 100644 --- a/dd-java-agent/instrumentation/spymemcached-2.10/src/test/groovy/datadog/trace/instrumentation/spymemcached/SpymemcachedTest.groovy +++ b/dd-java-agent/instrumentation/spymemcached-2.10/src/test/groovy/datadog/trace/instrumentation/spymemcached/SpymemcachedTest.groovy @@ -714,7 +714,6 @@ abstract class SpymemcachedTest extends VersionedNamingTestBase { } else { defaultTagsNoPeerService() } - } } } diff --git a/dd-java-agent/instrumentation/sslsocket/src/test/groovy/SslSocketTest.groovy b/dd-java-agent/instrumentation/sslsocket/src/test/groovy/SslSocketTest.groovy index 6e70ff2fcf0..e9febcd8776 100644 --- a/dd-java-agent/instrumentation/sslsocket/src/test/groovy/SslSocketTest.groovy +++ b/dd-java-agent/instrumentation/sslsocket/src/test/groovy/SslSocketTest.groovy @@ -74,7 +74,8 @@ class SslSocketTest extends InstrumentationSpecification { def str = new String(it) str.length() > 0 str.startsWith("POST") || str.startsWith("HTTP") - }}, _, _) + } + }, _, _) (1.._) * extractorMock.send(null) // `getRequestMessage` mock returns `null` so we expect to get it in send where: diff --git a/dd-java-agent/instrumentation/tomcat/tomcat-5.5/src/latestDepTest/groovy/TomcatServer.groovy b/dd-java-agent/instrumentation/tomcat/tomcat-5.5/src/latestDepTest/groovy/TomcatServer.groovy index 1bfef641804..782c22b66ac 100644 --- a/dd-java-agent/instrumentation/tomcat/tomcat-5.5/src/latestDepTest/groovy/TomcatServer.groovy +++ b/dd-java-agent/instrumentation/tomcat/tomcat-5.5/src/latestDepTest/groovy/TomcatServer.groovy @@ -101,7 +101,8 @@ class TomcatServer implements WebsocketServer { @Override void serverSendText(String[] messages) { - if (wsAsyncSend && messages.length == 1) { // async does not support partial write + if (wsAsyncSend && messages.length == 1) { + // async does not support partial write WsEndpoint.activeSession.getAsyncRemote().sendText(messages[0]) } else { if (messages.length == 1) { @@ -117,14 +118,17 @@ class TomcatServer implements WebsocketServer { @Override void serverSendBinary(byte[][] binaries) { - if (wsAsyncSend && binaries.length == 1) { // async does not support partial write + if (wsAsyncSend && binaries.length == 1) { + // async does not support partial write WsEndpoint.activeSession.getAsyncRemote().sendBinary(ByteBuffer.wrap(binaries[0])) } else { if (binaries.length == 1) { WsEndpoint.activeSession.getBasicRemote().sendBinary(ByteBuffer.wrap(binaries[0])) } else { try (def stream = WsEndpoint.activeSession.getBasicRemote().getSendStream()) { - binaries.each { stream.write(it) } + binaries.each { + stream.write(it) + } } } } diff --git a/dd-java-agent/instrumentation/tomcat/tomcat-5.5/src/test/groovy/TomcatServletTest.groovy b/dd-java-agent/instrumentation/tomcat/tomcat-5.5/src/test/groovy/TomcatServletTest.groovy index f0e5640fbd6..3e507f1ae71 100644 --- a/dd-java-agent/instrumentation/tomcat/tomcat-5.5/src/test/groovy/TomcatServletTest.groovy +++ b/dd-java-agent/instrumentation/tomcat/tomcat-5.5/src/test/groovy/TomcatServletTest.groovy @@ -335,7 +335,6 @@ abstract class TomcatServletTest extends AbstractServletTest } class TomcatServletV0Test extends TomcatServletTest implements TestingGenericHttpNamingConventions.ServerV0 { - } class TomcatServletV1ForkedTest extends TomcatServletTest implements TestingGenericHttpNamingConventions.ServerV1 { diff --git a/dd-java-agent/instrumentation/tomcat/tomcat-5.5/src/tomcat9Test/groovy/TomcatServer.groovy b/dd-java-agent/instrumentation/tomcat/tomcat-5.5/src/tomcat9Test/groovy/TomcatServer.groovy index bcc7ffb1ef5..95d1b1e6112 100644 --- a/dd-java-agent/instrumentation/tomcat/tomcat-5.5/src/tomcat9Test/groovy/TomcatServer.groovy +++ b/dd-java-agent/instrumentation/tomcat/tomcat-5.5/src/tomcat9Test/groovy/TomcatServer.groovy @@ -100,7 +100,8 @@ class TomcatServer implements WebsocketServer { @Override void serverSendText(String[] messages) { - if (wsAsyncSend && messages.length == 1) { // async does not support partial write + if (wsAsyncSend && messages.length == 1) { + // async does not support partial write WsEndpoint.activeSession.getAsyncRemote().sendText(messages[0]) } else { if (messages.length == 1) { @@ -116,14 +117,17 @@ class TomcatServer implements WebsocketServer { @Override void serverSendBinary(byte[][] binaries) { - if (wsAsyncSend && binaries.length == 1) { // async does not support partial write + if (wsAsyncSend && binaries.length == 1) { + // async does not support partial write WsEndpoint.activeSession.getAsyncRemote().sendBinary(ByteBuffer.wrap(binaries[0])) } else { if (binaries.length == 1) { WsEndpoint.activeSession.getBasicRemote().sendBinary(ByteBuffer.wrap(binaries[0])) } else { try (def stream = WsEndpoint.activeSession.getBasicRemote().getSendStream()) { - binaries.each { stream.write(it) } + binaries.each { + stream.write(it) + } } } } diff --git a/dd-java-agent/instrumentation/tomcat/tomcat-appsec/tomcat-appsec-5.5/src/main/java/datadog/trace/instrumentation/tomcat55/CommitActionInstrumentation.java b/dd-java-agent/instrumentation/tomcat/tomcat-appsec/tomcat-appsec-5.5/src/main/java/datadog/trace/instrumentation/tomcat55/CommitActionInstrumentation.java index d15a19f09dd..0fd9d87f4f3 100644 --- a/dd-java-agent/instrumentation/tomcat/tomcat-appsec/tomcat-appsec-5.5/src/main/java/datadog/trace/instrumentation/tomcat55/CommitActionInstrumentation.java +++ b/dd-java-agent/instrumentation/tomcat/tomcat-appsec/tomcat-appsec-5.5/src/main/java/datadog/trace/instrumentation/tomcat55/CommitActionInstrumentation.java @@ -22,7 +22,9 @@ import org.apache.coyote.Request; import org.apache.coyote.Response; -/** @see org.apache.coyote.ActionHook */ +/** + * @see org.apache.coyote.ActionHook + */ @AutoService(InstrumenterModule.class) public class CommitActionInstrumentation extends InstrumenterModule.AppSec implements Instrumenter.ForKnownTypes, Instrumenter.HasMethodAdvice { diff --git a/dd-java-agent/instrumentation/tomcat/tomcat-appsec/tomcat-appsec-7.0/src/main/java/datadog/trace/instrumentation/tomcat7/CommitActionInstrumentation.java b/dd-java-agent/instrumentation/tomcat/tomcat-appsec/tomcat-appsec-7.0/src/main/java/datadog/trace/instrumentation/tomcat7/CommitActionInstrumentation.java index 670c877ffad..c6d07f0d82d 100644 --- a/dd-java-agent/instrumentation/tomcat/tomcat-appsec/tomcat-appsec-7.0/src/main/java/datadog/trace/instrumentation/tomcat7/CommitActionInstrumentation.java +++ b/dd-java-agent/instrumentation/tomcat/tomcat-appsec/tomcat-appsec-7.0/src/main/java/datadog/trace/instrumentation/tomcat7/CommitActionInstrumentation.java @@ -21,7 +21,9 @@ import org.apache.coyote.Request; import org.apache.coyote.Response; -/** @see org.apache.coyote.ActionHook */ +/** + * @see org.apache.coyote.ActionHook + */ @AutoService(InstrumenterModule.class) public class CommitActionInstrumentation extends InstrumenterModule.AppSec implements Instrumenter.ForKnownTypes, Instrumenter.HasMethodAdvice { diff --git a/dd-java-agent/instrumentation/undertow/undertow-2.0/src/main/java/datadog/trace/instrumentation/undertow/HttpServerExchangeSenderInstrumentation.java b/dd-java-agent/instrumentation/undertow/undertow-2.0/src/main/java/datadog/trace/instrumentation/undertow/HttpServerExchangeSenderInstrumentation.java index e3594c2d459..fdd45965785 100644 --- a/dd-java-agent/instrumentation/undertow/undertow-2.0/src/main/java/datadog/trace/instrumentation/undertow/HttpServerExchangeSenderInstrumentation.java +++ b/dd-java-agent/instrumentation/undertow/undertow-2.0/src/main/java/datadog/trace/instrumentation/undertow/HttpServerExchangeSenderInstrumentation.java @@ -50,7 +50,9 @@ public void methodAdvice(MethodTransformer transformer) { HttpServerExchangeSenderInstrumentation.class.getName() + "$GetResponseChannelAdvice"); } - /** @see HttpServerExchange#getResponseChannel() () */ + /** + * @see HttpServerExchange#getResponseChannel() () + */ static class GetResponseChannelAdvice { @Advice.OnMethodEnter(suppress = Throwable.class, skipOn = Advice.OnNonDefaultValue.class) static boolean /* skip */ before( diff --git a/dd-java-agent/instrumentation/vertx/vertx-redis-client-3.9/src/test/groovy/VertxRedisTestBase.groovy b/dd-java-agent/instrumentation/vertx/vertx-redis-client-3.9/src/test/groovy/VertxRedisTestBase.groovy index d8f5f5330ca..ab3275561f0 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-redis-client-3.9/src/test/groovy/VertxRedisTestBase.groovy +++ b/dd-java-agent/instrumentation/vertx/vertx-redis-client-3.9/src/test/groovy/VertxRedisTestBase.groovy @@ -137,8 +137,12 @@ abstract class VertxRedisTestBase extends VersionedNamingTestBase { "$Tags.SPAN_KIND" Tags.SPAN_KIND_CLIENT "$Tags.DB_TYPE" "redis" // FIXME: in some cases the connection is not extracted. Better to skip this test than mark the whole test as flaky - "$Tags.PEER_PORT" { it == null || it == port } - "$Tags.PEER_HOSTNAME" { it == null || it == "127.0.0.1" || it == "localhost" || it == redisServer.getHost() } + "$Tags.PEER_PORT" { + it == null || it == port + } + "$Tags.PEER_HOSTNAME" { + it == null || it == "127.0.0.1" || it == "localhost" || it == redisServer.getHost() + } if (tag(Tags.PEER_HOSTNAME) != null) { peerServiceFrom(Tags.PEER_HOSTNAME) defaultTags() @@ -158,6 +162,8 @@ abstract class VertxRedisTestBase extends VersionedNamingTestBase { } List responseToStrings(Response r) { - r.iterator().collect { it.toString() } + r.iterator().collect { + it.toString() + } } } diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/main/java/datadog/trace/instrumentation/vertx_3_4/server/HttpServerRequestInstrumentation.java b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/main/java/datadog/trace/instrumentation/vertx_3_4/server/HttpServerRequestInstrumentation.java index ecc25db441f..39c07a9a074 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/main/java/datadog/trace/instrumentation/vertx_3_4/server/HttpServerRequestInstrumentation.java +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/main/java/datadog/trace/instrumentation/vertx_3_4/server/HttpServerRequestInstrumentation.java @@ -51,7 +51,9 @@ public void methodAdvice(MethodTransformer transformer) { HttpServerRequestInstrumentation.class.getName() + "$BodyHandlerAdvice"); } - /** @see HttpServerRequest#bodyHandler(Handler) */ + /** + * @see HttpServerRequest#bodyHandler(Handler) + */ static class BodyHandlerAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) static void after(@Advice.Argument(value = 0, readOnly = false) Handler h) { diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/test/groovy/server/IastVertx34Server.groovy b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/test/groovy/server/IastVertx34Server.groovy index 5dfc95f08a8..3250a1c4b81 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/test/groovy/server/IastVertx34Server.groovy +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/src/test/groovy/server/IastVertx34Server.groovy @@ -65,6 +65,4 @@ abstract class IastVertx34Server extends IastHttpServerTest { String routerBasePath() { return "/" } - - } diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.9/src/test/groovy/server/IastVertx39Server.groovy b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.9/src/test/groovy/server/IastVertx39Server.groovy index add102e66ad..68094b09254 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.9/src/test/groovy/server/IastVertx39Server.groovy +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.9/src/test/groovy/server/IastVertx39Server.groovy @@ -65,6 +65,4 @@ class IastVertx39Server extends IastHttpServerTest { String routerBasePath() { return "/" } - - } diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/main/java/datadog/trace/instrumentation/vertx_4_0/server/HttpServerRequestInstrumentation.java b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/main/java/datadog/trace/instrumentation/vertx_4_0/server/HttpServerRequestInstrumentation.java index c3be94a8492..b68dc11f332 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/main/java/datadog/trace/instrumentation/vertx_4_0/server/HttpServerRequestInstrumentation.java +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/src/main/java/datadog/trace/instrumentation/vertx_4_0/server/HttpServerRequestInstrumentation.java @@ -49,7 +49,9 @@ public void methodAdvice(MethodTransformer transformer) { HttpServerRequestInstrumentation.class.getName() + "$BodyHandlerAdvice"); } - /** @see HttpServerRequest#bodyHandler(Handler) */ + /** + * @see HttpServerRequest#bodyHandler(Handler) + */ static class BodyHandlerAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) static void after(@Advice.Argument(value = 0, readOnly = false) Handler h) { diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-5.0/src/main/java/datadog/trace/instrumentation/vertx_5_0/server/HttpServerRequestInstrumentation.java b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-5.0/src/main/java/datadog/trace/instrumentation/vertx_5_0/server/HttpServerRequestInstrumentation.java index d303079ba50..910d51456b5 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-5.0/src/main/java/datadog/trace/instrumentation/vertx_5_0/server/HttpServerRequestInstrumentation.java +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-5.0/src/main/java/datadog/trace/instrumentation/vertx_5_0/server/HttpServerRequestInstrumentation.java @@ -49,7 +49,9 @@ public void methodAdvice(MethodTransformer transformer) { HttpServerRequestInstrumentation.class.getName() + "$BodyHandlerAdvice"); } - /** @see HttpServerRequest#bodyHandler(Handler) */ + /** + * @see HttpServerRequest#bodyHandler(Handler) + */ static class BodyHandlerAdvice { @Advice.OnMethodEnter(suppress = Throwable.class) static void after(@Advice.Argument(value = 0, readOnly = false) Handler h) { diff --git a/dd-java-agent/instrumentation/weaver/src/main/scala/datadog/trace/instrumentation/weaver/WeaverIntegrationTestRunner.scala b/dd-java-agent/instrumentation/weaver/src/main/scala/datadog/trace/instrumentation/weaver/WeaverIntegrationTestRunner.scala index edcc0eff03c..b2579a4526f 100644 --- a/dd-java-agent/instrumentation/weaver/src/main/scala/datadog/trace/instrumentation/weaver/WeaverIntegrationTestRunner.scala +++ b/dd-java-agent/instrumentation/weaver/src/main/scala/datadog/trace/instrumentation/weaver/WeaverIntegrationTestRunner.scala @@ -43,8 +43,8 @@ object WeaverIntegrationTestRunner { add(LoggedEvent.Trace(t)) } - val framework = new CatsEffect(new PrintStream(System.out)) - val runner = framework.runner(Array.empty, Array.empty, getClass.getClassLoader) + val framework = new CatsEffect(new PrintStream(System.out)) + val runner = framework.runner(Array.empty, Array.empty, getClass.getClassLoader) val scalaTestNames: List[String] = testNames.asScala.toList val taskDefs: Array[TaskDef] = scalaTestNames.map { name => new TaskDef(name, SuiteFingerprint, false, Array(new SuiteSelector())) diff --git a/dd-java-agent/instrumentation/websocket/jakarta-websocket-2.0/src/test/groovy/Endpoints.groovy b/dd-java-agent/instrumentation/websocket/jakarta-websocket-2.0/src/test/groovy/Endpoints.groovy index dc49cb7b987..2184be0b4fe 100644 --- a/dd-java-agent/instrumentation/websocket/jakarta-websocket-2.0/src/test/groovy/Endpoints.groovy +++ b/dd-java-agent/instrumentation/websocket/jakarta-websocket-2.0/src/test/groovy/Endpoints.groovy @@ -118,7 +118,6 @@ class Endpoints { static class PartialBytesHandler implements MessageHandler.Partial { @Override void onMessage(byte[] b, boolean last) { - } } diff --git a/dd-java-agent/instrumentation/websocket/javax-websocket-1.0/src/test/groovy/Endpoints.groovy b/dd-java-agent/instrumentation/websocket/javax-websocket-1.0/src/test/groovy/Endpoints.groovy index 232c7ee3849..f822f70a00b 100644 --- a/dd-java-agent/instrumentation/websocket/javax-websocket-1.0/src/test/groovy/Endpoints.groovy +++ b/dd-java-agent/instrumentation/websocket/javax-websocket-1.0/src/test/groovy/Endpoints.groovy @@ -118,7 +118,6 @@ class Endpoints { static class PartialBytesHandler implements MessageHandler.Partial { @Override void onMessage(byte[] b, boolean last) { - } } diff --git a/dd-java-agent/src/test/java/jvmbootstraptest/TestSecurityManager.java b/dd-java-agent/src/test/java/jvmbootstraptest/TestSecurityManager.java index 5d23730b795..7d76938e8e9 100644 --- a/dd-java-agent/src/test/java/jvmbootstraptest/TestSecurityManager.java +++ b/dd-java-agent/src/test/java/jvmbootstraptest/TestSecurityManager.java @@ -97,15 +97,15 @@ protected boolean checkRuntimeEnvironmentAccess( if (isDatadogEnvVar(envVar)) return true; switch (envVar) { - // jboss sniffing? + // jboss sniffing? case "JBOSS_HOME": return true; - // environment capture? + // environment capture? case "WEBSITE_SITE_NAME": return true; - // AWS properties used during bootstrapping? + // AWS properties used during bootstrapping? case "AWS_LAMBDA_INITIALIZATION_TYPE": case "_HANDLER": case "AWS_LAMBDA_FUNCTION_NAME": @@ -161,15 +161,15 @@ protected boolean checkRuntimeShutdownHooks(RuntimePermission perm, Object ctx) @Override protected boolean checkFileReadPermission(FilePermission perm, Object ctx, String filePath) { switch (filePath) { - // agent socket communication + // agent socket communication case "/var/run/datadog/apm.socket": return true; - // agent sniffing? + // agent sniffing? case "/opt/extensions/datadog-agent": return true; - // ContainerInfo + // ContainerInfo case "/proc/self/cgroup": return true; } diff --git a/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/asserts/TagsAssert.groovy b/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/asserts/TagsAssert.groovy index 4179677a12a..ba3e5d6a397 100644 --- a/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/asserts/TagsAssert.groovy +++ b/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/asserts/TagsAssert.groovy @@ -222,7 +222,8 @@ class TagsAssert { return false } } - } else if(queryParams != null && queryParams.size() > 0){ //if http.query.string is empty/null but we expect queryParams, return false + } else if(queryParams != null && queryParams.size() > 0){ + //if http.query.string is empty/null but we expect queryParams, return false return false } return true diff --git a/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/asserts/TraceAssert.groovy b/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/asserts/TraceAssert.groovy index e82262b95fd..ab67d516079 100644 --- a/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/asserts/TraceAssert.groovy +++ b/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/asserts/TraceAssert.groovy @@ -76,7 +76,6 @@ class TraceAssert { } else { assertSpan(trace.get(index), spec) } - } void assertSpansAllVerified() { diff --git a/dd-smoke-tests/appsec/springboot-graphql/src/test/groovy/datadog/smoketest/appsec/springbootgraphql/SpringBootGraphqlSmokeTest.groovy b/dd-smoke-tests/appsec/springboot-graphql/src/test/groovy/datadog/smoketest/appsec/springbootgraphql/SpringBootGraphqlSmokeTest.groovy index a8f77fc08d7..8ecbe99fba1 100644 --- a/dd-smoke-tests/appsec/springboot-graphql/src/test/groovy/datadog/smoketest/appsec/springbootgraphql/SpringBootGraphqlSmokeTest.groovy +++ b/dd-smoke-tests/appsec/springboot-graphql/src/test/groovy/datadog/smoketest/appsec/springbootgraphql/SpringBootGraphqlSmokeTest.groovy @@ -157,6 +157,5 @@ class SpringBootGraphqlSmokeTest extends AbstractAppSecServerSmokeTest { // 4KB allow to bypass WAF but detected as graphql attack 'graphql attack' | 'test' | 'graphql.server.all_resolvers' | 4096 - } } diff --git a/dd-smoke-tests/appsec/springboot/src/test/groovy/datadog/smoketest/appsec/AIGuardSmokeTest.groovy b/dd-smoke-tests/appsec/springboot/src/test/groovy/datadog/smoketest/appsec/AIGuardSmokeTest.groovy index c7fed2158b6..3d82a848e2d 100644 --- a/dd-smoke-tests/appsec/springboot/src/test/groovy/datadog/smoketest/appsec/AIGuardSmokeTest.groovy +++ b/dd-smoke-tests/appsec/springboot/src/test/groovy/datadog/smoketest/appsec/AIGuardSmokeTest.groovy @@ -66,7 +66,9 @@ class AIGuardSmokeTest extends AbstractAppSecServerSmokeTest { waitForTraceCount(2) // default call + internal API mock final span = traces*.spans ?.flatten() - ?.find { it.resource == 'ai_guard' } as DecodedSpan + ?.find { + it.resource == 'ai_guard' + } as DecodedSpan assert span.meta.get('ai_guard.action') == action assert span.meta.get('ai_guard.reason') == reason assert span.meta.get('ai_guard.target') == 'prompt' diff --git a/dd-smoke-tests/appsec/springboot/src/test/groovy/datadog/smoketest/appsec/ExtendedDataCollectionSmokeTest.groovy b/dd-smoke-tests/appsec/springboot/src/test/groovy/datadog/smoketest/appsec/ExtendedDataCollectionSmokeTest.groovy index 33287657470..dc97e26ba11 100644 --- a/dd-smoke-tests/appsec/springboot/src/test/groovy/datadog/smoketest/appsec/ExtendedDataCollectionSmokeTest.groovy +++ b/dd-smoke-tests/appsec/springboot/src/test/groovy/datadog/smoketest/appsec/ExtendedDataCollectionSmokeTest.groovy @@ -307,7 +307,6 @@ class ExtendedDataCollectionSmokeTest extends AbstractAppSecServerSmokeTest { def requestBody = rootSpan.span.metaStruct.get('http.request.body') assert requestBody != null, 'request body is not set' !rootSpan.meta.containsKey('_dd.appsec.request_body_size.exceeded') - } void 'test request body collection if RASP event'(){ @@ -348,7 +347,6 @@ class ExtendedDataCollectionSmokeTest extends AbstractAppSecServerSmokeTest { def requestBody = rootSpan.span.metaStruct.get('http.request.body') assert requestBody != null, 'request body is not set' !rootSpan.meta.containsKey('_dd.appsec.request_body_size.exceeded') - } void 'test request body collection if RASP event exceeded'(){ @@ -389,7 +387,6 @@ class ExtendedDataCollectionSmokeTest extends AbstractAppSecServerSmokeTest { def requestBody = rootSpan.span.metaStruct.get('http.request.body') assert requestBody != null, 'request body is not set' rootSpan.meta.containsKey('_dd.appsec.request_body_size.exceeded') - } void 'test request body not collected if no event'(){ @@ -425,7 +422,6 @@ class ExtendedDataCollectionSmokeTest extends AbstractAppSecServerSmokeTest { assert trigger == null, 'test trigger found' rootSpan.span.metaStruct == null - } void 'test request body collection if WAF event with default-config'(){ @@ -465,7 +461,6 @@ class ExtendedDataCollectionSmokeTest extends AbstractAppSecServerSmokeTest { def requestBody = rootSpan.span.metaStruct.get('http.request.body') assert requestBody != null, 'request body is not set' !rootSpan.meta.containsKey('_dd.appsec.request_body_size.exceeded') - } void 'test all headers with default-config'(){ @@ -550,6 +545,4 @@ class ExtendedDataCollectionSmokeTest extends AbstractAppSecServerSmokeTest { rootSpan.meta.get('http.request.headers.content-type') == 'text/html' rootSpan.meta.get('http.response.headers.content-language') == 'en-US' } - - } diff --git a/dd-smoke-tests/appsec/springboot/src/test/groovy/datadog/smoketest/appsec/SpringBootSmokeTest.groovy b/dd-smoke-tests/appsec/springboot/src/test/groovy/datadog/smoketest/appsec/SpringBootSmokeTest.groovy index be2a9bbb625..28d4b8d281d 100644 --- a/dd-smoke-tests/appsec/springboot/src/test/groovy/datadog/smoketest/appsec/SpringBootSmokeTest.groovy +++ b/dd-smoke-tests/appsec/springboot/src/test/groovy/datadog/smoketest/appsec/SpringBootSmokeTest.groovy @@ -709,7 +709,6 @@ class SpringBootSmokeTest extends AbstractAppSecServerSmokeTest { 'paths' | _ 'file' | _ 'path' | _ - } def findFirstMatchingSpan(String resource) { @@ -877,7 +876,11 @@ class SpringBootSmokeTest extends AbstractAppSecServerSmokeTest { waitForTraceCount(3) def spans = rootSpans.toList().toSorted { it.span.duration } spans.size() == 3 - def sampledSpans = spans.findAll { it.meta.keySet().any { it.startsWith('_dd.appsec.s.req.') } } + def sampledSpans = spans.findAll { + it.meta.keySet().any { + it.startsWith('_dd.appsec.s.req.') + } + } sampledSpans.size() == 1 def span = sampledSpans[0] span.meta.containsKey('_dd.appsec.s.req.query') @@ -1037,5 +1040,4 @@ class SpringBootSmokeTest extends AbstractAppSecServerSmokeTest { final inflaterStream = new GZIPInputStream(new ByteArrayInputStream(text.decodeBase64())) return inflaterStream.getBytes() } - } diff --git a/dd-smoke-tests/appsec/springboot/src/test/groovy/datadog/smoketest/appsec/TraceTaggingSmokeTest.groovy b/dd-smoke-tests/appsec/springboot/src/test/groovy/datadog/smoketest/appsec/TraceTaggingSmokeTest.groovy index cebd1fb6028..356486cbf7d 100644 --- a/dd-smoke-tests/appsec/springboot/src/test/groovy/datadog/smoketest/appsec/TraceTaggingSmokeTest.groovy +++ b/dd-smoke-tests/appsec/springboot/src/test/groovy/datadog/smoketest/appsec/TraceTaggingSmokeTest.groovy @@ -332,7 +332,5 @@ class TraceTaggingSmokeTest extends AbstractAppSecServerSmokeTest { // Should NOT have USER_KEEP sampling priority since keep: false assert rootSpan.metrics.get('_sampling_priority_v1') < 2, "Should not have USER_KEEP sampling priority when keep: false" - } - } diff --git a/dd-smoke-tests/appsec/src/main/groovy/datadog/smoketest/appsec/AbstractAppSecServerSmokeTest.groovy b/dd-smoke-tests/appsec/src/main/groovy/datadog/smoketest/appsec/AbstractAppSecServerSmokeTest.groovy index 76ca71b1289..d94ad5c6807 100644 --- a/dd-smoke-tests/appsec/src/main/groovy/datadog/smoketest/appsec/AbstractAppSecServerSmokeTest.groovy +++ b/dd-smoke-tests/appsec/src/main/groovy/datadog/smoketest/appsec/AbstractAppSecServerSmokeTest.groovy @@ -109,9 +109,13 @@ abstract class AbstractAppSecServerSmokeTest extends AbstractServerSmokeTest { if (customActions != null) { def actions = json.actions as List> // remove already existing rules for merge - List customActionNames = customActions.collect { it.id } + List customActionNames = customActions.collect { + it.id + } if( actions != null) { - actions.removeIf { it.id in customActionNames } + actions.removeIf { + it.id in customActionNames + } }else { actions = [] json.actions = actions @@ -123,8 +127,12 @@ abstract class AbstractAppSecServerSmokeTest extends AbstractServerSmokeTest { final rules = json.rules as List> // remove already existing rules for merge - List customRulesNames = customRules.collect { it.id } - rules.removeIf { it.id in customRulesNames } + List customRulesNames = customRules.collect { + it.id + } + rules.removeIf { + it.id in customRulesNames + } rules.addAll(customRules) final gen = new JsonGenerator.Options().build() diff --git a/dd-smoke-tests/cli/src/test/groovy/datadog/smoketest/CliApplicationSmokeTest.groovy b/dd-smoke-tests/cli/src/test/groovy/datadog/smoketest/CliApplicationSmokeTest.groovy index 1c17d852708..a6aa8bca176 100644 --- a/dd-smoke-tests/cli/src/test/groovy/datadog/smoketest/CliApplicationSmokeTest.groovy +++ b/dd-smoke-tests/cli/src/test/groovy/datadog/smoketest/CliApplicationSmokeTest.groovy @@ -44,7 +44,6 @@ abstract class CliApplicationSmokeTest extends AbstractSmokeTest { } class BasicCLITest extends CliApplicationSmokeTest { - } class NoKeystoreTest extends CliApplicationSmokeTest { diff --git a/dd-smoke-tests/concurrent/java-21/src/test/groovy/datadog/smoketest/concurrent/AbstractConcurrentTest.groovy b/dd-smoke-tests/concurrent/java-21/src/test/groovy/datadog/smoketest/concurrent/AbstractConcurrentTest.groovy index aace7aa24c5..00f87a94d6e 100644 --- a/dd-smoke-tests/concurrent/java-21/src/test/groovy/datadog/smoketest/concurrent/AbstractConcurrentTest.groovy +++ b/dd-smoke-tests/concurrent/java-21/src/test/groovy/datadog/smoketest/concurrent/AbstractConcurrentTest.groovy @@ -34,17 +34,23 @@ abstract class AbstractConcurrentTest extends AbstractSmokeTest { return { trace -> // Check for 'main' span - def mainSpan = trace.spans.find { it.name == 'main' } + def mainSpan = trace.spans.find { + it.name == 'main' + } if (!mainSpan) { return false } // Check that there are only 'main' and 'compute' spans - def otherSpans = trace.spans.findAll { it.name != 'main' && it.name != 'compute' } + def otherSpans = trace.spans.findAll { + it.name != 'main' && it.name != 'compute' + } if (!otherSpans.isEmpty()) { return false } // Check that every 'compute' span is in the same trace and is either a child of the 'main' span or another 'compute' span - def computeSpans = trace.spans.findAll { it.name == 'compute' } + def computeSpans = trace.spans.findAll { + it.name == 'compute' + } if (computeSpans.isEmpty()) { return false } diff --git a/dd-smoke-tests/concurrent/java-8/src/test/groovy/datadog/smoketest/concurrent/AbstractDemoTest.groovy b/dd-smoke-tests/concurrent/java-8/src/test/groovy/datadog/smoketest/concurrent/AbstractDemoTest.groovy index 17db06ccbca..7672f999d9d 100644 --- a/dd-smoke-tests/concurrent/java-8/src/test/groovy/datadog/smoketest/concurrent/AbstractDemoTest.groovy +++ b/dd-smoke-tests/concurrent/java-8/src/test/groovy/datadog/smoketest/concurrent/AbstractDemoTest.groovy @@ -33,17 +33,23 @@ abstract class AbstractDemoTest extends AbstractSmokeTest { return { trace -> // Check for 'main' span - def mainSpan = trace.spans.find { it.name == 'main' } + def mainSpan = trace.spans.find { + it.name == 'main' + } if (!mainSpan) { return false } // Check that there are only 'main' and 'compute' spans - def otherSpans = trace.spans.findAll { it.name != 'main' && it.name != 'compute' } + def otherSpans = trace.spans.findAll { + it.name != 'main' && it.name != 'compute' + } if (!otherSpans.isEmpty()) { return false } // Check that every 'compute' span is in the same trace and is either a child of the 'main' span or another 'compute' span - def computeSpans = trace.spans.findAll { it.name == 'compute' } + def computeSpans = trace.spans.findAll { + it.name == 'compute' + } if (computeSpans.isEmpty()) { return false } diff --git a/dd-smoke-tests/datastreams/kafkaschemaregistry/src/main/java/datadog/smoketest/datastreams/kafkaschemaregistry/Message.java b/dd-smoke-tests/datastreams/kafkaschemaregistry/src/main/java/datadog/smoketest/datastreams/kafkaschemaregistry/Message.java index 87d1cc866f7..0739a00c81e 100644 --- a/dd-smoke-tests/datastreams/kafkaschemaregistry/src/main/java/datadog/smoketest/datastreams/kafkaschemaregistry/Message.java +++ b/dd-smoke-tests/datastreams/kafkaschemaregistry/src/main/java/datadog/smoketest/datastreams/kafkaschemaregistry/Message.java @@ -24,6 +24,7 @@ public interface MyMessageOrBuilder * @return The id. */ java.lang.String getId(); + /** * string id = 1; * @@ -37,6 +38,7 @@ public interface MyMessageOrBuilder * @return The value. */ java.lang.String getValue(); + /** * string value = 2; * @@ -44,12 +46,14 @@ public interface MyMessageOrBuilder */ com.google.protobuf.ByteString getValueBytes(); } + /** Protobuf type {@code MyMessage} */ public static final class MyMessage extends com.google.protobuf.GeneratedMessageV3 implements // @@protoc_insertion_point(message_implements:MyMessage) MyMessageOrBuilder { private static final long serialVersionUID = 0L; + // Use MyMessage.newBuilder() to construct. private MyMessage(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -81,6 +85,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object id_ = ""; + /** * string id = 1; * @@ -98,6 +103,7 @@ public java.lang.String getId() { return s; } } + /** * string id = 1; * @@ -120,6 +126,7 @@ public com.google.protobuf.ByteString getIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object value_ = ""; + /** * string value = 2; * @@ -137,6 +144,7 @@ public java.lang.String getValue() { return s; } } + /** * string value = 2; * @@ -322,6 +330,7 @@ protected Builder newBuilderForType( Builder builder = new Builder(parent); return builder; } + /** Protobuf type {@code MyMessage} */ public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder @@ -509,6 +518,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object id_ = ""; + /** * string id = 1; * @@ -525,6 +535,7 @@ public java.lang.String getId() { return (java.lang.String) ref; } } + /** * string id = 1; * @@ -541,6 +552,7 @@ public com.google.protobuf.ByteString getIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * string id = 1; * @@ -556,6 +568,7 @@ public Builder setId(java.lang.String value) { onChanged(); return this; } + /** * string id = 1; * @@ -567,6 +580,7 @@ public Builder clearId() { onChanged(); return this; } + /** * string id = 1; * @@ -585,6 +599,7 @@ public Builder setIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object value_ = ""; + /** * string value = 2; * @@ -601,6 +616,7 @@ public java.lang.String getValue() { return (java.lang.String) ref; } } + /** * string value = 2; * @@ -617,6 +633,7 @@ public com.google.protobuf.ByteString getValueBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * string value = 2; * @@ -632,6 +649,7 @@ public Builder setValue(java.lang.String value) { onChanged(); return this; } + /** * string value = 2; * @@ -643,6 +661,7 @@ public Builder clearValue() { onChanged(); return this; } + /** * string value = 2; * diff --git a/dd-smoke-tests/gradle/src/test/groovy/datadog/smoketest/GradleDaemonSmokeTest.groovy b/dd-smoke-tests/gradle/src/test/groovy/datadog/smoketest/GradleDaemonSmokeTest.groovy index 7c266e238b8..45a7c5deb7c 100644 --- a/dd-smoke-tests/gradle/src/test/groovy/datadog/smoketest/GradleDaemonSmokeTest.groovy +++ b/dd-smoke-tests/gradle/src/test/groovy/datadog/smoketest/GradleDaemonSmokeTest.groovy @@ -215,7 +215,6 @@ class GradleDaemonSmokeTest extends AbstractGradleTest { install.createDist(configuration) println "${new Date()}: $specificationContext.currentIteration.displayName - Finished dependencies download" - } catch (Exception e) { println "${new Date()}: $specificationContext.currentIteration.displayName " + "- Failed to install Gradle distribution, will proceed to run test kit hoping for the best: $e" @@ -243,7 +242,6 @@ class GradleDaemonSmokeTest extends AbstractGradleTest { def buildResult = successExpected ? gradleRunner.build() : gradleRunner.buildAndFail() println "${new Date()}: $specificationContext.currentIteration.displayName - Finished Gradle run" return buildResult - } catch (Exception e) { def daemonLog = Files.list(testKitFolder.resolve("test-kit-daemon/" + gradleVersion)).filter(p -> p.toString().endsWith("log")).findAny().orElse(null) if (daemonLog != null) { diff --git a/dd-smoke-tests/iast-util/src/testFixtures/groovy/datadog/smoketest/AbstractIastSpringBootTest.groovy b/dd-smoke-tests/iast-util/src/testFixtures/groovy/datadog/smoketest/AbstractIastSpringBootTest.groovy index fbbb8b62606..17727a3e2a2 100644 --- a/dd-smoke-tests/iast-util/src/testFixtures/groovy/datadog/smoketest/AbstractIastSpringBootTest.groovy +++ b/dd-smoke-tests/iast-util/src/testFixtures/groovy/datadog/smoketest/AbstractIastSpringBootTest.groovy @@ -1055,7 +1055,8 @@ abstract class AbstractIastSpringBootTest extends AbstractIastServerSmokeTest { client.newCall(request).execute() then: - hasVulnerability { vul -> + hasVulnerability { + vul -> vul.type == 'REFLECTION_INJECTION' && vul.location.method == 'reflectionInjectionClass' && vul.evidence.valueParts[0].value == "java.lang.String" @@ -1071,7 +1072,8 @@ abstract class AbstractIastSpringBootTest extends AbstractIastServerSmokeTest { client.newCall(request).execute() then: - hasVulnerability { vul -> + hasVulnerability { + vul -> vul.type == 'REFLECTION_INJECTION' && vul.location.method == 'reflectionInjectionMethod' && vul.evidence.valueParts[0].value == "java.lang.String#" @@ -1089,7 +1091,8 @@ abstract class AbstractIastSpringBootTest extends AbstractIastServerSmokeTest { client.newCall(request).execute() then: - hasVulnerability { vul -> + hasVulnerability { + vul -> vul.type == 'REFLECTION_INJECTION' && vul.location.method == 'reflectionInjectionField' && vul.evidence.valueParts[0].value == "java.lang.String#" @@ -1106,7 +1109,8 @@ abstract class AbstractIastSpringBootTest extends AbstractIastServerSmokeTest { client.newCall(request).execute() then: - hasVulnerability { vul -> + hasVulnerability { + vul -> vul.type == 'REFLECTION_INJECTION' && vul.location.method == 'reflectionInjectionLookup' && vul.evidence.valueParts[0].value == "java.lang.String#" @@ -1286,6 +1290,4 @@ abstract class AbstractIastSpringBootTest extends AbstractIastServerSmokeTest { 'validateAll2' | _ 'validate' | _ } - - } diff --git a/dd-smoke-tests/java9-modules/build.gradle b/dd-smoke-tests/java9-modules/build.gradle index 4f050d0d65f..dbf53f877f9 100644 --- a/dd-smoke-tests/java9-modules/build.gradle +++ b/dd-smoke-tests/java9-modules/build.gradle @@ -15,10 +15,11 @@ tasks.withType(JavaCompile).configureEach { JavaCompile jc -> // read up classpath lazily to avoid early locking of gradle settings jc.options.compilerArgumentProviders.add(new CommandLineArgumentProvider() { @Override - Iterable asArguments() { - { return ['--module-path', jc.classpath.asPath]} - } - }) + Iterable asArguments() { { + return ['--module-path', jc.classpath.asPath] + } + } + }) } tasks.withType(Test).configureEach { @@ -40,8 +41,8 @@ tasks.withType(Test).configureEach { // Run the jlink command to create the image exec { commandLine jlinkExecutable, '--no-man-pages', '--no-header-files', - '--add-modules', 'java.instrument,datadog.smoketest.moduleapp', - "--module-path", "${jdkModulesPath}:" + jar.archiveFile.get().toString(), "--output", generatedImageDir + '--add-modules', 'java.instrument,datadog.smoketest.moduleapp', + "--module-path", "${jdkModulesPath}:" + jar.archiveFile.get().toString(), "--output", generatedImageDir } it.jvmArgs "-Ddatadog.smoketest.module.image=${generatedImageDir}" diff --git a/dd-smoke-tests/log-injection/src/test/groovy/datadog/smoketest/LogInjectionSmokeTest.groovy b/dd-smoke-tests/log-injection/src/test/groovy/datadog/smoketest/LogInjectionSmokeTest.groovy index 68dce191a9c..aa70402eea5 100644 --- a/dd-smoke-tests/log-injection/src/test/groovy/datadog/smoketest/LogInjectionSmokeTest.groovy +++ b/dd-smoke-tests/log-injection/src/test/groovy/datadog/smoketest/LogInjectionSmokeTest.groovy @@ -333,10 +333,16 @@ abstract class JULBackend extends LogInjectionSmokeTest { @Shared def propertiesFile = File.createTempFile("julConfig", ".properties") - def backend() { "JUL" } + def backend() { + "JUL" + } - def injectsRawLogs() { false } - def supportsJson() { false } + def injectsRawLogs() { + false + } + def supportsJson() { + false + } def setupSpec() { def isWindows = System.getProperty("os.name").toLowerCase().contains("win") @@ -369,7 +375,9 @@ class JULInterfaceJULBackend extends JULBackend { } class JULInterfaceLog4j2Backend extends LogInjectionSmokeTest { - def backend() { LOG4J2_BACKEND } + def backend() { + LOG4J2_BACKEND + } List additionalArguments() { return ["-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager"] @@ -381,8 +389,12 @@ class JULInterfaceLog4j2Backend128bTid extends JULInterfaceLog4j2Backend {} class JULInterfaceLog4j2LatestBackend extends JULInterfaceLog4j2Backend {} class JULInterfaceJBossBackend extends LogInjectionSmokeTest { - def backend() { "JBoss" } - def supportsJson() { false } + def backend() { + "JBoss" + } + def supportsJson() { + false + } List additionalArguments() { return ["-Djava.util.logging.manager=org.jboss.logmanager.LogManager"] @@ -394,12 +406,18 @@ class JULInterfaceJBossBackend128bTid extends JULInterfaceJBossBackend {} class JULInterfaceJBossLatestBackend extends JULInterfaceJBossBackend {} class JCLInterfaceJULBackend extends JULBackend { - def backend() { "JUL" } + def backend() { + "JUL" + } } class JCLInterfaceLog4j1Backend extends LogInjectionSmokeTest { - def backend() { "Log4j1" } - def supportsJson() { false } + def backend() { + "Log4j1" + } + def supportsJson() { + false + } } class JCLInterfaceLog4j1BackendNoTags extends JCLInterfaceLog4j1Backend {} @@ -407,7 +425,9 @@ class JCLInterfaceLog4j1LatestBackend extends JCLInterfaceLog4j1Backend {} class JCLInterfaceLog4j1Backend128bTid extends JCLInterfaceLog4j1Backend {} class JCLInterfaceLog4j2Backend extends LogInjectionSmokeTest { - def backend() { LOG4J2_BACKEND } + def backend() { + LOG4J2_BACKEND + } // workaround https://github.com/apache/logging-log4j2/issues/1865 List additionalArguments() { @@ -420,8 +440,12 @@ class JCLInterfaceLog4j2Backend128bTid extends JCLInterfaceLog4j2Backend {} class JCLInterfaceLog4j2LatestBackend extends JCLInterfaceLog4j2Backend {} class Log4j1InterfaceLog4j1Backend extends LogInjectionSmokeTest { - def backend() { "Log4j1" } - def supportsJson() { false } + def backend() { + "Log4j1" + } + def supportsJson() { + false + } } class Log4j1InterfaceLog4j1BackendNoTags extends Log4j1InterfaceLog4j1Backend {} @@ -429,7 +453,9 @@ class Log4j1InterfaceLog4j1Backend128bTid extends Log4j1InterfaceLog4j1Backend { class Log4j1InterfaceLog4j1LatestBackend extends Log4j1InterfaceLog4j1Backend {} class Log4j1InterfaceLog4j2Backend extends LogInjectionSmokeTest { - def backend() { LOG4J2_BACKEND } + def backend() { + LOG4J2_BACKEND + } } class Log4j1InterfaceLog4j2BackendNoTags extends Log4j1InterfaceLog4j2Backend {} @@ -437,7 +463,9 @@ class Log4j1InterfaceLog4j2Backend128bTid extends Log4j1InterfaceLog4j2Backend { class Log4j1InterfaceLog4j2LatestBackend extends Log4j1InterfaceLog4j2Backend {} class Log4j2InterfaceLog4j2Backend extends LogInjectionSmokeTest { - def backend() { LOG4J2_BACKEND } + def backend() { + LOG4J2_BACKEND + } } class Log4j2InterfaceLog4j2BackendNoTags extends Log4j2InterfaceLog4j2Backend {} @@ -445,7 +473,9 @@ class Log4j2InterfaceLog4j2Backend128bTid extends Log4j2InterfaceLog4j2Backend { class Log4j2InterfaceLog4j2LatestBackend extends Log4j2InterfaceLog4j2Backend {} class Slf4jInterfaceLogbackBackend extends LogInjectionSmokeTest { - def backend() { "Logback" } + def backend() { + "Logback" + } } class Slf4jInterfaceLogbackBackendNoTags extends Slf4jInterfaceLogbackBackend {} @@ -453,8 +483,12 @@ class Slf4jInterfaceLogbackBackend128bTid extends Slf4jInterfaceLogbackBackend { class Slf4jInterfaceLogbackLatestBackend extends Slf4jInterfaceLogbackBackend {} class Slf4jInterfaceLog4j1Backend extends LogInjectionSmokeTest { - def backend() { "Log4j1" } - def supportsJson() { false } + def backend() { + "Log4j1" + } + def supportsJson() { + false + } } class Slf4jInterfaceLog4j1BackendNoTags extends Slf4jInterfaceLog4j1Backend {} @@ -462,7 +496,9 @@ class Slf4jInterfaceLog4j1Backend128bTid extends Slf4jInterfaceLog4j1Backend {} class Slf4jInterfaceLog4j1LatestBackend extends Slf4jInterfaceLog4j1Backend {} class Slf4jInterfaceLog4j2Backend extends LogInjectionSmokeTest { - def backend() { LOG4J2_BACKEND } + def backend() { + LOG4J2_BACKEND + } } class Slf4jInterfaceLog4j2BackendNoTags extends Slf4jInterfaceLog4j2Backend {} @@ -470,9 +506,15 @@ class Slf4jInterfaceLog4j2Backend128bTid extends Slf4jInterfaceLog4j2Backend {} class Slf4jInterfaceLog4j2LatestBackend extends Slf4jInterfaceLog4j2Backend {} class Slf4jInterfaceSlf4jSimpleBackend extends LogInjectionSmokeTest { - def backend() { "Slf4jSimple" } - def injectsRawLogs() { false } - def supportsJson() { false } + def backend() { + "Slf4jSimple" + } + def injectsRawLogs() { + false + } + def supportsJson() { + false + } List additionalArguments() { return ["-Dorg.slf4j.simpleLogger.logFile=${outputLogFile.absolutePath}" as String] @@ -483,8 +525,12 @@ class Slf4jInterfaceJULBackend extends JULBackend { } class Slf4jInterfaceJCLToLog4j1Backend extends LogInjectionSmokeTest { - def backend() { "Log4j1" } - def supportsJson() { false } + def backend() { + "Log4j1" + } + def supportsJson() { + false + } } class Slf4jInterfaceJCLToLog4j1BackendNoTags extends Slf4jInterfaceJCLToLog4j1Backend {} @@ -492,7 +538,9 @@ class Slf4jInterfaceJCLToLog4j1Backend128bTid extends Slf4jInterfaceJCLToLog4j1B class Slf4jInterfaceJCLToLog4j1LatestBackend extends Slf4jInterfaceJCLToLog4j1Backend {} class Slf4jInterfaceJCLToLog4j2Backend extends LogInjectionSmokeTest { - def backend() { LOG4J2_BACKEND } + def backend() { + LOG4J2_BACKEND + } // workaround https://github.com/apache/logging-log4j2/issues/1865 List additionalArguments() { @@ -508,7 +556,9 @@ class JULInterfaceSlf4jToLogbackBackend extends LogInjectionSmokeTest { @Shared def propertiesFile = File.createTempFile("julConfig", ".properties") - def backend() { "Logback" } + def backend() { + "Logback" + } def setupSpec() { // JUL doesn't support reading a properties file from the classpath so everything needs @@ -533,7 +583,9 @@ class JULInterfaceSlf4jToLogbackBackend128bTid extends JULInterfaceSlf4jToLogbac class JULInterfaceSlf4jToLogbackLatestBackend extends JULInterfaceSlf4jToLogbackBackend {} class JCLInterfaceSlf4jToLogbackBackend extends LogInjectionSmokeTest { - def backend() { "Logback" } + def backend() { + "Logback" + } } class JCLInterfaceSlf4jToLogbackBackendNoTags extends JCLInterfaceSlf4jToLogbackBackend {} @@ -541,7 +593,9 @@ class JCLInterfaceSlf4jToLogbackBackend128bTid extends JCLInterfaceSlf4jToLogbac class JCLInterfaceSlf4jToLogbackLatestBackend extends JCLInterfaceSlf4jToLogbackBackend {} class Log4j1InterfaceSlf4jToLogbackBackend extends LogInjectionSmokeTest { - def backend() { "Logback" } + def backend() { + "Logback" + } } class Log4j1InterfaceSlf4jToLogbackBackendNoTags extends Log4j1InterfaceSlf4jToLogbackBackend {} @@ -549,7 +603,9 @@ class Log4j1InterfaceSlf4jToLogbackBackend128bTid extends Log4j1InterfaceSlf4jTo class Log4j1InterfaceSlf4jToLogbackLatestBackend extends Log4j1InterfaceSlf4jToLogbackBackend {} class Log4j2InterfaceSlf4jToLogbackBackend extends LogInjectionSmokeTest { - def backend() { "Logback" } + def backend() { + "Logback" + } } class Log4j2InterfaceSlf4jToLogbackBackendNoTags extends Log4j2InterfaceSlf4jToLogbackBackend {} @@ -557,8 +613,12 @@ class Log4j2InterfaceSlf4jToLogbackBackend128bTid extends Log4j2InterfaceSlf4jTo class Log4j2InterfaceSlf4jToLogbackLatestBackend extends Log4j2InterfaceSlf4jToLogbackBackend {} class JBossInterfaceJBossBackend extends LogInjectionSmokeTest { - def backend() { "JBoss" } - def supportsJson() { false } + def backend() { + "JBoss" + } + def supportsJson() { + false + } List additionalArguments() { return ["-Djava.util.logging.manager=org.jboss.logmanager.LogManager"] @@ -570,8 +630,12 @@ class JBossInterfaceJBossBackend128bTid extends JBossInterfaceJBossBackend {} class JBossInterfaceJBossLatestBackend extends JBossInterfaceJBossBackend {} class JBossInterfaceLog4j1Backend extends LogInjectionSmokeTest { - def backend() { "Log4j1" } - def supportsJson() { false } + def backend() { + "Log4j1" + } + def supportsJson() { + false + } } class JBossInterfaceLog4j1BackendNoTags extends JBossInterfaceLog4j1Backend {} @@ -579,7 +643,9 @@ class JBossInterfaceLog4j1Backend128bTid extends JBossInterfaceLog4j1Backend {} class JBossInterfaceLog4j1LatestBackend extends JBossInterfaceLog4j1Backend {} class JBossInterfaceLog4j2Backend extends LogInjectionSmokeTest { - def backend() { LOG4J2_BACKEND } + def backend() { + LOG4J2_BACKEND + } } class JBossInterfaceLog4j2BackendNoTags extends JBossInterfaceLog4j2Backend {} @@ -587,7 +653,9 @@ class JBossInterfaceLog4j2Backend128bTid extends JBossInterfaceLog4j2Backend {} class JBossInterfaceLog4j2LatestBackend extends JBossInterfaceLog4j2Backend {} class JBossInterfaceSlf4jToLogbackBackend extends LogInjectionSmokeTest { - def backend() { "Logback" } + def backend() { + "Logback" + } } class JBossInterfaceSlf4jToLogbackBackendNoTags extends JBossInterfaceSlf4jToLogbackBackend {} @@ -599,7 +667,9 @@ class JBossInterfaceJULBackend extends JULBackend {} class FloggerInterfaceJULBackend extends JULBackend {} class FloggerInterfaceSlf4jToLogbackBackend extends LogInjectionSmokeTest { - def backend() { "Logback" } + def backend() { + "Logback" + } List additionalArguments() { return [ diff --git a/dd-smoke-tests/play-2.4/src/test/groovy/datadog/smoketest/AppSecPlayNettySmokeTest.groovy b/dd-smoke-tests/play-2.4/src/test/groovy/datadog/smoketest/AppSecPlayNettySmokeTest.groovy index 701eb66ec68..ecde34d69df 100644 --- a/dd-smoke-tests/play-2.4/src/test/groovy/datadog/smoketest/AppSecPlayNettySmokeTest.groovy +++ b/dd-smoke-tests/play-2.4/src/test/groovy/datadog/smoketest/AppSecPlayNettySmokeTest.groovy @@ -63,7 +63,11 @@ class AppSecPlayNettySmokeTest extends AbstractAppSecServerSmokeTest { waitForTraceCount(3) def spans = rootSpans.toList().toSorted { it.span.duration } spans.size() == 3 - def sampledSpans = spans.findAll { it.meta.keySet().any { it.startsWith('_dd.appsec.s.req.') } } + def sampledSpans = spans.findAll { + it.meta.keySet().any { + it.startsWith('_dd.appsec.s.req.') + } + } sampledSpans.size() == 1 def span = sampledSpans[0] span.meta.containsKey('_dd.appsec.s.req.query') diff --git a/dd-smoke-tests/play-2.4/src/test/groovy/datadog/smoketest/IastPlayNettySmokeTest.groovy b/dd-smoke-tests/play-2.4/src/test/groovy/datadog/smoketest/IastPlayNettySmokeTest.groovy index a4e1a909fbf..b17ed9825f2 100644 --- a/dd-smoke-tests/play-2.4/src/test/groovy/datadog/smoketest/IastPlayNettySmokeTest.groovy +++ b/dd-smoke-tests/play-2.4/src/test/groovy/datadog/smoketest/IastPlayNettySmokeTest.groovy @@ -117,5 +117,4 @@ class IastPlayNettySmokeTest extends AbstractIastServerSmokeTest { static isWindows() { return System.getProperty('os.name').toLowerCase().contains('win') } - } diff --git a/dd-smoke-tests/play-2.5/src/test/groovy/datadog/smoketest/AppSecPlayNettySmokeTest.groovy b/dd-smoke-tests/play-2.5/src/test/groovy/datadog/smoketest/AppSecPlayNettySmokeTest.groovy index 53400ba5ff8..9453fbf1c4c 100644 --- a/dd-smoke-tests/play-2.5/src/test/groovy/datadog/smoketest/AppSecPlayNettySmokeTest.groovy +++ b/dd-smoke-tests/play-2.5/src/test/groovy/datadog/smoketest/AppSecPlayNettySmokeTest.groovy @@ -68,7 +68,11 @@ class AppSecPlayNettySmokeTest extends AbstractAppSecServerSmokeTest { waitForTraceCount(3) def spans = rootSpans.toList().toSorted { it.span.duration } spans.size() == 3 - def sampledSpans = spans.findAll { it.meta.keySet().any { it.startsWith('_dd.appsec.s.req.') } } + def sampledSpans = spans.findAll { + it.meta.keySet().any { + it.startsWith('_dd.appsec.s.req.') + } + } sampledSpans.size() == 1 def span = sampledSpans[0] span.meta.containsKey('_dd.appsec.s.req.query') diff --git a/dd-smoke-tests/play-2.5/src/test/groovy/datadog/smoketest/IastPlayNettySmokeTest.groovy b/dd-smoke-tests/play-2.5/src/test/groovy/datadog/smoketest/IastPlayNettySmokeTest.groovy index 5cd1c795bbd..7df9622d427 100644 --- a/dd-smoke-tests/play-2.5/src/test/groovy/datadog/smoketest/IastPlayNettySmokeTest.groovy +++ b/dd-smoke-tests/play-2.5/src/test/groovy/datadog/smoketest/IastPlayNettySmokeTest.groovy @@ -115,5 +115,4 @@ class IastPlayNettySmokeTest extends AbstractIastServerSmokeTest { static isWindows() { return System.getProperty('os.name').toLowerCase().contains('win') } - } diff --git a/dd-smoke-tests/play-2.6/src/test/groovy/datadog/smoketest/AppSecPlaySmokeTest.groovy b/dd-smoke-tests/play-2.6/src/test/groovy/datadog/smoketest/AppSecPlaySmokeTest.groovy index 47191211834..25fda39a85a 100644 --- a/dd-smoke-tests/play-2.6/src/test/groovy/datadog/smoketest/AppSecPlaySmokeTest.groovy +++ b/dd-smoke-tests/play-2.6/src/test/groovy/datadog/smoketest/AppSecPlaySmokeTest.groovy @@ -73,7 +73,11 @@ abstract class AppSecPlaySmokeTest extends AbstractAppSecServerSmokeTest { waitForTraceCount(3) def spans = rootSpans.toList().toSorted { it.span.duration } spans.size() == 3 - def sampledSpans = spans.findAll { it.meta.keySet().any { it.startsWith('_dd.appsec.s.req.') } } + def sampledSpans = spans.findAll { + it.meta.keySet().any { + it.startsWith('_dd.appsec.s.req.') + } + } sampledSpans.size() == 1 def span = sampledSpans[0] span.meta.containsKey('_dd.appsec.s.req.query') diff --git a/dd-smoke-tests/play-2.7/src/test/groovy/datadog/smoketest/AppSecPlaySmokeTest.groovy b/dd-smoke-tests/play-2.7/src/test/groovy/datadog/smoketest/AppSecPlaySmokeTest.groovy index 86037672cf0..0ae8f365622 100644 --- a/dd-smoke-tests/play-2.7/src/test/groovy/datadog/smoketest/AppSecPlaySmokeTest.groovy +++ b/dd-smoke-tests/play-2.7/src/test/groovy/datadog/smoketest/AppSecPlaySmokeTest.groovy @@ -72,7 +72,11 @@ abstract class AppSecPlaySmokeTest extends AbstractAppSecServerSmokeTest { waitForTraceCount(3) def spans = rootSpans.toList().toSorted { it.span.duration } spans.size() == 3 - def sampledSpans = spans.findAll { it.meta.keySet().any { it.startsWith('_dd.appsec.s.req.') } } + def sampledSpans = spans.findAll { + it.meta.keySet().any { + it.startsWith('_dd.appsec.s.req.') + } + } sampledSpans.size() == 1 def span = sampledSpans[0] span.meta.containsKey('_dd.appsec.s.req.query') @@ -154,5 +158,4 @@ abstract class AppSecPlaySmokeTest extends AbstractAppSecServerSmokeTest { return "play.core.server.NettyServerProvider" } } - } diff --git a/dd-smoke-tests/play-2.7/src/test/groovy/datadog/smoketest/IastPlaySmokeTest.groovy b/dd-smoke-tests/play-2.7/src/test/groovy/datadog/smoketest/IastPlaySmokeTest.groovy index c97f9682c02..ec297e52871 100644 --- a/dd-smoke-tests/play-2.7/src/test/groovy/datadog/smoketest/IastPlaySmokeTest.groovy +++ b/dd-smoke-tests/play-2.7/src/test/groovy/datadog/smoketest/IastPlaySmokeTest.groovy @@ -97,7 +97,8 @@ abstract class IastPlaySmokeTest extends AbstractIastServerSmokeTest { hasVulnerability { vul -> vul.type == 'WEAK_HASH' && vul.location.method == '$anonfun$multipleVulns2$1' && vul.evidence.value == 'SHA-1' } hasVulnerability { vul -> vul.type == 'WEAK_HASH' && vul.location.method == '$anonfun$multipleVulns2$1' && vul.evidence.value == 'MD2'} hasVulnerability { vul -> vul.type == 'WEAK_HASH' && vul.location.method == '$anonfun$multipleVulns2$1' && vul.evidence.value == 'MD5'} - hasVulnerability { vul -> vul.type == 'WEAK_HASH' && vul.location.method == '$anonfun$multipleVulns2$1' && vul.evidence.value == 'RIPEMD128'}} + hasVulnerability { vul -> vul.type == 'WEAK_HASH' && vul.location.method == '$anonfun$multipleVulns2$1' && vul.evidence.value == 'RIPEMD128'} + } // Ensure to clean up server and not only the shell script that starts it def cleanupSpec() { diff --git a/dd-smoke-tests/play-2.8/src/test/groovy/datadog/smoketest/AppSecPlaySmokeTest.groovy b/dd-smoke-tests/play-2.8/src/test/groovy/datadog/smoketest/AppSecPlaySmokeTest.groovy index 935d7506658..1ed44e6dff5 100644 --- a/dd-smoke-tests/play-2.8/src/test/groovy/datadog/smoketest/AppSecPlaySmokeTest.groovy +++ b/dd-smoke-tests/play-2.8/src/test/groovy/datadog/smoketest/AppSecPlaySmokeTest.groovy @@ -73,7 +73,11 @@ abstract class AppSecPlaySmokeTest extends AbstractAppSecServerSmokeTest { waitForTraceCount(3) def spans = rootSpans.toList().toSorted { it.span.duration } spans.size() == 3 - def sampledSpans = spans.findAll { it.meta.keySet().any { it.startsWith('_dd.appsec.s.req.') } } + def sampledSpans = spans.findAll { + it.meta.keySet().any { + it.startsWith('_dd.appsec.s.req.') + } + } sampledSpans.size() == 1 def span = sampledSpans[0] span.meta.containsKey('_dd.appsec.s.req.query') @@ -155,5 +159,4 @@ abstract class AppSecPlaySmokeTest extends AbstractAppSecServerSmokeTest { return "play.core.server.NettyServerProvider" } } - } diff --git a/dd-smoke-tests/quarkus-native/build.gradle b/dd-smoke-tests/quarkus-native/build.gradle index 50641b56efd..fa004cb4383 100644 --- a/dd-smoke-tests/quarkus-native/build.gradle +++ b/dd-smoke-tests/quarkus-native/build.gradle @@ -70,7 +70,6 @@ if (version >= 17) { tasks.withType(Test).configureEach { jvmArgs "-Ddatadog.smoketest.quarkus.native.executable=$appBuildDir/quarkus-native-smoketest--runner" } - } else { tasks.withType(Test).configureEach { enabled = false diff --git a/dd-smoke-tests/spring-boot-3.0-native/application/src/main/java/datadog/smoketest/springboot/controller/WebController.java b/dd-smoke-tests/spring-boot-3.0-native/application/src/main/java/datadog/smoketest/springboot/controller/WebController.java index 537d69f2e23..aeb28893799 100644 --- a/dd-smoke-tests/spring-boot-3.0-native/application/src/main/java/datadog/smoketest/springboot/controller/WebController.java +++ b/dd-smoke-tests/spring-boot-3.0-native/application/src/main/java/datadog/smoketest/springboot/controller/WebController.java @@ -15,6 +15,7 @@ public String hello() { private String doHello() { return sayHello(); } + /** DD_TRACE_METHOD="datadog.smoketest.springboot.controller.WebController[sayHello]" */ private String sayHello() { return "Hello world"; diff --git a/dd-smoke-tests/springboot-java-11/src/test/groovy/datadog/smoketest/springboot/AppSecSpringBootSmokeTest.groovy b/dd-smoke-tests/springboot-java-11/src/test/groovy/datadog/smoketest/springboot/AppSecSpringBootSmokeTest.groovy index cf19d67685c..429c62e3906 100644 --- a/dd-smoke-tests/springboot-java-11/src/test/groovy/datadog/smoketest/springboot/AppSecSpringBootSmokeTest.groovy +++ b/dd-smoke-tests/springboot-java-11/src/test/groovy/datadog/smoketest/springboot/AppSecSpringBootSmokeTest.groovy @@ -83,8 +83,12 @@ class AppSecSpringBootSmokeTest extends AbstractServerSmokeTest { final rules = json.rules as List> // remove already existing rules for merge - List customRulesNames = customRules.collect { it.id } - rules.removeIf { it.id in customRulesNames } + List customRulesNames = customRules.collect { + it.id + } + rules.removeIf { + it.id in customRulesNames + } rules.addAll(customRules) final gen = new JsonGenerator.Options().build() @@ -102,33 +106,33 @@ class AppSecSpringBootSmokeTest extends AbstractServerSmokeTest { def prepareCustomRules() { // Prepare ruleset with additional test rules mergeRules( - customRulesPath, + customRulesPath, + [ [ - [ - id : '__test_ssrf_block', - name : 'Server-side request forgery exploit', - enable : 'true', - tags : [ - type : 'ssrf', - category : 'vulnerability_trigger', - cwe : '918', - capec : '1000/225/115/664', - confidence: '0', - module : 'rasp' - ], - conditions : [ - [ - parameters: [ - resource: [[address: 'server.io.net.url']], - params : [[address: 'server.request.body']], - ], - operator : "ssrf_detector", + id : '__test_ssrf_block', + name : 'Server-side request forgery exploit', + enable : 'true', + tags : [ + type : 'ssrf', + category : 'vulnerability_trigger', + cwe : '918', + capec : '1000/225/115/664', + confidence: '0', + module : 'rasp' + ], + conditions : [ + [ + parameters: [ + resource: [[address: 'server.io.net.url']], + params : [[address: 'server.request.body']], ], + operator : "ssrf_detector", ], - transformers: [], - on_match : ['block'] - ] - ]) + ], + transformers: [], + on_match : ['block'] + ] + ]) } @Override @@ -158,9 +162,9 @@ class AppSecSpringBootSmokeTest extends AbstractServerSmokeTest { setup: final url = "http://localhost:${httpPort}/ssrf/java-net" final body = new FormBody.Builder() - .add("url" , "169.254.169.254") - .add("async", async) - .add("promise", promise ).build() + .add("url" , "169.254.169.254") + .add("async", async) + .add("promise", promise ).build() final request = new Request.Builder().url(url).post(body).build() when: @@ -199,5 +203,4 @@ class AppSecSpringBootSmokeTest extends AbstractServerSmokeTest { def logLevel() { return "debug" } - } diff --git a/dd-smoke-tests/springboot-openliberty-20/src/test/groovy/datadog/smoketest/SpringBootOpenLibertySmokeTest.groovy b/dd-smoke-tests/springboot-openliberty-20/src/test/groovy/datadog/smoketest/SpringBootOpenLibertySmokeTest.groovy index 2cf3f99157d..0caf3fe7da9 100644 --- a/dd-smoke-tests/springboot-openliberty-20/src/test/groovy/datadog/smoketest/SpringBootOpenLibertySmokeTest.groovy +++ b/dd-smoke-tests/springboot-openliberty-20/src/test/groovy/datadog/smoketest/SpringBootOpenLibertySmokeTest.groovy @@ -13,7 +13,9 @@ import java.nio.file.Path import java.nio.file.Paths // This test currently fails on IBM JVMs -@Requires({ !JavaVirtualMachine.isJ9() }) +@Requires({ + !JavaVirtualMachine.isJ9() +}) class SpringBootOpenLibertySmokeTest extends AbstractServerSmokeTest { @Shared diff --git a/dd-smoke-tests/springboot-openliberty-20/src/test/groovy/datadog/smoketest/SpringBootOpenLibertySmokeVulnerabilityTest.groovy b/dd-smoke-tests/springboot-openliberty-20/src/test/groovy/datadog/smoketest/SpringBootOpenLibertySmokeVulnerabilityTest.groovy index 4a0149e7e74..e1d65888734 100644 --- a/dd-smoke-tests/springboot-openliberty-20/src/test/groovy/datadog/smoketest/SpringBootOpenLibertySmokeVulnerabilityTest.groovy +++ b/dd-smoke-tests/springboot-openliberty-20/src/test/groovy/datadog/smoketest/SpringBootOpenLibertySmokeVulnerabilityTest.groovy @@ -14,7 +14,9 @@ import java.nio.file.Paths import java.util.function.Function // This test currently fails on IBM JVMs -@Requires({ !JavaVirtualMachine.isJ9() }) +@Requires({ + !JavaVirtualMachine.isJ9() +}) class SpringBootOpenLibertySmokeVulnerabilityTest extends AbstractServerSmokeTest { @Shared @@ -109,5 +111,4 @@ class SpringBootOpenLibertySmokeVulnerabilityTest extends AbstractServerSmokeTes then: waitForSpan(new PollingConditions(timeout: 5), hasVulnerability()) } - } diff --git a/dd-smoke-tests/springboot-openliberty-23/src/test/groovy/datadog/smoketest/SpringBootOpenLibertySmokeTest.groovy b/dd-smoke-tests/springboot-openliberty-23/src/test/groovy/datadog/smoketest/SpringBootOpenLibertySmokeTest.groovy index dbcbf040de8..d7844da8f75 100644 --- a/dd-smoke-tests/springboot-openliberty-23/src/test/groovy/datadog/smoketest/SpringBootOpenLibertySmokeTest.groovy +++ b/dd-smoke-tests/springboot-openliberty-23/src/test/groovy/datadog/smoketest/SpringBootOpenLibertySmokeTest.groovy @@ -13,7 +13,9 @@ import java.nio.file.Path import java.nio.file.Paths // This test currently fails on IBM JVMs -@Requires({ !JavaVirtualMachine.isJ9() }) +@Requires({ + !JavaVirtualMachine.isJ9() +}) class SpringBootOpenLibertySmokeTest extends AbstractServerSmokeTest { @Shared diff --git a/dd-smoke-tests/springboot-openliberty-23/src/test/groovy/datadog/smoketest/SpringBootOpenLibertySmokeVulnerabilityTest.groovy b/dd-smoke-tests/springboot-openliberty-23/src/test/groovy/datadog/smoketest/SpringBootOpenLibertySmokeVulnerabilityTest.groovy index af65db958f0..e16770c0d2d 100644 --- a/dd-smoke-tests/springboot-openliberty-23/src/test/groovy/datadog/smoketest/SpringBootOpenLibertySmokeVulnerabilityTest.groovy +++ b/dd-smoke-tests/springboot-openliberty-23/src/test/groovy/datadog/smoketest/SpringBootOpenLibertySmokeVulnerabilityTest.groovy @@ -14,7 +14,9 @@ import java.nio.file.Paths import java.util.function.Function // This test currently fails on IBM JVMs -@Requires({ !JavaVirtualMachine.isJ9() }) +@Requires({ + !JavaVirtualMachine.isJ9() +}) class SpringBootOpenLibertySmokeVulnerabilityTest extends AbstractServerSmokeTest { @Shared @@ -108,5 +110,4 @@ class SpringBootOpenLibertySmokeVulnerabilityTest extends AbstractServerSmokeTes then: waitForSpan(new PollingConditions(timeout: 5), hasVulnerability()) } - } diff --git a/dd-smoke-tests/springboot/src/test/groovy/datadog/smoketest/IastOverheadControlSpringBootSmokeTest.groovy b/dd-smoke-tests/springboot/src/test/groovy/datadog/smoketest/IastOverheadControlSpringBootSmokeTest.groovy index 64e913ccc2f..ae8bcf0d4e9 100644 --- a/dd-smoke-tests/springboot/src/test/groovy/datadog/smoketest/IastOverheadControlSpringBootSmokeTest.groovy +++ b/dd-smoke-tests/springboot/src/test/groovy/datadog/smoketest/IastOverheadControlSpringBootSmokeTest.groovy @@ -134,5 +134,4 @@ class IastOverheadControlSpringBootSmokeTest extends AbstractIastServerSmokeTest //hasVulnerability { vul -> vul.type == 'WEAK_HASH' && vul.location.method == 'differentVulns' && vul.evidence.value == 'MD2'} //hasVulnerability { vul -> vul.type == 'WEAK_HASH' && vul.location.method == 'differentVulns' && vul.evidence.value == 'SHA-1' } } - } diff --git a/dd-smoke-tests/src/main/groovy/datadog/smoketest/AbstractServerSmokeTest.groovy b/dd-smoke-tests/src/main/groovy/datadog/smoketest/AbstractServerSmokeTest.groovy index bb7f686182d..19972aae71a 100644 --- a/dd-smoke-tests/src/main/groovy/datadog/smoketest/AbstractServerSmokeTest.groovy +++ b/dd-smoke-tests/src/main/groovy/datadog/smoketest/AbstractServerSmokeTest.groovy @@ -172,7 +172,8 @@ abstract class AbstractServerSmokeTest extends AbstractSmokeTest { def dependencies = [] dependenciesLoaded.each { def payload = it.get('payload') as Map - dependencies.addAll(payload.get('dependencies')) } + dependencies.addAll(payload.get('dependencies')) + } dependencies.size() > 0 Set dependencyNames = dependencies.collect { diff --git a/dd-smoke-tests/tracer-flare/src/test/groovy/datadog/smoketest/TracerFlareSmokeTest.groovy b/dd-smoke-tests/tracer-flare/src/test/groovy/datadog/smoketest/TracerFlareSmokeTest.groovy index fb3ca590f02..22f222d86e0 100644 --- a/dd-smoke-tests/tracer-flare/src/test/groovy/datadog/smoketest/TracerFlareSmokeTest.groovy +++ b/dd-smoke-tests/tracer-flare/src/test/groovy/datadog/smoketest/TracerFlareSmokeTest.groovy @@ -299,7 +299,6 @@ class TracerFlareSmokeTest extends AbstractSmokeTest { } throw new AssertionError("No flare file created in ${flareDir} within ${timeoutSeconds} seconds") - } finally { watchService.close() } diff --git a/dd-smoke-tests/vertx-3.4/src/test/groovy/datadog/smoketest/AppSecVertxSmokeTest.groovy b/dd-smoke-tests/vertx-3.4/src/test/groovy/datadog/smoketest/AppSecVertxSmokeTest.groovy index d73b56adfc0..bb31a9993ef 100644 --- a/dd-smoke-tests/vertx-3.4/src/test/groovy/datadog/smoketest/AppSecVertxSmokeTest.groovy +++ b/dd-smoke-tests/vertx-3.4/src/test/groovy/datadog/smoketest/AppSecVertxSmokeTest.groovy @@ -8,7 +8,8 @@ import spock.lang.IgnoreIf @IgnoreIf({ // TODO https://github.com/eclipse-vertx/vert.x/issues/2172 - new BigDecimal(System.getProperty("java.specification.version")).isAtLeast(17.0) }) + new BigDecimal(System.getProperty("java.specification.version")).isAtLeast(17.0) +}) class AppSecVertxSmokeTest extends AbstractAppSecServerSmokeTest { @Override diff --git a/dd-smoke-tests/vertx-3.4/src/test/groovy/datadog/smoketest/IastVertxSmokeTest.groovy b/dd-smoke-tests/vertx-3.4/src/test/groovy/datadog/smoketest/IastVertxSmokeTest.groovy index 797348aba22..7afae83a2fa 100644 --- a/dd-smoke-tests/vertx-3.4/src/test/groovy/datadog/smoketest/IastVertxSmokeTest.groovy +++ b/dd-smoke-tests/vertx-3.4/src/test/groovy/datadog/smoketest/IastVertxSmokeTest.groovy @@ -9,7 +9,8 @@ import static datadog.trace.api.config.IastConfig.* @CompileDynamic @IgnoreIf({ // TODO https://github.com/eclipse-vertx/vert.x/issues/2172 - new BigDecimal(System.getProperty("java.specification.version")).isAtLeast(17.0) }) + new BigDecimal(System.getProperty("java.specification.version")).isAtLeast(17.0) +}) class IastVertxSmokeTest extends AbstractIastVertxSmokeTest { void 'test insecure cookie set using putHeader'() { diff --git a/dd-smoke-tests/vertx-3.4/src/test/groovy/datadog/smoketest/VertxRouteSmokeTest.groovy b/dd-smoke-tests/vertx-3.4/src/test/groovy/datadog/smoketest/VertxRouteSmokeTest.groovy index 463de7a7a87..dbdf2d72b70 100644 --- a/dd-smoke-tests/vertx-3.4/src/test/groovy/datadog/smoketest/VertxRouteSmokeTest.groovy +++ b/dd-smoke-tests/vertx-3.4/src/test/groovy/datadog/smoketest/VertxRouteSmokeTest.groovy @@ -4,7 +4,8 @@ import spock.lang.IgnoreIf @IgnoreIf({ // TODO https://github.com/eclipse-vertx/vert.x/issues/2172 - new BigDecimal(System.getProperty("java.specification.version")).isAtLeast(17.0) }) + new BigDecimal(System.getProperty("java.specification.version")).isAtLeast(17.0) +}) class VertxRouteSmokeTest extends VertxSmokeTest { @Override protected Set expectedTraces() { diff --git a/dd-smoke-tests/vertx-3.4/src/test/groovy/datadog/smoketest/VertxSmokeTest.groovy b/dd-smoke-tests/vertx-3.4/src/test/groovy/datadog/smoketest/VertxSmokeTest.groovy index 01e62979721..c7acd8936b3 100644 --- a/dd-smoke-tests/vertx-3.4/src/test/groovy/datadog/smoketest/VertxSmokeTest.groovy +++ b/dd-smoke-tests/vertx-3.4/src/test/groovy/datadog/smoketest/VertxSmokeTest.groovy @@ -7,7 +7,8 @@ import spock.lang.Shared @IgnoreIf({ // TODO https://github.com/eclipse-vertx/vert.x/issues/2172 - new BigDecimal(System.getProperty("java.specification.version")).isAtLeast(17.0) }) + new BigDecimal(System.getProperty("java.specification.version")).isAtLeast(17.0) +}) class VertxSmokeTest extends AbstractServerSmokeTest { @Shared diff --git a/dd-smoke-tests/vertx-4.2/src/test/groovy/AppSecVertxSmokeTest.groovy b/dd-smoke-tests/vertx-4.2/src/test/groovy/AppSecVertxSmokeTest.groovy index 6132e884c45..5233d8c6d83 100644 --- a/dd-smoke-tests/vertx-4.2/src/test/groovy/AppSecVertxSmokeTest.groovy +++ b/dd-smoke-tests/vertx-4.2/src/test/groovy/AppSecVertxSmokeTest.groovy @@ -12,7 +12,8 @@ import java.util.zip.GZIPInputStream @IgnoreIf({ // TODO https://github.com/eclipse-vertx/vert.x/issues/2172 - new BigDecimal(System.getProperty("java.specification.version")).isAtLeast(17.0) }) + new BigDecimal(System.getProperty("java.specification.version")).isAtLeast(17.0) +}) class AppSecVertxSmokeTest extends AbstractAppSecServerSmokeTest { @Override diff --git a/dd-trace-api/src/main/java/datadog/trace/api/CorrelationIdentifier.java b/dd-trace-api/src/main/java/datadog/trace/api/CorrelationIdentifier.java index 2354406d472..7e416ad4618 100644 --- a/dd-trace-api/src/main/java/datadog/trace/api/CorrelationIdentifier.java +++ b/dd-trace-api/src/main/java/datadog/trace/api/CorrelationIdentifier.java @@ -9,12 +9,16 @@ public class CorrelationIdentifier { private static final String TRACE_ID_KEY = "dd.trace_id"; private static final String SPAN_ID_KEY = "dd.span_id"; - /** @return The trace-id key to use with datadog logs integration */ + /** + * @return The trace-id key to use with datadog logs integration + */ public static String getTraceIdKey() { return TRACE_ID_KEY; } - /** @return The span-id key to use with datadog logs integration */ + /** + * @return The span-id key to use with datadog logs integration + */ public static String getSpanIdKey() { return SPAN_ID_KEY; } diff --git a/dd-trace-api/src/main/java/datadog/trace/api/DD128bTraceId.java b/dd-trace-api/src/main/java/datadog/trace/api/DD128bTraceId.java index 3479d3d4489..a08073659c0 100644 --- a/dd-trace-api/src/main/java/datadog/trace/api/DD128bTraceId.java +++ b/dd-trace-api/src/main/java/datadog/trace/api/DD128bTraceId.java @@ -18,15 +18,19 @@ public class DD128bTraceId extends DDTraceId { public static final DD128bTraceId ZERO = new DD128bTraceId(0, 0, "00000000000000000000000000000000"); + /** Represents the high-order 64 bits of the 128-bit trace id. */ private final long highOrderBits; + /** Represents the low-order 64 bits of the 128-bit trace id. */ private final long lowOrderBits; + /** * The lower-case, zero-padded, 32 hexadecimal characters {@link String} representation of the * {@link DDTraceId} instance. */ private String hexStr; + /** The 64-bit only decimal {@link String} representation of the {@link DDTraceId} instance. */ private String str; diff --git a/dd-trace-api/src/main/java/datadog/trace/api/DDTraceId.java b/dd-trace-api/src/main/java/datadog/trace/api/DDTraceId.java index cc10e7493ee..7ed5be915cc 100644 --- a/dd-trace-api/src/main/java/datadog/trace/api/DDTraceId.java +++ b/dd-trace-api/src/main/java/datadog/trace/api/DDTraceId.java @@ -11,6 +11,7 @@ public abstract class DDTraceId { /** Invalid TraceId value used to denote no TraceId. */ public static final DDTraceId ZERO = from(0); + /** Convenience constant used from tests */ public static final DDTraceId ONE = from(1); diff --git a/dd-trace-api/src/main/java/datadog/trace/api/GlobalTracer.java b/dd-trace-api/src/main/java/datadog/trace/api/GlobalTracer.java index f91cafb79ef..74e1bd7f274 100644 --- a/dd-trace-api/src/main/java/datadog/trace/api/GlobalTracer.java +++ b/dd-trace-api/src/main/java/datadog/trace/api/GlobalTracer.java @@ -85,7 +85,9 @@ public static Tracer get() { return provider; } - /** @deprecated use static methods in {@link EventTrackerV2} directly */ + /** + * @deprecated use static methods in {@link EventTrackerV2} directly + */ @Deprecated public static EventTracker getEventTracker() { return eventTracker; diff --git a/dd-trace-api/src/main/java/datadog/trace/api/config/ProfilingConfig.java b/dd-trace-api/src/main/java/datadog/trace/api/config/ProfilingConfig.java index 9d193508b99..44f12036478 100644 --- a/dd-trace-api/src/main/java/datadog/trace/api/config/ProfilingConfig.java +++ b/dd-trace-api/src/main/java/datadog/trace/api/config/ProfilingConfig.java @@ -33,6 +33,7 @@ public final class ProfilingConfig { "profiling.jfr-template-override-file"; public static final String PROFILING_UPLOAD_TIMEOUT = "profiling.upload.timeout"; public static final int PROFILING_UPLOAD_TIMEOUT_DEFAULT = 30; + /** * @deprecated Use {@link #PROFILING_DEBUG_UPLOAD_COMPRESSION} instead. This will be removed in a * future release. @@ -201,6 +202,7 @@ public final class ProfilingConfig { public static final String PROFILING_DEBUG_DUMP_PATH = "profiling.debug.dump_path"; public static final String PROFILING_DEBUG_JFR_DISABLED = "profiling.debug.jfr.disabled"; + // spotless:off /** * Configuration for profile upload compression.

Supported values are: diff --git a/dd-trace-api/src/main/java/datadog/trace/api/config/TraceInstrumentationConfig.java b/dd-trace-api/src/main/java/datadog/trace/api/config/TraceInstrumentationConfig.java index 55506636f06..98d1d25f286 100644 --- a/dd-trace-api/src/main/java/datadog/trace/api/config/TraceInstrumentationConfig.java +++ b/dd-trace-api/src/main/java/datadog/trace/api/config/TraceInstrumentationConfig.java @@ -50,6 +50,7 @@ public final class TraceInstrumentationConfig { public static final String HTTP_SERVER_DECODED_RESOURCE_PRESERVE_SPACES = "http.server.decoded.resource.preserve-spaces"; public static final String HTTP_SERVER_ROUTE_BASED_NAMING = "http.server.route-based-naming"; + // Use TRACE_HTTP_CLIENT_TAG_QUERY_STRING instead @Deprecated public static final String HTTP_CLIENT_TAG_QUERY_STRING = "http.client.tag.query-string"; @@ -184,6 +185,7 @@ public final class TraceInstrumentationConfig { public static final String JAX_RS_EXCEPTION_AS_ERROR_ENABLED = "trace.jax-rs.exception-as-error.enabled"; public static final String JAX_RS_ADDITIONAL_ANNOTATIONS = "trace.jax-rs.additional.annotations"; + /** If set, the instrumentation will set its resource name on the local root too. */ public static final String AXIS_PROMOTE_RESOURCE_NAME = "trace.axis.promote.resource-name"; diff --git a/dd-trace-api/src/main/java/datadog/trace/api/config/TracerConfig.java b/dd-trace-api/src/main/java/datadog/trace/api/config/TracerConfig.java index bc57f96612a..d9781c7261b 100644 --- a/dd-trace-api/src/main/java/datadog/trace/api/config/TracerConfig.java +++ b/dd-trace-api/src/main/java/datadog/trace/api/config/TracerConfig.java @@ -47,6 +47,7 @@ public final class TracerConfig { @Deprecated public static final String TRACE_SAMPLING_OPERATION_RULES = "trace.sampling.operation.rules"; + // JSON rules public static final String TRACE_SAMPLING_RULES = "trace.sampling.rules"; public static final String SPAN_SAMPLING_RULES = "span.sampling.rules"; diff --git a/dd-trace-api/src/main/java/datadog/trace/api/experimental/DataStreamsContextCarrier.java b/dd-trace-api/src/main/java/datadog/trace/api/experimental/DataStreamsContextCarrier.java index 2d83b071a5e..6106461aaa2 100644 --- a/dd-trace-api/src/main/java/datadog/trace/api/experimental/DataStreamsContextCarrier.java +++ b/dd-trace-api/src/main/java/datadog/trace/api/experimental/DataStreamsContextCarrier.java @@ -6,7 +6,9 @@ /** An interface representing the context carrier. Typically, message headers. */ public interface DataStreamsContextCarrier { - /** @return A set of key value pairs, such as message headers. */ + /** + * @return A set of key value pairs, such as message headers. + */ Set> entries(); /** diff --git a/dd-trace-api/src/main/java/datadog/trace/api/interceptor/MutableSpan.java b/dd-trace-api/src/main/java/datadog/trace/api/interceptor/MutableSpan.java index 26fe3e0d912..fe39a22249f 100644 --- a/dd-trace-api/src/main/java/datadog/trace/api/interceptor/MutableSpan.java +++ b/dd-trace-api/src/main/java/datadog/trace/api/interceptor/MutableSpan.java @@ -4,10 +4,14 @@ public interface MutableSpan { - /** @return Start time with nanosecond scale, but millisecond resolution. */ + /** + * @return Start time with nanosecond scale, but millisecond resolution. + */ long getStartTime(); - /** @return Duration with nanosecond scale. */ + /** + * @return Duration with nanosecond scale. + */ long getDurationNano(); CharSequence getOperationName(); @@ -61,7 +65,9 @@ default Object getTag(String key) { MutableSpan setError(boolean value); - /** @deprecated Use {@link #getLocalRootSpan()} instead. */ + /** + * @deprecated Use {@link #getLocalRootSpan()} instead. + */ @Deprecated MutableSpan getRootSpan(); diff --git a/dd-trace-api/src/main/java/datadog/trace/api/sampling/PrioritySampling.java b/dd-trace-api/src/main/java/datadog/trace/api/sampling/PrioritySampling.java index 4aeda333623..c12af7aea1f 100644 --- a/dd-trace-api/src/main/java/datadog/trace/api/sampling/PrioritySampling.java +++ b/dd-trace-api/src/main/java/datadog/trace/api/sampling/PrioritySampling.java @@ -7,12 +7,16 @@ public class PrioritySampling { *

Internal value used when the priority sampling flag has not been set on the span context. */ public static final byte UNSET = (byte) 0x80; + /** The sampler has decided to drop the trace. */ public static final byte SAMPLER_DROP = 0; + /** The sampler has decided to keep the trace. */ public static final byte SAMPLER_KEEP = 1; + /** The user has decided to drop the trace. */ public static final byte USER_DROP = -1; + /** The user has decided to keep the trace. */ public static final byte USER_KEEP = 2; diff --git a/dd-trace-api/src/main/java/datadog/trace/context/TraceScope.java b/dd-trace-api/src/main/java/datadog/trace/context/TraceScope.java index 48268d8fcb8..df2bb2af7c7 100644 --- a/dd-trace-api/src/main/java/datadog/trace/context/TraceScope.java +++ b/dd-trace-api/src/main/java/datadog/trace/context/TraceScope.java @@ -55,7 +55,9 @@ default Continuation capture() { return GlobalTracer.get().captureActiveSpan(); } - /** @deprecated Replaced by {@code capture().hold()}. */ + /** + * @deprecated Replaced by {@code capture().hold()}. + */ @Deprecated default Continuation captureConcurrent() { return capture().hold(); diff --git a/dd-trace-core/src/main/java/datadog/trace/common/metrics/Batch.java b/dd-trace-core/src/main/java/datadog/trace/common/metrics/Batch.java index f3c7ea4d463..5f103805e98 100644 --- a/dd-trace-core/src/main/java/datadog/trace/common/metrics/Batch.java +++ b/dd-trace-core/src/main/java/datadog/trace/common/metrics/Batch.java @@ -29,6 +29,7 @@ public final class Batch implements InboxItem { * */ private volatile int count = 0; + /** incremented when a duration has been added. */ private volatile int committed = 0; diff --git a/dd-trace-core/src/main/java/datadog/trace/common/sampling/PrioritySampling.java b/dd-trace-core/src/main/java/datadog/trace/common/sampling/PrioritySampling.java index 18446bcdfe0..b56abbc7c2d 100644 --- a/dd-trace-core/src/main/java/datadog/trace/common/sampling/PrioritySampling.java +++ b/dd-trace-core/src/main/java/datadog/trace/common/sampling/PrioritySampling.java @@ -1,6 +1,8 @@ package datadog.trace.common.sampling; -/** @deprecated Replaced by {@link datadog.trace.api.sampling.PrioritySampling} . */ +/** + * @deprecated Replaced by {@link datadog.trace.api.sampling.PrioritySampling} . + */ @Deprecated public class PrioritySampling { /** @@ -9,12 +11,16 @@ public class PrioritySampling { *

Internal value used when the priority sampling flag has not been set on the span context. */ public static final int UNSET = Integer.MIN_VALUE; + /** The sampler has decided to drop the trace. */ public static final int SAMPLER_DROP = 0; + /** The sampler has decided to keep the trace. */ public static final int SAMPLER_KEEP = 1; + /** The user has decided to drop the trace. */ public static final int USER_DROP = -1; + /** The user has decided to keep the trace. */ public static final int USER_KEEP = 2; diff --git a/dd-trace-core/src/main/java/datadog/trace/common/writer/ddagent/Caching.java b/dd-trace-core/src/main/java/datadog/trace/common/writer/ddagent/Caching.java index bc61b037784..e9d0534dc9b 100644 --- a/dd-trace-core/src/main/java/datadog/trace/common/writer/ddagent/Caching.java +++ b/dd-trace-core/src/main/java/datadog/trace/common/writer/ddagent/Caching.java @@ -14,7 +14,8 @@ private Caching() {} */ static final int cacheSizeFor(int requestedCapacity) { int pow; - for (pow = 1; pow < requestedCapacity; pow *= 2) ; + for (pow = 1; pow < requestedCapacity; pow *= 2) + ; return pow; } diff --git a/dd-trace-core/src/main/java/datadog/trace/core/CoreSpan.java b/dd-trace-core/src/main/java/datadog/trace/core/CoreSpan.java index 7c3e65e0d41..f4dbe8dd6d9 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/CoreSpan.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/CoreSpan.java @@ -61,7 +61,9 @@ public interface CoreSpan> { boolean isMeasured(); - /** @return whether this span has a different service name from its parent, or is a local root. */ + /** + * @return whether this span has a different service name from its parent, or is a local root. + */ boolean isTopLevel(); boolean isForceKeep(); diff --git a/dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java b/dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java index 05c213a9c18..13193ded039 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java @@ -1541,6 +1541,7 @@ public abstract static class CoreSpanBuilder implements AgentTracer.SpanBuilder protected Object builderCiVisibilityContextData; protected List links; protected long spanId; + // Make sure any fields added here are also reset properly in ReusableSingleSpanBuilder.reset CoreSpanBuilder(CoreTracer tracer) { diff --git a/dd-trace-core/src/main/java/datadog/trace/core/DDSpanContext.java b/dd-trace-core/src/main/java/datadog/trace/core/DDSpanContext.java index 4c404ae0a38..6fde5450df5 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/DDSpanContext.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/DDSpanContext.java @@ -112,10 +112,13 @@ public class DDSpanContext private volatile CharSequence resourceName; private volatile byte resourceNamePriority = ResourceNamePriorities.DEFAULT; + /** Each span have an operation name describing the current span */ private volatile CharSequence operationName; + /** The type of the span. If null, the Datadog Agent will report as a custom */ private volatile CharSequence spanType; + /** True indicates that the span reports an error */ private volatile boolean errorFlag; @@ -538,7 +541,9 @@ public void updateDebugPropagation(String value) { propagationTags.updateDebugPropagation(value); } - /** @return if sampling priority was set by this method invocation */ + /** + * @return if sampling priority was set by this method invocation + */ public boolean setSamplingPriority(final int newPriority, final int newMechanism) { DDSpanContext spanContext = getRootSpanContextOrThis(); // set trace level sampling priority @@ -897,12 +902,16 @@ public TagMap getTags() { } } - /** @see CoreSpan#getMetaStruct() */ + /** + * @see CoreSpan#getMetaStruct() + */ public Map getMetaStruct() { return Collections.unmodifiableMap(metaStruct); } - /** @see CoreSpan#setMetaStruct(String, Object) */ + /** + * @see CoreSpan#setMetaStruct(String, Object) + */ public void setMetaStruct(final String field, final T value) { if (null == field) { return; diff --git a/dd-trace-core/src/main/java/datadog/trace/core/DDSpanLink.java b/dd-trace-core/src/main/java/datadog/trace/core/DDSpanLink.java index ab83d248fc0..d6c16c7b02e 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/DDSpanLink.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/DDSpanLink.java @@ -21,6 +21,7 @@ /** This class holds helper methods to encode span links into span context. */ public class DDSpanLink extends SpanLink { private static final Logger LOGGER = LoggerFactory.getLogger(DDSpanLink.class); + /** The maximum of characters a span tag value can hold. */ private static final int TAG_MAX_LENGTH = 25_000; diff --git a/dd-trace-core/src/main/java/datadog/trace/core/PendingTrace.java b/dd-trace-core/src/main/java/datadog/trace/core/PendingTrace.java index b4b0a6f93ba..b209d9c3339 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/PendingTrace.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/PendingTrace.java @@ -242,7 +242,9 @@ public DDSpan getRootSpan() { return rootSpan; } - /** @return Long.MAX_VALUE if no spans finished. */ + /** + * @return Long.MAX_VALUE if no spans finished. + */ @Override public long oldestFinishedTime() { long oldest = Long.MAX_VALUE; diff --git a/dd-trace-core/src/main/java/datadog/trace/core/monitor/HealthMetrics.java b/dd-trace-core/src/main/java/datadog/trace/core/monitor/HealthMetrics.java index ea6ffdebf0b..d0531a330cf 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/monitor/HealthMetrics.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/monitor/HealthMetrics.java @@ -91,7 +91,9 @@ public void onClientStatErrorReceived() {} public void onClientStatDowngraded() {} - /** @return Human-readable summary of the current health metrics. */ + /** + * @return Human-readable summary of the current health metrics. + */ public String summary() { return ""; } diff --git a/dd-trace-core/src/main/java/datadog/trace/core/propagation/HttpCodec.java b/dd-trace-core/src/main/java/datadog/trace/core/propagation/HttpCodec.java index 9835d2e1c03..d98245b443a 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/propagation/HttpCodec.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/propagation/HttpCodec.java @@ -309,6 +309,7 @@ private static class ExtractionCache AgentPropagation.ContextVisitor> { /** Cached context key-values (even indexes are header names, odd indexes are header values). */ private final List keysAndValues; + /** * The parent span identifier from {@link DatadogHttpCodec#SPAN_ID_KEY} header formatted as 16 * hexadecimal characters, {@code null} if absent or invalid. diff --git a/dd-trace-core/src/main/java/datadog/trace/core/propagation/ptags/W3CPTagsCodec.java b/dd-trace-core/src/main/java/datadog/trace/core/propagation/ptags/W3CPTagsCodec.java index 7d062f59d0d..31052f27846 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/propagation/ptags/W3CPTagsCodec.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/propagation/ptags/W3CPTagsCodec.java @@ -722,11 +722,13 @@ private static W3CPTags empty( private static class W3CPTags extends PTags { /** The index of the first tracestate list-member position in {@link #tracestate}. */ private final int firstMemberStart; + /** * The index of the Datadog tracestate list-member (dd=) position in {@link #tracestate}, {@code * -1 if Datadog list-member not found}. */ private final int ddMemberStart; + /** * The index of the end Datadog tracestate list-member (dd=) in {@link #tracestate}, {@code -1 * if Datadog list-member not found}. diff --git a/dd-trace-core/src/main/java/datadog/trace/payloadtags/json/JsonStreamParser.java b/dd-trace-core/src/main/java/datadog/trace/payloadtags/json/JsonStreamParser.java index 916e65afb72..50b09299dc7 100644 --- a/dd-trace-core/src/main/java/datadog/trace/payloadtags/json/JsonStreamParser.java +++ b/dd-trace-core/src/main/java/datadog/trace/payloadtags/json/JsonStreamParser.java @@ -15,10 +15,14 @@ public class JsonStreamParser { public interface Visitor { - /** @return - true to visit the path, false to skip it */ + /** + * @return - true to visit the path, false to skip it + */ boolean visitCompound(PathCursor path); - /** @return - true to visit the path, false to skip it */ + /** + * @return - true to visit the path, false to skip it + */ boolean visitPrimitive(PathCursor path); void booleanValue(PathCursor path, boolean value); diff --git a/dd-trace-core/src/test/groovy/datadog/trace/civisibility/writer/ddintake/CiTestCycleMapperV1PayloadTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/civisibility/writer/ddintake/CiTestCycleMapperV1PayloadTest.groovy index 98b86f01b3f..98bf4318669 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/civisibility/writer/ddintake/CiTestCycleMapperV1PayloadTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/civisibility/writer/ddintake/CiTestCycleMapperV1PayloadTest.groovy @@ -431,5 +431,4 @@ class CiTestCycleMapperV1PayloadTest extends DDSpecification { assertEquals(expected.toString(), actual.toString()) } } - } diff --git a/dd-trace-core/src/test/groovy/datadog/trace/common/metrics/OkHttpSinkTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/common/metrics/OkHttpSinkTest.groovy index f03b7521192..0d65e9463ae 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/common/metrics/OkHttpSinkTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/common/metrics/OkHttpSinkTest.groovy @@ -130,5 +130,4 @@ class OkHttpSinkTest extends DDSpecification { latch.countDown() } } - } diff --git a/dd-trace-core/src/test/groovy/datadog/trace/common/sampling/AsmStandaloneSamplerTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/common/sampling/AsmStandaloneSamplerTest.groovy index 1d83510ec52..c97d6f47013 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/common/sampling/AsmStandaloneSamplerTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/common/sampling/AsmStandaloneSamplerTest.groovy @@ -37,7 +37,9 @@ class AsmStandaloneSamplerTest extends DDCoreSpecification{ sampler.setSamplingPriority(span2) then: - 1 * clock.millis() >> { current.updateAndGet(value -> value + 1000) } // increment in one second + 1 * clock.millis() >> { + current.updateAndGet(value -> value + 1000) + } // increment in one second span2.getSamplingPriority() == PrioritySampling.SAMPLER_DROP when: @@ -45,11 +47,12 @@ class AsmStandaloneSamplerTest extends DDCoreSpecification{ sampler.setSamplingPriority(span3) then: "Mock one minute later" - clock.millis() >> { current.updateAndGet(value -> value + 60000) } // increment in one minute + clock.millis() >> { + current.updateAndGet(value -> value + 60000) + } // increment in one minute span3.getSamplingPriority() == PrioritySampling.SAMPLER_KEEP cleanup: tracer.close() } - } diff --git a/dd-trace-core/src/test/groovy/datadog/trace/common/sampling/RuleBasedSamplingTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/common/sampling/RuleBasedSamplingTest.groovy index c56e7ddfedb..8d82fc14a14 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/common/sampling/RuleBasedSamplingTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/common/sampling/RuleBasedSamplingTest.groovy @@ -289,7 +289,6 @@ class RuleBasedSamplingTest extends DDCoreSpecification { // Select matching service + resource + operation + tag rules "[{\"service\": \"service\", \"resource\": \"xxx\", \"tags\": {\"env\": \"x??\"}, \"sample_rate\": 0}, {\"service\": \"service\", \"resource\": \"resource\", \"name\": \"operation\", \"tags\": {\"env\": \"b?r\", \"tag\": \"f??\"}, \"sample_rate\": 1}]" | null | LOCAL_USER_RULE | USER_KEEP | 1.0 | 50 | null - } def "tag types test"() { diff --git a/dd-trace-core/src/test/groovy/datadog/trace/common/writer/DDIntakeWriterCombinedTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/common/writer/DDIntakeWriterCombinedTest.groovy index a065004c4d3..636516f2b84 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/common/writer/DDIntakeWriterCombinedTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/common/writer/DDIntakeWriterCombinedTest.groovy @@ -766,5 +766,4 @@ class DDIntakeWriterCombinedTest extends DDCoreSpecification { def buildIntakePath(TrackType trackType, String apiVersion) { return String.format("/api/%s/%s", apiVersion, trackType.name().toLowerCase()) } - } diff --git a/dd-trace-core/src/test/groovy/datadog/trace/common/writer/DDIntakeWriterTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/common/writer/DDIntakeWriterTest.groovy index 190100635c3..4629d33a096 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/common/writer/DDIntakeWriterTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/common/writer/DDIntakeWriterTest.groovy @@ -212,5 +212,4 @@ class DDIntakeWriterTest extends DDCoreSpecification { PropagationTags.factory().empty()) return new DDSpan("test", 0, context, null) } - } diff --git a/dd-trace-core/src/test/groovy/datadog/trace/common/writer/SpanSamplingWorkerTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/common/writer/SpanSamplingWorkerTest.groovy index b5f265168f7..d09b1e61c0e 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/common/writer/SpanSamplingWorkerTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/common/writer/SpanSamplingWorkerTest.groovy @@ -394,5 +394,4 @@ class SpanSamplingWorkerTest extends DDSpecification { false | true true | true } - } diff --git a/dd-trace-core/src/test/groovy/datadog/trace/common/writer/TraceProcessingWorkerTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/common/writer/TraceProcessingWorkerTest.groovy index 2a37a69ec64..e6b076dcfa8 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/common/writer/TraceProcessingWorkerTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/common/writer/TraceProcessingWorkerTest.groovy @@ -63,8 +63,7 @@ class TraceProcessingWorkerTest extends DDSpecification { setup: AtomicInteger flushCount = new AtomicInteger() TraceProcessingWorker worker = new TraceProcessingWorker(10, Stub(HealthMetrics), - flushCountingPayloadDispatcher(flushCount), - { + flushCountingPayloadDispatcher(flushCount), { false }, FAST_LANE, @@ -90,8 +89,7 @@ class TraceProcessingWorkerTest extends DDSpecification { setup: AtomicInteger flushCount = new AtomicInteger() TraceProcessingWorker worker = new TraceProcessingWorker(10, Stub(HealthMetrics), - flushCountingPayloadDispatcher(flushCount), - { + flushCountingPayloadDispatcher(flushCount), { false }, FAST_LANE, @@ -429,5 +427,4 @@ class TraceProcessingWorkerTest extends DDSpecification { USER_KEEP | 10 | 10 | 40 | 0 | [Mock(DDSpan), Mock(DDSpan), Mock(DDSpan), Mock(DDSpan)] SAMPLER_KEEP | 10 | 10 | 50 | 0 | [Mock(DDSpan), Mock(DDSpan), Mock(DDSpan), Mock(DDSpan), Mock(DDSpan)] } - } diff --git a/dd-trace-core/src/test/groovy/datadog/trace/common/writer/WriterFactoryTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/common/writer/WriterFactoryTest.groovy index b7b461b1db1..25fd88399c0 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/common/writer/WriterFactoryTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/common/writer/WriterFactoryTest.groovy @@ -181,20 +181,20 @@ class WriterFactoryTest extends DDSpecification { ] def builder = new Response.Builder() - .code(200) - .message("OK") - .protocol(Protocol.HTTP_1_1) - .request(new Request.Builder().url(agentUrl.resolve("/info")).build()) - .body(ResponseBody.create(MediaType.parse("application/json"), new JsonBuilder(response).toString())) + .code(200) + .message("OK") + .protocol(Protocol.HTTP_1_1) + .request(new Request.Builder().url(agentUrl.resolve("/info")).build()) + .body(ResponseBody.create(MediaType.parse("application/json"), new JsonBuilder(response).toString())) return builder.build() } Response buildHttpResponseNotOk(HttpUrl agentUrl) { def builder = new Response.Builder() - .code(500) - .message("ERROR") - .protocol(Protocol.HTTP_1_1) - .request(new Request.Builder().url(agentUrl.resolve("/info")).build()) + .code(500) + .message("ERROR") + .protocol(Protocol.HTTP_1_1) + .request(new Request.Builder().url(agentUrl.resolve("/info")).build()) return builder.build() } } diff --git a/dd-trace-core/src/test/groovy/datadog/trace/common/writer/ddagent/TraceMapperV05PayloadTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/common/writer/ddagent/TraceMapperV05PayloadTest.groovy index 6fc056f95d2..e03bf6e48eb 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/common/writer/ddagent/TraceMapperV05PayloadTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/common/writer/ddagent/TraceMapperV05PayloadTest.groovy @@ -259,7 +259,6 @@ class TraceMapperV05PayloadTest extends DDSpecification { for (Map.Entry entry : meta.entrySet()) { if (Tags.HTTP_STATUS.equals(entry.getKey())) { assertEquals(String.valueOf(expectedSpan.getHttpStatusCode()), entry.getValue()) - } else if(DDTags.ORIGIN_KEY.equals(entry.getKey())) { assertEquals(expectedSpan.getOrigin(), entry.getValue()) } else if (DDTags.PROCESS_TAGS.equals(entry.getKey())) { diff --git a/dd-trace-core/src/test/groovy/datadog/trace/common/writer/ddintake/DDEvpProxyApiTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/common/writer/ddintake/DDEvpProxyApiTest.groovy index 88821f41d42..c9c4209e340 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/common/writer/ddintake/DDEvpProxyApiTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/common/writer/ddintake/DDEvpProxyApiTest.groovy @@ -305,11 +305,11 @@ class DDEvpProxyApiTest extends DDCoreSpecification { def createEvpProxyApi(String agentUrl, String evpProxyEndpoint, TrackType trackType, boolean compressionEnabled) { return DDEvpProxyApi.builder() - .agentUrl(HttpUrl.get(agentUrl)) - .evpProxyEndpoint(evpProxyEndpoint) - .trackType(trackType) - .compressionEnabled(compressionEnabled) - .build() + .agentUrl(HttpUrl.get(agentUrl)) + .evpProxyEndpoint(evpProxyEndpoint) + .trackType(trackType) + .compressionEnabled(compressionEnabled) + .build() } def discoverMapper(TrackType trackType, boolean compressionEnabled) { @@ -331,7 +331,7 @@ class DDEvpProxyApiTest extends DDCoreSpecification { } packer.flush() return mapper.newPayload() - .withBody(traceCapture.traceCount, - traces.isEmpty() ? ByteBuffer.allocate(0) : traceCapture.buffer) + .withBody(traceCapture.traceCount, + traces.isEmpty() ? ByteBuffer.allocate(0) : traceCapture.buffer) } } diff --git a/dd-trace-core/src/test/groovy/datadog/trace/common/writer/ddintake/DDIntakeApiTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/common/writer/ddintake/DDIntakeApiTest.groovy index 9ad01431af6..91b72037024 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/common/writer/ddintake/DDIntakeApiTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/common/writer/ddintake/DDIntakeApiTest.groovy @@ -353,7 +353,7 @@ class DDIntakeApiTest extends DDCoreSpecification { } packer.flush() return mapper.newPayload() - .withBody(traceCapture.traceCount, - traces.isEmpty() ? ByteBuffer.allocate(0) : traceCapture.buffer) + .withBody(traceCapture.traceCount, + traces.isEmpty() ? ByteBuffer.allocate(0) : traceCapture.buffer) } } diff --git a/dd-trace-core/src/test/groovy/datadog/trace/core/datastreams/DataStreamsWritingTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/core/datastreams/DataStreamsWritingTest.groovy index 3ba8b102474..538bf3e1978 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/core/datastreams/DataStreamsWritingTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/core/datastreams/DataStreamsWritingTest.groovy @@ -203,7 +203,8 @@ class DataStreamsWritingTest extends DDCoreSpecification { 2.times { int mapHeaderSize = unpacker.unpackMapHeader() assert availableSizes.remove(mapHeaderSize) - if (mapHeaderSize == 5) { // empty topic group + if (mapHeaderSize == 5) { + // empty topic group assert unpacker.unpackString() == "PathwayLatency" unpacker.skipValue() assert unpacker.unpackString() == "EdgeLatency" @@ -214,7 +215,8 @@ class DataStreamsWritingTest extends DDCoreSpecification { assert unpacker.unpackLong() == 9 assert unpacker.unpackString() == "ParentHash" assert unpacker.unpackLong() == 0 - } else { //other group + } else { + //other group assert unpacker.unpackString() == "PathwayLatency" unpacker.skipValue() assert unpacker.unpackString() == "EdgeLatency" diff --git a/dd-trace-core/src/test/groovy/datadog/trace/llmobs/writer/ddintake/LLMObsSpanMapperTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/llmobs/writer/ddintake/LLMObsSpanMapperTest.groovy index 8a161ed3141..52a40ff1d26 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/llmobs/writer/ddintake/LLMObsSpanMapperTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/llmobs/writer/ddintake/LLMObsSpanMapperTest.groovy @@ -69,7 +69,9 @@ class LLMObsSpanMapperTest extends DDCoreSpecification { } @Override - boolean isOpen() { return true } + boolean isOpen() { + return true + } @Override void close() throws IOException { } @@ -117,5 +119,4 @@ class LLMObsSpanMapperTest extends DDCoreSpecification { captured = buffer } } - } diff --git a/dd-trace-ot/src/main/java/datadog/opentracing/DDTracer.java b/dd-trace-ot/src/main/java/datadog/opentracing/DDTracer.java index 31d1a279a2c..5abe1c96e62 100644 --- a/dd-trace-ot/src/main/java/datadog/opentracing/DDTracer.java +++ b/dd-trace-ot/src/main/java/datadog/opentracing/DDTracer.java @@ -660,7 +660,9 @@ public Span start() { return converter.toSpan(agentSpan); } - /** @deprecated use {@link #start()} instead. */ + /** + * @deprecated use {@link #start()} instead. + */ @Deprecated @Override public Scope startActive(final boolean finishSpanOnClose) { diff --git a/gradle/java_no_deps.gradle b/gradle/java_no_deps.gradle index 4a4e93f7667..1130d1aef1d 100644 --- a/gradle/java_no_deps.gradle +++ b/gradle/java_no_deps.gradle @@ -173,24 +173,32 @@ ext.configureJvmArgs = (Test testTask, JavaVersion applyFromVersion, List + def normalizedTestJvm = project.providers.gradleProperty("testJvm").map { + testJvm -> if (testJvm.isBlank()) { throw new GradleException("testJvm property is blank") } // "stable" is calculated as the largest X found in JAVA_X_HOME if (testJvm == "stable") { - def javaVersions = providers.environmentVariablesPrefixedBy("JAVA_").map { javaHomes -> + def javaVersions = providers.environmentVariablesPrefixedBy("JAVA_").map { + javaHomes -> javaHomes - .findAll { it.key =~ /^JAVA_[0-9]+_HOME$/ } - .collect { (it.key =~ /^JAVA_(\d+)_HOME$/)[0][1] as Integer } + .findAll { + it.key =~ /^JAVA_[0-9]+_HOME$/ + } + .collect { + (it.key =~ /^JAVA_(\d+)_HOME$/)[0][1] as Integer + } }.get() if (javaVersions.isEmpty()) { @@ -201,7 +209,9 @@ def configureTestJvm(Project project, boolean applyCodeCoverage) { } else { testJvm } - }.map { logger.info("normalized testJvm: " + it); it } + }.map { + logger.info("normalized testJvm: " + it); it + } def testJvmHomePath = normalizedTestJvm.map { if (Files.exists(Paths.get(it))) { @@ -220,9 +230,12 @@ def configureTestJvm(Project project, boolean applyCodeCoverage) { getJavaHomePath(testJvmHome) } - }.map { logger.info("testJvm home path: " + it); it } + }.map { + logger.info("testJvm home path: " + it); it + } - def javaTestLauncher = testJvmHomePath.zip(normalizedTestJvm) { testJvmHome, testJvm -> + def javaTestLauncher = testJvmHomePath.zip(normalizedTestJvm) { + testJvmHome, testJvm -> // Only change test JVM if it's not the one we are running the gradle build with if (currentJavaHomePath == testJvmHome) { null @@ -234,10 +247,15 @@ def configureTestJvm(Project project, boolean applyCodeCoverage) { throw new GradleException("Unable to find launcher for Java $testJvm. Does '$testJvmHome' point to a JDK?") }) } - }.flatMap { it }.map { logger.info("testJvm launcher: " + it.executablePath); it } + }.flatMap { + it + }.map { + logger.info("testJvm launcher: " + it.executablePath); it + } // Apply the launcher - tasks.withType(Test).configureEach { Test testTask -> + tasks.withType(Test).configureEach { + Test testTask -> if (javaTestLauncher.isPresent()) { javaLauncher = javaTestLauncher onlyIf("Allowed or forced JDK") { @@ -252,7 +270,9 @@ def configureTestJvm(Project project, boolean applyCodeCoverage) { } } } else { - onlyIf("is current Daemon JVM allowed") { isJavaVersionAllowed(JavaVersion.current(), testTask.name) } + onlyIf("is current Daemon JVM allowed") { + isJavaVersionAllowed(JavaVersion.current(), testTask.name) + } } // temporary workaround when using Java16+: some tests require reflective access to java.lang/java.util @@ -260,7 +280,9 @@ def configureTestJvm(Project project, boolean applyCodeCoverage) { testTask, JavaVersion.VERSION_16, ['--add-opens=java.base/java.lang=ALL-UNNAMED', '--add-opens=java.base/java.util=ALL-UNNAMED'], - project.providers.provider { project.properties['allowReflectiveAccessToJdk'] as Boolean }.orElse(true) + project.providers.provider { + project.properties['allowReflectiveAccessToJdk'] as Boolean + }.orElse(true) ) if (configurations.hasProperty("latestDepTestRuntimeClasspath")) { @@ -275,7 +297,8 @@ def configureTestJvm(Project project, boolean applyCodeCoverage) { configureTestJvm(project, applyCodeCoverage) -[JavaCompile, ScalaCompile, GroovyCompile].each { type -> +[JavaCompile, ScalaCompile, GroovyCompile].each { + type -> tasks.withType(type).configureEach { if (options.fork) { options.forkOptions.with { @@ -286,7 +309,8 @@ configureTestJvm(project, applyCodeCoverage) } if (project.plugins.hasPlugin('kotlin')) { - ['compileKotlin', 'compileTestKotlin'].each { type -> + ['compileKotlin', 'compileTestKotlin'].each { + type -> tasks.named(type) { kotlinDaemonJvmArguments = ["-Xmx256m", "-XX:+UseParallelGC"] } @@ -404,7 +428,8 @@ ext.configureCompiler = (AbstractCompile it, int toolchainVersion, JavaVersion c } as Closure ext.configureGroovyCompiler = (int toolchainVersion, String... taskNames) -> { - taskNames.each { taskName -> + taskNames.each { + taskName -> tasks.named(taskName, GroovyCompile) { configureCompiler(it, toolchainVersion) } @@ -456,11 +481,15 @@ def isJavaLanguageVersionAllowed(JavaLanguageVersion languageVersion, String tes } def isJdkForced(String javaName) { - return (project.hasProperty('forceJdk') && project.findProperty('forceJdk').any { it.equalsIgnoreCase(javaName) }) + return (project.hasProperty('forceJdk') && project.findProperty('forceJdk').any { + it.equalsIgnoreCase(javaName) + }) } def isJdkExcluded(String javaName) { - return (project.hasProperty('excludeJdk') && project.findProperty('excludeJdk').any { it.equalsIgnoreCase(javaName) }) + return (project.hasProperty('excludeJdk') && project.findProperty('excludeJdk').any { + it.equalsIgnoreCase(javaName) + }) } def getJavaHomePath(String path) { diff --git a/gradle/spotless.gradle b/gradle/spotless.gradle index 4c8fba3dd62..513209d9c62 100644 --- a/gradle/spotless.gradle +++ b/gradle/spotless.gradle @@ -45,7 +45,7 @@ spotless { // same as kotlin, but for .gradle.kts files (defaults to '*.gradle.kts') target '*.gradle.kts' ktlint('1.7.1').editorConfigOverride([ - // Disable trailing comma rules to minimize diff. + // Disable trailing comma rules to minimize diff. 'ktlint_standard_trailing-comma-on-call-site': 'disabled', 'ktlint_standard_trailing-comma-on-declaration-site': 'disabled' ]) diff --git a/gradle/tries.gradle b/gradle/tries.gradle index 0d47cdbc78c..852a18a97ea 100644 --- a/gradle/tries.gradle +++ b/gradle/tries.gradle @@ -11,7 +11,8 @@ def configureClassNameTrieTask(exec, sourceSetName) { def javaFiles = trieFiles.collect { file(javaDir.resolve(trieDir.relativize(it.toPath())).resolveSibling( it.name.capitalize().replaceAll('_([a-z])') { - it[1].toUpperCase() } + it[1].toUpperCase() + } .replace('.trie', 'Trie.java') as String)) } diff --git a/internal-api/src/main/java/datadog/trace/api/Config.java b/internal-api/src/main/java/datadog/trace/api/Config.java index 0e9aa035035..302eb61471e 100644 --- a/internal-api/src/main/java/datadog/trace/api/Config.java +++ b/internal-api/src/main/java/datadog/trace/api/Config.java @@ -806,6 +806,7 @@ public static String getHostName() { private final String agentUnixDomainSocket; private final String agentNamedPipe; private final int agentTimeout; + /** Should be set to {@code true} when running in agentless mode in a JVM without TLS */ private final boolean forceClearTextHttpForIntakeClient; @@ -3846,12 +3847,16 @@ public boolean isCiVisibilityCodeCoverageEnabled() { return ciVisibilityCodeCoverageEnabled; } - /** @return {@code true} if code coverage line-granularity is explicitly enabled */ + /** + * @return {@code true} if code coverage line-granularity is explicitly enabled + */ public boolean isCiVisibilityCoverageLinesEnabled() { return ciVisibilityCoverageLinesEnabled != null && ciVisibilityCoverageLinesEnabled; } - /** @return {@code true} if code coverage line-granularity is explicitly disabled */ + /** + * @return {@code true} if code coverage line-granularity is explicitly disabled + */ public boolean isCiVisibilityCoverageLinesDisabled() { return ciVisibilityCoverageLinesEnabled != null && !ciVisibilityCoverageLinesEnabled; } @@ -4602,7 +4607,9 @@ public int getStackTraceLengthLimit() { return stackTraceLengthLimit; } - /** @return A map of tags to be applied only to the local application root span. */ + /** + * @return A map of tags to be applied only to the local application root span. + */ public TagMap getLocalRootSpanTags() { final Map runtimeTags = getRuntimeTags(); diff --git a/internal-api/src/main/java/datadog/trace/api/StatsDClient.java b/internal-api/src/main/java/datadog/trace/api/StatsDClient.java index a93121f1ec9..f446e026e10 100644 --- a/internal-api/src/main/java/datadog/trace/api/StatsDClient.java +++ b/internal-api/src/main/java/datadog/trace/api/StatsDClient.java @@ -37,7 +37,8 @@ public interface StatsDClient extends Closeable { * @param tags the tags to attach to the event */ default void recordEvent( - String type, String source, String eventName, String message, String... tags) {}; + String type, String source, String eventName, String message, String... tags) {} + ; @Override void close(); diff --git a/internal-api/src/main/java/datadog/trace/api/TraceConfig.java b/internal-api/src/main/java/datadog/trace/api/TraceConfig.java index f07d3f56195..fa7b814fbea 100644 --- a/internal-api/src/main/java/datadog/trace/api/TraceConfig.java +++ b/internal-api/src/main/java/datadog/trace/api/TraceConfig.java @@ -26,6 +26,7 @@ public interface TraceConfig { Double getTraceSampleRate(); Map getTracingTags(); + /** * The preferred service name to be used for tracing. * diff --git a/internal-api/src/main/java/datadog/trace/api/civisibility/coverage/CoverageStore.java b/internal-api/src/main/java/datadog/trace/api/civisibility/coverage/CoverageStore.java index 013b519a18f..a779c699281 100644 --- a/internal-api/src/main/java/datadog/trace/api/civisibility/coverage/CoverageStore.java +++ b/internal-api/src/main/java/datadog/trace/api/civisibility/coverage/CoverageStore.java @@ -8,7 +8,9 @@ public interface CoverageStore extends TestReportHolder { CoverageProbes getProbes(); - /** @return {@code true} if coverage was gathered successfully */ + /** + * @return {@code true} if coverage was gathered successfully + */ boolean report(DDTraceId testSessionId, Long testSuiteId, long testSpanId); interface Factory extends Registry { diff --git a/internal-api/src/main/java/datadog/trace/api/civisibility/execution/TestExecutionHistory.java b/internal-api/src/main/java/datadog/trace/api/civisibility/execution/TestExecutionHistory.java index 0cf7c41055d..ca2df8a3386 100644 --- a/internal-api/src/main/java/datadog/trace/api/civisibility/execution/TestExecutionHistory.java +++ b/internal-api/src/main/java/datadog/trace/api/civisibility/execution/TestExecutionHistory.java @@ -11,11 +11,15 @@ public interface TestExecutionHistory { */ ExecutionOutcome registerExecution(TestStatus status, long durationMillis); - /** @return {@code true} if the test should be instrumented by FTR */ + /** + * @return {@code true} if the test should be instrumented by FTR + */ boolean failedTestReplayApplicable(); interface ExecutionOutcome { - /** @return {@code true} if this execution failed and the failure was suppressed */ + /** + * @return {@code true} if this execution failed and the failure was suppressed + */ boolean failureSuppressed(); /** diff --git a/internal-api/src/main/java/datadog/trace/api/gateway/Events.java b/internal-api/src/main/java/datadog/trace/api/gateway/Events.java index 394459bc7c8..265685db8f1 100644 --- a/internal-api/src/main/java/datadog/trace/api/gateway/Events.java +++ b/internal-api/src/main/java/datadog/trace/api/gateway/Events.java @@ -28,6 +28,7 @@ public final class Events { @SuppressWarnings("rawtypes") private static final EventType REQUEST_STARTED = new ET<>("request.started", REQUEST_STARTED_ID); + /** A request started */ @SuppressWarnings("unchecked") public EventType>> requestStarted() { @@ -38,6 +39,7 @@ public EventType>> requestStarted() { @SuppressWarnings("rawtypes") private static final EventType REQUEST_ENDED = new ET<>("request.ended", REQUEST_ENDED_ID); + /** A request ended */ @SuppressWarnings("unchecked") public EventType>> requestEnded() { @@ -49,6 +51,7 @@ public EventType>> requestEnde @SuppressWarnings("rawtypes") private static final EventType REQUEST_HEADER = new ET<>("server.request.header", REQUEST_HEADER_ID); + /** A request header as a key and values separated by , */ @SuppressWarnings("unchecked") public EventType> requestHeader() { @@ -60,6 +63,7 @@ public EventType> requestHeader() { @SuppressWarnings("rawtypes") private static final EventType REQUEST_HEADER_DONE = new ET<>("server.request.header.done", REQUEST_HEADER_DONE_ID); + /** All request headers have been provided */ @SuppressWarnings("unchecked") public EventType>> requestHeaderDone() { @@ -71,6 +75,7 @@ public EventType>> requestHeaderDone() { @SuppressWarnings("rawtypes") private static final EventType REQUEST_METHOD_URI_RAW = new ET<>("server.request.method.uri.raw", REQUEST_METHOD_URI_RAW_ID); + /** The method (uppercase) and URIDataAdapter for the request. */ @SuppressWarnings("unchecked") public EventType>> @@ -84,6 +89,7 @@ public EventType>> requestHeaderDone() { @SuppressWarnings("rawtypes") private static final EventType REQUEST_PATH_PARAMS = new ET<>("server.request.method.uri.raw", REQUEST_PATH_PARAMS_ID); + /** The parameters the framework got from the request uri (but not the query string) */ @SuppressWarnings("unchecked") public EventType, Flow>> requestPathParams() { @@ -95,6 +101,7 @@ public EventType>> requestHeaderDone() { @SuppressWarnings("rawtypes") private static final EventType REQUEST_CLIENT_SOCKET_ADDRESS = new ET<>("http.server.client_socket_address", REQUEST_CLIENT_SOCKET_ADDRESS_ID); + /** The method (uppercase) and URIDataAdapter for the request. */ @SuppressWarnings("unchecked") public EventType>> @@ -108,6 +115,7 @@ public EventType>> requestHeaderDone() { @SuppressWarnings("rawtypes") private static final EventType REQUEST_INFERRED_CLIENT_ADDRESS = new ET<>("http.server.inferred_client_address", REQUEST_INFERRED_CLIENT_ADDRESS_ID); + /** The inferred client IP address. */ @SuppressWarnings("unchecked") public EventType>> requestInferredClientAddress() { @@ -120,6 +128,7 @@ public EventType>> requestInferred @SuppressWarnings("rawtypes") private static final EventType REQUEST_BODY_START = new ET<>("request.body.started", REQUEST_BODY_START_ID); + /** The request body has started being read */ @SuppressWarnings("unchecked") public EventType> requestBodyStart() { @@ -131,6 +140,7 @@ public EventType> requestBo @SuppressWarnings("rawtypes") private static final EventType REQUEST_BODY_DONE = new ET<>("request.body.done", REQUEST_BODY_DONE_ID); + /** The request body is done being read */ @SuppressWarnings("unchecked") public EventType>> requestBodyDone() { @@ -143,6 +153,7 @@ public EventType>> req @SuppressWarnings("rawtypes") private static final EventType REQUEST_BODY_CONVERTED = new ET<>("request.body.converted", REQUEST_BODY_CONVERTED_ID); + /** The request body has been converted by the framework */ @SuppressWarnings("unchecked") public EventType>> requestBodyProcessed() { @@ -154,6 +165,7 @@ public EventType>> requestBodyProc @SuppressWarnings("rawtypes") private static final EventType RESPONSE_STARTED = new ET<>("response.started", RESPONSE_STARTED_ID); + /** A response started */ @SuppressWarnings("unchecked") public EventType>> responseStarted() { @@ -165,6 +177,7 @@ public EventType>> responseStarte @SuppressWarnings("rawtypes") private static final EventType RESPONSE_HEADER = new ET<>("server.response.header", RESPONSE_HEADER_ID); + /** A response header as a key and values separated by , */ @SuppressWarnings("unchecked") public EventType> responseHeader() { @@ -176,6 +189,7 @@ public EventType> responseHeader() { @SuppressWarnings("rawtypes") private static final EventType RESPONSE_HEADER_DONE = new ET<>("server.response.header.done", RESPONSE_HEADER_DONE_ID); + /** All response headers have been provided */ @SuppressWarnings("unchecked") public EventType>> responseHeaderDone() { @@ -187,6 +201,7 @@ public EventType>> responseHeaderDone() { @SuppressWarnings("rawtypes") private static final EventType GRPC_SERVER_REQUEST_MESSAGE = new ET<>("grpc.server.request.message", GRPC_SERVER_REQUEST_MESSAGE_ID); + /** All response headers have been provided */ @SuppressWarnings("unchecked") public EventType>> grpcServerRequestMessage() { @@ -198,6 +213,7 @@ public EventType>> grpcServerReque @SuppressWarnings("rawtypes") private static final EventType GRAPHQL_SERVER_REQUEST_MESSAGE = new ET<>("graphql.server.request.message", GRAPHQL_SERVER_REQUEST_MESSAGE_ID); + /** Before resolver execution */ @SuppressWarnings("unchecked") public EventType, Flow>> @@ -211,6 +227,7 @@ public EventType>> grpcServerReque @SuppressWarnings("rawtypes") private static final EventType DATABASE_CONNECTION = new ET<>("database.connection", DATABASE_CONNECTION_ID); + /** A database connection */ @SuppressWarnings("unchecked") public EventType> databaseConnection() { @@ -222,6 +239,7 @@ public EventType> databaseConnection() { @SuppressWarnings("rawtypes") private static final EventType DATABASE_SQL_QUERY = new ET<>("database.query", DATABASE_SQL_QUERY_ID); + /** A database sql query */ @SuppressWarnings("unchecked") public EventType>> databaseSqlQuery() { @@ -329,6 +347,7 @@ public EventType> httpRoute() { @SuppressWarnings("rawtypes") private static final EventType RESPONSE_BODY = new ET<>("response.body", RESPONSE_BODY_ID); + /** * The original response body object used by the framework before being serialized to the response */ diff --git a/internal-api/src/main/java/datadog/trace/api/gateway/InstrumentationGateway.java b/internal-api/src/main/java/datadog/trace/api/gateway/InstrumentationGateway.java index 6a1cc258de1..7791b382edd 100644 --- a/internal-api/src/main/java/datadog/trace/api/gateway/InstrumentationGateway.java +++ b/internal-api/src/main/java/datadog/trace/api/gateway/InstrumentationGateway.java @@ -181,6 +181,7 @@ public Flow get() { return Flow.ResultFlow.empty(); } } + // Make testing easier by delegating equals @Override public boolean equals(Object obj) { @@ -200,6 +201,7 @@ public Flow apply(RequestContext ctx, IGSpanInfo agentSpan) { return Flow.ResultFlow.empty(); } } + // Make testing easier by delegating equals @Override public boolean equals(Object obj) { @@ -219,6 +221,7 @@ public Flow apply(RequestContext ctx) { return Flow.ResultFlow.empty(); } } + // Make testing easier by delegating equals @Override public boolean equals(Object obj) { @@ -237,6 +240,7 @@ public void accept(RequestContext ctx, String key, String value) { log.warn("Callback for {} threw.", eventType, t); } } + // Make testing easier by delegating equals @Override public boolean equals(Object obj) { @@ -257,6 +261,7 @@ public Flow apply(RequestContext ctx, String method, URIDataAdapter adapte return Flow.ResultFlow.empty(); } } + // Make testing easier by delegating equals @Override public boolean equals(Object obj) { @@ -276,6 +281,7 @@ public Flow apply(RequestContext ctx, Map map) { return Flow.ResultFlow.empty(); } } + // Make testing easier by delegating equals @Override public boolean equals(Object obj) { @@ -295,6 +301,7 @@ public Flow apply(RequestContext ctx, String ip, Integer port) { return Flow.ResultFlow.empty(); } } + // Make testing easier by delegating equals @Override public boolean equals(Object obj) { @@ -314,6 +321,7 @@ public Flow apply(RequestContext ctx, String ip) { return Flow.ResultFlow.empty(); } } + // Make testing easier by delegating equals @Override public boolean equals(Object obj) { diff --git a/internal-api/src/main/java/datadog/trace/api/http/StoredByteBody.java b/internal-api/src/main/java/datadog/trace/api/http/StoredByteBody.java index 8cda3dd3728..a2c44906855 100644 --- a/internal-api/src/main/java/datadog/trace/api/http/StoredByteBody.java +++ b/internal-api/src/main/java/datadog/trace/api/http/StoredByteBody.java @@ -17,7 +17,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -/** @see StoredCharBody */ +/** + * @see StoredCharBody + */ public class StoredByteBody implements StoredBodySupplier { private static final Logger LOGGER = LoggerFactory.getLogger(StoredByteBody.class); diff --git a/internal-api/src/main/java/datadog/trace/api/http/StoredCharBody.java b/internal-api/src/main/java/datadog/trace/api/http/StoredCharBody.java index 1af4b1e2274..6fef831cbe3 100644 --- a/internal-api/src/main/java/datadog/trace/api/http/StoredCharBody.java +++ b/internal-api/src/main/java/datadog/trace/api/http/StoredCharBody.java @@ -134,7 +134,9 @@ private int capacityLeft() { return this.storedBody.length - this.storedBodyLen; } - /** @param utf16CodeUnit an int in the range 0-0xFFFF */ + /** + * @param utf16CodeUnit an int in the range 0-0xFFFF + */ public synchronized void appendData(int utf16CodeUnit) { try { if (utf16CodeUnit < 0) { diff --git a/internal-api/src/main/java/datadog/trace/api/iast/propagation/PropagationModule.java b/internal-api/src/main/java/datadog/trace/api/iast/propagation/PropagationModule.java index 371c3618835..4eaf20a1539 100644 --- a/internal-api/src/main/java/datadog/trace/api/iast/propagation/PropagationModule.java +++ b/internal-api/src/main/java/datadog/trace/api/iast/propagation/PropagationModule.java @@ -10,7 +10,9 @@ @SuppressWarnings("unused") public interface PropagationModule extends IastModule { - /** @see #taintObject(IastContext, Object, byte) */ + /** + * @see #taintObject(IastContext, Object, byte) + */ void taintObject(@Nullable Object target, byte origin); /** @@ -19,10 +21,14 @@ public interface PropagationModule extends IastModule { */ void taintObject(@Nullable IastContext ctx, @Nullable Object target, byte origin); - /** @see #taintString(IastContext, String, byte) */ + /** + * @see #taintString(IastContext, String, byte) + */ void taintString(@Nullable String target, byte origin); - /** @see #taintObject(IastContext, Object, byte) */ + /** + * @see #taintObject(IastContext, Object, byte) + */ void taintString(@Nullable IastContext ctx, @Nullable String target, byte origin); /** @@ -32,17 +38,25 @@ public interface PropagationModule extends IastModule { void taintObject( @Nullable IastContext ctx, @Nullable Object target, byte origin, @Nullable CharSequence name); - /** @see #taintObject(IastContext, Object, byte, CharSequence) */ + /** + * @see #taintObject(IastContext, Object, byte, CharSequence) + */ void taintObject(@Nullable Object target, byte origin, @Nullable CharSequence name); - /** @see #taintObject(IastContext, Object, byte, CharSequence) */ + /** + * @see #taintObject(IastContext, Object, byte, CharSequence) + */ void taintString( @Nullable IastContext ctx, @Nullable String target, byte origin, @Nullable CharSequence name); - /** @see #taintString(IastContext, String, byte, CharSequence) */ + /** + * @see #taintString(IastContext, String, byte, CharSequence) + */ void taintString(@Nullable String target, byte origin, @Nullable CharSequence name); - /** @see #taintObject(IastContext, Object, byte, CharSequence, Object) */ + /** + * @see #taintObject(IastContext, Object, byte, CharSequence, Object) + */ void taintObject( @Nullable Object target, byte origin, @Nullable CharSequence name, @Nullable Object value); @@ -54,14 +68,18 @@ void taintObject( @Nullable CharSequence name, @Nullable Object value); - /** @see #taintString(IastContext, String, byte, CharSequence, CharSequence) */ + /** + * @see #taintString(IastContext, String, byte, CharSequence, CharSequence) + */ void taintString( @Nullable String target, byte origin, @Nullable CharSequence name, @Nullable CharSequence value); - /** @see #taintObject(IastContext, Object, byte, CharSequence, Object) */ + /** + * @see #taintObject(IastContext, Object, byte, CharSequence, Object) + */ void taintString( @Nullable IastContext ctx, @Nullable String target, @@ -69,7 +87,9 @@ void taintString( @Nullable CharSequence name, @Nullable CharSequence value); - /** @see #taintObjectRange(IastContext, Object, byte, int, int) */ + /** + * @see #taintObjectRange(IastContext, Object, byte, int, int) + */ void taintObjectRange(@Nullable Object target, byte origin, int start, int length); /** @@ -81,14 +101,20 @@ void taintString( void taintObjectRange( @Nullable IastContext ctx, @Nullable Object target, byte origin, int start, int length); - /** @see #taintStringRange(IastContext, String, byte, int, int) */ + /** + * @see #taintStringRange(IastContext, String, byte, int, int) + */ void taintStringRange(@Nullable String target, byte origin, int start, int length); - /** @see #taintObjectRange(IastContext, Object, byte, int, int) */ + /** + * @see #taintObjectRange(IastContext, Object, byte, int, int) + */ void taintStringRange( @Nullable IastContext ctx, @Nullable String target, byte origin, int start, int length); - /** @see #taintObjectIfTainted(IastContext, Object, Object) */ + /** + * @see #taintObjectIfTainted(IastContext, Object, Object) + */ void taintObjectIfTainted(@Nullable Object target, @Nullable Object input); /** @@ -98,14 +124,20 @@ void taintStringRange( void taintObjectIfTainted( @Nullable IastContext ctx, @Nullable Object target, @Nullable Object input); - /** @see #taintStringIfTainted(IastContext, String, Object) */ + /** + * @see #taintStringIfTainted(IastContext, String, Object) + */ void taintStringIfTainted(@Nullable String target, @Nullable Object input); - /** @see #taintObjectIfTainted(IastContext, Object, Object) */ + /** + * @see #taintObjectIfTainted(IastContext, Object, Object) + */ void taintStringIfTainted( @Nullable IastContext ctx, @Nullable String target, @Nullable Object input); - /** @see #taintObjectIfTainted(IastContext, Object, Object, boolean, int) */ + /** + * @see #taintObjectIfTainted(IastContext, Object, Object, boolean, int) + */ void taintObjectIfTainted( @Nullable Object target, @Nullable Object input, boolean keepRanges, int mark); @@ -125,11 +157,15 @@ void taintObjectIfTainted( boolean keepRanges, int mark); - /** @see #taintStringIfTainted(IastContext, String, Object, boolean, int) */ + /** + * @see #taintStringIfTainted(IastContext, String, Object, boolean, int) + */ void taintStringIfTainted( @Nullable String target, @Nullable Object input, boolean keepRanges, int mark); - /** @see #taintObjectIfTainted(IastContext, Object, Object, boolean, int) */ + /** + * @see #taintObjectIfTainted(IastContext, Object, Object, boolean, int) + */ void taintStringIfTainted( @Nullable IastContext ctx, @Nullable String target, @@ -137,7 +173,9 @@ void taintStringIfTainted( boolean keepRanges, int mark); - /** @see #taintObjectIfTainted(IastContext, Object, Object, boolean, int) */ + /** + * @see #taintObjectIfTainted(IastContext, Object, Object, boolean, int) + */ void taintObjectIfRangeTainted( @Nullable Object target, @Nullable Object input, @@ -164,7 +202,9 @@ void taintObjectIfRangeTainted( boolean keepRanges, int mark); - /** @see #taintStringIfTainted(IastContext, String, Object, boolean, int) */ + /** + * @see #taintStringIfTainted(IastContext, String, Object, boolean, int) + */ void taintStringIfRangeTainted( @Nullable String target, @Nullable Object input, @@ -173,7 +213,9 @@ void taintStringIfRangeTainted( boolean keepRanges, int mark); - /** @see #taintObjectIfTainted(IastContext, Object, Object, boolean, int) */ + /** + * @see #taintObjectIfTainted(IastContext, Object, Object, boolean, int) + */ void taintStringIfRangeTainted( @Nullable IastContext ctx, @Nullable String target, @@ -183,7 +225,9 @@ void taintStringIfRangeTainted( boolean keepRanges, int mark); - /** @see #taintObjectIfTainted(IastContext, Object, Object, byte) */ + /** + * @see #taintObjectIfTainted(IastContext, Object, Object, byte) + */ void taintObjectIfTainted(@Nullable Object target, @Nullable Object input, byte origin); /** @@ -194,14 +238,20 @@ void taintStringIfRangeTainted( void taintObjectIfTainted( @Nullable IastContext ctx, @Nullable Object target, @Nullable Object input, byte origin); - /** @see #taintStringIfTainted(IastContext, String, Object, byte) */ + /** + * @see #taintStringIfTainted(IastContext, String, Object, byte) + */ void taintStringIfTainted(@Nullable String target, @Nullable Object input, byte origin); - /** @see #taintObjectIfTainted(IastContext, Object, Object, byte) */ + /** + * @see #taintObjectIfTainted(IastContext, Object, Object, byte) + */ void taintStringIfTainted( @Nullable IastContext ctx, @Nullable String target, @Nullable Object input, byte origin); - /** @see #taintObjectIfTainted(IastContext, Object, Object, byte, CharSequence) */ + /** + * @see #taintObjectIfTainted(IastContext, Object, Object, byte, CharSequence) + */ void taintObjectIfTainted( @Nullable Object target, @Nullable Object input, byte origin, @Nullable CharSequence name); @@ -217,11 +267,15 @@ void taintObjectIfTainted( byte origin, @Nullable CharSequence name); - /** @see #taintStringIfTainted(IastContext, String, Object, byte, CharSequence) */ + /** + * @see #taintStringIfTainted(IastContext, String, Object, byte, CharSequence) + */ void taintStringIfTainted( @Nullable String target, @Nullable Object input, byte origin, @Nullable CharSequence name); - /** @see #taintObjectIfTainted(IastContext, Object, Object, byte, CharSequence) */ + /** + * @see #taintObjectIfTainted(IastContext, Object, Object, byte, CharSequence) + */ void taintStringIfTainted( @Nullable IastContext ctx, @Nullable String target, @@ -229,7 +283,9 @@ void taintStringIfTainted( byte origin, @Nullable CharSequence name); - /** @see #taintObjectIfTainted(IastContext, Object, Object, byte, CharSequence, Object) */ + /** + * @see #taintObjectIfTainted(IastContext, Object, Object, byte, CharSequence, Object) + */ void taintObjectIfTainted( @Nullable Object target, @Nullable Object input, @@ -249,7 +305,9 @@ void taintObjectIfTainted( @Nullable CharSequence name, @Nullable Object value); - /** @see #taintStringIfTainted(IastContext, String, Object, byte, CharSequence, Object) */ + /** + * @see #taintStringIfTainted(IastContext, String, Object, byte, CharSequence, Object) + */ void taintStringIfTainted( @Nullable String target, @Nullable Object input, @@ -257,7 +315,9 @@ void taintStringIfTainted( @Nullable CharSequence name, @Nullable Object value); - /** @see #taintObjectIfTainted(IastContext, Object, Object, byte, CharSequence, Object) */ + /** + * @see #taintObjectIfTainted(IastContext, Object, Object, byte, CharSequence, Object) + */ void taintStringIfTainted( @Nullable IastContext ctx, @Nullable String target, @@ -266,7 +326,9 @@ void taintStringIfTainted( @Nullable CharSequence name, @Nullable Object value); - /** @see #taintObjectIfAnyTainted(IastContext, Object, Object[]) */ + /** + * @see #taintObjectIfAnyTainted(IastContext, Object, Object[]) + */ void taintObjectIfAnyTainted(@Nullable Object target, @Nullable Object[] inputs); /** @@ -278,14 +340,20 @@ void taintStringIfTainted( void taintObjectIfAnyTainted( @Nullable IastContext ctx, @Nullable Object target, @Nullable Object[] inputs); - /** @see #taintStringIfAnyTainted(IastContext, String, Object[]) */ + /** + * @see #taintStringIfAnyTainted(IastContext, String, Object[]) + */ void taintStringIfAnyTainted(@Nullable String target, @Nullable Object[] inputs); - /** @see #taintObjectIfAnyTainted(IastContext, Object, Object[]) */ + /** + * @see #taintObjectIfAnyTainted(IastContext, Object, Object[]) + */ void taintStringIfAnyTainted( @Nullable IastContext ctx, @Nullable String target, @Nullable Object[] inputs); - /** @see #taintObjectIfAnyTainted(IastContext, Object, Object[], boolean, int) */ + /** + * @see #taintObjectIfAnyTainted(IastContext, Object, Object[], boolean, int) + */ void taintObjectIfAnyTainted( @Nullable Object target, @Nullable Object[] inputs, boolean keepRanges, int mark); @@ -302,11 +370,15 @@ void taintObjectIfAnyTainted( boolean keepRanges, int mark); - /** @see #taintStringIfAnyTainted(IastContext, String, Object[], boolean, int) */ + /** + * @see #taintStringIfAnyTainted(IastContext, String, Object[], boolean, int) + */ void taintStringIfAnyTainted( @Nullable String target, @Nullable Object[] inputs, boolean keepRanges, int mark); - /** @see #taintObjectIfAnyTainted(IastContext, Object, Object[], boolean, int) */ + /** + * @see #taintObjectIfAnyTainted(IastContext, Object, Object[], boolean, int) + */ void taintStringIfAnyTainted( @Nullable IastContext ctx, @Nullable String target, @@ -314,7 +386,9 @@ void taintStringIfAnyTainted( boolean keepRanges, int mark); - /** @see #taintObjectDeeply(IastContext, Object, byte, Predicate) */ + /** + * @see #taintObjectDeeply(IastContext, Object, byte, Predicate) + */ int taintObjectDeeply(@Nullable Object target, byte origin, Predicate> classFilter); /** @@ -330,13 +404,17 @@ int taintObjectDeeply( byte origin, Predicate> classFilter); - /** @see #isTainted(IastContext, Object) */ + /** + * @see #isTainted(IastContext, Object) + */ boolean isTainted(@Nullable Object target); /** Checks if an arbitrary object is tainted */ boolean isTainted(@Nullable IastContext ctx, @Nullable Object target); - /** @see #findSource(IastContext, Object) */ + /** + * @see #findSource(IastContext, Object) + */ @Nullable Source findSource(@Nullable Object target); diff --git a/internal-api/src/main/java/datadog/trace/api/metrics/SpanMetricRegistry.java b/internal-api/src/main/java/datadog/trace/api/metrics/SpanMetricRegistry.java index 20c9c26442b..9b44c8ef221 100644 --- a/internal-api/src/main/java/datadog/trace/api/metrics/SpanMetricRegistry.java +++ b/internal-api/src/main/java/datadog/trace/api/metrics/SpanMetricRegistry.java @@ -15,7 +15,9 @@ public interface SpanMetricRegistry { */ SpanMetrics get(String instrumentationName); - /** @return Human-readable summary of the current span metrics. */ + /** + * @return Human-readable summary of the current span metrics. + */ default String summary() { return ""; } diff --git a/internal-api/src/main/java/datadog/trace/api/naming/v1/CloudNamingV1.java b/internal-api/src/main/java/datadog/trace/api/naming/v1/CloudNamingV1.java index 5f463c851e9..88691d50660 100644 --- a/internal-api/src/main/java/datadog/trace/api/naming/v1/CloudNamingV1.java +++ b/internal-api/src/main/java/datadog/trace/api/naming/v1/CloudNamingV1.java @@ -15,10 +15,10 @@ public String operationForRequest( @Nonnull final String qualifiedOperation) { // only aws sdk is right now implemented switch (qualifiedOperation) { - // sdk 1.x format + // sdk 1.x format case "SQS.SendMessage": case "SQS.SendMessageBatch": - // sdk 2.x format + // sdk 2.x format case "Sqs.SendMessage": case "Sqs.SendMessageBatch": return SpanNaming.instance().namingSchema().messaging().outboundOperation("sqs"); diff --git a/internal-api/src/main/java/datadog/trace/api/profiling/ProfilingEnablement.java b/internal-api/src/main/java/datadog/trace/api/profiling/ProfilingEnablement.java index e8c1ff333ea..4c1131f8ade 100644 --- a/internal-api/src/main/java/datadog/trace/api/profiling/ProfilingEnablement.java +++ b/internal-api/src/main/java/datadog/trace/api/profiling/ProfilingEnablement.java @@ -71,7 +71,7 @@ public static void validate(String value) { case "true": case "auto": return; - // values 1 and 0 are accepted for backwards compatibility + // values 1 and 0 are accepted for backwards compatibility case "1": case "0": return; diff --git a/internal-api/src/main/java/datadog/trace/api/rum/RumInjectorConfig.java b/internal-api/src/main/java/datadog/trace/api/rum/RumInjectorConfig.java index 882b4add458..11832a0a515 100644 --- a/internal-api/src/main/java/datadog/trace/api/rum/RumInjectorConfig.java +++ b/internal-api/src/main/java/datadog/trace/api/rum/RumInjectorConfig.java @@ -22,35 +22,49 @@ public class RumInjectorConfig { /** RUM application ID */ public final String applicationId; + /** The client token provided by Datadog to authenticate requests. */ public final String clientToken; + /** The Datadog site to which data will be sent (e.g., `datadoghq.com`). */ public final String site; + /** The name of the service being monitored. */ @Nullable public final String service; + /** The environment of the service (e.g., `prod`, `staging` or `dev). */ @Nullable public final String env; + /** SDK major version. */ public final int majorVersion; + /** The version of the service (e.g., `0.1.0`, `a8dj92`, `2024-30`). */ @Nullable public final String version; + /** Enables or disables the automatic collection of users actions (e.g., clicks). */ @Nullable public final Boolean trackUserInteractions; + /** Enables or disables the collection of resource events (e.g., loading of images or scripts). */ @Nullable public final Boolean trackResources; + /** Enables or disables the collection of long task events. */ @Nullable public final Boolean trackLongTask; + /** The privacy level for data collection. */ @Nullable public final PrivacyLevel defaultPrivacyLevel; + /** The percentage of user sessions to be tracked (between 0.0 and 100.0). */ @Nullable public final Float sessionSampleRate; + /** * The percentage of tracked sessions that will include Session Replay data (between 0.0 and * 100.0). */ @Nullable public final Float sessionReplaySampleRate; + /** The remote configuration identifier. */ @Nullable public final String remoteConfigurationId; + /** The JSON representation of injector config to use in the injected SDK snippet. */ public final String jsonPayload; diff --git a/internal-api/src/main/java/datadog/trace/api/sampling/SamplingMechanism.java b/internal-api/src/main/java/datadog/trace/api/sampling/SamplingMechanism.java index ca0e3038bb3..a0184559c11 100644 --- a/internal-api/src/main/java/datadog/trace/api/sampling/SamplingMechanism.java +++ b/internal-api/src/main/java/datadog/trace/api/sampling/SamplingMechanism.java @@ -7,22 +7,31 @@ public class SamplingMechanism { /** Not encouraged to use */ public static final byte UNKNOWN = -1; + /** Used before the tracer receives any rates from agent and there are no rules configured */ public static final byte DEFAULT = 0; + /** The sampling rate received in the agent's http response */ public static final byte AGENT_RATE = 1; + /** Auto; reserved for future use */ public static final byte REMOTE_AUTO_RATE = 2; + /** Sampling rule or sampling rate based on tracer config */ public static final byte LOCAL_USER_RULE = 3; + /** User directly sets sampling priority via code using span.SetTag(ManualKeep) or similar API */ public static final byte MANUAL = 4; + /** AppSec */ public static final byte APPSEC = 5; + /** User-defined target; reserved for future use */ public static final byte REMOTE_USER_RATE = 6; + /** Span Sampling Rate (single span sampled on account of a span sampling rule) */ public static final byte SPAN_SAMPLING_RATE = 8; + /** Data Jobs */ public static final byte DATA_JOBS = 10; diff --git a/internal-api/src/main/java/datadog/trace/bootstrap/ContextStore.java b/internal-api/src/main/java/datadog/trace/bootstrap/ContextStore.java index abfce9c6c42..f0528cd976e 100644 --- a/internal-api/src/main/java/datadog/trace/bootstrap/ContextStore.java +++ b/internal-api/src/main/java/datadog/trace/bootstrap/ContextStore.java @@ -18,7 +18,9 @@ public interface ContextStore { */ interface Factory extends KeyAwareFactory { - /** @return new context instance */ + /** + * @return new context instance + */ C create(); default C create(Object key) { @@ -34,7 +36,9 @@ default C create(Object key) { */ interface KeyAwareFactory { - /** @return new context instance */ + /** + * @return new context instance + */ C create(K key); } diff --git a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentPropagation.java b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentPropagation.java index 0fbb4484353..586b2f08612 100644 --- a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentPropagation.java +++ b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentPropagation.java @@ -25,7 +25,9 @@ public final class AgentPropagation { private AgentPropagation() {} - /** @deprecated Use {@link Propagators} API instead. */ + /** + * @deprecated Use {@link Propagators} API instead. + */ @Deprecated public static AgentSpanContext.Extracted extractContextAndGetSpanContext( final C carrier, final ContextVisitor getter) { diff --git a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentSpanLink.java b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentSpanLink.java index 1856cd05bcc..8974ae4dfc7 100644 --- a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentSpanLink.java +++ b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentSpanLink.java @@ -9,6 +9,7 @@ public interface AgentSpanLink { /** The default trace flags (no flag enabled). */ byte DEFAULT_FLAGS = 0; + /** The sampled flag denotes that the caller may have recorded trace data. */ byte SAMPLED_FLAG = 1; diff --git a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentTracer.java b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentTracer.java index c78e3fffdd1..085b7a593a3 100644 --- a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentTracer.java +++ b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentTracer.java @@ -33,7 +33,9 @@ public static AgentSpan startSpan(final CharSequence spanName) { return startSpan(DEFAULT_INSTRUMENTATION_NAME, spanName); } - /** @see TracerAPI#startSpan(String, CharSequence) */ + /** + * @see TracerAPI#startSpan(String, CharSequence) + */ public static AgentSpan startSpan(final String instrumentationName, final CharSequence spanName) { return get().startSpan(instrumentationName, spanName); } @@ -45,7 +47,9 @@ public static AgentSpan startSpan(final CharSequence spanName, final long startT return startSpan(DEFAULT_INSTRUMENTATION_NAME, spanName, startTimeMicros); } - /** @see TracerAPI#startSpan(String, CharSequence, long) */ + /** + * @see TracerAPI#startSpan(String, CharSequence, long) + */ public static AgentSpan startSpan( final String instrumentationName, final CharSequence spanName, final long startTimeMicros) { return get().startSpan(instrumentationName, spanName, startTimeMicros); @@ -58,7 +62,9 @@ public static AgentSpan startSpan(final CharSequence spanName, final AgentSpanCo return startSpan(DEFAULT_INSTRUMENTATION_NAME, spanName, parent); } - /** @see TracerAPI#startSpan(String, CharSequence, AgentSpanContext) */ + /** + * @see TracerAPI#startSpan(String, CharSequence, AgentSpanContext) + */ public static AgentSpan startSpan( final String instrumentationName, final CharSequence spanName, @@ -74,7 +80,9 @@ public static AgentSpan startSpan( return startSpan(DEFAULT_INSTRUMENTATION_NAME, spanName, parent, startTimeMicros); } - /** @see TracerAPI#startSpan(String, CharSequence, AgentSpanContext, long) */ + /** + * @see TracerAPI#startSpan(String, CharSequence, AgentSpanContext, long) + */ public static AgentSpan startSpan( final String instrumentationName, final CharSequence spanName, diff --git a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/Baggage.java b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/Baggage.java index e6ce2f73751..a66ec83a331 100644 --- a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/Baggage.java +++ b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/Baggage.java @@ -15,6 +15,7 @@ public class Baggage implements ImplicitContextKeyed { private static final ContextKey CONTEXT_KEY = named("baggage-key"); private final Map items; + /** * The W3C Baggage header representation of the * baggage instance, {@code null} if not in sync with the current baggage items. diff --git a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/ProfilerContext.java b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/ProfilerContext.java index 1001b1c0a80..2fc52a0a073 100644 --- a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/ProfilerContext.java +++ b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/ProfilerContext.java @@ -4,7 +4,9 @@ public interface ProfilerContext { long getSpanId(); - /** @return the span id of the local root span, or the span itself */ + /** + * @return the span id of the local root span, or the span itself + */ long getRootSpanId(); int getEncodedOperationName(); diff --git a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/ProfilingContextIntegration.java b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/ProfilingContextIntegration.java index b4038f3f762..4accced983a 100644 --- a/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/ProfilingContextIntegration.java +++ b/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/ProfilingContextIntegration.java @@ -11,6 +11,7 @@ public interface ProfilingContextIntegration extends Profiling, EndpointCheckpoi * called. */ default void onStart() {} + /** Invoked when a trace first propagates to a thread */ default void onAttach() {} diff --git a/internal-api/src/main/java/datadog/trace/relocate/api/IOLogger.java b/internal-api/src/main/java/datadog/trace/relocate/api/IOLogger.java index 0fa5759b690..30a53191d64 100644 --- a/internal-api/src/main/java/datadog/trace/relocate/api/IOLogger.java +++ b/internal-api/src/main/java/datadog/trace/relocate/api/IOLogger.java @@ -19,7 +19,9 @@ public IOLogger(final Logger log) { this.ratelimitedLogger = ratelimitedLogger; } - /** @return true if actually logged the message, false otherwise */ + /** + * @return true if actually logged the message, false otherwise + */ public boolean success(final String format, final Object... arguments) { if (log.isDebugEnabled()) { log.debug(format, arguments); @@ -37,22 +39,30 @@ public boolean success(final String format, final Object... arguments) { return false; } - /** @return true if actually logged the message, false otherwise */ + /** + * @return true if actually logged the message, false otherwise + */ public boolean error(final String message) { return error(message, null, null); } - /** @return true if actually logged the message, false otherwise */ + /** + * @return true if actually logged the message, false otherwise + */ public boolean error(final String message, Exception exception) { return error(message, null, exception); } - /** @return true if actually logged the message, false otherwise */ + /** + * @return true if actually logged the message, false otherwise + */ public boolean error(final String message, Response response) { return error(message, response, null); } - /** @return true if actually logged the message, false otherwise */ + /** + * @return true if actually logged the message, false otherwise + */ public boolean error(final String message, Response response, Exception exception) { if (log.isDebugEnabled()) { if (response != null) { diff --git a/internal-api/src/main/java/datadog/trace/relocate/api/RatelimitedLogger.java b/internal-api/src/main/java/datadog/trace/relocate/api/RatelimitedLogger.java index 3751da2375e..ed14ee2e52f 100644 --- a/internal-api/src/main/java/datadog/trace/relocate/api/RatelimitedLogger.java +++ b/internal-api/src/main/java/datadog/trace/relocate/api/RatelimitedLogger.java @@ -35,7 +35,9 @@ public RatelimitedLogger(final Logger log, final int delay, final TimeUnit timeU nextLogNanos = new AtomicLong(timeSource.getNanoTicks()); } - /** @return true if actually logged the message, false otherwise */ + /** + * @return true if actually logged the message, false otherwise + */ public boolean warn(final String format, final Object... arguments) { return warn(null, format, arguments); } diff --git a/internal-api/src/main/java/datadog/trace/util/Strings.java b/internal-api/src/main/java/datadog/trace/util/Strings.java index 67bc7d520bf..26e34778e9e 100644 --- a/internal-api/src/main/java/datadog/trace/util/Strings.java +++ b/internal-api/src/main/java/datadog/trace/util/Strings.java @@ -162,7 +162,9 @@ public static String[] concat(String[] arr, String... extra) { return result; } - /** @return first non-blank string out of the two, {@code null} if both are blank */ + /** + * @return first non-blank string out of the two, {@code null} if both are blank + */ @Nullable public static String coalesce(@Nullable final String first, @Nullable final String second) { if (isNotBlank(first)) { diff --git a/internal-api/src/test/groovy/datadog/trace/api/InstrumenterConfigTest.groovy b/internal-api/src/test/groovy/datadog/trace/api/InstrumenterConfigTest.groovy index 1063d895ac0..15c15c1ef3d 100644 --- a/internal-api/src/test/groovy/datadog/trace/api/InstrumenterConfigTest.groovy +++ b/internal-api/src/test/groovy/datadog/trace/api/InstrumenterConfigTest.groovy @@ -121,7 +121,6 @@ class InstrumenterConfigTest extends DDSpecification { then: randomIntegrationEnabled() == true - } def "valid resolver presets"() { diff --git a/internal-api/src/test/groovy/datadog/trace/api/UserIdCollectionModeTest.groovy b/internal-api/src/test/groovy/datadog/trace/api/UserIdCollectionModeTest.groovy index 01c917fcbbd..7c83ab14ba3 100644 --- a/internal-api/src/test/groovy/datadog/trace/api/UserIdCollectionModeTest.groovy +++ b/internal-api/src/test/groovy/datadog/trace/api/UserIdCollectionModeTest.groovy @@ -55,7 +55,6 @@ class UserIdCollectionModeTest extends DDSpecification { 'anon' | 'disabled' | ANONYMIZATION // by default null | null | IDENTIFICATION - } void 'test user id collection mode "#mode" with remote config "#rc"'() { diff --git a/internal-api/src/test/groovy/datadog/trace/api/cache/FixedSizeCacheTest.groovy b/internal-api/src/test/groovy/datadog/trace/api/cache/FixedSizeCacheTest.groovy index 54c5174baa6..e623430fc43 100644 --- a/internal-api/src/test/groovy/datadog/trace/api/cache/FixedSizeCacheTest.groovy +++ b/internal-api/src/test/groovy/datadog/trace/api/cache/FixedSizeCacheTest.groovy @@ -60,7 +60,9 @@ class FixedSizeCacheTest extends DDSpecification { and: def visited = [] - fsCache.visit { k, v -> k as String + "_value" == v && visited.add(k as String) } + fsCache.visit { + k, v -> k as String + "_value" == v && visited.add(k as String) + } visited == keys where: @@ -94,7 +96,9 @@ class FixedSizeCacheTest extends DDSpecification { and: def visited = [] - fsCache.visit { k, v -> k[0] as String + "_value" == v && visited.add(k[0] as String) } + fsCache.visit { + k, v -> k[0] as String + "_value" == v && visited.add(k[0] as String) + } visited == keys where: @@ -127,7 +131,9 @@ class FixedSizeCacheTest extends DDSpecification { and: def visited = [] - fsCache.visit { k, v -> k as String + "_value" == v && visited.add(k as String) } + fsCache.visit { + k, v -> k as String + "_value" == v && visited.add(k as String) + } visited.sort() == keys.sort() where: @@ -155,7 +161,9 @@ class FixedSizeCacheTest extends DDSpecification { and: def visited = [] - fsCache.visit { k, v -> k as String + "_value" == v && visited.add(k as String) } + fsCache.visit { + k, v -> k as String + "_value" == v && visited.add(k as String) + } visited.sort() == keys.sort() where: @@ -201,7 +209,9 @@ class FixedSizeCacheTest extends DDSpecification { and: def visited = [] - fsCache.visit { k, v -> k as String + "_value" == v && visited.add(k as String) } + fsCache.visit { + k, v -> k as String + "_value" == v && visited.add(k as String) + } visited.sort() == keys.sort() where: @@ -251,17 +261,20 @@ class FixedSizeCacheTest extends DDSpecification { [ 'fixed size', { capacity -> - DDCaches.newFixedSizeCache(capacity) } + DDCaches.newFixedSizeCache(capacity) + } ], [ 'unbounded', { capacity -> - DDCaches.newUnboundedCache(capacity) } + DDCaches.newUnboundedCache(capacity) + } ], [ 'fixed size weighted', { capacity -> - DDCaches.newFixedSizeWeightedCache(capacity, String.&length, 1000)} + DDCaches.newFixedSizeWeightedCache(capacity, String.&length, 1000) + } ] ] } @@ -323,7 +336,9 @@ class FixedSizeCacheTest extends DDSpecification { and: def visited = [] - fsCache.visit { k, v -> k as String + "_value" == v && visited.add(k as String) } + fsCache.visit { + k, v -> k as String + "_value" == v && visited.add(k as String) + } visited == keys where: diff --git a/internal-api/src/test/groovy/datadog/trace/api/telemetry/OtelEnvMetricCollectorImplTest.groovy b/internal-api/src/test/groovy/datadog/trace/api/telemetry/OtelEnvMetricCollectorImplTest.groovy index 486966eed7d..6364482fb75 100644 --- a/internal-api/src/test/groovy/datadog/trace/api/telemetry/OtelEnvMetricCollectorImplTest.groovy +++ b/internal-api/src/test/groovy/datadog/trace/api/telemetry/OtelEnvMetricCollectorImplTest.groovy @@ -202,5 +202,4 @@ class OtelEnvMetricCollectorImplTest extends DDSpecification { 'OTEL_TRACES_EXPORTER' | 'otlp' || 'count' | 1 | 'tracers' | 'otel.env.unsupported' | 'config_opentelemetry:otel_traces_exporter' 'OTEL_LOGS_EXPORTER' | 'otlp' || 'count' | 1 | 'tracers' | 'otel.env.unsupported' | 'config_opentelemetry:otel_logs_exporter' } - } diff --git a/internal-api/src/test/java/datadog/trace/api/sampling/AdaptiveSamplerTest.java b/internal-api/src/test/java/datadog/trace/api/sampling/AdaptiveSamplerTest.java index 4f09a332fe2..8b732467622 100644 --- a/internal-api/src/test/java/datadog/trace/api/sampling/AdaptiveSamplerTest.java +++ b/internal-api/src/test/java/datadog/trace/api/sampling/AdaptiveSamplerTest.java @@ -50,7 +50,9 @@ class AdaptiveSamplerTest { private static final class PoissonWindowEventsSupplier implements IntSupplier { private final PoissonDistribution distribution; - /** @param eventsPerWindowMean the average number of events per window */ + /** + * @param eventsPerWindowMean the average number of events per window + */ PoissonWindowEventsSupplier(final int eventsPerWindowMean) { distribution = new PoissonDistribution(eventsPerWindowMean); distribution.reseedRandomGenerator(12345671); @@ -121,7 +123,9 @@ public String toString() { private static final class ConstantWindowsEventsSupplier implements IntSupplier { private final int events; - /** @param events number of events per window */ + /** + * @param events number of events per window + */ ConstantWindowsEventsSupplier(final int events) { this.events = events; } @@ -142,7 +146,9 @@ private static final class RepeatingWindowsEventsSupplier implements IntSupplier private final int[] eventsCounts; private int pointer = 0; - /** @param windowEvents an array of number of events per each window in the sequence */ + /** + * @param windowEvents an array of number of events per each window in the sequence + */ RepeatingWindowsEventsSupplier(final int... windowEvents) { this.eventsCounts = Arrays.copyOf(windowEvents, windowEvents.length); } diff --git a/remote-config/remote-config-core/src/test/groovy/datadog/remoteconfig/DefaultConfigurationPollerSpecification.groovy b/remote-config/remote-config-core/src/test/groovy/datadog/remoteconfig/DefaultConfigurationPollerSpecification.groovy index 17689fa16cb..ae18bd5f839 100644 --- a/remote-config/remote-config-core/src/test/groovy/datadog/remoteconfig/DefaultConfigurationPollerSpecification.groovy +++ b/remote-config/remote-config-core/src/test/groovy/datadog/remoteconfig/DefaultConfigurationPollerSpecification.groovy @@ -615,7 +615,8 @@ class DefaultConfigurationPollerSpecification extends DDSpecification { then: 1 * scheduler.scheduleAtFixedRate(_, poller, 0, DEFAULT_POLL_PERIOD, TimeUnit.MILLISECONDS) >> { task = it[0] - scheduled } + scheduled + } when: task.run(poller) @@ -1194,7 +1195,6 @@ class DefaultConfigurationPollerSpecification extends DDSpecification { it['targets'] = Base64.encoder.encodeToString(JsonOutput.toJson(targets).getBytes('UTF-8')) JsonOutput.toJson(it) } | 'Error reading signature or canonicalizing targets.signed: Invalid scalar representation' - } void 'reports error during deserialization'() { @@ -1207,7 +1207,8 @@ class DefaultConfigurationPollerSpecification extends DDSpecification { then: 1 * scheduler.scheduleAtFixedRate(_, poller, 0, DEFAULT_POLL_PERIOD, TimeUnit.MILLISECONDS) >> { task = it[0] - scheduled } + scheduled + } when: task.run(poller) @@ -1244,7 +1245,8 @@ class DefaultConfigurationPollerSpecification extends DDSpecification { then: 1 * scheduler.scheduleAtFixedRate(_, poller, 0, DEFAULT_POLL_PERIOD, TimeUnit.MILLISECONDS) >> { task = it[0] - scheduled } + scheduled + } when: task.run(poller) diff --git a/telemetry/src/main/java/datadog/telemetry/TelemetryRequestBody.java b/telemetry/src/main/java/datadog/telemetry/TelemetryRequestBody.java index b242b7d365e..3c3cf3d35e8 100644 --- a/telemetry/src/main/java/datadog/telemetry/TelemetryRequestBody.java +++ b/telemetry/src/main/java/datadog/telemetry/TelemetryRequestBody.java @@ -128,7 +128,9 @@ public void beginRequest(boolean debug) { } } - /** @return body size in bytes */ + /** + * @return body size in bytes + */ public long endRequest() { try { switch (this.requestType) { diff --git a/telemetry/src/main/java/datadog/telemetry/TelemetryService.java b/telemetry/src/main/java/datadog/telemetry/TelemetryService.java index e017dcbe676..87764f483ea 100644 --- a/telemetry/src/main/java/datadog/telemetry/TelemetryService.java +++ b/telemetry/src/main/java/datadog/telemetry/TelemetryService.java @@ -152,7 +152,9 @@ public void sendAppClosingEvent() { // keeps track of unsent events from the previous attempt private BufferedEvents bufferedEvents; - /** @return true - if an app-started event has been successfully sent, false - otherwise */ + /** + * @return true - if an app-started event has been successfully sent, false - otherwise + */ public boolean sendAppStartedEvent() { EventSource eventSource; EventSink eventSink; @@ -241,7 +243,9 @@ public boolean sendTelemetryEvents() { return false; } - /** @return true - if extended heartbeat request sent successfully, otherwise false */ + /** + * @return true - if extended heartbeat request sent successfully, otherwise false + */ public boolean sendExtendedHeartbeat() { log.debug("Preparing message-batch request"); EventSource extendedHeartbeatDataSnapshot = extendedHeartbeatData.snapshot(); diff --git a/utils/config-utils/src/main/java/datadog/trace/config/inversion/SupportedConfigurationSource.java b/utils/config-utils/src/main/java/datadog/trace/config/inversion/SupportedConfigurationSource.java index b42baab5481..5f1403e183d 100644 --- a/utils/config-utils/src/main/java/datadog/trace/config/inversion/SupportedConfigurationSource.java +++ b/utils/config-utils/src/main/java/datadog/trace/config/inversion/SupportedConfigurationSource.java @@ -9,22 +9,30 @@ */ class SupportedConfigurationSource { - /** @return Set of supported environment variable keys */ + /** + * @return Set of supported environment variable keys + */ public boolean supported(String env) { return GeneratedSupportedConfigurations.SUPPORTED.contains(env); } - /** @return List of aliases for an environment variable */ + /** + * @return List of aliases for an environment variable + */ public List getAliases(String env) { return GeneratedSupportedConfigurations.ALIASES.getOrDefault(env, Collections.emptyList()); } - /** @return Primary environment variable for a queried alias */ + /** + * @return Primary environment variable for a queried alias + */ public String primaryEnvFromAlias(String alias) { return GeneratedSupportedConfigurations.ALIAS_MAPPING.getOrDefault(alias, null); } - /** @return Map of deprecated configurations */ + /** + * @return Map of deprecated configurations + */ public String primaryEnvFromDeprecated(String deprecated) { return GeneratedSupportedConfigurations.DEPRECATED.getOrDefault(deprecated, null); } diff --git a/utils/container-utils/src/main/java/datadog/common/container/ContainerInfo.java b/utils/container-utils/src/main/java/datadog/common/container/ContainerInfo.java index 479e343255a..bffdf80d1a2 100644 --- a/utils/container-utils/src/main/java/datadog/common/container/ContainerInfo.java +++ b/utils/container-utils/src/main/java/datadog/common/container/ContainerInfo.java @@ -154,7 +154,9 @@ static boolean isHostCgroupNamespace() { return null; } - /** @return 0 - if it couldn't read inode */ + /** + * @return 0 - if it couldn't read inode + */ static long readInode(Path path) { try { return (long) Files.getAttribute(path, "unix:ino"); From bb9dfaeaf949c5a8eba9fd22f1f9503edf764d9b Mon Sep 17 00:00:00 2001 From: Alexey Kuznetsov Date: Sat, 1 Nov 2025 19:36:19 -0400 Subject: [PATCH 2/4] More resources. --- .gitlab-ci.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2ff9858c6df..4f9d3c5c30f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -357,6 +357,11 @@ spotless: extends: .gradle_build stage: tests needs: [] + variables: + GRADLE_MEM: 4G + GRADLE_WORKERS: 3 + KUBERNETES_MEMORY_REQUEST: 18Gi + KUBERNETES_MEMORY_LIMIT: 18Gi script: - ./gradlew --version - ./gradlew spotlessCheck $GRADLE_ARGS @@ -366,10 +371,11 @@ spotless: - gitlab_section_start "collect-reports" "Collecting reports" - .gitlab/collect_reports.sh - gitlab_section_end "collect-reports" + - ls /tmp artifacts: when: always paths: - - ./check_reports + - ./reports test_published_artifacts: extends: .gradle_build From c9831a860c4d728438cb36f1264d40b1aaa4217e Mon Sep 17 00:00:00 2001 From: Alexey Kuznetsov Date: Sun, 2 Nov 2025 09:19:52 -0500 Subject: [PATCH 3/4] More resources. --- .gitlab-ci.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 4f9d3c5c30f..981f0fb226e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -358,8 +358,7 @@ spotless: stage: tests needs: [] variables: - GRADLE_MEM: 4G - GRADLE_WORKERS: 3 + GRADLE_MEM: 8G KUBERNETES_MEMORY_REQUEST: 18Gi KUBERNETES_MEMORY_LIMIT: 18Gi script: From 34fcd8b0f9fe814f3228eceeecd0a0d7b7bb1d59 Mon Sep 17 00:00:00 2001 From: Alexey Kuznetsov Date: Mon, 10 Nov 2025 16:44:36 -0500 Subject: [PATCH 4/4] Merged with master. --- .gitlab/benchmarks.yml | 4 +- buildSrc/build.gradle.kts | 6 + .../main/kotlin/datadog.ci-jobs.gradle.kts | 10 + .../kotlin/datadog.configure-tests.gradle.kts | 129 ++++++++ .../datadog.test-jvm-contraints.gradle.kts | 128 ++++++++ .../ProvideJvmArgsOnJvmLauncherVersion.kt | 38 +++ .../TestJvmConstraintsExtension.kt | 43 +++ .../TestJvmConstraintsUtils.kt | 48 +++ .../plugin/testJvmConstraints/TestJvmSpec.kt | 88 ++++++ dd-java-agent/agent-aiguard/build.gradle | 1 + .../com/datadog/aiguard/AIGuardInternal.java | 55 +++- .../aiguard/AIGuardInternalTests.groovy | 62 +++- dd-java-agent/agent-bootstrap/build.gradle | 2 +- .../java/datadog/trace/bootstrap/Agent.java | 10 + .../tooling/OtelInstrumentationMapper.java | 4 +- .../profiling-controller-ddprof/build.gradle | 22 +- .../profiling-controller-jfr/build.gradle | 11 +- .../implementation/build.gradle | 9 +- .../profiling-controller-openjdk/build.gradle | 22 +- .../profiling-controller-oracle/build.gradle | 21 +- .../trace/agent/tooling/ExtensionHandler.java | 5 +- .../trace/agent/tooling/HelperInjector.java | 32 +- .../bytebuddy/outline/AnnotationOutline.java | 15 +- .../bytebuddy/outline/OutlineTypeParser.java | 22 +- .../bytebuddy/outline/TypeOutline.java | 26 ++ .../agent/test/HelperInjectionTest.groovy | 3 + .../csi/CallSiteTransformerTest.groovy | 3 + .../play-perftest/build.gradle | 4 +- dd-java-agent/build.gradle | 4 + .../test/InstrumentationSpecification.groovy | 3 + .../aerospike-4.0/build.gradle | 16 +- .../akka-http/akka-http-10.0/build.gradle | 11 +- .../akka-http/akka-http-10.6/build.gradle | 9 +- .../armeria/armeria-grpc-0.84/build.gradle | 2 - .../armeria/armeria-jetty-1.24/build.gradle | 11 +- .../instrumentation/avro/build.gradle | 10 +- .../aws-java-dynamodb-2.0/gradle.lockfile | 54 ++-- .../aws-java-eventbridge-2.0/gradle.lockfile | 54 ++-- .../aws-java/aws-java-s3-2.0/gradle.lockfile | 60 ++-- .../aws-java/aws-java-sdk-2.2/gradle.lockfile | 62 ++-- .../aws-java/aws-java-sfn-2.0/gradle.lockfile | 54 ++-- .../aws-java/aws-java-sns-2.0/gradle.lockfile | 54 ++-- .../aws-java/aws-java-sqs-1.0/build.gradle | 2 - .../aws-java/aws-java-sqs-2.0/build.gradle | 2 - .../instrumentation/axis2-1.3/build.gradle | 17 +- dd-java-agent/instrumentation/build.gradle | 21 +- .../classloading/jboss-testing/build.gradle | 7 +- .../instrumentation/cucumber/build.gradle | 2 + .../instrumentation/cxf-2.1/build.gradle | 16 +- .../datastax-cassandra-3.0/build.gradle | 11 +- .../datastax-cassandra-3.8/build.gradle | 10 +- .../datastax-cassandra-4.0/build.gradle | 12 +- .../elasticsearch/rest-5/build.gradle | 13 +- .../elasticsearch/transport-2/build.gradle | 9 +- .../elasticsearch/transport-5/build.gradle | 13 +- .../exception-profiling/build.gradle | 21 +- .../glassfish-3.0/build.gradle | 8 +- .../graal/native-image/build.gradle | 8 +- ...veImageGeneratorRunnerInstrumentation.java | 2 + .../graphql-java-20.0/build.gradle | 19 +- .../instrumentation/ignite-2.0/build.gradle | 28 +- .../instrumentation/jakarta-jms/build.gradle | 9 +- .../java-concurrent-21.0/build.gradle | 14 +- .../java-lang/java-lang-11.0/build.gradle | 8 +- .../java-lang/java-lang-15.0/build.gradle | 8 +- .../java-lang/java-lang-17.0/build.gradle | 8 +- .../java/java-lang/java-lang-9.0/build.gradle | 8 +- .../java/java-net/java-net-11.0/build.gradle | 7 +- .../java/java-nio-1.8/build.gradle | 13 +- .../instrumentation/jdbc/build.gradle | 11 +- .../instrumentation/jersey/build.gradle | 10 +- .../jetty-client-10.0/build.gradle | 7 +- .../jetty-client-12.0/build.gradle | 7 +- .../jetty-server-10.0/build.gradle | 8 +- .../jetty-server-11.0/build.gradle | 8 +- .../jetty-server-12.0/build.gradle | 8 +- .../instrumentation/jms/build.gradle | 2 - .../junit/junit-4.10/build.gradle | 2 + .../junit-4.10/cucumber-junit-4/build.gradle | 2 + .../junit/junit-4.10/junit-4.13/build.gradle | 2 + .../junit-4.10/munit-junit-4/build.gradle | 2 + .../junit/junit-5.3/build.gradle | 12 +- .../junit-5.3/cucumber-junit-5/build.gradle | 2 + .../junit/junit-5.3/junit-5.8/build.gradle | 11 +- .../junit-5.3/spock-junit-5/build.gradle | 2 + .../kafka/kafka-clients-0.11/build.gradle | 3 - .../kafka/kafka-clients-3.8/build.gradle | 8 +- .../instrumentation/karate/build.gradle | 3 +- .../log4j/log4j-1.2.4/build.gradle | 9 +- .../http-server-netty-4.0/build.gradle | 7 +- .../instrumentation/mule-4.5/build.gradle | 25 +- .../instrumentation/mule-4.5/gradle.lockfile | 237 +++++++------- .../netty/netty-3.8/build.gradle | 9 +- .../netty/netty-4.0/build.gradle | 11 +- .../opentelemetry-1.4/gradle.lockfile | 6 +- .../play/play-2.3/build.gradle | 10 +- .../play/play-2.4/build.gradle | 10 +- .../play/play-2.6/build.gradle | 10 +- .../instrumentation/quartz-2.0/build.gradle | 17 +- .../rabbitmq-amqp-2.7/gradle.lockfile | 2 +- .../reactor-core-3.1/gradle.lockfile | 8 +- .../reactor-netty-1/gradle.lockfile | 46 +-- .../redisson/redisson-2.3.0/build.gradle | 2 +- .../redisson/redisson-3.10.3/build.gradle | 2 +- .../resilience4j-2.0/build.gradle | 8 +- .../resilience4j-reactor-2.0/build.gradle | 8 +- .../instrumentation/rmi/build.gradle | 10 +- .../scala-promise-2.10/build.gradle | 2 - .../scala-promise-2.13/build.gradle | 2 - .../instrumentation/scalatest/build.gradle | 2 + .../instrumentation/selenium/build.gradle | 9 +- .../servicetalk-0.42.0/build.gradle | 8 +- .../servicetalk-0.42.56/build.gradle | 8 +- .../spark-executor/build.gradle | 4 +- .../spark/spark_2.12/build.gradle | 4 +- .../spark/Spark212Instrumentation.java | 33 +- .../spark/Spark212PlanUtils.java | 45 +++ .../spark/spark_2.13/build.gradle | 6 +- .../spark/Spark213Instrumentation.java | 33 +- .../spark/Spark213PlanUtils.java | 45 +++ .../spark/AbstractSparkPlanSerializer.java | 19 +- .../spark/AbstractSparkPlanUtils.java | 57 ++++ .../spring/spring-boot-1.3/build.gradle | 30 +- .../spring/spring-boot-1.3/gradle.lockfile | 14 +- .../spring/spring-data-1.8/build.gradle | 10 +- .../spring/spring-jms-3.1/build.gradle | 2 - .../spring/spring-messaging-4.0/build.gradle | 9 +- .../spring/spring-scheduling-3.1/build.gradle | 24 +- .../spring-security-6.0/build.gradle | 7 +- .../spring-webflux-6.0/build.gradle | 8 +- .../spring-webflux-6.0/gradle.lockfile | 52 +-- .../spring-webmvc-6.0/build.gradle | 8 +- .../spymemcached-2.10/build.gradle | 1 - .../testng/testng-6/build.gradle | 2 + .../testng/testng-7/build.gradle | 12 +- .../tomcat/tomcat-5.5/build.gradle | 34 +- .../undertow/undertow-2.2/build.gradle | 18 +- .../vertx-mysql-client-3.9/build.gradle | 2 - .../vertx-mysql-client-4.0/build.gradle | 2 - .../vertx-mysql-client-4.4.2/build.gradle | 2 - .../vertx-pg-client-4.0/build.gradle | 2 - .../vertx-pg-client-4.4.2/build.gradle | 2 - .../vertx/vertx-redis-client-3.9/build.gradle | 1 - .../vertx/vertx-rx-3.5/build.gradle | 2 - .../vertx-web/vertx-web-3.4/build.gradle | 11 +- .../vertx-web/vertx-web-3.5/build.gradle | 11 +- .../vertx-web/vertx-web-3.9/build.gradle | 9 +- .../vertx-web/vertx-web-4.0/build.gradle | 29 +- .../vertx-web/vertx-web-5.0/build.gradle | 12 +- .../instrumentation/weaver/build.gradle | 2 + .../jakarta-websocket-2.0/build.gradle | 15 +- .../jetty-websocket-10/build.gradle | 8 +- .../jetty-websocket-11/build.gradle | 8 +- .../jetty-websocket-12/build.gradle | 8 +- .../instrumentation/wildfly-9.0/build.gradle | 20 +- .../appsec/springboot-grpc/build.gradle | 9 +- dd-smoke-tests/armeria-grpc/build.gradle | 8 +- .../concurrent/java-21/build.gradle | 10 +- .../concurrent/java-25/build.gradle | 10 +- dd-smoke-tests/crashtracking/build.gradle | 6 +- dd-smoke-tests/java9-modules/build.gradle | 8 +- dd-smoke-tests/jboss-modules/build.gradle | 7 +- dd-smoke-tests/kafka-3/build.gradle | 9 +- dd-smoke-tests/play-2.4/build.gradle | 7 +- dd-smoke-tests/play-2.5/build.gradle | 10 +- dd-smoke-tests/play-2.6/build.gradle | 10 +- dd-smoke-tests/play-2.7/build.gradle | 10 +- .../profiling-integration-tests/build.gradle | 6 +- dd-smoke-tests/quarkus/build.gradle | 8 +- dd-smoke-tests/rum/tomcat-10/build.gradle | 7 +- dd-smoke-tests/rum/tomcat-11/build.gradle | 7 +- dd-smoke-tests/rum/wildfly-15/build.gradle | 5 +- .../spring-boot-3.0-webflux/build.gradle | 8 +- .../spring-boot-3.0-webmvc/build.gradle | 8 +- .../spring-boot-3.3-webmvc/build.gradle | 8 +- dd-smoke-tests/spring-security/build.gradle | 7 +- dd-smoke-tests/springboot-grpc/build.gradle | 7 +- .../springboot-java-11/build.gradle | 7 +- .../springboot-java-17/build.gradle | 7 +- dd-smoke-tests/springboot/build.gradle | 7 +- dd-smoke-tests/wildfly/build.gradle | 5 +- dd-trace-api/build.gradle.kts | 2 + .../datadog/trace/api/ConfigDefaults.java | 10 + .../datadog/trace/api/config/OtlpConfig.java | 29 ++ .../config/TraceInstrumentationConfig.java | 4 + .../metrics/ConflatingMetricsAggregator.java | 3 +- .../ConflatingMetricAggregatorTest.groovy | 53 +++- dd-trace-ot/build.gradle.kts | 2 + gradle/configure_tests.gradle | 133 -------- gradle/libs.versions.toml | 203 +++++++----- internal-api/internal-api-9/build.gradle.kts | 6 +- .../main/java/datadog/trace/api/Config.java | 133 +++++++- .../datadog/trace/api/InstrumenterConfig.java | 16 + .../api/telemetry/WafMetricCollector.java | 83 +++++ .../datadog/trace/api/ConfigTest.groovy | 297 +++++++++++++++++- .../telemetry/WafMetricCollectorTest.groovy | 78 +++++ metadata/supported-configurations.json | 23 +- .../config/provider/ConfigProvider.java | 10 +- .../provider/OtelEnvironmentConfigSource.java | 137 ++++++-- utils/socket-utils/build.gradle.kts | 6 +- 200 files changed, 2904 insertions(+), 1249 deletions(-) create mode 100644 buildSrc/src/main/kotlin/datadog.configure-tests.gradle.kts create mode 100644 buildSrc/src/main/kotlin/datadog.test-jvm-contraints.gradle.kts create mode 100644 buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/ProvideJvmArgsOnJvmLauncherVersion.kt create mode 100644 buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsExtension.kt create mode 100644 buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsUtils.kt create mode 100644 buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmSpec.kt create mode 100644 dd-java-agent/instrumentation/spark/spark_2.12/src/main/java/datadog/trace/instrumentation/spark/Spark212PlanUtils.java create mode 100644 dd-java-agent/instrumentation/spark/spark_2.13/src/main/java/datadog/trace/instrumentation/spark/Spark213PlanUtils.java create mode 100644 dd-java-agent/instrumentation/spark/src/main/java/datadog/trace/instrumentation/spark/AbstractSparkPlanUtils.java create mode 100644 dd-trace-api/src/main/java/datadog/trace/api/config/OtlpConfig.java delete mode 100644 gradle/configure_tests.gradle diff --git a/.gitlab/benchmarks.yml b/.gitlab/benchmarks.yml index 7127d9d995d..b2231e75f8d 100644 --- a/.gitlab/benchmarks.yml +++ b/.gitlab/benchmarks.yml @@ -71,7 +71,7 @@ check-big-regressions: needs: - job: benchmarks-startup artifacts: true - - job: benchmarks-load + - job: benchmarks-dacapo artifacts: true when: on_success tags: ["arch:amd64"] @@ -86,7 +86,7 @@ check-big-regressions: script: - !reference [ .benchmarks, script ] - | - for benchmarkType in startup load; do + for benchmarkType in startup dacapo; do find "$ARTIFACTS_DIR/$benchmarkType" -name "benchmark-baseline.json" -o -name "benchmark-candidate.json" | while read file; do relpath="${file#$ARTIFACTS_DIR/$benchmarkType/}" prefix="${relpath%/benchmark-*}" # Remove the trailing /benchmark-(baseline|candidate).json diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 43b0392aef5..2e2a82cf796 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -49,6 +49,10 @@ apply { from("$rootDir/../gradle/repositories.gradle") } +repositories { + gradlePluginPortal() +} + dependencies { implementation(gradleApi()) implementation(localGroovy()) @@ -69,6 +73,8 @@ dependencies { implementation("com.fasterxml.jackson.core:jackson-databind") implementation("com.fasterxml.jackson.core:jackson-annotations") implementation("com.fasterxml.jackson.core:jackson-core") + + compileOnly(libs.develocity) } tasks.compileKotlin { diff --git a/buildSrc/src/main/kotlin/datadog.ci-jobs.gradle.kts b/buildSrc/src/main/kotlin/datadog.ci-jobs.gradle.kts index 8d49d688cdb..8f6cb001080 100644 --- a/buildSrc/src/main/kotlin/datadog.ci-jobs.gradle.kts +++ b/buildSrc/src/main/kotlin/datadog.ci-jobs.gradle.kts @@ -5,6 +5,7 @@ */ import datadog.gradle.plugin.ci.findAffectedTaskPath +import org.gradle.api.tasks.testing.Test import java.io.File import kotlin.math.abs @@ -20,6 +21,15 @@ allprojects { val currentTaskPartition = abs(project.path.hashCode() % taskPartitionCount.toInt()) extra.set("activePartition", currentTaskPartition == taskPartition.toInt()) } + + // Disable test tasks if not in active partition + val activePartitionProvider = providers.provider { + project.extra.properties["activePartition"] as? Boolean ?: true + } + + tasks.withType().configureEach { + enabled = activePartitionProvider.get() + } } fun relativeToGitRoot(f: File): File { diff --git a/buildSrc/src/main/kotlin/datadog.configure-tests.gradle.kts b/buildSrc/src/main/kotlin/datadog.configure-tests.gradle.kts new file mode 100644 index 00000000000..6e1f4cdda92 --- /dev/null +++ b/buildSrc/src/main/kotlin/datadog.configure-tests.gradle.kts @@ -0,0 +1,129 @@ +import org.gradle.api.tasks.testing.Test +import org.gradle.api.tasks.testing.junitplatform.JUnitPlatformOptions +import org.gradle.api.services.BuildService +import org.gradle.api.services.BuildServiceParameters +import org.gradle.testing.base.TestingExtension +import org.gradle.api.plugins.jvm.JvmTestSuite +import java.time.Duration +import java.time.temporal.ChronoUnit + +val isTestingInstrumentation = providers.provider { + project.findProperty("testingInstrumentation") as? Boolean ?: false +} + +// Need concrete implementation of BuildService in Kotlin +abstract class ForkedTestLimit : BuildService +// Forked tests will fail with OOM if the memory is set too high. Gitlab allows at least a limit of 3. +val forkedTestsMemoryLimit = 3 + +val forkedTestLimit = gradle.sharedServices.registerIfAbsent("forkedTestLimit", ForkedTestLimit::class.java) { + maxParallelUsages.set(forkedTestsMemoryLimit) +} + +extensions.findByType()?.apply { + suites.withType().configureEach { + // Use JUnit 5 to run tests + useJUnitJupiter() + } +} + +// Use lazy providers to avoid evaluating the property until it is needed +val skipTestsProvider = rootProject.providers.gradleProperty("skipTests") +val skipForkedTestsProvider = rootProject.providers.gradleProperty("skipForkedTests") +val skipFlakyTestsProvider = rootProject.providers.gradleProperty("skipFlakyTests") +val runFlakyTestsProvider = rootProject.providers.gradleProperty("runFlakyTests") + +// Go through the Test tasks and configure them +tasks.withType().configureEach { + // Disable all tests if skipTests property was specified + onlyIf("skipTests are undefined or false") { !skipTestsProvider.isPresent } + + // Enable force rerun of tests with -Prerun.tests.${project.name} + outputs.upToDateWhen { + !rootProject.providers.gradleProperty("rerun.tests.${project.name}").isPresent + } + + // Avoid executing classes used to test testing frameworks instrumentation + if (isTestingInstrumentation.get()) { + exclude("**/TestAssumption*", "**/TestSuiteSetUpAssumption*") + exclude("**/TestDisableTestTrace*") + exclude("**/TestError*") + exclude("**/TestFactory*") + exclude("**/TestFailed*") + exclude("**/TestFailedWithSuccessPercentage*") + exclude("**/TestInheritance*", "**/BaseTestInheritance*") + exclude("**/TestParameterized*") + exclude("**/TestRepeated*") + exclude("**/TestSkipped*") + exclude("**/TestSkippedClass*") + exclude("**/TestSucceed*") + exclude("**/TestTemplate*") + exclude("**/TestUnskippable*") + exclude("**/TestWithSetup*") + } + + // Split up tests that want to run forked in their own separate JVM for generated tasks + if (name.startsWith("forkedTest") || name.endsWith("ForkedTest")) { + setExcludes(emptyList()) + setIncludes(listOf("**/*ForkedTest*")) + forkEvery = 1 + // Limit the number of concurrent forked tests + usesService(forkedTestLimit) + onlyIf("skipForkedTests are undefined or false") { !skipForkedTestsProvider.isPresent } + } else { + exclude("**/*ForkedTest*") + } + + // Set test timeout for 20 minutes. Default job timeout is 1h (configured on CI level). + timeout.set(Duration.of(20, ChronoUnit.MINUTES)) +} + +// Register a task "allTests" that depends on all non-latest and non-traceAgentTest Test tasks. +// This is used when we only want to run the 'main' test sets. +tasks.register("allTests") { + dependsOn(tasks.withType().matching { testTask -> + !testTask.name.contains("latest", ignoreCase = true) && testTask.name != "traceAgentTest" + }) +} + +// Register a task "allLatestDepTests" that depends on all Test tasks whose names include 'latest'. +// This is used when we want to run tests against the latest dependency versions. +tasks.register("allLatestDepTests") { + dependsOn(tasks.withType().matching { testTask -> + !testTask.name.contains("latest", ignoreCase = true) + }) +} + +// Make the 'check' task depend on all Test tasks in the project. +// This means that when running the 'check' task, all Test tasks will run as well. +tasks.named("check") { + dependsOn(tasks.withType()) +} + +tasks.withType().configureEach { + // Flaky tests management for JUnit 5 + (options as? JUnitPlatformOptions)?.apply { + if (skipFlakyTestsProvider.isPresent) { + excludeTags("flaky") + } else if (runFlakyTestsProvider.isPresent) { + includeTags("flaky") + } + } + + // Set system property flag that is checked from tests to determine if they should be skipped or run + if (skipFlakyTestsProvider.isPresent) { + jvmArgs("-Drun.flaky.tests=false") + } else if (runFlakyTestsProvider.isPresent) { + jvmArgs("-Drun.flaky.tests=true") + } +} + +tasks.withType().configureEach { + // https://docs.gradle.com/develocity/flaky-test-detection/ + // https://docs.gradle.com/develocity/gradle-plugin/current/#test_retry + develocity.testRetry { + if (providers.environmentVariable("CI").isPresent()) { + maxRetries = 3 + } + } +} diff --git a/buildSrc/src/main/kotlin/datadog.test-jvm-contraints.gradle.kts b/buildSrc/src/main/kotlin/datadog.test-jvm-contraints.gradle.kts new file mode 100644 index 00000000000..aa4724183b0 --- /dev/null +++ b/buildSrc/src/main/kotlin/datadog.test-jvm-contraints.gradle.kts @@ -0,0 +1,128 @@ +import datadog.gradle.plugin.testJvmConstraints.ProvideJvmArgsOnJvmLauncherVersion +import datadog.gradle.plugin.testJvmConstraints.TestJvmConstraintsExtension +import datadog.gradle.plugin.testJvmConstraints.TestJvmConstraintsExtension.Companion.TEST_JVM_CONSTRAINTS +import datadog.gradle.plugin.testJvmConstraints.TestJvmSpec +import datadog.gradle.plugin.testJvmConstraints.isJavaVersionAllowed +import datadog.gradle.plugin.testJvmConstraints.isTestJvmAllowed + +plugins { + java +} + +val projectExtension = extensions.create(TEST_JVM_CONSTRAINTS) + +val testJvmSpec = TestJvmSpec(project) + +tasks.withType().configureEach { + if (extensions.findByName(TEST_JVM_CONSTRAINTS) != null) { + return@configureEach + } + + inputs.property("testJvm", testJvmSpec.testJvmProperty).optional(true) + + val taskExtension = project.objects.newInstance().also { + configureConventions(it, projectExtension) + } + + inputs.property("$TEST_JVM_CONSTRAINTS.allowReflectiveAccessToJdk", taskExtension.allowReflectiveAccessToJdk).optional(true) + inputs.property("$TEST_JVM_CONSTRAINTS.excludeJdk", taskExtension.excludeJdk) + inputs.property("$TEST_JVM_CONSTRAINTS.includeJdk", taskExtension.includeJdk) + inputs.property("$TEST_JVM_CONSTRAINTS.forceJdk", taskExtension.forceJdk) + inputs.property("$TEST_JVM_CONSTRAINTS.minJavaVersion", taskExtension.minJavaVersion).optional(true) + inputs.property("$TEST_JVM_CONSTRAINTS.maxJavaVersion", taskExtension.maxJavaVersion).optional(true) + + extensions.add(TEST_JVM_CONSTRAINTS, taskExtension) + + configureTestJvm(taskExtension) +} + +/** + * Provide arguments if condition is met. + */ +fun Test.conditionalJvmArgs( + applyFromVersion: JavaVersion, + jvmArgsToApply: List, + additionalCondition: Provider = project.providers.provider { true } +) { + jvmArgumentProviders.add( + ProvideJvmArgsOnJvmLauncherVersion( + this, + applyFromVersion, + jvmArgsToApply, + additionalCondition + ) + ) +} + +/** + * Configure the jvm launcher of the test task and ensure the test task + * can be run with the test task launcher. + */ +private fun Test.configureTestJvm(extension: TestJvmConstraintsExtension) { + if (testJvmSpec.javaTestLauncher.isPresent) { + javaLauncher = testJvmSpec.javaTestLauncher + onlyIf("Allowed or forced JDK") { + extension.isTestJvmAllowed(testJvmSpec) + } + } else { + onlyIf("Is current Daemon JVM allowed") { + extension.isJavaVersionAllowed(JavaVersion.current()) + } + } + + // temporary workaround when using Java16+: some tests require reflective access to java.lang/java.util + conditionalJvmArgs( + JavaVersion.VERSION_16, + listOf( + "--add-opens=java.base/java.lang=ALL-UNNAMED", + "--add-opens=java.base/java.util=ALL-UNNAMED" + ), + extension.allowReflectiveAccessToJdk + ) +} + +// Jacoco plugin is not applied on every project +pluginManager.withPlugin("org.gradle.jacoco") { + tasks.withType().configureEach { + // Disable jacoco for additional 'testJvm' tests to speed things up a bit + if (testJvmSpec.javaTestLauncher.isPresent) { + extensions.configure { + isEnabled = false + } + } + } +} + +/** + * Configures the convention, this tells Gradle where to look for values. + * + * Currently, the extension is still configured to look at project's _extra_ properties. + */ +private fun Test.configureConventions( + taskExtension: TestJvmConstraintsExtension, + projectExtension: TestJvmConstraintsExtension +) { + taskExtension.minJavaVersion.convention(projectExtension.minJavaVersion + .orElse(providers.provider { project.findProperty("${name}MinJavaVersionForTests") as? JavaVersion }) + .orElse(providers.provider { project.findProperty("minJavaVersion") as? JavaVersion }) + ) + taskExtension.maxJavaVersion.convention(projectExtension.maxJavaVersion + .orElse(providers.provider { project.findProperty("${name}MaxJavaVersionForTests") as? JavaVersion }) + .orElse(providers.provider { project.findProperty("maxJavaVersion") as? JavaVersion }) + ) + taskExtension.forceJdk.convention(projectExtension.forceJdk + .orElse(providers.provider { + @Suppress("UNCHECKED_CAST") + project.findProperty("forceJdk") as? List ?: emptyList() + }) + ) + taskExtension.excludeJdk.convention(projectExtension.excludeJdk + .orElse(providers.provider { + @Suppress("UNCHECKED_CAST") + project.findProperty("excludeJdk") as? List ?: emptyList() + }) + ) + taskExtension.allowReflectiveAccessToJdk.convention(projectExtension.allowReflectiveAccessToJdk + .orElse(providers.provider { project.findProperty("allowReflectiveAccessToJdk") as? Boolean }) + ) +} diff --git a/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/ProvideJvmArgsOnJvmLauncherVersion.kt b/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/ProvideJvmArgsOnJvmLauncherVersion.kt new file mode 100644 index 00000000000..52443474337 --- /dev/null +++ b/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/ProvideJvmArgsOnJvmLauncherVersion.kt @@ -0,0 +1,38 @@ +package datadog.gradle.plugin.testJvmConstraints + +import org.gradle.api.JavaVersion +import org.gradle.api.provider.Provider +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.Internal +import org.gradle.api.tasks.Optional +import org.gradle.api.tasks.testing.Test +import org.gradle.process.CommandLineArgumentProvider + +class ProvideJvmArgsOnJvmLauncherVersion( + @get:Internal + val test: Test, + + @get:Input + val applyFromVersion: JavaVersion, + + @get:Input + val jvmArgsToApply: List, + + @get:Input + @get:Optional + val additionalCondition: Provider +) : CommandLineArgumentProvider { + + override fun asArguments(): Iterable { + val launcherVersion = test.javaLauncher + .map { JavaVersion.toVersion(it.metadata.languageVersion.asInt()) } + .orElse(JavaVersion.current()) + .get() + + return if (launcherVersion.isCompatibleWith(applyFromVersion) && additionalCondition.getOrElse(true)) { + jvmArgsToApply + } else { + emptyList() + } + } +} diff --git a/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsExtension.kt b/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsExtension.kt new file mode 100644 index 00000000000..03b8c533d61 --- /dev/null +++ b/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsExtension.kt @@ -0,0 +1,43 @@ +package datadog.gradle.plugin.testJvmConstraints + +import org.gradle.api.JavaVersion +import org.gradle.api.provider.ListProperty +import org.gradle.api.provider.Property + +interface TestJvmConstraintsExtension { + /** + * Sets an explicit minimum bound to allowed JDK version + */ + val minJavaVersion: Property + + /** + * Sets an explicit maximum bound to allowed JDK version + */ + val maxJavaVersion: Property + + /** + * List of allowed JDK names (passed through the `testJvm` property). + */ + val forceJdk: ListProperty + + /** + * List of included JDK names (passed through the `testJvm` property). + */ + val includeJdk: ListProperty + + /** + * List of excluded JDK names (passed through the `testJvm` property). + */ + val excludeJdk: ListProperty + + /** + * Indicate if the test JVM allows reflective access to JDK + * `java.base/java.lang` and `java.base/java.util` modules by + * openning them. + */ + val allowReflectiveAccessToJdk: Property + + companion object { + const val TEST_JVM_CONSTRAINTS = "testJvmConstraints" + } +} diff --git a/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsUtils.kt b/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsUtils.kt new file mode 100644 index 00000000000..7df6a10d6ea --- /dev/null +++ b/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsUtils.kt @@ -0,0 +1,48 @@ +package datadog.gradle.plugin.testJvmConstraints + +import org.gradle.api.JavaVersion +import org.gradle.api.logging.Logging + +private val logger = Logging.getLogger("TestJvmConstraintsUtils") + +internal fun TestJvmConstraintsExtension.isJavaVersionAllowed(version: JavaVersion): Boolean { + return withinAllowedRange(version) +} + +internal fun TestJvmConstraintsExtension.isTestJvmAllowed(testJvmSpec: TestJvmSpec): Boolean { + val testJvmName = testJvmSpec.normalizedTestJvm.get() + + val included = includeJdk.get() + if (included.isNotEmpty() && included.none { it.equals(testJvmName, ignoreCase = true) }) { + return false + } + + val excluded = excludeJdk.get() + if (excluded.isNotEmpty() && excluded.any { it.equals(testJvmName, ignoreCase = true) }) { + return false + } + + val launcherVersion = JavaVersion.toVersion(testJvmSpec.javaTestLauncher.get().metadata.languageVersion.asInt()) + if (!withinAllowedRange(launcherVersion) && forceJdk.get().none { it.equals(testJvmName, ignoreCase = true) }) { + return false + } + + return true +} + +private fun TestJvmConstraintsExtension.withinAllowedRange(currentJvmVersion: JavaVersion): Boolean { + val definedMin = minJavaVersion.isPresent + val definedMax = maxJavaVersion.isPresent + + if (definedMin && (minJavaVersion.get()) > currentJvmVersion) { + logger.info("isWithinAllowedRange returns false b/o minProp=${minJavaVersion.get()} is defined and greater than version=$currentJvmVersion") + return false + } + + if (definedMax && (maxJavaVersion.get()) < currentJvmVersion) { + logger.info("isWithinAllowedRange returns false b/o maxProp=${maxJavaVersion.get()} is defined and lower than version=$currentJvmVersion") + return false + } + + return true +} diff --git a/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmSpec.kt b/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmSpec.kt new file mode 100644 index 00000000000..d78e96e68f0 --- /dev/null +++ b/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmSpec.kt @@ -0,0 +1,88 @@ +package datadog.gradle.plugin.testJvmConstraints + +import org.gradle.kotlin.dsl.support.serviceOf +import org.gradle.api.GradleException +import org.gradle.api.Project +import org.gradle.jvm.toolchain.JavaLauncher +import org.gradle.jvm.toolchain.JavaToolchainService +import java.nio.file.Files +import java.nio.file.Path +import java.nio.file.Paths + + +class TestJvmSpec(val project: Project) { + companion object { + const val TEST_JVM = "testJvm" + } + + private val currentJavaHomePath = project.providers.systemProperty("java.home").map { it.normalizeToJDKJavaHome() } + + val testJvmProperty = project.providers.gradleProperty(TEST_JVM) + + val normalizedTestJvm = testJvmProperty.map { testJvm -> + if (testJvm.isBlank()) { + throw GradleException("testJvm property is blank") + } + + // "stable" is calculated as the largest X found in JAVA_X_HOME + if (testJvm == "stable") { + val javaVersions = project.providers.environmentVariablesPrefixedBy("JAVA_").map { javaHomes -> + javaHomes + .filter { it.key.matches(Regex("^JAVA_[0-9]+_HOME$")) } + .map { Regex("^JAVA_(\\d+)_HOME$").find(it.key)!!.groupValues[1].toInt() } + }.get() + + if (javaVersions.isEmpty()) { + throw GradleException("No valid JAVA_X_HOME environment variables found.") + } + + javaVersions.max().toString() + } else { + testJvm + } + }.map { project.logger.info("normalized testJvm: $it"); it } + + val testJvmHomePath = normalizedTestJvm.map { + if (Files.exists(Paths.get(it))) { + it.normalizeToJDKJavaHome() + } else { + val matcher = Regex("([a-zA-Z]*)([0-9]+)").find(it) + if (matcher == null) { + throw GradleException("Unable to find launcher for Java '$it'. It needs to match '([a-zA-Z]*)([0-9]+)'.") + } + val testJvmEnv = "JAVA_${it}_HOME" + val testJvmHome = project.providers.environmentVariable(testJvmEnv).orNull + if (testJvmHome == null) { + throw GradleException("Unable to find launcher for Java '$it'. Have you set '$testJvmEnv'?") + } + + testJvmHome.normalizeToJDKJavaHome() + } + }.map { project.logger.info("testJvm home path: $it"); it } + + val javaTestLauncher = project.providers.zip(testJvmHomePath, normalizedTestJvm) { testJvmHome, testJvm -> + // Only change test JVM if it's not the one we are running the gradle build with + if (currentJavaHomePath.get() == testJvmHome) { + project.providers.provider { null } + } else { + // This is using internal APIs + val jvmSpec = org.gradle.jvm.toolchain.internal.SpecificInstallationToolchainSpec( + project.serviceOf(), + project.file(testJvmHome) + ) + + // The provider always says that a value is present so we need to wrap it for proper error messages + project.javaToolchains.launcherFor(jvmSpec).orElse(project.providers.provider { + throw GradleException("Unable to find launcher for Java $testJvm. Does '$testJvmHome' point to a JDK?") + }) + } + }.flatMap { it }.map { project.logger.info("testJvm launcher: ${it.executablePath}"); it } + + private fun String.normalizeToJDKJavaHome(): Path { + val javaHome = project.file(this).toPath().toRealPath() + return if (javaHome.endsWith("jre")) javaHome.parent else javaHome + } + + private val Project.javaToolchains: JavaToolchainService get() = + extensions.getByName("javaToolchains") as JavaToolchainService +} diff --git a/dd-java-agent/agent-aiguard/build.gradle b/dd-java-agent/agent-aiguard/build.gradle index f8dcb4df379..5e4841dbf3c 100644 --- a/dd-java-agent/agent-aiguard/build.gradle +++ b/dd-java-agent/agent-aiguard/build.gradle @@ -18,6 +18,7 @@ dependencies { implementation libs.okhttp api project(':dd-trace-api') + api project(':utils:version-utils') implementation project(':internal-api') implementation project(':communication') diff --git a/dd-java-agent/agent-aiguard/src/main/java/com/datadog/aiguard/AIGuardInternal.java b/dd-java-agent/agent-aiguard/src/main/java/com/datadog/aiguard/AIGuardInternal.java index a7d098a4b91..fc2d2dafb64 100644 --- a/dd-java-agent/agent-aiguard/src/main/java/com/datadog/aiguard/AIGuardInternal.java +++ b/dd-java-agent/agent-aiguard/src/main/java/com/datadog/aiguard/AIGuardInternal.java @@ -1,5 +1,8 @@ package com.datadog.aiguard; +import static datadog.communication.ddagent.TracerVersion.TRACER_VERSION; +import static datadog.trace.api.telemetry.WafMetricCollector.AIGuardTruncationType.CONTENT; +import static datadog.trace.api.telemetry.WafMetricCollector.AIGuardTruncationType.MESSAGES; import static datadog.trace.util.Strings.isBlank; import static java.util.Collections.singletonMap; @@ -21,6 +24,7 @@ import datadog.trace.api.aiguard.AIGuard.ToolCall.Function; import datadog.trace.api.aiguard.Evaluator; import datadog.trace.api.aiguard.noop.NoOpEvaluator; +import datadog.trace.api.telemetry.WafMetricCollector; import datadog.trace.bootstrap.instrumentation.api.AgentScope; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; @@ -79,7 +83,18 @@ public static void install() { if (isBlank(endpoint)) { endpoint = String.format("https://app.%s/api/v2/ai-guard", config.getSite()); } - final Map headers = mapOf("DD-API-KEY", apiKey, "DD-APPLICATION-KEY", appKey); + final Map headers = + mapOf( + "DD-API-KEY", + apiKey, + "DD-APPLICATION-KEY", + appKey, + "DD-AI-GUARD-VERSION", + TRACER_VERSION, + "DD-AI-GUARD-SOURCE", + "SDK", + "DD-AI-GUARD-LANGUAGE", + "jvm"); final HttpUrl url = HttpUrl.get(endpoint).newBuilder().addPathSegment("evaluate").build(); final int timeout = config.getAiGuardTimeout(); final OkHttpClient client = buildClient(url, timeout); @@ -113,12 +128,17 @@ static void uninstall() { private static List messagesForMetaStruct(List messages) { final Config config = Config.get(); final int size = Math.min(messages.size(), config.getAiGuardMaxMessagesLength()); + if (size < messages.size()) { + WafMetricCollector.get().aiGuardTruncated(MESSAGES); + } final List result = new ArrayList<>(size); final int maxContent = config.getAiGuardMaxContentSize(); + boolean contentTruncated = false; for (int i = 0; i < size; i++) { Message source = messages.get(i); final String content = source.getContent(); if (content != null && content.length() > maxContent) { + contentTruncated = true; source = new Message( source.getRole(), @@ -128,6 +148,9 @@ private static List messagesForMetaStruct(List messages) { } result.add(source); } + if (contentTruncated) { + WafMetricCollector.get().aiGuardTruncated(CONTENT); + } return result; } @@ -203,20 +226,27 @@ public Evaluation evaluate(final List messages, final Options options) final String reason = (String) result.get("reason"); span.setTag(ACTION_TAG, action); span.setTag(REASON_TAG, reason); - final boolean blockingEnabled = - isBlockingEnabled(options, result.get("is_blocking_enabled")); - if (blockingEnabled && action != Action.ALLOW) { + final boolean shouldBlock = + isBlockingEnabled(options, result.get("is_blocking_enabled")) && action != Action.ALLOW; + WafMetricCollector.get().aiGuardRequest(action, shouldBlock); + if (shouldBlock) { span.setTag(BLOCKED_TAG, true); throw new AIGuardAbortError(action, reason); } return new Evaluation(action, reason); } - } catch (AIGuardAbortError | AIGuardClientError e) { + } catch (AIGuardAbortError e) { + span.addThrowable(e); + throw e; + } catch (AIGuardClientError e) { + WafMetricCollector.get().aiGuardError(); span.addThrowable(e); throw e; } catch (final Exception e) { + WafMetricCollector.get().aiGuardError(); final AIGuardClientError error = - new AIGuardClientError("AI Guard service returned unexpected response", e); + new AIGuardClientError( + "AI Guard service returned unexpected response: " + e.getMessage(), e); span.addThrowable(error); throw error; } finally { @@ -248,11 +278,14 @@ private static OkHttpClient buildClient(final HttpUrl url, final long timeout) { return OkHttpUtils.buildHttpClient(url, timeout).newBuilder().build(); } - private static Map mapOf( - final String key1, final String prop1, final String key2, final String prop2) { - final Map map = new HashMap<>(2); - map.put(key1, prop1); - map.put(key2, prop2); + private static Map mapOf(final String... props) { + if (props.length % 2 != 0) { + throw new IllegalArgumentException("Props must be even"); + } + final Map map = new HashMap<>(props.length << 1); + for (int i = 0; i < props.length; ) { + map.put(props[i++], props[i++]); + } return map; } diff --git a/dd-java-agent/agent-aiguard/src/test/groovy/com/datadog/aiguard/AIGuardInternalTests.groovy b/dd-java-agent/agent-aiguard/src/test/groovy/com/datadog/aiguard/AIGuardInternalTests.groovy index 913224f70ac..366b977a7a3 100644 --- a/dd-java-agent/agent-aiguard/src/test/groovy/com/datadog/aiguard/AIGuardInternalTests.groovy +++ b/dd-java-agent/agent-aiguard/src/test/groovy/com/datadog/aiguard/AIGuardInternalTests.groovy @@ -4,8 +4,10 @@ import com.fasterxml.jackson.annotation.JsonInclude import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.databind.PropertyNamingStrategies import com.squareup.moshi.Moshi +import datadog.common.version.VersionInfo import datadog.trace.api.Config import datadog.trace.api.aiguard.AIGuard +import datadog.trace.api.telemetry.WafMetricCollector import datadog.trace.bootstrap.instrumentation.api.AgentSpan import datadog.trace.bootstrap.instrumentation.api.AgentTracer import datadog.trace.test.util.DDSpecification @@ -35,7 +37,11 @@ class AIGuardInternalTests extends DDSpecification { protected static final URL = HttpUrl.parse('https://app.datadoghq.com/api/v2/ai-guard/evaluate') @Shared - protected static final HEADERS = ['DD-API-KEY': 'api', 'DD-APPLICATION-KEY': 'app'] + protected static final HEADERS = ['DD-API-KEY': 'api', + 'DD-APPLICATION-KEY': 'app', + 'DD-AI-GUARD-VERSION': VersionInfo.VERSION, + 'DD-AI-GUARD-SOURCE': 'SDK', + 'DD-AI-GUARD-LANGUAGE': 'jvm'] @Shared protected static final ORIGINAL_TRACER = AgentTracer.get() @@ -79,6 +85,11 @@ class AIGuardInternalTests extends DDSpecification { buildSpan(_ as String, _ as String) >> builder } AgentTracer.forceRegister(tracer) + + WafMetricCollector.get().tap { + prepareMetrics() + drain() + } } void cleanup() { @@ -193,6 +204,7 @@ class AIGuardInternalTests extends DDSpecification { eval.action == suite.action eval.reason == suite.reason } + assertTelemetry('ai_guard.requests', "action:$suite.action", "block:$throwAbortError", 'error:false') where: suite << TestSuite.build() @@ -222,6 +234,7 @@ class AIGuardInternalTests extends DDSpecification { final exception = thrown(AIGuard.AIGuardClientError) exception.errors == errors 1 * span.addThrowable(_ as AIGuard.AIGuardClientError) + assertTelemetry('ai_guard.requests', 'error:true') } void 'test evaluate with invalid JSON'() { @@ -246,6 +259,7 @@ class AIGuardInternalTests extends DDSpecification { then: thrown(AIGuard.AIGuardClientError) 1 * span.addThrowable(_ as AIGuard.AIGuardClientError) + assertTelemetry('ai_guard.requests', 'error:true') } void 'test evaluate with missing action'() { @@ -270,6 +284,7 @@ class AIGuardInternalTests extends DDSpecification { then: thrown(AIGuard.AIGuardClientError) 1 * span.addThrowable(_ as AIGuard.AIGuardClientError) + assertTelemetry('ai_guard.requests', 'error:true') } void 'test evaluate with non JSON response'() { @@ -294,6 +309,7 @@ class AIGuardInternalTests extends DDSpecification { then: thrown(AIGuard.AIGuardClientError) 1 * span.addThrowable(_ as AIGuard.AIGuardClientError) + assertTelemetry('ai_guard.requests', 'error:true') } void 'test evaluate with empty response'() { @@ -318,6 +334,7 @@ class AIGuardInternalTests extends DDSpecification { then: thrown(AIGuard.AIGuardClientError) 1 * span.addThrowable(_ as AIGuard.AIGuardClientError) + assertTelemetry('ai_guard.requests', 'error:true') } void 'test message length truncation'() { @@ -349,6 +366,7 @@ class AIGuardInternalTests extends DDSpecification { assert received.size() == maxMessages assert received.size() < messages.size() } + assertTelemetry('ai_guard.truncated', 'type:messages') } void 'test message content truncation'() { @@ -380,6 +398,7 @@ class AIGuardInternalTests extends DDSpecification { assert it.content.length() < message.content.length() } } + assertTelemetry('ai_guard.truncated', 'type:content') } void 'test no messages'() { @@ -425,6 +444,21 @@ class AIGuardInternalTests extends DDSpecification { 0 * span.setTag(AIGuardInternal.TOOL_TAG, _) } + private static assertTelemetry(final String metric, final String...tags) { + final metrics = WafMetricCollector.get().with { + prepareMetrics() + drain() + } + final filtered = metrics.findAll { + it.namespace == 'appsec' + && it.metricName == metric + && it.tags == tags.toList() + } + assert filtered.size() == 1 : metrics + assert filtered*.value.sum() == 1 + return true + } + private static assertRequest(final Request request, final List messages) { assert request.url() == URL assert request.method() == 'POST' @@ -452,12 +486,12 @@ class AIGuardInternalTests extends DDSpecification { private static Response mockResponse(final Request request, final int status, final Object body) { return new Response.Builder() - .protocol(Protocol.HTTP_1_1) - .message('ok') - .request(request) - .code(status) - .body(body == null ? null : ResponseBody.create(MediaType.parse('application/json'), MOSHI.adapter(Object).toJson(body))) - .build() + .protocol(Protocol.HTTP_1_1) + .message('ok') + .request(request) + .code(status) + .body(body == null ? null : ResponseBody.create(MediaType.parse('application/json'), MOSHI.adapter(Object).toJson(body))) + .build() } private static class TestSuite { @@ -495,13 +529,13 @@ class AIGuardInternalTests extends DDSpecification { @Override String toString() { return "TestSuite{" + - "description='" + description + '\'' + - ", action=" + action + - ", reason='" + reason + '\'' + - ", blocking=" + blocking + - ", target='" + target + '\'' + - ", messages=" + messages + - '}' + "description='" + description + '\'' + + ", action=" + action + + ", reason='" + reason + '\'' + + ", blocking=" + blocking + + ", target='" + target + '\'' + + ", messages=" + messages + + '}' } } } diff --git a/dd-java-agent/agent-bootstrap/build.gradle b/dd-java-agent/agent-bootstrap/build.gradle index a27b5a035b2..e2c2192cdf6 100644 --- a/dd-java-agent/agent-bootstrap/build.gradle +++ b/dd-java-agent/agent-bootstrap/build.gradle @@ -70,7 +70,7 @@ jmh { } tasks.withType(Test).configureEach { - configureJvmArgs( + conditionalJvmArgs( it, JavaVersion.VERSION_16, ['--add-opens', 'java.base/java.net=ALL-UNNAMED'] // for HostNameResolverForkedTest diff --git a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Agent.java b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Agent.java index e971bc04517..6f56896a780 100644 --- a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Agent.java +++ b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Agent.java @@ -21,6 +21,7 @@ import datadog.environment.JavaVirtualMachine; import datadog.environment.OperatingSystem; import datadog.environment.SystemProperties; +import datadog.instrument.classinject.ClassInjector; import datadog.trace.api.Config; import datadog.trace.api.Platform; import datadog.trace.api.StatsDClientManager; @@ -210,6 +211,15 @@ public static void start( StaticEventLogger.begin("Agent"); StaticEventLogger.begin("Agent.start"); + try { + ClassInjector.enableClassInjection(inst); + } catch (Throwable e) { + log.debug("Instrumentation-based class injection is not available", e); + setSystemPropertyDefault( + propertyNameToSystemPropertyName(TraceInstrumentationConfig.UNSAFE_CLASS_INJECTION), + "true"); + } + createAgentClassloader(agentJarURL); if (Platform.isNativeImageBuilder()) { diff --git a/dd-java-agent/agent-otel/otel-tooling/src/main/java/datadog/opentelemetry/tooling/OtelInstrumentationMapper.java b/dd-java-agent/agent-otel/otel-tooling/src/main/java/datadog/opentelemetry/tooling/OtelInstrumentationMapper.java index 04c13ce0fb5..5f1df5d050a 100644 --- a/dd-java-agent/agent-otel/otel-tooling/src/main/java/datadog/opentelemetry/tooling/OtelInstrumentationMapper.java +++ b/dd-java-agent/agent-otel/otel-tooling/src/main/java/datadog/opentelemetry/tooling/OtelInstrumentationMapper.java @@ -141,7 +141,9 @@ static final class Renamer extends Remapper { RENAMED_PACKAGES.put( "io/opentelemetry/javaagent/bootstrap/", "datadog/trace/bootstrap/otel/instrumentation/"); - RENAMED_PACKAGES.put("org/objectweb/asm/", "net/bytebuddy/jar/asm/"); + // we want to keep this package unchanged so it matches against any unshaded extensions + // dropped in at runtime; use replace to stop it being transformed by the shadow plugin + RENAMED_PACKAGES.put("org|objectweb|asm|".replace('|', '/'), "net/bytebuddy/jar/asm/"); } @Override diff --git a/dd-java-agent/agent-profiling/profiling-controller-ddprof/build.gradle b/dd-java-agent/agent-profiling/profiling-controller-ddprof/build.gradle index 2fb6e24f654..b5247ed57d7 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-ddprof/build.gradle +++ b/dd-java-agent/agent-profiling/profiling-controller-ddprof/build.gradle @@ -1,15 +1,19 @@ -// Set properties before any plugins get loaded -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 - // By default tests with be compiled for `minJavaVersionForTests` version, - // but in this case we would like to avoid this since we would like to run with ZULU8 - skipSettingTestJavaVersion = true - excludeJdk = ['SEMERU11', 'SEMERU17'] -} - apply from: "$rootDir/gradle/java.gradle" apply plugin: 'idea' +tracerJava { + addSourceSetFor(JavaVersion.VERSION_11) { + // By default tests with be compiled for `minJavaVersion` version, + // but in this case we would like to avoid this since we would like to run with ZULU8 + applyForTestSources = false + } +} + +testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_11 + excludeJdk = ['SEMERU11', 'SEMERU17'] +} + minimumBranchCoverage = 0.5 minimumInstructionCoverage = 0.7 diff --git a/dd-java-agent/agent-profiling/profiling-controller-jfr/build.gradle b/dd-java-agent/agent-profiling/profiling-controller-jfr/build.gradle index d581337fabc..4e72e59a468 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-jfr/build.gradle +++ b/dd-java-agent/agent-profiling/profiling-controller-jfr/build.gradle @@ -1,17 +1,16 @@ import de.thetaphi.forbiddenapis.gradle.CheckForbiddenApis -// Set properties before any plugins get loaded -ext { +apply from: "$rootDir/gradle/java.gradle" +apply plugin: 'idea' + +testJvmConstraints { // the tests need Java 11 because the JFR writer got compiled with a version // of ByteBuffer.position(int) which is binary incompatible with Java 8 ¯\_(ツ)_/¯ - minJavaVersionForTests = JavaVersion.VERSION_11 + minJavaVersion = JavaVersion.VERSION_11 excludeJdk = ['SEMERU11', 'SEMERU17'] } -apply from: "$rootDir/gradle/java.gradle" -apply plugin: 'idea' - dependencies { api project(':dd-java-agent:agent-profiling:profiling-controller') diff --git a/dd-java-agent/agent-profiling/profiling-controller-jfr/implementation/build.gradle b/dd-java-agent/agent-profiling/profiling-controller-jfr/implementation/build.gradle index d4714a298d7..f7bc01b78d3 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-jfr/implementation/build.gradle +++ b/dd-java-agent/agent-profiling/profiling-controller-jfr/implementation/build.gradle @@ -1,13 +1,12 @@ import de.thetaphi.forbiddenapis.gradle.CheckForbiddenApis // Set properties before any plugins get loaded -ext { - minJavaVersionForTests = JavaVersion.VERSION_1_8 -} - apply from: "$rootDir/gradle/java.gradle" apply plugin: 'idea' +testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_1_8 +} sourceSets { "main_java11" { @@ -56,7 +55,7 @@ idea { } tasks.withType(Test).configureEach { - configureJvmArgs( + conditionalJvmArgs( it, JavaVersion.VERSION_1_9, [ diff --git a/dd-java-agent/agent-profiling/profiling-controller-openjdk/build.gradle b/dd-java-agent/agent-profiling/profiling-controller-openjdk/build.gradle index 6c2f5beb1fa..61c9e9a57bf 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-openjdk/build.gradle +++ b/dd-java-agent/agent-profiling/profiling-controller-openjdk/build.gradle @@ -1,17 +1,21 @@ -// Set properties before any plugins get loaded -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 +apply from: "$rootDir/gradle/java.gradle" +apply plugin: 'idea' + +tracerJava { + addSourceSetFor(JavaVersion.VERSION_11) { + // By default tests with be compiled for `minJavaVersion` version, + // but in this case we would like to avoid this since we would like to run with ZULU8 + applyForTestSources = false + } +} + +testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_11 // Zulu has backported profiling support forceJdk = ['ZULU8'] excludeJdk = ['SEMERU11', 'SEMERU17'] - // By default tests with be compiled for `minJavaVersionForTests` version, - // but in this case we would like to avoid this since we would like to run with ZULU8 - skipSettingTestJavaVersion = true } -apply from: "$rootDir/gradle/java.gradle" -apply plugin: 'idea' - dependencies { api libs.slf4j api project(':internal-api') diff --git a/dd-java-agent/agent-profiling/profiling-controller-oracle/build.gradle b/dd-java-agent/agent-profiling/profiling-controller-oracle/build.gradle index 5302bc76cec..8b6d7725eff 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-oracle/build.gradle +++ b/dd-java-agent/agent-profiling/profiling-controller-oracle/build.gradle @@ -1,14 +1,13 @@ -// Set properties before any plugins get loaded -ext { - // Need to force Oracle JDK 8 since it is the only JDK compatible with this implementation - forceJdk = ['ORACLE8'] - // By default tests with be compiled for `minJavaVersionForTests` version, - // but in this case we would like to avoid this since we would like to run with ORACLE8 - skipSettingTestJavaVersion = true -} - apply from: "$rootDir/gradle/java.gradle" +tracerJava { + addSourceSetFor(JavaVersion.VERSION_11) { + // By default tests with be compiled for `minJavaVersion` version, + // but in this case we would like to avoid this since we would like to run with ZULU8 + applyForTestSources = false + } +} + minimumBranchCoverage = 0.5 minimumInstructionCoverage = 0.7 @@ -28,8 +27,8 @@ dependencies { // Oracle JDK requires extra JVM arguments to enable JFR tasks.withType(Test).configureEach { - onlyIf { - it.name.contains('ORACLE8') + testJvmConstraints { + includeJdk = ['ORACLE8'] } jvmArgs += [ diff --git a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/ExtensionHandler.java b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/ExtensionHandler.java index 1451debd20c..3f05fe5ac82 100644 --- a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/ExtensionHandler.java +++ b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/ExtensionHandler.java @@ -126,8 +126,9 @@ protected byte[] doMapBytecode(String unused) { /** Maps logging references in the extension to use the tracer's embedded logger. */ public static final Function MAP_LOGGING = new Function() { - // substring stops string literal from being changed by shadow plugin - private final String ORG_SLF4J = "_org/slf4j/".substring(1); + // we want to keep this package unchanged so it matches against any unshaded extensions + // dropped in at runtime; use replace to stop it being transformed by the shadow plugin + private final String ORG_SLF4J = "org|slf4j|".replace('|', '/'); @Override public String apply(String internalName) { diff --git a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/HelperInjector.java b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/HelperInjector.java index b93484e3f4b..0b94488ea92 100644 --- a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/HelperInjector.java +++ b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/HelperInjector.java @@ -3,6 +3,7 @@ import static datadog.trace.bootstrap.AgentClassLoading.INJECTING_HELPERS; import static java.util.Arrays.asList; +import datadog.trace.api.InstrumenterConfig; import datadog.trace.bootstrap.instrumentation.api.EagerHelper; import datadog.trace.util.JDK9ModuleAccess; import java.io.IOException; @@ -10,6 +11,7 @@ import java.lang.reflect.AnnotatedElement; import java.security.CodeSource; import java.security.ProtectionDomain; +import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.LinkedHashMap; @@ -22,7 +24,6 @@ import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.dynamic.ClassFileLocator; import net.bytebuddy.dynamic.DynamicType; -import net.bytebuddy.dynamic.loading.ClassInjector; import net.bytebuddy.utility.JavaModule; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -34,6 +35,9 @@ public class HelperInjector implements Instrumenter.TransformingAdvice { private static final ClassFileLocator classFileLocator = ClassFileLocator.ForClassLoader.of(Utils.getExtendedClassLoader()); + private static final boolean unsafeClassInjection = + InstrumenterConfig.get().isUnsafeClassInjection(); + private final boolean useAgentCodeSource; private final AdviceShader adviceShader; private final String requestingName; @@ -132,7 +136,7 @@ public DynamicType.Builder transform( } final Map classnameToBytes = getHelperMap(); - final Map> classes = injectClassLoader(classLoader, classnameToBytes); + final Collection> classes = injectClassLoader(classLoader, classnameToBytes); // all datadog helper classes are in the unnamed module // and there's exactly one unnamed module per classloader @@ -141,7 +145,7 @@ public DynamicType.Builder transform( } // forcibly initialize any eager helpers - for (Class clazz : classes.values()) { + for (Class clazz : classes) { if (EagerHelper.class.isAssignableFrom(clazz)) { try { clazz.getMethod("init").invoke(null); @@ -173,16 +177,30 @@ public DynamicType.Builder transform( return builder; } - private Map> injectClassLoader( + private Collection> injectClassLoader( final ClassLoader classLoader, final Map classnameToBytes) { INJECTING_HELPERS.begin(); try { if (useAgentCodeSource) { ProtectionDomain protectionDomain = createProtectionDomain(classLoader); - return new ClassInjector.UsingReflection(classLoader, protectionDomain) - .injectRaw(classnameToBytes); + if (unsafeClassInjection) { + return new net.bytebuddy.dynamic.loading.ClassInjector.UsingReflection( + classLoader, protectionDomain) + .injectRaw(classnameToBytes) + .values(); + } else { + return datadog.instrument.classinject.ClassInjector.injectClasses( + classnameToBytes, protectionDomain); + } } else { - return new ClassInjector.UsingReflection(classLoader).injectRaw(classnameToBytes); + if (unsafeClassInjection) { + return new net.bytebuddy.dynamic.loading.ClassInjector.UsingReflection(classLoader) + .injectRaw(classnameToBytes) + .values(); + } else { + return datadog.instrument.classinject.ClassInjector.injectClasses( + classnameToBytes, classLoader); + } } } finally { INJECTING_HELPERS.end(); diff --git a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/bytebuddy/outline/AnnotationOutline.java b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/bytebuddy/outline/AnnotationOutline.java index ee7d53eff1b..f4fc833f549 100644 --- a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/bytebuddy/outline/AnnotationOutline.java +++ b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/bytebuddy/outline/AnnotationOutline.java @@ -1,5 +1,6 @@ package datadog.trace.agent.tooling.bytebuddy.outline; +import datadog.instrument.classmatch.ClassFile; import java.lang.annotation.Annotation; import java.lang.annotation.ElementType; import java.lang.annotation.RetentionPolicy; @@ -17,13 +18,19 @@ final class AnnotationOutline extends WithName implements AnnotationDescription private static final Map annotationOutlines = new HashMap<>(); static void prepareAnnotationOutline(String name) { - String descriptor = 'L' + name.replace('.', '/') + ';'; - annotationOutlines.put(descriptor, new AnnotationOutline(name)); + String internalName = name.replace('.', '/'); + // flag that we want to parse this annotation + ClassFile.annotationOfInterest(internalName); + // only a few annotation outlines get prepared - we register them under + // both their internal name and descriptor to support different callers + AnnotationOutline annotationOutline = new AnnotationOutline(name); + annotationOutlines.put('L' + internalName + ';', annotationOutline); + annotationOutlines.put(internalName, annotationOutline); } /** Only provide outlines of annotations of interest used for matching. */ - static AnnotationDescription annotationOutline(String descriptor) { - return annotationOutlines.get(descriptor); + static AnnotationDescription annotationOutline(String internalNameOrDescriptor) { + return annotationOutlines.get(internalNameOrDescriptor); } private AnnotationOutline(String name) { diff --git a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/bytebuddy/outline/OutlineTypeParser.java b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/bytebuddy/outline/OutlineTypeParser.java index 798f1ffa005..3ef94925364 100644 --- a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/bytebuddy/outline/OutlineTypeParser.java +++ b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/bytebuddy/outline/OutlineTypeParser.java @@ -4,6 +4,8 @@ import static net.bytebuddy.jar.asm.ClassReader.SKIP_CODE; import static net.bytebuddy.jar.asm.ClassReader.SKIP_DEBUG; +import datadog.instrument.classmatch.ClassFile; +import datadog.trace.api.InstrumenterConfig; import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.lang.reflect.Method; @@ -18,13 +20,19 @@ /** Attempts a minimal parse of just the named elements we need for matching. */ final class OutlineTypeParser implements TypeParser { + private static final boolean visitorClassParsing = + InstrumenterConfig.get().isVisitorClassParsing(); @Override public TypeDescription parse(byte[] bytecode) { - ClassReader classReader = OpenedClassReader.of(bytecode); - OutlineTypeExtractor typeExtractor = new OutlineTypeExtractor(); - classReader.accept(typeExtractor, SKIP_CODE | SKIP_DEBUG); - return typeExtractor.typeOutline; + if (visitorClassParsing) { + ClassReader classReader = OpenedClassReader.of(bytecode); + OutlineTypeExtractor typeExtractor = new OutlineTypeExtractor(); + classReader.accept(typeExtractor, SKIP_CODE | SKIP_DEBUG); + return typeExtractor.typeOutline; + } else { + return new TypeOutline(ClassFile.outline(bytecode)); + } } @Override @@ -39,7 +47,7 @@ public TypeDescription parse(Class loadedType) { extractTypeNames(loadedType.getInterfaces())); for (Annotation a : loadedType.getDeclaredAnnotations()) { - typeOutline.declare(annotationOutline(Type.getDescriptor(a.annotationType()))); + typeOutline.declare(annotationOutline(Type.getInternalName(a.annotationType()))); } for (Field field : loadedType.getDeclaredFields()) { @@ -50,7 +58,7 @@ public TypeDescription parse(Class loadedType) { field.getName(), Type.getDescriptor(field.getType())); for (Annotation a : field.getDeclaredAnnotations()) { - fieldOutline.declare(annotationOutline(Type.getDescriptor(a.annotationType()))); + fieldOutline.declare(annotationOutline(Type.getInternalName(a.annotationType()))); } typeOutline.declare(fieldOutline); } @@ -63,7 +71,7 @@ public TypeDescription parse(Class loadedType) { method.getName(), Type.getMethodDescriptor(method)); for (Annotation a : method.getDeclaredAnnotations()) { - methodOutline.declare(annotationOutline(Type.getDescriptor(a.annotationType()))); + methodOutline.declare(annotationOutline(Type.getInternalName(a.annotationType()))); } typeOutline.declare(methodOutline); } diff --git a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/bytebuddy/outline/TypeOutline.java b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/bytebuddy/outline/TypeOutline.java index f49cad267a1..294d9939a59 100644 --- a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/bytebuddy/outline/TypeOutline.java +++ b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/bytebuddy/outline/TypeOutline.java @@ -1,7 +1,9 @@ package datadog.trace.agent.tooling.bytebuddy.outline; +import static datadog.trace.agent.tooling.bytebuddy.outline.AnnotationOutline.annotationOutline; import static datadog.trace.agent.tooling.bytebuddy.outline.TypeFactory.findType; +import datadog.instrument.classmatch.ClassOutline; import java.util.ArrayList; import java.util.List; import net.bytebuddy.description.annotation.AnnotationDescription; @@ -42,6 +44,30 @@ final class TypeOutline extends WithName { this.interfaces = interfaces; } + /** Adapts simpler {@link ClassOutline} structure to existing {@link TypeOutline}. */ + public TypeOutline(ClassOutline outline) { + super(outline.className.replace('/', '.')); + this.modifiers = outline.access & ALLOWED_TYPE_MODIFIERS; + this.superName = outline.superName; + this.interfaces = outline.interfaces; + + for (String annotation : outline.annotations) { + declare(annotationOutline(annotation)); + } + + for (datadog.instrument.classmatch.FieldOutline f : outline.fields) { + declare(new FieldOutline(this, f.access, f.fieldName, f.descriptor)); + } + + for (datadog.instrument.classmatch.MethodOutline m : outline.methods) { + MethodOutline method = new MethodOutline(this, m.access, m.methodName, m.descriptor); + for (String annotation : m.annotations) { + method.declare(annotationOutline(annotation)); + } + declare(method); + } + } + @Override protected TypeDescription delegate() { throw new IllegalStateException("Not available in outline for " + name); diff --git a/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/test/HelperInjectionTest.groovy b/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/test/HelperInjectionTest.groovy index 460838aee7c..cecfb1c5e87 100644 --- a/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/test/HelperInjectionTest.groovy +++ b/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/test/HelperInjectionTest.groovy @@ -1,8 +1,10 @@ package datadog.trace.agent.test +import datadog.instrument.classinject.ClassInjector import datadog.trace.agent.tooling.HelperInjector import datadog.trace.agent.tooling.Utils import datadog.trace.test.util.DDSpecification +import net.bytebuddy.agent.ByteBuddyAgent import java.lang.ref.WeakReference import java.util.concurrent.atomic.AtomicReference @@ -15,6 +17,7 @@ class HelperInjectionTest extends DDSpecification { def "helpers injected to non-delegating classloader"() { setup: + ClassInjector.enableClassInjection(ByteBuddyAgent.getInstrumentation()) HelperInjector injector = new HelperInjector(false, "test", HELPER_CLASS_NAME) AtomicReference emptyLoader = new AtomicReference<>(new URLClassLoader(new URL[0], (ClassLoader) null)) diff --git a/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/tooling/csi/CallSiteTransformerTest.groovy b/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/tooling/csi/CallSiteTransformerTest.groovy index 801319cc6db..80463dc2af6 100644 --- a/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/tooling/csi/CallSiteTransformerTest.groovy +++ b/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/tooling/csi/CallSiteTransformerTest.groovy @@ -1,10 +1,12 @@ package datadog.trace.agent.tooling.csi +import datadog.instrument.classinject.ClassInjector import datadog.trace.agent.tooling.bytebuddy.csi.Advices import datadog.trace.agent.tooling.bytebuddy.csi.CallSiteTransformer import datadog.trace.agent.tooling.csi.CallSiteAdvice.MethodHandler import datadog.trace.api.function.TriFunction import groovy.transform.CompileDynamic +import net.bytebuddy.agent.ByteBuddyAgent import net.bytebuddy.description.type.TypeDescription import net.bytebuddy.dynamic.DynamicType import net.bytebuddy.jar.asm.Opcodes @@ -206,6 +208,7 @@ class CallSiteTransformerTest extends BaseCallSiteTest { @SuppressWarnings(['GroovyAccessibility', 'GroovyAssignabilityCheck']) void 'test call site transformer with helpers'() { setup: + ClassInjector.enableClassInjection(ByteBuddyAgent.getInstrumentation()) final source = StringConcatExample final helper = InstrumentationHelper final customClassLoader = new ClassLoader() { } diff --git a/dd-java-agent/benchmark-integration/play-perftest/build.gradle b/dd-java-agent/benchmark-integration/play-perftest/build.gradle index f220f6c2f91..77653ebc6b1 100644 --- a/dd-java-agent/benchmark-integration/play-perftest/build.gradle +++ b/dd-java-agent/benchmark-integration/play-perftest/build.gradle @@ -1,9 +1,9 @@ -import com.github.spotbugs.snom.SpotBugsTask - plugins { id 'org.gradle.playframework' } +apply from: "$rootDir/dd-smoke-tests/play-common/fix-play-routes.gradle" + def playVer = "2.6.20" def scalaVer = System.getProperty("scala.binary.version", /* default = */ "2.12") diff --git a/dd-java-agent/build.gradle b/dd-java-agent/build.gradle index 04f99145da0..74195962fb3 100644 --- a/dd-java-agent/build.gradle +++ b/dd-java-agent/build.gradle @@ -91,6 +91,8 @@ def generalShadowJarConfig(ShadowJar shadowJarTask) { // patch JFFI loading mechanism to maintain isolation exclude '**/com/kenai/jffi/Init.class' relocate('com.kenai.jffi.Init', 'com.kenai.jffi.PatchInit') + // use dd-instrument-java's embedded copy of asm + relocate('org.objectweb.asm', 'datadog.instrument.asm') // Minimize and relocate the airlift compressor dependency for ZSTD exclude '**/io/airlift/compress/bzip2/**' @@ -203,6 +205,8 @@ def sharedShadowJar = tasks.register('sharedShadowJar', ShadowJar) { exclude(project(':utils:config-utils')) exclude(project(':utils:time-utils')) exclude(dependency('org.slf4j::')) + // use dd-instrument-java's embedded copy of asm + exclude(dependency('org.ow2.asm:asm:')) } } includeShadowJar(sharedShadowJar, 'shared', includedJarFileTree) diff --git a/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/InstrumentationSpecification.groovy b/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/InstrumentationSpecification.groovy index cc64bc5af61..0a0de953be3 100644 --- a/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/InstrumentationSpecification.groovy +++ b/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/InstrumentationSpecification.groovy @@ -16,6 +16,7 @@ import com.datadog.debugger.sink.ProbeStatusSink import com.google.common.collect.Sets import datadog.communication.ddagent.DDAgentFeaturesDiscovery import datadog.communication.monitor.Monitoring +import datadog.instrument.classinject.ClassInjector import datadog.trace.agent.test.asserts.ListWriterAssert import datadog.trace.agent.test.datastreams.MockFeaturesDiscovery import datadog.trace.agent.test.datastreams.RecordingDatastreamsPayloadWriter @@ -401,6 +402,8 @@ abstract class InstrumentationSpecification extends DDSpecification implements A return trackingSpan } + ClassInjector.enableClassInjection(INSTRUMENTATION) + // if a test enables the instrumentation it verifies, // the cache needs to be recomputed taking into account that instrumentation's matchers ClassLoaderMatchers.resetState() diff --git a/dd-java-agent/instrumentation/aerospike-4.0/build.gradle b/dd-java-agent/instrumentation/aerospike-4.0/build.gradle index 92d6ed2b6db..f38182ab4bd 100644 --- a/dd-java-agent/instrumentation/aerospike-4.0/build.gradle +++ b/dd-java-agent/instrumentation/aerospike-4.0/build.gradle @@ -1,7 +1,3 @@ -ext { - latestDepTestMinJavaVersionForTests = JavaVersion.VERSION_21 - latestDepForkedTestMinJavaVersionForTests = JavaVersion.VERSION_21 -} muzzle { pass { group = 'com.aerospike' @@ -18,6 +14,18 @@ addTestSuiteForDir("latest7DepTest", "test") addTestSuiteExtendingForDir("latestDepForkedTest", "latestDepTest", "test") addTestSuiteExtendingForDir("latest7DepForkedTest", "latest7DepTest", "test") +tasks.named("latestDepTest", Test) { + testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_21 + } +} + +tasks.named("latestDepForkedTest", Test) { + testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_21 + } +} + dependencies { compileOnly group: 'com.aerospike', name: 'aerospike-client', version: '4.0.0' diff --git a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/build.gradle b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/build.gradle index 1101175903c..10639cdb033 100644 --- a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/build.gradle +++ b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/build.gradle @@ -1,8 +1,3 @@ -// Set properties before any plugins get loaded -ext { - lagomTestMaxJavaVersionForTests = JavaVersion.VERSION_1_8 -} - apply from: "$rootDir/gradle/java.gradle" apply plugin: 'scala' apply plugin: 'call-site-instrumentation' @@ -22,6 +17,12 @@ addTestSuiteForDir 'version101IastTest', 'iastTest' addTestSuiteForDir 'version102IastTest', 'iastTest' addTestSuiteForDir 'latestDepIastTest', 'iastTest' +tasks.named("lagomTest", Test) { + testJvmConstraints { + maxJavaVersion = JavaVersion.VERSION_1_8 + } +} + tasks.named("compileLagomTestJava", JavaCompile) { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 diff --git a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.6/build.gradle b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.6/build.gradle index 5b8c864eee5..26b9de5c894 100644 --- a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.6/build.gradle +++ b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.6/build.gradle @@ -1,11 +1,10 @@ -// Set properties before any plugins get loaded -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 -} - apply from: "$rootDir/gradle/java.gradle" apply plugin: 'scala' +tracerJava { + addSourceSetFor(JavaVersion.VERSION_11) +} + muzzle { pass { group = 'com.typesafe.akka' diff --git a/dd-java-agent/instrumentation/armeria/armeria-grpc-0.84/build.gradle b/dd-java-agent/instrumentation/armeria/armeria-grpc-0.84/build.gradle index 32996b1f7e2..faf1cae4c43 100644 --- a/dd-java-agent/instrumentation/armeria/armeria-grpc-0.84/build.gradle +++ b/dd-java-agent/instrumentation/armeria/armeria-grpc-0.84/build.gradle @@ -40,8 +40,6 @@ protobuf { addTestSuiteForDir('latestDepTest', 'test') addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'test') -apply from: "$rootDir/gradle/configure_tests.gradle" - tasks.named("latestDepTest", Test) { finalizedBy 'latestDepForkedTest' } diff --git a/dd-java-agent/instrumentation/armeria/armeria-jetty-1.24/build.gradle b/dd-java-agent/instrumentation/armeria/armeria-jetty-1.24/build.gradle index 07e1be55c5c..65cde281c07 100644 --- a/dd-java-agent/instrumentation/armeria/armeria-jetty-1.24/build.gradle +++ b/dd-java-agent/instrumentation/armeria/armeria-jetty-1.24/build.gradle @@ -1,7 +1,3 @@ -ext { - jetty11TestMinJavaVersionForTests = JavaVersion.VERSION_11 -} - muzzle { pass { group = "com.linecorp.armeria" @@ -16,7 +12,6 @@ muzzle { } apply from: "$rootDir/gradle/java.gradle" -apply from: "$rootDir/gradle/configure_tests.gradle" addTestSuiteForDir('latestDepTest', 'test') @@ -25,6 +20,12 @@ addTestSuiteForDir("jetty11Test", "test/jetty11") addTestSuiteExtendingForDir("jetty9LatestDepTest", "latestDepTest", "test/jetty9") addTestSuiteExtendingForDir("jetty11LatestDepTest", "latestDepTest", "test/jetty11") +tasks.named("jetty11Test", Test) { + testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_11 + } +} + configureGroovyCompiler(11, "compileJetty11TestGroovy", "compileJetty11LatestDepTestGroovy") ["jetty11Test", "jetty11LatestDepTest"].each { name -> diff --git a/dd-java-agent/instrumentation/avro/build.gradle b/dd-java-agent/instrumentation/avro/build.gradle index e32b22e1416..722a20f65d7 100644 --- a/dd-java-agent/instrumentation/avro/build.gradle +++ b/dd-java-agent/instrumentation/avro/build.gradle @@ -1,6 +1,3 @@ -ext { - latestDepTestMinJavaVersionForTests = JavaVersion.VERSION_11 -} muzzle { pass { group = 'org.apache.avro' @@ -14,6 +11,13 @@ apply from: "$rootDir/gradle/java.gradle" addTestSuiteForDir('latestDepTest','test') addTestSuiteForDir('latestDepTest8','test') + +tasks.named("latestDepTest", Test) { + testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_11 + } +} + dependencies { compileOnly group: 'org.apache.avro', name: 'avro', version: '1.11.3' testImplementation group: 'org.apache.avro', name: 'avro', version: '1.11.3' diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-dynamodb-2.0/gradle.lockfile b/dd-java-agent/instrumentation/aws-java/aws-java-dynamodb-2.0/gradle.lockfile index edae4ee3287..0ee9d605f5f 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-dynamodb-2.0/gradle.lockfile +++ b/dd-java-agent/instrumentation/aws-java/aws-java-dynamodb-2.0/gradle.lockfile @@ -192,58 +192,58 @@ org.testng:testng:7.5.1=latestDepForkedTestRuntimeClasspath,latestDepTestRuntime org.webjars:jquery:3.5.1=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath org.xmlresolver:xmlresolver:4.4.3=spotbugs software.amazon.awssdk:annotations:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:annotations:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:annotations:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:apache-client:2.30.22=testRuntimeClasspath -software.amazon.awssdk:apache-client:2.37.3=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:apache-client:2.38.2=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:auth:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:auth:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:auth:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-core:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:aws-core:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:aws-core:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-json-protocol:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:aws-json-protocol:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:aws-json-protocol:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:checksums-spi:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:checksums-spi:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:checksums-spi:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:checksums:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:checksums:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:checksums:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:dynamodb:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:dynamodb:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:dynamodb:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:endpoints-spi:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:endpoints-spi:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:endpoints-spi:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth-aws-eventstream:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth-aws-eventstream:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-aws-eventstream:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth-aws:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth-aws:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-aws:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth-spi:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth-spi:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-spi:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-client-spi:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-client-spi:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-client-spi:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:identity-spi:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:identity-spi:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:identity-spi:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:json-utils:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:json-utils:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:json-utils:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:metrics-spi:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:metrics-spi:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:metrics-spi:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:netty-nio-client:2.30.22=testRuntimeClasspath -software.amazon.awssdk:netty-nio-client:2.37.3=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:netty-nio-client:2.38.2=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:profiles:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:profiles:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:profiles:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:protocol-core:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:protocol-core:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:protocol-core:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:regions:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:regions:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:regions:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:retries-spi:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:retries-spi:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:retries-spi:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:retries:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:retries:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:retries:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:sdk-core:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:sdk-core:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:sdk-core:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:third-party-jackson-core:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:third-party-jackson-core:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:utils-lite:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:third-party-jackson-core:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:utils-lite:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:utils:2.30.22=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:utils:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:utils:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.eventstream:eventstream:1.0.1=compileClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath xml-apis:xml-apis:1.4.01=spotbugs empty=spotbugsPlugins diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-eventbridge-2.0/gradle.lockfile b/dd-java-agent/instrumentation/aws-java/aws-java-eventbridge-2.0/gradle.lockfile index 00eaf327690..dc3d2177f55 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-eventbridge-2.0/gradle.lockfile +++ b/dd-java-agent/instrumentation/aws-java/aws-java-eventbridge-2.0/gradle.lockfile @@ -193,84 +193,84 @@ org.webjars:jquery:3.5.1=latestDepForkedTestRuntimeClasspath,latestDepTestRuntim org.xmlresolver:xmlresolver:4.4.3=spotbugs software.amazon.awssdk:annotations:2.27.19=compileClasspath software.amazon.awssdk:annotations:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:annotations:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:annotations:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:apache-client:2.27.23=testRuntimeClasspath -software.amazon.awssdk:apache-client:2.37.3=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:apache-client:2.38.2=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:auth:2.27.19=compileClasspath software.amazon.awssdk:auth:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:auth:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:auth:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-core:2.27.19=compileClasspath software.amazon.awssdk:aws-core:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:aws-core:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:aws-core:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-json-protocol:2.27.19=compileClasspath software.amazon.awssdk:aws-json-protocol:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:aws-json-protocol:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:aws-json-protocol:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-query-protocol:2.27.23=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:checksums-spi:2.27.19=compileClasspath software.amazon.awssdk:checksums-spi:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:checksums-spi:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:checksums-spi:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:checksums:2.27.19=compileClasspath software.amazon.awssdk:checksums:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:checksums:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:checksums:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:endpoints-spi:2.27.19=compileClasspath software.amazon.awssdk:endpoints-spi:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:endpoints-spi:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:endpoints-spi:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:eventbridge:2.27.19=compileClasspath software.amazon.awssdk:eventbridge:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:eventbridge:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:eventbridge:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth-aws-eventstream:2.27.19=compileClasspath software.amazon.awssdk:http-auth-aws-eventstream:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth-aws-eventstream:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-aws-eventstream:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth-aws:2.27.19=compileClasspath software.amazon.awssdk:http-auth-aws:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth-aws:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-aws:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth-spi:2.27.19=compileClasspath software.amazon.awssdk:http-auth-spi:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth-spi:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-spi:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth:2.27.19=compileClasspath software.amazon.awssdk:http-auth:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-client-spi:2.27.19=compileClasspath software.amazon.awssdk:http-client-spi:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-client-spi:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-client-spi:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:identity-spi:2.27.19=compileClasspath software.amazon.awssdk:identity-spi:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:identity-spi:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:identity-spi:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:json-utils:2.27.19=compileClasspath software.amazon.awssdk:json-utils:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:json-utils:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:json-utils:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:metrics-spi:2.27.19=compileClasspath software.amazon.awssdk:metrics-spi:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:metrics-spi:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:metrics-spi:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:netty-nio-client:2.27.23=testRuntimeClasspath -software.amazon.awssdk:netty-nio-client:2.37.3=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:netty-nio-client:2.38.2=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:profiles:2.27.19=compileClasspath software.amazon.awssdk:profiles:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:profiles:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:profiles:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:protocol-core:2.27.19=compileClasspath software.amazon.awssdk:protocol-core:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:protocol-core:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:protocol-core:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:regions:2.27.19=compileClasspath software.amazon.awssdk:regions:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:regions:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:regions:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:retries-spi:2.27.19=compileClasspath software.amazon.awssdk:retries-spi:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:retries-spi:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:retries-spi:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:retries:2.27.19=compileClasspath software.amazon.awssdk:retries:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:retries:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:retries:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:sdk-core:2.27.19=compileClasspath software.amazon.awssdk:sdk-core:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:sdk-core:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:sdk-core:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:sns:2.27.23=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:sqs:2.27.23=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:third-party-jackson-core:2.27.19=compileClasspath software.amazon.awssdk:third-party-jackson-core:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:third-party-jackson-core:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:utils-lite:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:third-party-jackson-core:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:utils-lite:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:utils:2.27.19=compileClasspath software.amazon.awssdk:utils:2.27.23=testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:utils:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:utils:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.eventstream:eventstream:1.0.1=compileClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath xml-apis:xml-apis:1.4.01=spotbugs empty=spotbugsPlugins diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-s3-2.0/gradle.lockfile b/dd-java-agent/instrumentation/aws-java/aws-java-s3-2.0/gradle.lockfile index 9e73f293d73..6054fde8ab3 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-s3-2.0/gradle.lockfile +++ b/dd-java-agent/instrumentation/aws-java/aws-java-s3-2.0/gradle.lockfile @@ -192,64 +192,64 @@ org.testng:testng:7.5.1=latestDepForkedTestRuntimeClasspath,latestDepTestRuntime org.webjars:jquery:3.5.1=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath org.xmlresolver:xmlresolver:4.4.3=spotbugs software.amazon.awssdk:annotations:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:annotations:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:annotations:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:apache-client:2.29.26=testRuntimeClasspath -software.amazon.awssdk:apache-client:2.37.3=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:apache-client:2.38.2=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:arns:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:arns:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:arns:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:auth:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:auth:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:auth:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-core:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:aws-core:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:aws-core:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-query-protocol:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:aws-query-protocol:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:aws-query-protocol:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-xml-protocol:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:aws-xml-protocol:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:aws-xml-protocol:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:checksums-spi:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:checksums-spi:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:checksums-spi:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:checksums:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:checksums:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:checksums:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:crt-core:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:crt-core:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:crt-core:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:endpoints-spi:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:endpoints-spi:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:endpoints-spi:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth-aws-eventstream:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth-aws-eventstream:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-aws-eventstream:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth-aws:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth-aws:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-aws:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth-spi:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth-spi:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-spi:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-client-spi:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-client-spi:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-client-spi:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:identity-spi:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:identity-spi:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:identity-spi:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:json-utils:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:json-utils:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:json-utils:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:metrics-spi:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:metrics-spi:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:metrics-spi:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:netty-nio-client:2.29.26=testRuntimeClasspath -software.amazon.awssdk:netty-nio-client:2.37.3=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:netty-nio-client:2.38.2=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:profiles:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:profiles:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:profiles:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:protocol-core:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:protocol-core:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:protocol-core:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:regions:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:regions:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:regions:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:retries-spi:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:retries-spi:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:retries-spi:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:retries:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:retries:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:retries:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:s3:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:s3:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:s3:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:sdk-core:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:sdk-core:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:sdk-core:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:third-party-jackson-core:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:third-party-jackson-core:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:utils-lite:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:third-party-jackson-core:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:utils-lite:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:utils:2.29.26=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:utils:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:utils:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.eventstream:eventstream:1.0.1=compileClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath xml-apis:xml-apis:1.4.01=spotbugs empty=spotbugsPlugins diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sdk-2.2/gradle.lockfile b/dd-java-agent/instrumentation/aws-java/aws-java-sdk-2.2/gradle.lockfile index 2bf0f9a2e48..dcd9269cf21 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sdk-2.2/gradle.lockfile +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sdk-2.2/gradle.lockfile @@ -242,13 +242,13 @@ software.amazon.awssdk:annotations:2.19.0=payloadTaggingForkedTestCompileClasspa software.amazon.awssdk:annotations:2.2.0=compileClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:annotations:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:annotations:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:annotations:2.37.3=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:annotations:2.38.2=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:apache-client:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath software.amazon.awssdk:apache-client:2.19.0=payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:apache-client:2.2.0=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingTestCompileClasspath,payloadTaggingForkedTestCompileClasspath,payloadTaggingTestCompileClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:apache-client:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:apache-client:2.25.40=latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:apache-client:2.37.3=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:apache-client:2.38.2=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:apigateway:2.19.0=payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:apigateway:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:apigateway:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath @@ -259,35 +259,35 @@ software.amazon.awssdk:auth:2.19.0=payloadTaggingForkedTestCompileClasspath,payl software.amazon.awssdk:auth:2.2.0=compileClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:auth:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:auth:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:auth:2.37.3=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:auth:2.38.2=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:aws-cbor-protocol:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath,latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath,payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:aws-cbor-protocol:2.2.0=testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:aws-cbor-protocol:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:aws-cbor-protocol:2.37.3=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:aws-cbor-protocol:2.38.2=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:aws-core:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath software.amazon.awssdk:aws-core:2.19.0=payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:aws-core:2.2.0=compileClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:aws-core:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-core:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:aws-core:2.37.3=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:aws-core:2.38.2=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:aws-json-protocol:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath software.amazon.awssdk:aws-json-protocol:2.19.0=payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:aws-json-protocol:2.2.0=testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:aws-json-protocol:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-json-protocol:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:aws-json-protocol:2.37.3=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:aws-json-protocol:2.38.2=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:aws-query-protocol:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath,payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:aws-query-protocol:2.2.0=testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:aws-query-protocol:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-query-protocol:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:aws-query-protocol:2.37.3=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:aws-query-protocol:2.38.2=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:aws-xml-protocol:2.18.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath,payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:aws-xml-protocol:2.2.0=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath,latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:aws-xml-protocol:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:checksums-spi:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:checksums-spi:2.37.3=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:checksums-spi:2.38.2=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:checksums:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:checksums:2.37.3=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:checksums:2.38.2=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:crt-core:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:dynamodb:2.2.0=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath,latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath,latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath,payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:dynamodb:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath @@ -297,57 +297,57 @@ software.amazon.awssdk:endpoints-spi:2.18.40=dsmForkedTestCompileClasspath,dsmFo software.amazon.awssdk:endpoints-spi:2.19.0=payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:endpoints-spi:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:endpoints-spi:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:endpoints-spi:2.37.3=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:endpoints-spi:2.38.2=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:eventbridge:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:eventbridge:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath software.amazon.awssdk:eventbridge:2.7.4=payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath -software.amazon.awssdk:http-auth-aws-eventstream:2.37.3=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:http-auth-aws-eventstream:2.38.2=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:http-auth-aws:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:http-auth-aws:2.37.3=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:http-auth-aws:2.38.2=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:http-auth-spi:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:http-auth-spi:2.37.3=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:http-auth-spi:2.38.2=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:http-auth:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:http-auth:2.37.3=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:http-auth:2.38.2=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:http-client-spi:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath software.amazon.awssdk:http-client-spi:2.19.0=payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:http-client-spi:2.2.0=compileClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:http-client-spi:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-client-spi:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:http-client-spi:2.37.3=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:http-client-spi:2.38.2=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:identity-spi:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:identity-spi:2.37.3=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:identity-spi:2.38.2=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:json-utils:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath software.amazon.awssdk:json-utils:2.19.0=payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:json-utils:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:json-utils:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:json-utils:2.37.3=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:json-utils:2.38.2=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:kinesis:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath,latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath,payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:kinesis:2.2.0=testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:kinesis:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:kinesis:2.37.3=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:kinesis:2.38.2=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:metrics-spi:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath software.amazon.awssdk:metrics-spi:2.19.0=payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:metrics-spi:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:metrics-spi:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:metrics-spi:2.37.3=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:metrics-spi:2.38.2=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:netty-nio-client:2.18.40=dsmForkedTestRuntimeClasspath,dsmTestRuntimeClasspath software.amazon.awssdk:netty-nio-client:2.19.0=payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:netty-nio-client:2.2.0=testRuntimeClasspath software.amazon.awssdk:netty-nio-client:2.20.33=latestDepTestRuntimeClasspath software.amazon.awssdk:netty-nio-client:2.25.40=latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:netty-nio-client:2.37.3=latestDsmForkedTestRuntimeClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:netty-nio-client:2.38.2=latestDsmForkedTestRuntimeClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:profiles:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath software.amazon.awssdk:profiles:2.19.0=payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:profiles:2.2.0=compileClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:profiles:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:profiles:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:profiles:2.37.3=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:profiles:2.38.2=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:protocol-core:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath software.amazon.awssdk:protocol-core:2.19.0=payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:protocol-core:2.2.0=testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:protocol-core:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:protocol-core:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:protocol-core:2.37.3=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:protocol-core:2.38.2=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:rds:2.2.0=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath,latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath,latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath,payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:rds:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:regions:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath @@ -355,9 +355,9 @@ software.amazon.awssdk:regions:2.19.0=payloadTaggingForkedTestCompileClasspath,p software.amazon.awssdk:regions:2.2.0=compileClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:regions:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:regions:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:regions:2.37.3=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath -software.amazon.awssdk:retries-spi:2.37.3=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath -software.amazon.awssdk:retries:2.37.3=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:regions:2.38.2=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:retries-spi:2.38.2=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:retries:2.38.2=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:s3:2.18.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath,payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:s3:2.2.0=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath,latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:s3:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath @@ -366,12 +366,12 @@ software.amazon.awssdk:sdk-core:2.19.0=payloadTaggingForkedTestCompileClasspath, software.amazon.awssdk:sdk-core:2.2.0=compileClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:sdk-core:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:sdk-core:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:sdk-core:2.37.3=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:sdk-core:2.38.2=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:sns:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath,payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:sns:2.2.0=testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:sns:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:sns:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:sns:2.37.3=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:sns:2.38.2=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:sqs:2.18.40=payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:sqs:2.2.0=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath,latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:sqs:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath @@ -380,17 +380,17 @@ software.amazon.awssdk:third-party-jackson-core:2.18.40=dsmForkedTestCompileClas software.amazon.awssdk:third-party-jackson-core:2.19.0=payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:third-party-jackson-core:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:third-party-jackson-core:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:third-party-jackson-core:2.37.3=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:third-party-jackson-core:2.38.2=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:third-party-jackson-dataformat-cbor:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath,latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath,payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:third-party-jackson-dataformat-cbor:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:third-party-jackson-dataformat-cbor:2.37.3=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath -software.amazon.awssdk:utils-lite:2.37.3=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:third-party-jackson-dataformat-cbor:2.38.2=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:utils-lite:2.38.2=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.awssdk:utils:2.18.40=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath software.amazon.awssdk:utils:2.19.0=payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon.awssdk:utils:2.2.0=compileClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:utils:2.20.33=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:utils:2.25.40=latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath -software.amazon.awssdk:utils:2.37.3=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath +software.amazon.awssdk:utils:2.38.2=latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath software.amazon.eventstream:eventstream:1.0.1=dsmForkedTestCompileClasspath,dsmForkedTestRuntimeClasspath,dsmTestCompileClasspath,dsmTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,latestDsmForkedTestCompileClasspath,latestDsmForkedTestRuntimeClasspath,latestDsmTestCompileClasspath,latestDsmTestRuntimeClasspath,latestPayloadTaggingForkedTestCompileClasspath,latestPayloadTaggingForkedTestRuntimeClasspath,latestPayloadTaggingTestCompileClasspath,latestPayloadTaggingTestRuntimeClasspath,payloadTaggingForkedTestCompileClasspath,payloadTaggingForkedTestRuntimeClasspath,payloadTaggingTestCompileClasspath,payloadTaggingTestRuntimeClasspath software.amazon:flow:1.7=compileClasspath,testCompileClasspath,testRuntimeClasspath xml-apis:xml-apis:1.4.01=spotbugs diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sfn-2.0/gradle.lockfile b/dd-java-agent/instrumentation/aws-java/aws-java-sfn-2.0/gradle.lockfile index 6fdd3ccd4e9..b15a68d365e 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sfn-2.0/gradle.lockfile +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sfn-2.0/gradle.lockfile @@ -200,46 +200,46 @@ org.testng:testng:7.5.1=latestDepForkedTestRuntimeClasspath,latestDepTestRuntime org.webjars:jquery:3.5.1=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath org.xmlresolver:xmlresolver:4.4.3=spotbugs software.amazon.awssdk:annotations:2.15.35=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:annotations:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:annotations:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:apache-client:2.15.35=testRuntimeClasspath -software.amazon.awssdk:apache-client:2.37.3=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:apache-client:2.38.2=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:auth:2.15.35=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:auth:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:auth:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-core:2.15.35=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:aws-core:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:aws-core:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-json-protocol:2.15.35=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:aws-json-protocol:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:checksums-spi:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:checksums:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:endpoints-spi:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:http-auth-aws-eventstream:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:http-auth-aws:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:http-auth-spi:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:http-auth:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:aws-json-protocol:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:checksums-spi:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:checksums:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:endpoints-spi:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-aws-eventstream:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-aws:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-spi:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-client-spi:2.15.35=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-client-spi:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:identity-spi:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:json-utils:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-client-spi:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:identity-spi:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:json-utils:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:metrics-spi:2.15.35=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:metrics-spi:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:metrics-spi:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:netty-nio-client:2.15.35=testRuntimeClasspath -software.amazon.awssdk:netty-nio-client:2.37.3=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:netty-nio-client:2.38.2=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:profiles:2.15.35=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:profiles:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:profiles:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:protocol-core:2.15.35=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:protocol-core:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:protocol-core:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:regions:2.15.35=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:regions:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:retries-spi:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:retries:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:regions:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:retries-spi:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:retries:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:sdk-core:2.15.35=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:sdk-core:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:sdk-core:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:sfn:2.15.35=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:sfn:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:third-party-jackson-core:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:utils-lite:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:sfn:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:third-party-jackson-core:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:utils-lite:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:utils:2.15.35=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:utils:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:utils:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.eventstream:eventstream:1.0.1=compileClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath xml-apis:xml-apis:1.4.01=spotbugs empty=spotbugsPlugins diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sns-2.0/gradle.lockfile b/dd-java-agent/instrumentation/aws-java/aws-java-sns-2.0/gradle.lockfile index d8d58e2983e..c7241871947 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sns-2.0/gradle.lockfile +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sns-2.0/gradle.lockfile @@ -193,57 +193,57 @@ org.testng:testng:7.5.1=latestDepForkedTestRuntimeClasspath,latestDepTestRuntime org.webjars:jquery:3.5.1=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath org.xmlresolver:xmlresolver:4.4.3=spotbugs software.amazon.awssdk:annotations:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:annotations:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:annotations:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:apache-client:2.25.40=testRuntimeClasspath -software.amazon.awssdk:apache-client:2.37.3=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:apache-client:2.38.2=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:auth:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:auth:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:auth:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-core:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:aws-core:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:aws-core:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:aws-json-protocol:2.25.40=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:aws-query-protocol:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:aws-query-protocol:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:aws-query-protocol:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:checksums-spi:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:checksums-spi:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:checksums-spi:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:checksums:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:checksums:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:checksums:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:endpoints-spi:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:endpoints-spi:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:http-auth-aws-eventstream:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:endpoints-spi:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-aws-eventstream:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth-aws:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth-aws:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-aws:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth-spi:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth-spi:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth-spi:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-auth:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-auth:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-auth:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:http-client-spi:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:http-client-spi:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:http-client-spi:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:identity-spi:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:identity-spi:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:identity-spi:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:json-utils:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:json-utils:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:json-utils:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:metrics-spi:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:metrics-spi:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:metrics-spi:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:netty-nio-client:2.25.40=testRuntimeClasspath -software.amazon.awssdk:netty-nio-client:2.37.3=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:netty-nio-client:2.38.2=latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:profiles:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:profiles:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:profiles:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:protocol-core:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:protocol-core:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:protocol-core:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:regions:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:regions:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:retries-spi:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:retries:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:regions:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:retries-spi:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:retries:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:sdk-core:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:sdk-core:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:sdk-core:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:sns:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:sns:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:sns:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:sqs:2.25.40=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath software.amazon.awssdk:third-party-jackson-core:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:third-party-jackson-core:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -software.amazon.awssdk:utils-lite:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:third-party-jackson-core:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:utils-lite:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.awssdk:utils:2.25.40=compileClasspath,testCompileClasspath,testRuntimeClasspath -software.amazon.awssdk:utils:2.37.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +software.amazon.awssdk:utils:2.38.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath software.amazon.eventstream:eventstream:1.0.1=compileClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath xml-apis:xml-apis:1.4.01=spotbugs empty=spotbugsPlugins diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sqs-1.0/build.gradle b/dd-java-agent/instrumentation/aws-java/aws-java-sqs-1.0/build.gradle index 03b5fcdcb5c..879ed1cce12 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sqs-1.0/build.gradle +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sqs-1.0/build.gradle @@ -13,8 +13,6 @@ apply from: "$rootDir/gradle/java.gradle" addTestSuiteForDir('latestDepTest', 'test') addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'test') -apply from: "$rootDir/gradle/configure_tests.gradle" - dependencies { compileOnly group: 'com.amazonaws', name: 'aws-java-sdk-sqs', version: '1.11.0' compileOnly group: 'com.amazonaws', name: 'amazon-sqs-java-messaging-lib', version: '1.0.0' diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sqs-2.0/build.gradle b/dd-java-agent/instrumentation/aws-java/aws-java-sqs-2.0/build.gradle index ad8355da2f0..bde3f7ee5e0 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sqs-2.0/build.gradle +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sqs-2.0/build.gradle @@ -14,8 +14,6 @@ apply from: "$rootDir/gradle/java.gradle" addTestSuiteForDir('latestDepTest', 'test') addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'test') -apply from: "$rootDir/gradle/configure_tests.gradle" - dependencies { compileOnly group: 'software.amazon.awssdk', name: 'sqs', version: '2.2.0' compileOnly group: 'com.amazonaws', name: 'amazon-sqs-java-messaging-lib', version: '2.0.0' diff --git a/dd-java-agent/instrumentation/axis2-1.3/build.gradle b/dd-java-agent/instrumentation/axis2-1.3/build.gradle index ec5142724fa..5eea1ed11ea 100644 --- a/dd-java-agent/instrumentation/axis2-1.3/build.gradle +++ b/dd-java-agent/instrumentation/axis2-1.3/build.gradle @@ -1,7 +1,3 @@ -ext { - latestDepTestMinJavaVersionForTests = JavaVersion.VERSION_11 - latestDepForkedTestMinJavaVersionForTests = JavaVersion.VERSION_11 -} muzzle { pass { group = "org.apache.axis2" @@ -14,6 +10,19 @@ apply from: "$rootDir/gradle/java.gradle" addTestSuiteForDir('latestDepTest', 'test') addTestSuiteForDir('latestDepForkedTest', 'test') + +tasks.named("latestDepTest", Test) { + testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_11 + } +} + +tasks.named("latestDepForkedTest", Test) { + testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_11 + } +} + configurations.configureEach { // the version used by axis2 isn't available in a public repository - we don't need it, so exclude it exclude group: 'org.apache.woden', module: 'woden' diff --git a/dd-java-agent/instrumentation/build.gradle b/dd-java-agent/instrumentation/build.gradle index 1702ee7c8f3..b8e663d5d15 100644 --- a/dd-java-agent/instrumentation/build.gradle +++ b/dd-java-agent/instrumentation/build.gradle @@ -33,12 +33,16 @@ subprojects { Project subProj -> if (!plugins.hasPlugin("java")) { return } - String jdkCompile = null - if (project.hasProperty('minJavaVersionForTests') && project.getProperty('minJavaVersionForTests') != JavaVersion.VERSION_1_8) { - def version = JavaVersion.toVersion(project.getProperty('minJavaVersionForTests')) - def name = "java$version.majorVersion" - jdkCompile = "main_${name}Implementation" - } + + // Configures base dependencies for additional sourceSet + configurations + .matching { it.name.matches("${SourceSet.MAIN_SOURCE_SET_NAME}_java\\d+${JavaPlugin.IMPLEMENTATION_CONFIGURATION_NAME.capitalize()}") } + .configureEach { + it.dependencies.add(project.dependencyFactory.create(project(':dd-trace-api'))) + it.dependencies.add(project.dependencyFactory.create(project(':dd-java-agent:agent-tooling'))) + it.dependencies.addLater(libs.bytebuddy) + } + configurations.named('muzzleBootstrap') { exclude group: 'org.snakeyaml', module: 'snakeyaml-engine' // we vendor this in the agent jar } @@ -47,11 +51,6 @@ subprojects { Project subProj -> implementation project(':dd-trace-api') implementation project(':dd-java-agent:agent-tooling') implementation libs.bytebuddy - if (jdkCompile) { - "$jdkCompile" project(':dd-trace-api') - "$jdkCompile" project(':dd-java-agent:agent-tooling') - "$jdkCompile" libs.bytebuddy - } annotationProcessor project(':dd-java-agent:instrumentation-annotation-processor') annotationProcessor libs.autoservice.processor diff --git a/dd-java-agent/instrumentation/classloading/jboss-testing/build.gradle b/dd-java-agent/instrumentation/classloading/jboss-testing/build.gradle index dfc50f96c15..a3010be54ba 100644 --- a/dd-java-agent/instrumentation/classloading/jboss-testing/build.gradle +++ b/dd-java-agent/instrumentation/classloading/jboss-testing/build.gradle @@ -1,9 +1,10 @@ -ext { +apply from: "$rootDir/gradle/java.gradle" + +testJvmConstraints { // TODO Java 17: This version of jboss-modules doesn't support Java 17 // __redirected.__SAXParserFactory can't access com.sun.org.apache.xerces.internal.jaxp - maxJavaVersionForTests = JavaVersion.VERSION_15 + maxJavaVersion = JavaVersion.VERSION_15 } -apply from: "$rootDir/gradle/java.gradle" dependencies { testImplementation project(':dd-java-agent:instrumentation:classloading') diff --git a/dd-java-agent/instrumentation/cucumber/build.gradle b/dd-java-agent/instrumentation/cucumber/build.gradle index 21ae5de3546..4258244fb64 100644 --- a/dd-java-agent/instrumentation/cucumber/build.gradle +++ b/dd-java-agent/instrumentation/cucumber/build.gradle @@ -1,3 +1,5 @@ +ext.testingInstrumentation = true + apply from: "$rootDir/gradle/java.gradle" muzzle { diff --git a/dd-java-agent/instrumentation/cxf-2.1/build.gradle b/dd-java-agent/instrumentation/cxf-2.1/build.gradle index eb44a71c5eb..fe38238428e 100644 --- a/dd-java-agent/instrumentation/cxf-2.1/build.gradle +++ b/dd-java-agent/instrumentation/cxf-2.1/build.gradle @@ -1,7 +1,3 @@ -ext { - cxf3LatestDepTestMinJavaVersionForTests = JavaVersion.VERSION_11 - latestDepTestMinJavaVersionForTests = JavaVersion.VERSION_17 -} muzzle { pass { group = "org.apache.cxf" @@ -23,6 +19,18 @@ apply from: "${rootDir}/gradle/java.gradle" addTestSuite('latestDepTest') addTestSuiteForDir('cxf3LatestDepTest', 'test') +tasks.named("cxf3LatestDepTest", Test) { + testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_11 + } +} + +tasks.named("latestDepTest", Test) { + testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_17 + } +} + tasks.named("compileCxf3LatestDepTestJava", JavaCompile) { configureCompiler(it, 11, JavaVersion.VERSION_1_8) } diff --git a/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-3.0/build.gradle b/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-3.0/build.gradle index 13d79d20ed8..b73a58600ba 100644 --- a/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-3.0/build.gradle +++ b/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-3.0/build.gradle @@ -1,13 +1,8 @@ -// Set properties before any plugins get loaded ext { - // Test use Cassandra 3 which requires Java 8. (Currently incompatible with Java 9.) - maxJavaVersionForTests = JavaVersion.VERSION_1_8 cassandraDriverTestVersions = "[3.0,4.0)" } - muzzle { - pass { group = "com.datastax.cassandra" module = "cassandra-driver-core" @@ -43,6 +38,12 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" + +testJvmConstraints { + // Test use Cassandra 3 which requires Java 8. (Currently incompatible with Java 9.) + maxJavaVersion = JavaVersion.VERSION_1_8 +} + addTestSuiteForDir('latestDepTest', 'test') dependencies { diff --git a/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-3.8/build.gradle b/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-3.8/build.gradle index fbdabff507c..6a120339d29 100644 --- a/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-3.8/build.gradle +++ b/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-3.8/build.gradle @@ -1,13 +1,8 @@ -// Set properties before any plugins get loaded ext { - // Test use Cassandra 3 which requires Java 8. (Currently incompatible with Java 9.) - maxJavaVersionForTests = JavaVersion.VERSION_1_8 cassandraDriverTestVersions = "[3.8,4.0)" } - muzzle { - pass { group = "com.datastax.cassandra" module = "cassandra-driver-core" @@ -19,6 +14,11 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +testJvmConstraints { + // Test use Cassandra 3 which requires Java 8. (Currently incompatible with Java 9.) + maxJavaVersion = JavaVersion.VERSION_1_8 +} + addTestSuiteForDir('latestDepTest', 'test') dependencies { diff --git a/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-4.0/build.gradle b/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-4.0/build.gradle index d4a2d50f0ec..540070f1560 100644 --- a/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-4.0/build.gradle +++ b/dd-java-agent/instrumentation/datastax-cassandra/datastax-cassandra-4.0/build.gradle @@ -1,9 +1,3 @@ -ext { - // TODO Java 17: The embedded cassandra deadlocks on start every time on Java 17 - // This can be changed to use test-containers - maxJavaVersionForTests = JavaVersion.VERSION_15 -} - muzzle { pass { group = "com.datastax.oss" @@ -15,6 +9,12 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +testJvmConstraints { + // TODO Java 17: The embedded cassandra deadlocks on start every time on Java 17 + // This can be changed to use test-containers + maxJavaVersion = JavaVersion.VERSION_15 +} + addTestSuiteForDir('latestDepTest', 'test') dependencies { diff --git a/dd-java-agent/instrumentation/elasticsearch/rest-5/build.gradle b/dd-java-agent/instrumentation/elasticsearch/rest-5/build.gradle index 3d9226f41f2..2b2b8ed6202 100644 --- a/dd-java-agent/instrumentation/elasticsearch/rest-5/build.gradle +++ b/dd-java-agent/instrumentation/elasticsearch/rest-5/build.gradle @@ -1,10 +1,3 @@ -// Set properties before any plugins get loaded -ext { - // TODO Java 17: The embedded elastic search server doesn't work on Java 17 - // This can be changed to use test-containers - maxJavaVersionForTests = JavaVersion.VERSION_15 -} - muzzle { pass { group = "org.elasticsearch.client" @@ -24,6 +17,12 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +testJvmConstraints { + // TODO Java 17: The embedded elastic search server doesn't work on Java 17 + // This can be changed to use test-containers + maxJavaVersion = JavaVersion.VERSION_15 +} + addTestSuite('latestDepTest') dependencies { diff --git a/dd-java-agent/instrumentation/elasticsearch/transport-2/build.gradle b/dd-java-agent/instrumentation/elasticsearch/transport-2/build.gradle index 7d48361480d..1e164843304 100644 --- a/dd-java-agent/instrumentation/elasticsearch/transport-2/build.gradle +++ b/dd-java-agent/instrumentation/elasticsearch/transport-2/build.gradle @@ -1,8 +1,3 @@ -// Set properties before any plugins get loaded -ext { - maxJavaVersionForTests = JavaVersion.VERSION_1_8 -} - muzzle { pass { group = "org.elasticsearch" @@ -15,6 +10,10 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +testJvmConstraints { + maxJavaVersion = JavaVersion.VERSION_1_8 +} + addTestSuiteForDir('latestDepTest', 'latestDepTest') dependencies { diff --git a/dd-java-agent/instrumentation/elasticsearch/transport-5/build.gradle b/dd-java-agent/instrumentation/elasticsearch/transport-5/build.gradle index 46552c49777..d005ef4fc19 100644 --- a/dd-java-agent/instrumentation/elasticsearch/transport-5/build.gradle +++ b/dd-java-agent/instrumentation/elasticsearch/transport-5/build.gradle @@ -1,10 +1,3 @@ -// Set properties before any plugins get loaded -ext { - // TODO Java 17: The embedded elastic search server doesn't work on Java 17 - // This can be changed to use test-containers - maxJavaVersionForTests = JavaVersion.VERSION_15 -} - muzzle { pass { group = "org.elasticsearch.client" @@ -24,6 +17,12 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +testJvmConstraints { + // TODO Java 17: The embedded elastic search server doesn't work on Java 17 + // This can be changed to use test-containers + maxJavaVersion = JavaVersion.VERSION_15 +} + dependencies { compileOnly group: 'org.elasticsearch.client', name: 'transport', version: '5.0.0' diff --git a/dd-java-agent/instrumentation/exception-profiling/build.gradle b/dd-java-agent/instrumentation/exception-profiling/build.gradle index 02eee944f48..aea466f6470 100644 --- a/dd-java-agent/instrumentation/exception-profiling/build.gradle +++ b/dd-java-agent/instrumentation/exception-profiling/build.gradle @@ -1,15 +1,20 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 +apply from: "$rootDir/gradle/java.gradle" +apply plugin: "idea" + +tracerJava { + addSourceSetFor(JavaVersion.VERSION_11) { + // By default tests with be compiled for `minJavaVersion` version, + // but in this case we would like to avoid this since we would like to run with ZULU8 + applyForTestSources = false + } +} + +testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_11 // Zulu has backported profiling support forceJdk = ['ZULU8'] - // By default tests with be compiled for `minJavaVersionForTests` version, - // but in this case we would like to avoid this since we would like to run with ZULU8 - skipSettingTestJavaVersion = true } -apply from: "$rootDir/gradle/java.gradle" -apply plugin: "idea" - dependencies { testImplementation libs.forbiddenapis testImplementation libs.bundles.junit5 diff --git a/dd-java-agent/instrumentation/glassfish-3.0/build.gradle b/dd-java-agent/instrumentation/glassfish-3.0/build.gradle index 59bb2785a5d..d0b8809e048 100644 --- a/dd-java-agent/instrumentation/glassfish-3.0/build.gradle +++ b/dd-java-agent/instrumentation/glassfish-3.0/build.gradle @@ -1,7 +1,3 @@ -ext { - maxJavaVersionForTests = JavaVersion.VERSION_1_8 -} - muzzle { pass { group = 'org.glassfish.main.extras' @@ -14,6 +10,10 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +testJvmConstraints { + maxJavaVersion = JavaVersion.VERSION_1_8 +} + addTestSuiteForDir('latestDepTest', 'test') dependencies { diff --git a/dd-java-agent/instrumentation/graal/native-image/build.gradle b/dd-java-agent/instrumentation/graal/native-image/build.gradle index 8ec10a8b617..00b23d34d99 100644 --- a/dd-java-agent/instrumentation/graal/native-image/build.gradle +++ b/dd-java-agent/instrumentation/graal/native-image/build.gradle @@ -1,7 +1,3 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 -} - muzzle { pass { group = "org.graalvm.nativeimage" @@ -13,6 +9,10 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" apply plugin: "idea" +tracerJava { + addSourceSetFor(JavaVersion.VERSION_11) +} + ["compileMain_java11Java", "compileTestJava"].each { tasks.named(it, JavaCompile) { configureCompiler(it, 11, JavaVersion.VERSION_11, "Needs access to module jdk.internal.vm.ci") diff --git a/dd-java-agent/instrumentation/graal/native-image/src/main/java/datadog/trace/instrumentation/graal/nativeimage/NativeImageGeneratorRunnerInstrumentation.java b/dd-java-agent/instrumentation/graal/native-image/src/main/java/datadog/trace/instrumentation/graal/nativeimage/NativeImageGeneratorRunnerInstrumentation.java index 00d9cfcf863..904a1260842 100644 --- a/dd-java-agent/instrumentation/graal/native-image/src/main/java/datadog/trace/instrumentation/graal/nativeimage/NativeImageGeneratorRunnerInstrumentation.java +++ b/dd-java-agent/instrumentation/graal/native-image/src/main/java/datadog/trace/instrumentation/graal/nativeimage/NativeImageGeneratorRunnerInstrumentation.java @@ -84,6 +84,8 @@ public static void onEnter(@Advice.Argument(value = 0, readOnly = false) String[ + "datadog.trace.api.ConfigDefaults:build_time," + "datadog.trace.api.ConfigOrigin:build_time," + "datadog.trace.api.ConfigSetting:build_time," + + "datadog.trace.api.config.OtlpConfig$Protocol:build_time," + + "datadog.trace.api.config.OtlpConfig$Temporality:build_time," + "datadog.trace.api.EventTracker:build_time," + "datadog.trace.api.InstrumenterConfig:build_time," + "datadog.trace.api.Functions:build_time," diff --git a/dd-java-agent/instrumentation/graphql-java/graphql-java-20.0/build.gradle b/dd-java-agent/instrumentation/graphql-java/graphql-java-20.0/build.gradle index 8cba6df1444..9d5de093a22 100644 --- a/dd-java-agent/instrumentation/graphql-java/graphql-java-20.0/build.gradle +++ b/dd-java-agent/instrumentation/graphql-java/graphql-java-20.0/build.gradle @@ -1,9 +1,3 @@ -ext { - latestDepTestMinJavaVersionForTests = JavaVersion.VERSION_11 - latestDepForkedTestMinJavaVersionForTests = JavaVersion.VERSION_11 - graphql21LatestDepTestMinJavaVersionForTests = JavaVersion.VERSION_11 - graphql21LatestDepForkedTestMinJavaVersionForTests = JavaVersion.VERSION_11 -} // there are a lot of invalid version using dates (i.e. com.graphql-java-graphql-java-2018-06-04T04-23-07) // so we limit by chunks muzzle { @@ -67,3 +61,16 @@ dependencies { configureCompiler(it, 11) } } + +tasks.matching { + it.name in [ + "latestDepTest", + "latestDepForkedTest", + "graphql21LatestDepTest", + "graphql21LatestDepForkedTest" + ] +}.configureEach { + testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_11 + } +} diff --git a/dd-java-agent/instrumentation/ignite-2.0/build.gradle b/dd-java-agent/instrumentation/ignite-2.0/build.gradle index 69be7f06472..fa0b19807a4 100644 --- a/dd-java-agent/instrumentation/ignite-2.0/build.gradle +++ b/dd-java-agent/instrumentation/ignite-2.0/build.gradle @@ -1,12 +1,3 @@ -ext { - // See https://ignite.apache.org/docs/latest/quick-start/java#running-ignite-with-java-11-or-later - // FIXME: Because of this condition, tests only run in Java 8, and latestDepTest never run, as they require Java 11+. - maxJavaVersionForTests = JavaVersion.VERSION_1_8 - // ignite 2.17.0+ requires Java 11+ - latestDepTestMinJavaVersionForTests = JavaVersion.VERSION_11 - latestDepForkedTestMinJavaVersionForTests = JavaVersion.VERSION_11 -} - muzzle { pass { group = 'org.apache.ignite' @@ -24,6 +15,12 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +testJvmConstraints { + // See https://ignite.apache.org/docs/latest/quick-start/java#running-ignite-with-java-11-or-later + // FIXME: Because of this condition, tests only run in Java 8, and latestDepTest never run, as they require Java 11+. + maxJavaVersion = JavaVersion.VERSION_1_8 +} + addTestSuiteForDir('latestDepTest', 'test') addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'test') // ignite 2.16.0 latest version compatible with Java 8 @@ -43,8 +40,17 @@ dependencies { latestDepTestImplementation group: 'org.apache.ignite', name: 'ignite-indexing', version: '2.+' } -for (task in ['compileLatestDepTestGroovy', 'compileLatestDepForkedTestGroovy']) { - tasks.named(task, GroovyCompile) { +for (taskName in ['compileLatestDepTestGroovy', 'compileLatestDepForkedTestGroovy']) { + tasks.named(taskName, GroovyCompile) { configureCompiler(it, 11) } } + +for (taskName in ['latestDepTest', 'latestDepForkedTest']) { + tasks.named(taskName, Test) { + testJvmConstraints { + // ignite 2.17.0+ requires Java 11+ + minJavaVersion = JavaVersion.VERSION_11 + } + } +} diff --git a/dd-java-agent/instrumentation/jakarta-jms/build.gradle b/dd-java-agent/instrumentation/jakarta-jms/build.gradle index a86e2f3750c..1652d8d312b 100644 --- a/dd-java-agent/instrumentation/jakarta-jms/build.gradle +++ b/dd-java-agent/instrumentation/jakarta-jms/build.gradle @@ -1,7 +1,3 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_17 -} - muzzle { pass { name = "jakarta.jms" @@ -14,7 +10,10 @@ muzzle { } apply from: "$rootDir/gradle/java.gradle" -apply from: "$rootDir/gradle/configure_tests.gradle" + +testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_17 +} repositories { maven { diff --git a/dd-java-agent/instrumentation/java/java-concurrent/java-concurrent-21.0/build.gradle b/dd-java-agent/instrumentation/java/java-concurrent/java-concurrent-21.0/build.gradle index ceb9d380312..3fcbb72c79a 100644 --- a/dd-java-agent/instrumentation/java/java-concurrent/java-concurrent-21.0/build.gradle +++ b/dd-java-agent/instrumentation/java/java-concurrent/java-concurrent-21.0/build.gradle @@ -1,15 +1,15 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_21 - // Structured concurrency is a preview feature in Java 21. Methods (e.g. ShutdownOnFailure) used in this instrumentation test are no longer available in Java 25, so we set the max version to 24. - // See: https://download.java.net/java/early_access/loom/docs/api/java.base/java/util/concurrent/StructuredTaskScope.html - maxJavaVersionForTests = JavaVersion.VERSION_24 -} - apply from: "$rootDir/gradle/java.gradle" // Use slf4j-simple as default; logback has a high chance of getting stuck in a deadlock on CI. apply from: "$rootDir/gradle/slf4j-simple.gradle" apply plugin: 'idea' +testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_21 + // Structured concurrency is a preview feature in Java 21. Methods (e.g. ShutdownOnFailure) used in this instrumentation test are no longer available in Java 25, so we set the max version to 24. + // See: https://download.java.net/java/early_access/loom/docs/api/java.base/java/util/concurrent/StructuredTaskScope.html + maxJavaVersion = JavaVersion.VERSION_24 +} + muzzle { pass { coreJdk('21') diff --git a/dd-java-agent/instrumentation/java/java-lang/java-lang-11.0/build.gradle b/dd-java-agent/instrumentation/java/java-lang/java-lang-11.0/build.gradle index d36b8c37d13..53873c28f86 100644 --- a/dd-java-agent/instrumentation/java/java-lang/java-lang-11.0/build.gradle +++ b/dd-java-agent/instrumentation/java/java-lang/java-lang-11.0/build.gradle @@ -2,13 +2,13 @@ plugins { id 'idea' } -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 -} - apply from: "$rootDir/gradle/java.gradle" apply plugin: 'call-site-instrumentation' +testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_11 +} + muzzle { pass { coreJdk() diff --git a/dd-java-agent/instrumentation/java/java-lang/java-lang-15.0/build.gradle b/dd-java-agent/instrumentation/java/java-lang/java-lang-15.0/build.gradle index 6324aa162dd..73a218b252a 100644 --- a/dd-java-agent/instrumentation/java/java-lang/java-lang-15.0/build.gradle +++ b/dd-java-agent/instrumentation/java/java-lang/java-lang-15.0/build.gradle @@ -2,13 +2,13 @@ plugins { id 'idea' } -ext { - minJavaVersionForTests = JavaVersion.VERSION_15 -} - apply from: "$rootDir/gradle/java.gradle" apply plugin: 'call-site-instrumentation' +testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_15 +} + muzzle { pass { coreJdk() diff --git a/dd-java-agent/instrumentation/java/java-lang/java-lang-17.0/build.gradle b/dd-java-agent/instrumentation/java/java-lang/java-lang-17.0/build.gradle index 26a333ab320..e2c2cfab886 100644 --- a/dd-java-agent/instrumentation/java/java-lang/java-lang-17.0/build.gradle +++ b/dd-java-agent/instrumentation/java/java-lang/java-lang-17.0/build.gradle @@ -2,13 +2,13 @@ plugins { id 'idea' } -ext { - minJavaVersionForTests = JavaVersion.VERSION_17 -} - apply from: "$rootDir/gradle/java.gradle" apply plugin: 'call-site-instrumentation' +testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_17 +} + muzzle { pass { coreJdk() diff --git a/dd-java-agent/instrumentation/java/java-lang/java-lang-9.0/build.gradle b/dd-java-agent/instrumentation/java/java-lang/java-lang-9.0/build.gradle index 697ae94d56f..b2322afb210 100644 --- a/dd-java-agent/instrumentation/java/java-lang/java-lang-9.0/build.gradle +++ b/dd-java-agent/instrumentation/java/java-lang/java-lang-9.0/build.gradle @@ -2,13 +2,13 @@ plugins { id 'idea' } -ext { - minJavaVersionForTests = JavaVersion.VERSION_1_9 -} - apply from: "$rootDir/gradle/java.gradle" apply plugin: 'call-site-instrumentation' +testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_1_9 +} + muzzle { pass { coreJdk() diff --git a/dd-java-agent/instrumentation/java/java-net/java-net-11.0/build.gradle b/dd-java-agent/instrumentation/java/java-net/java-net-11.0/build.gradle index 16cac45bf41..5af9c672e94 100644 --- a/dd-java-agent/instrumentation/java/java-net/java-net-11.0/build.gradle +++ b/dd-java-agent/instrumentation/java/java-net/java-net-11.0/build.gradle @@ -1,7 +1,3 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 -} - muzzle { pass { coreJdk('11') @@ -11,6 +7,9 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" apply plugin: "idea" +tracerJava { + addSourceSetFor(JavaVersion.VERSION_11) +} tasks.named("compileMain_java11Java", JavaCompile) { configureCompiler(it, 11, JavaVersion.VERSION_11) diff --git a/dd-java-agent/instrumentation/java/java-nio-1.8/build.gradle b/dd-java-agent/instrumentation/java/java-nio-1.8/build.gradle index 3646b9f5d83..95ad5f62575 100644 --- a/dd-java-agent/instrumentation/java/java-nio-1.8/build.gradle +++ b/dd-java-agent/instrumentation/java/java-nio-1.8/build.gradle @@ -1,7 +1,3 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 - excludeJdk = ['SEMERU11', 'SEMERU17'] -} muzzle { pass { coreJdk() @@ -11,6 +7,15 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" apply plugin: "idea" +tracerJava { + addSourceSetFor(JavaVersion.VERSION_11) +} + +testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_11 + excludeJdk = ['SEMERU11', 'SEMERU17'] +} + // Must use Java 11 to build JFR enabled code - there is no JFR in OpenJDK 8 (revisit once JFR in Java 8 is available) ["compileMain_java11Java", "compileTestJava"].each { name -> tasks.named(name, JavaCompile) { diff --git a/dd-java-agent/instrumentation/jdbc/build.gradle b/dd-java-agent/instrumentation/jdbc/build.gradle index 9c1d1d2711e..cfe3404350d 100644 --- a/dd-java-agent/instrumentation/jdbc/build.gradle +++ b/dd-java-agent/instrumentation/jdbc/build.gradle @@ -3,10 +3,6 @@ plugins { id 'me.champeau.jmh' } -ext { - latestDepJava11TestMinJavaVersionForTests = JavaVersion.VERSION_11 -} - muzzle { pass { coreJdk() @@ -99,3 +95,10 @@ tasks.withType(GroovyCompile).configureEach { tasks.withType(Test).configureEach { usesService(testcontainersLimit) } + +tasks.named("latestDepJava11Test", Test) { + testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_11 + } +} + diff --git a/dd-java-agent/instrumentation/jersey/build.gradle b/dd-java-agent/instrumentation/jersey/build.gradle index 94ff20d1153..84880a64e37 100644 --- a/dd-java-agent/instrumentation/jersey/build.gradle +++ b/dd-java-agent/instrumentation/jersey/build.gradle @@ -1,9 +1,3 @@ -if (project.hasProperty('testJvm')) { - ext { - minJavaVersionForTests = JavaVersion.VERSION_11 - } -} - muzzle { pass { group = 'org.glassfish.jersey.core' @@ -15,6 +9,10 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_11 +} + // there are tests with jersey2 and grizzly on the grizzly-http-2.3.20 module addTestSuiteForDir('jersey2JettyTest', 'jersey2JettyTest') addTestSuiteForDir('jersey3JettyTest', 'jersey3JettyTest') diff --git a/dd-java-agent/instrumentation/jetty/jetty-client/jetty-client-10.0/build.gradle b/dd-java-agent/instrumentation/jetty/jetty-client/jetty-client-10.0/build.gradle index 316435e75a2..00ddd8c272a 100644 --- a/dd-java-agent/instrumentation/jetty/jetty-client/jetty-client-10.0/build.gradle +++ b/dd-java-agent/instrumentation/jetty/jetty-client/jetty-client-10.0/build.gradle @@ -1,6 +1,3 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 -} muzzle { pass { group = "org.eclipse.jetty" @@ -23,6 +20,10 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +tracerJava { + addSourceSetFor(JavaVersion.VERSION_11) +} + addTestSuiteForDir('latestDepTest', 'test') addTestSuiteForDir('jetty11Test', 'test') addTestSuiteForDir('jetty10LatestDepTest', 'test') diff --git a/dd-java-agent/instrumentation/jetty/jetty-client/jetty-client-12.0/build.gradle b/dd-java-agent/instrumentation/jetty/jetty-client/jetty-client-12.0/build.gradle index 7e9852f8d7b..bcb1bd91020 100644 --- a/dd-java-agent/instrumentation/jetty/jetty-client/jetty-client-12.0/build.gradle +++ b/dd-java-agent/instrumentation/jetty/jetty-client/jetty-client-12.0/build.gradle @@ -1,6 +1,3 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_17 -} muzzle { pass { group = "org.eclipse.jetty" @@ -13,6 +10,10 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +tracerJava { + addSourceSetFor(JavaVersion.VERSION_17) +} + addTestSuiteForDir('latestDepTest', 'test') tasks.named("compileMain_java17Java", JavaCompile) { diff --git a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-10.0/build.gradle b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-10.0/build.gradle index 55e23c6fb6d..171fe756e58 100644 --- a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-10.0/build.gradle +++ b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-10.0/build.gradle @@ -1,7 +1,3 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 -} - muzzle { pass { name = "10_series" @@ -34,6 +30,10 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" apply plugin: "idea" +tracerJava { + addSourceSetFor(JavaVersion.VERSION_11) +} + addTestSuiteForDir("latestDepTest", "test") addTestSuiteExtendingForDir("latestDepForkedTest", "latestDepTest", "test") diff --git a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-11.0/build.gradle b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-11.0/build.gradle index 0de01c779fa..111367c055c 100644 --- a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-11.0/build.gradle +++ b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-11.0/build.gradle @@ -1,7 +1,3 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 -} - muzzle { pass { group = "org.eclipse.jetty" @@ -14,6 +10,10 @@ apply plugin: 'java-test-fixtures' apply from: "$rootDir/gradle/java.gradle" apply plugin: "idea" +tracerJava { + addSourceSetFor(JavaVersion.VERSION_11) +} + addTestSuiteForDir('latestDepTest', 'test') addTestSuiteForDir('latestDepForkedTest', 'test') diff --git a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-12.0/build.gradle b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-12.0/build.gradle index c7271771f4c..c7d83b3eac2 100644 --- a/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-12.0/build.gradle +++ b/dd-java-agent/instrumentation/jetty/jetty-server/jetty-server-12.0/build.gradle @@ -1,7 +1,3 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_17 -} - muzzle { pass { group = "org.eclipse.jetty" @@ -19,6 +15,10 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +tracerJava { + addSourceSetFor(JavaVersion.VERSION_17) +} + addTestSuiteForDir('latestDepTest', 'test') // ee8 diff --git a/dd-java-agent/instrumentation/jms/build.gradle b/dd-java-agent/instrumentation/jms/build.gradle index d8f1f40fbdb..717ef42380d 100644 --- a/dd-java-agent/instrumentation/jms/build.gradle +++ b/dd-java-agent/instrumentation/jms/build.gradle @@ -26,8 +26,6 @@ repositories { addTestSuite('latestDepTest') addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'test') -apply from: "$rootDir/gradle/configure_tests.gradle" - tasks.named("latestDepTest", Test) { finalizedBy 'latestDepForkedTest' } diff --git a/dd-java-agent/instrumentation/junit/junit-4.10/build.gradle b/dd-java-agent/instrumentation/junit/junit-4.10/build.gradle index f8d1abd9be1..99b4ef2e46c 100644 --- a/dd-java-agent/instrumentation/junit/junit-4.10/build.gradle +++ b/dd-java-agent/instrumentation/junit/junit-4.10/build.gradle @@ -5,6 +5,8 @@ plugins { id 'org.jetbrains.kotlin.jvm' } +ext.testingInstrumentation = true + apply from: "$rootDir/gradle/java.gradle" apply from: "$rootDir/gradle/test-with-kotlin.gradle" diff --git a/dd-java-agent/instrumentation/junit/junit-4.10/cucumber-junit-4/build.gradle b/dd-java-agent/instrumentation/junit/junit-4.10/cucumber-junit-4/build.gradle index 0e528111889..f5dc3d7ab87 100644 --- a/dd-java-agent/instrumentation/junit/junit-4.10/cucumber-junit-4/build.gradle +++ b/dd-java-agent/instrumentation/junit/junit-4.10/cucumber-junit-4/build.gradle @@ -1,3 +1,5 @@ +ext.testingInstrumentation = true + apply from: "$rootDir/gradle/java.gradle" muzzle { diff --git a/dd-java-agent/instrumentation/junit/junit-4.10/junit-4.13/build.gradle b/dd-java-agent/instrumentation/junit/junit-4.10/junit-4.13/build.gradle index 7c176ad7fe3..ab2434265ac 100644 --- a/dd-java-agent/instrumentation/junit/junit-4.10/junit-4.13/build.gradle +++ b/dd-java-agent/instrumentation/junit/junit-4.10/junit-4.13/build.gradle @@ -1,3 +1,5 @@ +ext.testingInstrumentation = true + apply from: "$rootDir/gradle/java.gradle" muzzle { diff --git a/dd-java-agent/instrumentation/junit/junit-4.10/munit-junit-4/build.gradle b/dd-java-agent/instrumentation/junit/junit-4.10/munit-junit-4/build.gradle index 5f3a1fd306e..f5dc8befbc2 100644 --- a/dd-java-agent/instrumentation/junit/junit-4.10/munit-junit-4/build.gradle +++ b/dd-java-agent/instrumentation/junit/junit-4.10/munit-junit-4/build.gradle @@ -1,3 +1,5 @@ +ext.testingInstrumentation = true + apply from: "$rootDir/gradle/java.gradle" apply plugin: 'scala' diff --git a/dd-java-agent/instrumentation/junit/junit-5.3/build.gradle b/dd-java-agent/instrumentation/junit/junit-5.3/build.gradle index fbffbe3af73..f5824c1a5d2 100644 --- a/dd-java-agent/instrumentation/junit/junit-5.3/build.gradle +++ b/dd-java-agent/instrumentation/junit/junit-5.3/build.gradle @@ -1,3 +1,5 @@ +ext.testingInstrumentation = true + apply from: "$rootDir/gradle/java.gradle" // JUnit5 5.3.0+ version is needed because of the fix in the TestInheritance test suite names. @@ -22,10 +24,6 @@ muzzle { } } -ext { - latestDepTestMinJavaVersionForTests = JavaVersion.VERSION_17 -} - addTestSuiteForDir('v513Test', 'test') addTestSuiteForDir('latest5Test', 'test') addTestSuiteForDir('latestDepTest', 'test') @@ -66,3 +64,9 @@ configurations.matching { it.name.startsWith('test') }.configureEach { tasks.named("compileLatestDepTestJava", JavaCompile) { configureCompiler(it, 17, JavaVersion.VERSION_1_8) } + +tasks.named("latestDepTest", Test) { + testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_17 + } +} diff --git a/dd-java-agent/instrumentation/junit/junit-5.3/cucumber-junit-5/build.gradle b/dd-java-agent/instrumentation/junit/junit-5.3/cucumber-junit-5/build.gradle index 344da340e60..c12695f5eba 100644 --- a/dd-java-agent/instrumentation/junit/junit-5.3/cucumber-junit-5/build.gradle +++ b/dd-java-agent/instrumentation/junit/junit-5.3/cucumber-junit-5/build.gradle @@ -1,3 +1,5 @@ +ext.testingInstrumentation = true + apply from: "$rootDir/gradle/java.gradle" muzzle { diff --git a/dd-java-agent/instrumentation/junit/junit-5.3/junit-5.8/build.gradle b/dd-java-agent/instrumentation/junit/junit-5.3/junit-5.8/build.gradle index 4129d7ce857..de53979cab4 100644 --- a/dd-java-agent/instrumentation/junit/junit-5.3/junit-5.8/build.gradle +++ b/dd-java-agent/instrumentation/junit/junit-5.3/junit-5.8/build.gradle @@ -1,3 +1,5 @@ +ext.testingInstrumentation = true + apply from: "$rootDir/gradle/java.gradle" def jupiterVersion = '5.8.0' @@ -23,10 +25,6 @@ muzzle { } } -ext { - latestDepTestMinJavaVersionForTests = JavaVersion.VERSION_17 -} - addTestSuiteForDir('latestDepTest', 'test') dependencies { @@ -61,3 +59,8 @@ tasks.named("compileLatestDepTestJava", JavaCompile) { configureCompiler(it, 17, JavaVersion.VERSION_1_8) } +tasks.named("latestDepTest", Test) { + testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_17 + } +} diff --git a/dd-java-agent/instrumentation/junit/junit-5.3/spock-junit-5/build.gradle b/dd-java-agent/instrumentation/junit/junit-5.3/spock-junit-5/build.gradle index 13c27b71fd3..7e0a67c2b9c 100644 --- a/dd-java-agent/instrumentation/junit/junit-5.3/spock-junit-5/build.gradle +++ b/dd-java-agent/instrumentation/junit/junit-5.3/spock-junit-5/build.gradle @@ -1,3 +1,5 @@ +ext.testingInstrumentation = true + apply from: "$rootDir/gradle/java.gradle" def spockGroovyVersion = '3.0' diff --git a/dd-java-agent/instrumentation/kafka/kafka-clients-0.11/build.gradle b/dd-java-agent/instrumentation/kafka/kafka-clients-0.11/build.gradle index b23bf4c1808..5a301dd5b82 100644 --- a/dd-java-agent/instrumentation/kafka/kafka-clients-0.11/build.gradle +++ b/dd-java-agent/instrumentation/kafka/kafka-clients-0.11/build.gradle @@ -20,8 +20,6 @@ apply from: "$rootDir/gradle/java.gradle" addTestSuite('latestDepTest') addTestSuite('iastLatestDepTest3') -apply from: "$rootDir/gradle/configure_tests.gradle" - dependencies { compileOnly group: 'org.apache.kafka', name: 'kafka-clients', version: '0.11.0.0' implementation project(':dd-java-agent:instrumentation:kafka:kafka-common') @@ -39,7 +37,6 @@ dependencies { testRuntimeOnly project(':dd-java-agent:instrumentation:reactive-streams') testImplementation project(':dd-java-agent:agent-iast:iast-test-fixtures') - // IAST testing dependencies testRuntimeOnly project(':dd-java-agent:instrumentation:iast-instrumenter') testRuntimeOnly project(':dd-java-agent:instrumentation:java:java-lang:java-lang-1.8') diff --git a/dd-java-agent/instrumentation/kafka/kafka-clients-3.8/build.gradle b/dd-java-agent/instrumentation/kafka/kafka-clients-3.8/build.gradle index d0e4201049a..29adf1431ee 100644 --- a/dd-java-agent/instrumentation/kafka/kafka-clients-3.8/build.gradle +++ b/dd-java-agent/instrumentation/kafka/kafka-clients-3.8/build.gradle @@ -1,7 +1,3 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_17 -} - muzzle { pass { group = "org.apache.kafka" @@ -14,6 +10,10 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +tracerJava { + addSourceSetFor(JavaVersion.VERSION_17) +} + addTestSuiteForDir('latestDepTest', 'test') addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'test') diff --git a/dd-java-agent/instrumentation/karate/build.gradle b/dd-java-agent/instrumentation/karate/build.gradle index 3b0ce1a8d97..97b7131df7f 100644 --- a/dd-java-agent/instrumentation/karate/build.gradle +++ b/dd-java-agent/instrumentation/karate/build.gradle @@ -1,6 +1,5 @@ ext { - // karate 1.4.0+ requires Java 11 or higher. - latestDepTestMinJavaVersionForTests = JavaVersion.VERSION_11 + testingInstrumentation = true } apply from: "$rootDir/gradle/java.gradle" diff --git a/dd-java-agent/instrumentation/log4j/log4j-1.2.4/build.gradle b/dd-java-agent/instrumentation/log4j/log4j-1.2.4/build.gradle index 826bb62b750..38ec3084caf 100644 --- a/dd-java-agent/instrumentation/log4j/log4j-1.2.4/build.gradle +++ b/dd-java-agent/instrumentation/log4j/log4j-1.2.4/build.gradle @@ -1,8 +1,3 @@ -ext { - // Log4j 1.x reached EOL in 2015 and is not compatible with Java 25+: https://endoflife.date/log4j - maxJavaVersionForTests = JavaVersion.VERSION_24 -} - muzzle { pass { group = 'log4j' @@ -18,6 +13,10 @@ configurations { apply from: "$rootDir/gradle/java.gradle" +testJvmConstraints { + // Log4j 1.x reached EOL in 2015 and is not compatible with Java 25+: https://endoflife.date/log4j + maxJavaVersion = JavaVersion.VERSION_24 +} addTestSuiteForDir('latestDepTest', 'test') dependencies { diff --git a/dd-java-agent/instrumentation/micronaut/http-server-netty-4.0/build.gradle b/dd-java-agent/instrumentation/micronaut/http-server-netty-4.0/build.gradle index 66bbda1af21..1699ecccf8a 100644 --- a/dd-java-agent/instrumentation/micronaut/http-server-netty-4.0/build.gradle +++ b/dd-java-agent/instrumentation/micronaut/http-server-netty-4.0/build.gradle @@ -1,6 +1,3 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_17 -} muzzle { pass { group = "io.micronaut" @@ -12,6 +9,10 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +tracerJava { + addSourceSetFor(JavaVersion.VERSION_17) +} + addTestSuiteForDir('latestDepTest', 'test') ["compileMain_java17Java", "compileTestJava", "compileLatestDepTestJava"].each { diff --git a/dd-java-agent/instrumentation/mule-4.5/build.gradle b/dd-java-agent/instrumentation/mule-4.5/build.gradle index 0064cf9caa1..0962a6bfe51 100644 --- a/dd-java-agent/instrumentation/mule-4.5/build.gradle +++ b/dd-java-agent/instrumentation/mule-4.5/build.gradle @@ -1,9 +1,3 @@ -ext { - forkedTestMaxJavaVersionForTests = JavaVersion.VERSION_11 - mule46ForkedTestMaxJavaVersionForTests = JavaVersion.VERSION_11 - latestDepForkedTestMinJavaVersionForTests = JavaVersion.VERSION_17 - latestDepForkedTestMaxJavaVersionForTests = JavaVersion.VERSION_17 -} def muleVersion = '4.5.0' def appDir = "$projectDir/application" @@ -112,6 +106,12 @@ tasks.named("forbiddenApisMain_java11") { failOnMissingClasses = false } +tasks.named("forkedTest", Test) { + testJvmConstraints { + maxJavaVersion = JavaVersion.VERSION_11 + } +} + tasks.named("compileTestGroovy", GroovyCompile) { dependsOn 'mvnPackage', 'extractMuleServices' } @@ -129,6 +129,19 @@ tasks.named("compileLatestDepForkedTestJava", JavaCompile) { configureCompiler(it, 17) } +tasks.named("mule46ForkedTest", Test) { + testJvmConstraints { + maxJavaVersion = JavaVersion.VERSION_11 + } +} + +tasks.named("latestDepForkedTest", Test) { + testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_17 + maxJavaVersion = JavaVersion.VERSION_17 + } +} + dependencies { compileOnly group: 'org.mule.runtime', name: 'mule-core', version: muleVersion compileOnly group: 'org.mule.runtime', name: 'mule-tracer-customization-impl', version: muleVersion diff --git a/dd-java-agent/instrumentation/mule-4.5/gradle.lockfile b/dd-java-agent/instrumentation/mule-4.5/gradle.lockfile index 542686e0f4e..f639c9515be 100644 --- a/dd-java-agent/instrumentation/mule-4.5/gradle.lockfile +++ b/dd-java-agent/instrumentation/mule-4.5/gradle.lockfile @@ -141,7 +141,7 @@ commons-fileupload:commons-fileupload:1.5=latestDepForkedTestCompileClasspath,la commons-io:commons-io:2.11.0=mule46Services,muleServices commons-io:commons-io:2.13.0=compileClasspath,mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath commons-io:commons-io:2.20.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestMuleServices -commons-lang:commons-lang:2.6=compileClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +commons-lang:commons-lang:2.6=compileClasspath,mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath commons-logging:commons-logging:1.2=mule46Services,muleServices commons-validator:commons-validator:1.7=latestMuleServices,mule46Services,muleServices de.thetaphi:forbiddenapis:3.8=compileClasspath @@ -151,23 +151,24 @@ io.grpc:grpc-context:1.74.0=latestDepForkedTestRuntimeClasspath io.grpc:grpc-core:1.74.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath io.helidon.grpc:io.grpc:2.6.1=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath io.leangen.geantyref:geantyref:1.3.16=latestDepForkedTestRuntimeClasspath,mule46ForkedTestRuntimeClasspath,testRuntimeClasspath -io.micrometer:micrometer-commons:1.14.10=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath -io.micrometer:micrometer-observation:1.14.10=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath -io.netty:netty-buffer:4.1.127.Final=latestMuleServices -io.netty:netty-codec-dns:4.1.127.Final=latestMuleServices -io.netty:netty-codec-http2:4.1.127.Final=latestMuleServices -io.netty:netty-codec-http:4.1.127.Final=latestMuleServices -io.netty:netty-codec-socks:4.1.127.Final=latestMuleServices -io.netty:netty-codec:4.1.127.Final=latestMuleServices -io.netty:netty-common:4.1.127.Final=latestMuleServices -io.netty:netty-handler-proxy:4.1.127.Final=latestMuleServices -io.netty:netty-handler:4.1.127.Final=latestMuleServices -io.netty:netty-resolver-dns:4.1.127.Final=latestMuleServices -io.netty:netty-resolver:4.1.127.Final=latestMuleServices -io.netty:netty-transport-classes-epoll:4.1.127.Final=latestMuleServices -io.netty:netty-transport-native-epoll:4.1.127.Final=latestMuleServices -io.netty:netty-transport-native-unix-common:4.1.127.Final=latestMuleServices -io.netty:netty-transport:4.1.127.Final=latestMuleServices +io.micrometer:micrometer-commons:1.14.11=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +io.micrometer:micrometer-observation:1.14.11=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +io.netty:netty-buffer:4.2.7.Final=latestMuleServices +io.netty:netty-codec-base:4.2.7.Final=latestMuleServices +io.netty:netty-codec-compression:4.2.7.Final=latestMuleServices +io.netty:netty-codec-dns:4.2.7.Final=latestMuleServices +io.netty:netty-codec-http2:4.2.7.Final=latestMuleServices +io.netty:netty-codec-http:4.2.7.Final=latestMuleServices +io.netty:netty-codec-socks:4.2.7.Final=latestMuleServices +io.netty:netty-common:4.2.7.Final=latestMuleServices +io.netty:netty-handler-proxy:4.2.7.Final=latestMuleServices +io.netty:netty-handler:4.2.7.Final=latestMuleServices +io.netty:netty-resolver-dns:4.2.7.Final=latestMuleServices +io.netty:netty-resolver:4.2.7.Final=latestMuleServices +io.netty:netty-transport-classes-epoll:4.2.7.Final=latestMuleServices +io.netty:netty-transport-native-epoll:4.2.7.Final=latestMuleServices +io.netty:netty-transport-native-unix-common:4.2.7.Final=latestMuleServices +io.netty:netty-transport:4.2.7.Final=latestMuleServices io.opentelemetry.instrumentation:opentelemetry-instrumentation-api:2.15.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath io.opentelemetry.instrumentation:opentelemetry-log4j-appender-2.17:2.15.0-alpha=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath io.opentelemetry.instrumentation:opentelemetry-log4j-context-data-2.17-autoconfigure:2.15.0-alpha=latestDepForkedTestRuntimeClasspath @@ -220,10 +221,11 @@ io.perfmark:perfmark-api:0.25.0=mule46ForkedTestCompileClasspath,mule46ForkedTes io.perfmark:perfmark-api:0.27.0=latestDepForkedTestRuntimeClasspath io.projectreactor.addons:reactor-extra:3.4.8=compileClasspath,mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath io.projectreactor.addons:reactor-extra:3.5.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath -io.projectreactor.netty:reactor-netty-core:1.2.8=latestMuleServices -io.projectreactor.netty:reactor-netty-http:1.2.8=latestMuleServices +io.projectreactor.netty:reactor-netty-core:1.2.11=latestMuleServices +io.projectreactor.netty:reactor-netty-http:1.2.11=latestMuleServices io.projectreactor:reactor-core:3.4.22=compileClasspath,mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -io.projectreactor:reactor-core:3.7.8=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestMuleServices +io.projectreactor:reactor-core:3.7.12=latestMuleServices +io.projectreactor:reactor-core:3.7.8=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath io.sqreen:libsqreen:17.2.0=latestDepForkedTestRuntimeClasspath,mule46ForkedTestRuntimeClasspath,testRuntimeClasspath it.unimi.dsi:fastutil:8.5.11=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath it.unimi.dsi:fastutil:8.5.16=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath @@ -291,7 +293,8 @@ org.apache.commons:commons-collections4:4.5.0=latestDepForkedTestCompileClasspat org.apache.commons:commons-compress:1.21=mule46Services,muleServices org.apache.commons:commons-compress:1.26.2=latestMuleServices org.apache.commons:commons-lang3:3.12.0=compileClasspath,mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath,mule46Services,muleServices,spotbugs,testCompileClasspath,testRuntimeClasspath -org.apache.commons:commons-lang3:3.18.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestMuleServices +org.apache.commons:commons-lang3:3.18.0=latestMuleServices +org.apache.commons:commons-lang3:3.19.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.apache.commons:commons-pool2:2.11.1=compileClasspath,mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.apache.commons:commons-pool2:2.12.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.apache.commons:commons-text:1.10.0=spotbugs @@ -482,7 +485,7 @@ org.mule.com.github.stephenc.eaio-uuid:uuid:3.4.2-MULE-001=compileClasspath,late org.mule.common:scala-common_2.12:2.0.99=latestMuleServices,mule46Services,muleServices org.mule.commons:mule-oauth-client-api:2.0.0=testCompileClasspath,testRuntimeClasspath org.mule.commons:mule-oauth-client-api:2.1.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.commons:mule-oauth-client-api:2.5.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.commons:mule-oauth-client-api:2.5.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.glassfish.grizzly:connection-pool:2.3.36-MULE-025=mule46Services,muleServices org.mule.glassfish.grizzly:connection-pool:2.3.36-MULE-028=latestMuleServices org.mule.glassfish.grizzly:grizzly-framework:2.3.36-MULE-008=mule46Services,muleServices @@ -498,191 +501,191 @@ org.mule.glassfish.grizzly:grizzly-http:2.3.36-MULE-028=latestMuleServices org.mule.glassfish.grizzly:grizzly-websockets:2.3.36-MULE-025=mule46Services,muleServices org.mule.glassfish.grizzly:grizzly-websockets:2.3.36-MULE-028=latestMuleServices org.mule.mvel:mule-mvel2:2.1.9-MULE-020=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -org.mule.runtime.boot:mule-module-boot-api:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath -org.mule.runtime.boot:mule-module-jpms-utils:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath -org.mule.runtime.boot:mule-module-log4j-boot-configurator:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath -org.mule.runtime.boot:mule-module-logging:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime.boot:mule-module-boot-api:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime.boot:mule-module-jpms-utils:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime.boot:mule-module-log4j-boot-configurator:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime.boot:mule-module-logging:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:api-annotations:1.4.1=compileClasspath,testCompileClasspath,testRuntimeClasspath org.mule.runtime:api-annotations:1.5.1=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:api-annotations:1.9.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath -org.mule.runtime:mule-api:1.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:api-annotations:1.9.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-api:1.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-api:1.5.0=compileClasspath,testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-api:1.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath org.mule.runtime:mule-artifact-ast-dependency-graph:1.1.0=compileClasspath,testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-artifact-ast-dependency-graph:1.2.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-artifact-ast-dependency-graph:1.6.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-artifact-ast-dependency-graph:1.6.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-artifact-ast-serialization:1.1.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-artifact-ast-serialization:1.2.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-artifact-ast-serialization:1.6.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-artifact-ast-serialization:1.6.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-artifact-ast-xml-parser:1.1.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-artifact-ast-xml-parser:1.2.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-artifact-ast-xml-parser:1.6.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-artifact-ast-xml-parser:1.6.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-artifact-ast:1.1.0=compileClasspath,testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-artifact-ast:1.2.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-artifact-ast:1.6.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath -org.mule.runtime:mule-artifact-declaration-persistence:1.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-artifact-ast:1.6.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-artifact-declaration-persistence:1.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-artifact-declaration-persistence:1.5.0=compileClasspath,testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-artifact-declaration-persistence:1.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-artifact-declaration:1.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-artifact-declaration:1.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-artifact-declaration:1.5.0=compileClasspath,testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-artifact-declaration:1.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-core-components:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-core-components:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-core-components:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-core-components:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath org.mule.runtime:mule-core-mvel:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-core-mvel:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-core:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-core:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-core:4.5.0=compileClasspath,testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-core:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath org.mule.runtime:mule-dwb-api:2.5.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -org.mule.runtime:mule-extensions-api-dsql:1.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-extensions-api-dsql:1.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-extensions-api-dsql:1.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-extensions-api-dsql:1.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-extensions-api-persistence:1.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-extensions-api-persistence:1.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-extensions-api-persistence:1.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-extensions-api-persistence:1.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-extensions-api:1.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-extensions-api:1.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-extensions-api:1.5.0=compileClasspath,testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-extensions-api:1.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-extensions-mime-types:1.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-extensions-mime-types:1.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-extensions-mime-types:1.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath org.mule.runtime:mule-extensions-soap-api:1.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-extensions-soap-api:1.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath org.mule.runtime:mule-extensions-soap-api:1.8.9-rc1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath -org.mule.runtime:mule-features-api:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath -org.mule.runtime:mule-jar-handling-utils:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-features-api:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-jar-handling-utils:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-jar-handling-utils:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-jar-handling-utils:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-manifest:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath -org.mule.runtime:mule-message-metadata-model:1.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-manifest:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-message-metadata-model:1.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-message-metadata-model:1.5.0=compileClasspath,testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-message-metadata-model:1.6.1=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-metadata-model-api:1.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-metadata-model-api:1.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-metadata-model-api:1.5.0=compileClasspath,testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-metadata-model-api:1.6.1=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-metadata-model-catalog:1.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-metadata-model-catalog:1.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-metadata-model-catalog:1.5.0=compileClasspath,testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-metadata-model-catalog:1.6.1=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-metadata-model-java:1.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-metadata-model-java:1.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-metadata-model-java:1.5.0=compileClasspath,testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-metadata-model-java:1.6.1=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-metadata-model-json:1.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-metadata-model-json:1.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-metadata-model-json:1.5.0=compileClasspath,testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-metadata-model-json:1.6.1=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-metadata-model-persistence:1.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-metadata-model-persistence:1.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-metadata-model-persistence:1.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-metadata-model-persistence:1.6.1=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-metadata-model-raml:1.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-metadata-model-raml:1.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-metadata-model-raml:1.5.0=compileClasspath,testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-metadata-model-raml:1.6.1=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-metadata-model-xml:1.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-metadata-model-xml:1.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-metadata-model-xml:1.5.0=compileClasspath,testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-metadata-model-xml:1.6.1=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-metrics-api:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-metrics-api:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-metrics-api:4.5.0=compileClasspath,testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-metrics-api:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-metrics-exporter-api:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-metrics-exporter-api:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-metrics-exporter-api:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-metrics-exporter-api:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-metrics-exporter-configuration-api:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-metrics-exporter-configuration-api:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-metrics-exporter-configuration-api:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-metrics-exporter-configuration-api:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-metrics-exporter-configuration-impl:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-metrics-exporter-configuration-impl:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-metrics-exporter-configuration-impl:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-metrics-exporter-configuration-impl:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-metrics-exporter-impl:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-metrics-exporter-impl:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-metrics-exporter-impl:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-metrics-exporter-impl:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-metrics-impl:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-metrics-impl:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-metrics-impl:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-metrics-impl:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-module-artifact-activation:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-module-artifact-activation:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-module-artifact-activation:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-module-artifact-activation:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-module-artifact:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-module-artifact:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-module-artifact:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-module-artifact:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath org.mule.runtime:mule-module-boot-api:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-module-container:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-module-container:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-module-container:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-module-container:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-module-deployment-model-impl:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-module-deployment-model-impl:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-module-deployment-model-impl:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-module-deployment-model-impl:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-module-deployment-model:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-module-deployment-model:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-module-deployment-model:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-module-deployment-model:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-module-deployment:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-module-deployment:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-module-deployment:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-module-deployment:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-module-dsl-api:1.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-module-dsl-api:1.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-module-dsl-api:1.5.0=compileClasspath,testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-module-dsl-api:1.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath org.mule.runtime:mule-module-extensions-soap-support:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-module-extensions-soap-support:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-module-extensions-spring-support:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-module-extensions-spring-support:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-module-extensions-spring-support:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-module-extensions-spring-support:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-module-extensions-support:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-module-extensions-support:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-module-extensions-support:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-module-extensions-support:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-module-extensions-xml-support:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-module-extensions-xml-support:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-module-extensions-xml-support:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-module-extensions-xml-support:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-module-feature-management:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-module-feature-management:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-module-feature-management:4.5.0=compileClasspath,testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-module-feature-management:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-module-global-config:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-module-global-config:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-module-global-config:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-module-global-config:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-module-http-policy-api:1.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-module-http-policy-api:1.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-module-http-policy-api:1.5.0=compileClasspath,testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-module-http-policy-api:1.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-module-http-support:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-module-http-support:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-module-javaee:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-module-javaee:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath org.mule.runtime:mule-module-javaee:4.8.9-rc1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-module-jpms-utils:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-module-jpms-utils:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-module-launcher:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-module-launcher:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-module-launcher:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-module-launcher:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-module-license-api:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-module-license-api:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-module-license-api:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-module-license-api:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath org.mule.runtime:mule-module-log4j-boot-configurator:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-module-log4j-boot-configurator:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-module-log4j-configurator:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-module-log4j-configurator:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-module-log4j-configurator:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-module-log4j-configurator:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-module-logging-otel:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-module-logging-otel:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-module-logging:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-module-logging:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-module-memory-management:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-module-memory-management:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-module-memory-management:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-module-memory-management:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-module-metadata-support:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-module-metadata-support:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-module-metadata-support:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-module-metadata-support:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-module-observability:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-module-observability:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-module-observability:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-module-policy-api:1.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-module-policy-api:1.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-module-policy-api:1.5.0=compileClasspath,testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-module-policy-api:1.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-module-properties-config:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-module-properties-config:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-module-properties-config:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-module-properties-config:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath org.mule.runtime:mule-module-reboot:4.5.0=testCompileClasspath,testRuntimeClasspath -org.mule.runtime:mule-module-repository:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-module-repository:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-module-repository:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-module-repository:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-module-service:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-module-service:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-module-service:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-module-service:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-module-spring-config:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-module-spring-config:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-module-spring-config:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-module-spring-config:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-module-tls:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-module-tls:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-module-tls:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-module-tls:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath org.mule.runtime:mule-module-tooling-support:4.5.0=testCompileClasspath,testRuntimeClasspath @@ -691,52 +694,52 @@ org.mule.runtime:mule-module-troubleshooting:4.5.0=testCompileClasspath,testRunt org.mule.runtime:mule-module-troubleshooting:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath org.mule.runtime:mule-profiling-api:1.1.0=compileClasspath,testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-profiling-api:1.2.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-profiling-api:1.6.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-profiling-api:1.6.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-properties-api:1.1.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-properties-api:1.2.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-properties-api:1.6.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath -org.mule.runtime:mule-runtime-errors:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath -org.mule.runtime:mule-runtime-extension-model:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-properties-api:1.6.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-runtime-errors:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-runtime-extension-model:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-runtime-extension-model:4.5.0=compileClasspath,testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-runtime-extension-model:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-service-http-api:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-service-http-api:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-service-http-api:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-service-http-api:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-service-oauth-api:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-service-oauth-api:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-service-oauth-api:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-service-oauth-api:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath org.mule.runtime:mule-service-soap-api:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-service-soap-api:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-tracer-api:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-tracer-api:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-tracer-api:4.5.0=compileClasspath,testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-tracer-api:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath org.mule.runtime:mule-tracer-common:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-tracer-common:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-tracer-configuration-api:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-tracer-configuration-api:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-tracer-configuration-api:4.5.0=compileClasspath,testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-tracer-configuration-api:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-tracer-configuration-impl:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-tracer-configuration-impl:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-tracer-configuration-impl:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-tracer-configuration-impl:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-tracer-customization-api:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-tracer-customization-api:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-tracer-customization-api:4.5.0=compileClasspath,testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-tracer-customization-api:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-tracer-customization-impl:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-tracer-customization-impl:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-tracer-customization-impl:4.5.0=compileClasspath,testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-tracer-customization-impl:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-tracer-exporter-api:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-tracer-exporter-api:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-tracer-exporter-api:4.5.0=compileClasspath,testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-tracer-exporter-api:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-tracer-exporter-configuration-api:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-tracer-exporter-configuration-api:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-tracer-exporter-configuration-api:4.5.0=compileClasspath,testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-tracer-exporter-configuration-api:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-tracer-exporter-configuration-impl:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-tracer-exporter-configuration-impl:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-tracer-exporter-configuration-impl:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-tracer-exporter-configuration-impl:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-tracer-exporter-impl:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-tracer-exporter-impl:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-tracer-exporter-impl:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-tracer-exporter-impl:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.runtime:mule-tracer-internal-impl:4.10.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule.runtime:mule-tracer-internal-impl:4.10.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.runtime:mule-tracer-internal-impl:4.5.0=testCompileClasspath,testRuntimeClasspath org.mule.runtime:mule-tracer-internal-impl:4.6.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath org.mule.sdk:mule-sdk-api:0.12.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath @@ -745,10 +748,10 @@ org.mule.sdk:mule-sdk-api:0.8.0=mule46ForkedTestCompileClasspath,mule46ForkedTes org.mule.sdk:mule-sdk-compatibility-api:0.12.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule.sdk:mule-sdk-compatibility-api:0.7.0=testCompileClasspath,testRuntimeClasspath org.mule.sdk:mule-sdk-compatibility-api:0.8.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule.services:mule-netty-http-service:0.3.0=latestMuleServices -org.mule.services:mule-service-http:1.12.0=latestMuleServices +org.mule.services:mule-netty-http-service:0.3.1=latestMuleServices +org.mule.services:mule-service-http:1.12.1=latestMuleServices org.mule.services:mule-service-http:1.5.21=mule46Services,muleServices -org.mule.services:mule-service-scheduler:1.10.0=latestMuleServices +org.mule.services:mule-service-scheduler:1.10.1=latestMuleServices org.mule.services:mule-service-scheduler:1.5.0=mule46Services,muleServices org.mule.services:mule-service-weave:2.5.0=mule46Services,muleServices org.mule.services:mule-service-weave:2.8.1=latestMuleServices @@ -787,19 +790,19 @@ org.mule.weave:yaml-module:2.5.0=mule46Services,muleServices org.mule.weave:yaml-module:2.8.1-20241101=latestMuleServices org.mule:maven-model-shaded:2.0.0=testCompileClasspath,testRuntimeClasspath org.mule:maven-model-shaded:2.1.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule:maven-model-shaded:2.5.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule:maven-model-shaded:2.5.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule:mule-maven-client-api:2.0.0=testCompileClasspath,testRuntimeClasspath org.mule:mule-maven-client-api:2.1.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule:mule-maven-client-api:2.5.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule:mule-maven-client-api:2.5.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule:mule-maven-client-impl:2.0.0=testCompileClasspath,testRuntimeClasspath org.mule:mule-maven-client-impl:2.1.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule:mule-maven-client-impl:2.5.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule:mule-maven-client-impl:2.5.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule:mule-maven-pom-parser-api:2.0.0=testCompileClasspath,testRuntimeClasspath org.mule:mule-maven-pom-parser-api:2.1.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule:mule-maven-pom-parser-api:2.5.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule:mule-maven-pom-parser-api:2.5.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.mule:mule-maven-pom-parser-impl:2.0.0=testCompileClasspath,testRuntimeClasspath org.mule:mule-maven-pom-parser-impl:2.1.0=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.mule:mule-maven-pom-parser-impl:2.5.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.mule:mule-maven-pom-parser-impl:2.5.1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.objenesis:objenesis:3.3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.opentest4j:opentest4j:1.3.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.osgi:org.osgi.annotation.bundle:2.0.0=latestDepForkedTestCompileClasspath @@ -826,10 +829,10 @@ org.quartz-scheduler:quartz:2.3.2=mule46Services,muleServices org.quartz-scheduler:quartz:2.5.0=latestMuleServices org.raml:raml-parser-2:1.0.44-10=compileClasspath,testCompileClasspath,testRuntimeClasspath org.raml:raml-parser-2:1.0.44-12=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.raml:raml-parser-2:1.0.44-17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.raml:raml-parser-2:1.1.6=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.raml:yagi:1.0.44-10=compileClasspath,testCompileClasspath,testRuntimeClasspath org.raml:yagi:1.0.44-12=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath -org.raml:yagi:1.0.44-17=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.raml:yagi:1.1.6=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.reactivestreams:reactive-streams:1.0.4=compileClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestMuleServices,mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.reflections:reflections:0.10.2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.reflections:reflections:0.9.10=compileClasspath,mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath @@ -850,17 +853,17 @@ org.snakeyaml:snakeyaml-engine:2.9=instrumentPluginClasspath,latestDepForkedTest org.spockframework:spock-bom:2.4-M6-groovy-3.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.spockframework:spock-core:2.4-M6-groovy-3.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.springframework:spring-aop:5.3.27=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -org.springframework:spring-aop:6.2.10=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.springframework:spring-aop:6.2.11=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.springframework:spring-beans:5.3.27=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -org.springframework:spring-beans:6.2.10=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.springframework:spring-beans:6.2.11=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.springframework:spring-context:5.3.27=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -org.springframework:spring-context:6.2.10=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.springframework:spring-context:6.2.11=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.springframework:spring-core:5.3.27=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -org.springframework:spring-core:6.2.10=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.springframework:spring-core:6.2.11=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.springframework:spring-expression:5.3.27=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -org.springframework:spring-expression:6.2.10=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.springframework:spring-expression:6.2.11=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.springframework:spring-jcl:5.3.27=mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -org.springframework:spring-jcl:6.2.10=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath +org.springframework:spring-jcl:6.2.11=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath org.testng:testng:7.5.1=latestDepForkedTestRuntimeClasspath,mule46ForkedTestRuntimeClasspath,testRuntimeClasspath org.togglz:togglz-core:3.0.0=compileClasspath,mule46ForkedTestCompileClasspath,mule46ForkedTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.togglz:togglz-core:4.4.0=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath diff --git a/dd-java-agent/instrumentation/netty/netty-3.8/build.gradle b/dd-java-agent/instrumentation/netty/netty-3.8/build.gradle index 1f836c71824..a720bebf57f 100644 --- a/dd-java-agent/instrumentation/netty/netty-3.8/build.gradle +++ b/dd-java-agent/instrumentation/netty/netty-3.8/build.gradle @@ -1,10 +1,9 @@ -// Set properties before any plugins get loaded -ext { - maxJavaVersionForTests = JavaVersion.VERSION_1_8 -} - apply from: "$rootDir/gradle/java.gradle" +testJvmConstraints { + maxJavaVersion = JavaVersion.VERSION_1_8 +} + muzzle { pass { group = "io.netty" diff --git a/dd-java-agent/instrumentation/netty/netty-4.0/build.gradle b/dd-java-agent/instrumentation/netty/netty-4.0/build.gradle index 5b27543a6d5..e682fda1db6 100644 --- a/dd-java-agent/instrumentation/netty/netty-4.0/build.gradle +++ b/dd-java-agent/instrumentation/netty/netty-4.0/build.gradle @@ -1,11 +1,10 @@ -// Set properties before any plugins get loaded -// asynchttpclient is not compatible with Java 11 -ext { - maxJavaVersionForTests = JavaVersion.VERSION_1_8 -} - apply from: "$rootDir/gradle/java.gradle" +testJvmConstraints { + // asynchttpclient is not compatible with Java 11 + maxJavaVersion = JavaVersion.VERSION_1_8 +} + muzzle { pass { group = "io.netty" diff --git a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.4/gradle.lockfile b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.4/gradle.lockfile index 3a4e826b136..0b8d08ef9d1 100644 --- a/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.4/gradle.lockfile +++ b/dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.4/gradle.lockfile @@ -51,10 +51,10 @@ de.thetaphi:forbiddenapis:3.8=compileClasspath info.picocli:picocli:4.6.3=latestDepTestRuntimeClasspath,testRuntimeClasspath io.leangen.geantyref:geantyref:1.3.16=latestDepTestRuntimeClasspath,testRuntimeClasspath io.opentelemetry:opentelemetry-api:1.4.0=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.opentelemetry:opentelemetry-api:1.55.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.opentelemetry:opentelemetry-common:1.55.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.opentelemetry:opentelemetry-api:1.56.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.opentelemetry:opentelemetry-common:1.56.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.opentelemetry:opentelemetry-context:1.4.0=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.opentelemetry:opentelemetry-context:1.55.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.opentelemetry:opentelemetry-context:1.56.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.sqreen:libsqreen:17.2.0=latestDepTestRuntimeClasspath,testRuntimeClasspath javax.servlet:javax.servlet-api:3.1.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath jaxen:jaxen:1.2.0=spotbugs diff --git a/dd-java-agent/instrumentation/play/play-2.3/build.gradle b/dd-java-agent/instrumentation/play/play-2.3/build.gradle index 82ef4802e68..2a8c92f24b4 100644 --- a/dd-java-agent/instrumentation/play/play-2.3/build.gradle +++ b/dd-java-agent/instrumentation/play/play-2.3/build.gradle @@ -1,8 +1,3 @@ -ext { - // Play doesn't work with Java 9+ until 2.6.12 - maxJavaVersionForTests = JavaVersion.VERSION_1_8 -} - muzzle { extraRepository("typesafe", "https://repo.typesafe.com/typesafe/maven-releases/") @@ -26,6 +21,11 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +testJvmConstraints { + // Play doesn't work with Java 9+ until 2.6.12 + maxJavaVersion = JavaVersion.VERSION_1_8 +} + repositories { maven { // only place that has 'com.typesafe.netty:netty-http-pipelining:1.1.2' publicly accessible diff --git a/dd-java-agent/instrumentation/play/play-2.4/build.gradle b/dd-java-agent/instrumentation/play/play-2.4/build.gradle index dcda9f6ce8e..68b42f934fb 100644 --- a/dd-java-agent/instrumentation/play/play-2.4/build.gradle +++ b/dd-java-agent/instrumentation/play/play-2.4/build.gradle @@ -1,8 +1,3 @@ -ext { - // Play doesn't work with Java 9+ until 2.6.12 - maxJavaVersionForTests = JavaVersion.VERSION_1_8 -} - muzzle { extraRepository("typesafe", "https://repo.typesafe.com/typesafe/maven-releases/") @@ -37,6 +32,11 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" apply plugin: 'scala' +testJvmConstraints { + // Play doesn't work with Java 9+ until 2.6.12 + maxJavaVersion = JavaVersion.VERSION_1_8 +} + repositories { maven { // for muzzle because of play-2.3 diff --git a/dd-java-agent/instrumentation/play/play-2.6/build.gradle b/dd-java-agent/instrumentation/play/play-2.6/build.gradle index 4554bec2259..bdb345d763c 100644 --- a/dd-java-agent/instrumentation/play/play-2.6/build.gradle +++ b/dd-java-agent/instrumentation/play/play-2.6/build.gradle @@ -1,8 +1,3 @@ -ext { - // Play doesn't work with Java 9+ until 2.6.12 - maxJavaVersionForTests = JavaVersion.VERSION_1_8 -} - def scalaVersion = '2.11' def playVersion = '2.6.0' @@ -55,6 +50,11 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" apply plugin: 'scala' +testJvmConstraints { + // Play doesn't work with Java 9+ until 2.6.12 + maxJavaVersion = JavaVersion.VERSION_1_8 +} + repositories { maven { // for muzzle because of play-2.3 diff --git a/dd-java-agent/instrumentation/quartz-2.0/build.gradle b/dd-java-agent/instrumentation/quartz-2.0/build.gradle index 90eb0d84f9f..28b1d653a5f 100644 --- a/dd-java-agent/instrumentation/quartz-2.0/build.gradle +++ b/dd-java-agent/instrumentation/quartz-2.0/build.gradle @@ -1,7 +1,3 @@ -ext { - latestDepTestMinJavaVersionForTests = JavaVersion.VERSION_11 - version40TestMinJavaVersionForTests = JavaVersion.VERSION_11 -} muzzle { pass { group = 'org.quartz-scheduler' @@ -17,7 +13,6 @@ apply from: "$rootDir/gradle/java.gradle" addTestSuiteForDir('latestDepTest', 'test') addTestSuiteForDir('version40Test', 'test') - dependencies { compileOnly group: 'org.quartz-scheduler', name: 'quartz', version: '2.0.0' testImplementation group: 'org.quartz-scheduler', name: 'quartz', version: '2.0.0' @@ -41,3 +36,15 @@ dependencies { configureCompiler(it, 11) } } + +tasks.named("latestDepTest", Test) { + testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_11 + } +} + +tasks.named("version40Test", Test) { + testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_11 + } +} diff --git a/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/gradle.lockfile b/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/gradle.lockfile index 1035a0c70a3..2f87edaa6fd 100644 --- a/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/gradle.lockfile +++ b/dd-java-agent/instrumentation/rabbitmq-amqp-2.7/gradle.lockfile @@ -45,7 +45,7 @@ com.google.re2j:re2j:1.7=instrumentPluginClasspath,latestDepTestRuntimeClasspath com.rabbitmq:amqp-client:2.7.0=compileClasspath com.rabbitmq:amqp-client:2.8.1=testCompileClasspath,testRuntimeClasspath com.rabbitmq:amqp-client:5.14.2=latestReactorTestCompileClasspath,latestReactorTestRuntimeClasspath -com.rabbitmq:amqp-client:5.27.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +com.rabbitmq:amqp-client:5.27.1=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath com.rabbitmq:amqp-client:5.5.1=reactorTestCompileClasspath,reactorTestRuntimeClasspath com.squareup.moshi:moshi:1.11.0=compileClasspath,instrumentPluginClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,latestReactorTestCompileClasspath,latestReactorTestRuntimeClasspath,muzzleTooling,reactorTestCompileClasspath,reactorTestRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath com.squareup.okhttp3:logging-interceptor:3.12.12=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,latestReactorTestCompileClasspath,latestReactorTestRuntimeClasspath,reactorTestCompileClasspath,reactorTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath diff --git a/dd-java-agent/instrumentation/reactor-core-3.1/gradle.lockfile b/dd-java-agent/instrumentation/reactor-core-3.1/gradle.lockfile index fbc07638a3d..a1ed1d59a09 100644 --- a/dd-java-agent/instrumentation/reactor-core-3.1/gradle.lockfile +++ b/dd-java-agent/instrumentation/reactor-core-3.1/gradle.lockfile @@ -48,9 +48,9 @@ commons-io:commons-io:2.11.0=latestDepTestCompileClasspath,latestDepTestRuntimeC de.thetaphi:forbiddenapis:3.8=compileClasspath info.picocli:picocli:4.6.3=latestDepTestRuntimeClasspath,testRuntimeClasspath io.leangen.geantyref:geantyref:1.3.16=latestDepTestRuntimeClasspath,testRuntimeClasspath -io.micrometer:micrometer-commons:1.16.0-RC1=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.micrometer:micrometer-core:1.16.0-RC1=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.micrometer:micrometer-observation:1.16.0-RC1=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.micrometer:micrometer-commons:1.16.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.micrometer:micrometer-core:1.16.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.micrometer:micrometer-observation:1.16.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.opentelemetry.instrumentation:opentelemetry-instrumentation-annotations:1.28.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath io.opentelemetry:opentelemetry-api:1.28.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath io.opentelemetry:opentelemetry-context:1.28.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath @@ -58,7 +58,7 @@ io.opentracing:opentracing-api:0.32.0=latestDepTestCompileClasspath,latestDepTes io.opentracing:opentracing-noop:0.32.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath io.opentracing:opentracing-util:0.32.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath io.projectreactor:reactor-core:3.1.0.RELEASE=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.projectreactor:reactor-core:3.8.0-RC1=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.projectreactor:reactor-core:3.8.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.sqreen:libsqreen:17.2.0=latestDepTestRuntimeClasspath,testRuntimeClasspath javax.servlet:javax.servlet-api:3.1.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath jaxen:jaxen:1.2.0=spotbugs diff --git a/dd-java-agent/instrumentation/reactor-netty-1/gradle.lockfile b/dd-java-agent/instrumentation/reactor-netty-1/gradle.lockfile index 02a48415e95..e0199c22655 100644 --- a/dd-java-agent/instrumentation/reactor-netty-1/gradle.lockfile +++ b/dd-java-agent/instrumentation/reactor-netty-1/gradle.lockfile @@ -49,43 +49,46 @@ de.thetaphi:forbiddenapis:3.8=compileClasspath info.picocli:picocli:4.6.3=latestDepTestRuntimeClasspath,testRuntimeClasspath io.leangen.geantyref:geantyref:1.3.16=latestDepTestRuntimeClasspath,testRuntimeClasspath io.netty:netty-buffer:4.1.53.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-buffer:4.2.6.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.netty:netty-codec-base:4.2.6.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.netty:netty-codec-compression:4.2.6.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-buffer:4.2.7.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-base:4.2.7.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-classes-quic:4.2.7.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-compression:4.2.7.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-dns:4.1.53.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-codec-dns:4.2.6.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-dns:4.2.7.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-http2:4.1.53.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-codec-http2:4.2.6.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-http2:4.2.7.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-http3:4.2.7.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-http:4.1.53.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-codec-http:4.2.6.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-http:4.2.7.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-native-quic:4.2.7.Final=latestDepTestRuntimeClasspath io.netty:netty-codec-socks:4.1.53.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-codec-socks:4.2.6.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-socks:4.2.7.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec:4.1.53.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath io.netty:netty-common:4.1.53.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-common:4.2.6.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-common:4.2.7.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-handler-proxy:4.1.53.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-handler-proxy:4.2.6.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-handler-proxy:4.2.7.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-handler:4.1.53.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-handler:4.2.6.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.netty:netty-resolver-dns-classes-macos:4.2.6.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.netty:netty-resolver-dns-native-macos:4.2.6.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-handler:4.2.7.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-resolver-dns-classes-macos:4.2.7.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-resolver-dns-native-macos:4.2.7.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-resolver-dns:4.1.53.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-resolver-dns:4.2.6.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-resolver-dns:4.2.7.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-resolver:4.1.53.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-resolver:4.2.6.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.netty:netty-transport-classes-epoll:4.2.6.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-resolver:4.2.7.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport-classes-epoll:4.2.7.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-transport-native-epoll:4.1.53.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-transport-native-epoll:4.2.6.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport-native-epoll:4.2.7.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-transport-native-unix-common:4.1.53.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-transport-native-unix-common:4.2.6.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport-native-unix-common:4.2.7.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-transport:4.1.53.Final=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-transport:4.2.6.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport:4.2.7.Final=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.projectreactor.netty:reactor-netty-core:1.0.0=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.projectreactor.netty:reactor-netty-core:1.3.0-RC1=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.projectreactor.netty:reactor-netty-core:1.3.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.projectreactor.netty:reactor-netty-http:1.0.0=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.projectreactor.netty:reactor-netty-http:1.3.0-RC1=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.projectreactor.netty:reactor-netty-http:1.3.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.projectreactor:reactor-core:3.4.0=compileClasspath,testCompileClasspath,testRuntimeClasspath -io.projectreactor:reactor-core:3.8.0-RC1=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.projectreactor:reactor-core:3.8.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.sqreen:libsqreen:17.2.0=latestDepTestRuntimeClasspath,testRuntimeClasspath javax.servlet:javax.servlet-api:3.1.0=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath jaxen:jaxen:1.2.0=spotbugs @@ -112,6 +115,7 @@ org.apache.httpcomponents.core5:httpcore5:5.1.3=spotbugs org.apache.logging.log4j:log4j-api:2.19.0=spotbugs org.apache.logging.log4j:log4j-core:2.19.0=spotbugs org.apiguardian:apiguardian-api:1.1.2=latestDepTestCompileClasspath,testCompileClasspath +org.bouncycastle:bcprov-jdk18on:1.80=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.checkerframework:checker-qual:3.33.0=annotationProcessor,latestDepTestAnnotationProcessor,testAnnotationProcessor org.codehaus.groovy:groovy-all:3.0.24=latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.codehaus.groovy:groovy-ant:3.0.23=codenarc diff --git a/dd-java-agent/instrumentation/redisson/redisson-2.3.0/build.gradle b/dd-java-agent/instrumentation/redisson/redisson-2.3.0/build.gradle index a331308b921..c6ffc4b3669 100644 --- a/dd-java-agent/instrumentation/redisson/redisson-2.3.0/build.gradle +++ b/dd-java-agent/instrumentation/redisson/redisson-2.3.0/build.gradle @@ -28,7 +28,7 @@ dependencies { project.afterEvaluate { tasks.withType(Test).configureEach { - configureJvmArgs( + conditionalJvmArgs( it, JavaVersion.VERSION_16, [ diff --git a/dd-java-agent/instrumentation/redisson/redisson-3.10.3/build.gradle b/dd-java-agent/instrumentation/redisson/redisson-3.10.3/build.gradle index 897f759cfa7..426b68fb77e 100644 --- a/dd-java-agent/instrumentation/redisson/redisson-3.10.3/build.gradle +++ b/dd-java-agent/instrumentation/redisson/redisson-3.10.3/build.gradle @@ -32,7 +32,7 @@ dependencies { } tasks.withType(Test).configureEach { - configureJvmArgs( + conditionalJvmArgs( it, JavaVersion.VERSION_16, [ diff --git a/dd-java-agent/instrumentation/resilience4j/resilience4j-2.0/build.gradle b/dd-java-agent/instrumentation/resilience4j/resilience4j-2.0/build.gradle index 751a4680ec6..ff081421509 100644 --- a/dd-java-agent/instrumentation/resilience4j/resilience4j-2.0/build.gradle +++ b/dd-java-agent/instrumentation/resilience4j/resilience4j-2.0/build.gradle @@ -1,10 +1,10 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_17 -} - apply from: "$rootDir/gradle/java.gradle" apply plugin: 'idea' +testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_17 +} + muzzle { pass { group = 'io.github.resilience4j' diff --git a/dd-java-agent/instrumentation/resilience4j/resilience4j-reactor-2.0/build.gradle b/dd-java-agent/instrumentation/resilience4j/resilience4j-reactor-2.0/build.gradle index 674c92af3d5..7646b953751 100644 --- a/dd-java-agent/instrumentation/resilience4j/resilience4j-reactor-2.0/build.gradle +++ b/dd-java-agent/instrumentation/resilience4j/resilience4j-reactor-2.0/build.gradle @@ -1,10 +1,10 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_17 -} - apply from: "$rootDir/gradle/java.gradle" apply plugin: 'idea' +testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_17 +} + muzzle { pass { group = 'io.github.resilience4j' diff --git a/dd-java-agent/instrumentation/rmi/build.gradle b/dd-java-agent/instrumentation/rmi/build.gradle index 9cc099d2aa8..5b1b5b01e5f 100644 --- a/dd-java-agent/instrumentation/rmi/build.gradle +++ b/dd-java-agent/instrumentation/rmi/build.gradle @@ -1,8 +1,3 @@ -ext { - // TODO Java 17: The necessary packages are not opened on Java 17 - maxJavaVersionForTests = JavaVersion.VERSION_15 -} - muzzle { pass { coreJdk() @@ -11,6 +6,11 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +testJvmConstraints { + // TODO Java 17: The necessary packages are not opened on Java 17 + maxJavaVersion = JavaVersion.VERSION_15 +} + tasks.withType(JavaCompile).configureEach { configureCompiler(it, 8, JavaVersion.VERSION_1_8, "Need access to sun.rmi package") } diff --git a/dd-java-agent/instrumentation/scala-promise/scala-promise-2.10/build.gradle b/dd-java-agent/instrumentation/scala-promise/scala-promise-2.10/build.gradle index 4d170e05420..8355186ebbd 100644 --- a/dd-java-agent/instrumentation/scala-promise/scala-promise-2.10/build.gradle +++ b/dd-java-agent/instrumentation/scala-promise/scala-promise-2.10/build.gradle @@ -28,8 +28,6 @@ apply plugin: 'scala' // Don't use test-with-scala since we want to pick our own addTestSuiteForDir('latestDepTest', 'test') addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'forkedTest') -apply from: "$rootDir/gradle/configure_tests.gradle" - tasks.named("latestDepTest", Test) { finalizedBy 'latestDepForkedTest' } diff --git a/dd-java-agent/instrumentation/scala-promise/scala-promise-2.13/build.gradle b/dd-java-agent/instrumentation/scala-promise/scala-promise-2.13/build.gradle index 3bb3d2df5dc..effcc09dc31 100644 --- a/dd-java-agent/instrumentation/scala-promise/scala-promise-2.13/build.gradle +++ b/dd-java-agent/instrumentation/scala-promise/scala-promise-2.13/build.gradle @@ -28,8 +28,6 @@ apply plugin: 'scala' // Don't use test-with-scala since we want to pick our own addTestSuiteForDir('latestDepTest', 'test') addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'forkedTest') -apply from: "$rootDir/gradle/configure_tests.gradle" - tasks.named("latestDepTest", Test) { finalizedBy 'latestDepForkedTest' } diff --git a/dd-java-agent/instrumentation/scalatest/build.gradle b/dd-java-agent/instrumentation/scalatest/build.gradle index baeab8c0849..1c758f3862e 100644 --- a/dd-java-agent/instrumentation/scalatest/build.gradle +++ b/dd-java-agent/instrumentation/scalatest/build.gradle @@ -1,3 +1,5 @@ +ext.testingInstrumentation = true + apply from: "$rootDir/gradle/java.gradle" apply plugin: 'scala' diff --git a/dd-java-agent/instrumentation/selenium/build.gradle b/dd-java-agent/instrumentation/selenium/build.gradle index 7c5c008d4d7..02fcf9a77c6 100644 --- a/dd-java-agent/instrumentation/selenium/build.gradle +++ b/dd-java-agent/instrumentation/selenium/build.gradle @@ -3,7 +3,7 @@ plugins { } ext { - latestDepTestMinJavaVersionForTests = JavaVersion.VERSION_11 + testingInstrumentation = true } apply from: "$rootDir/gradle/java.gradle" @@ -45,3 +45,10 @@ configurations.matching({ it.name.startsWith('test') || it.name.startsWith('late tasks.named("compileLatestDepTestJava", JavaCompile) { configureCompiler(it, 11, JavaVersion.VERSION_1_8) } + +tasks.named("latestDepTest", Test) { + testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_11 + } +} + diff --git a/dd-java-agent/instrumentation/servicetalk/servicetalk-0.42.0/build.gradle b/dd-java-agent/instrumentation/servicetalk/servicetalk-0.42.0/build.gradle index 8c8b4f1b6f7..2c7adbc93f1 100644 --- a/dd-java-agent/instrumentation/servicetalk/servicetalk-0.42.0/build.gradle +++ b/dd-java-agent/instrumentation/servicetalk/servicetalk-0.42.0/build.gradle @@ -15,12 +15,12 @@ muzzle { } } -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 -} - apply from: "$rootDir/gradle/java.gradle" +tracerJava { + addSourceSetFor(JavaVersion.VERSION_11) +} + addTestSuiteForDir('latestDepTest', 'test') dependencies { diff --git a/dd-java-agent/instrumentation/servicetalk/servicetalk-0.42.56/build.gradle b/dd-java-agent/instrumentation/servicetalk/servicetalk-0.42.56/build.gradle index b7b27117ae8..d8daf9a0c5b 100644 --- a/dd-java-agent/instrumentation/servicetalk/servicetalk-0.42.56/build.gradle +++ b/dd-java-agent/instrumentation/servicetalk/servicetalk-0.42.56/build.gradle @@ -16,12 +16,12 @@ muzzle { } } -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 -} - apply from: "$rootDir/gradle/java.gradle" +testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_11 +} + //addTestSuiteForDir('latestDepTest', 'test') // TODO currently 0.42.56 is the latest version. Enable this once the next (0.42.57) is out, add 'latestDepTest' diff --git a/dd-java-agent/instrumentation/spark-executor/build.gradle b/dd-java-agent/instrumentation/spark-executor/build.gradle index 4525dafc370..2bee9db2042 100644 --- a/dd-java-agent/instrumentation/spark-executor/build.gradle +++ b/dd-java-agent/instrumentation/spark-executor/build.gradle @@ -22,12 +22,12 @@ addTestSuite('baseTest') addTestSuiteForDir('latest212DepTest', 'baseTest') addTestSuiteForDir('latest213DepTest', 'baseTest') -ext { +testJvmConstraints { // Hadoop does not behave correctly with OpenJ9 https://issues.apache.org/jira/browse/HADOOP-18174 excludeJdk = ['SEMERU8', 'SEMERU11'] // Spark does not support Java > 11 until 3.3.0 https://issues.apache.org/jira/browse/SPARK-33772 - maxJavaVersionForTests = JavaVersion.VERSION_11 + maxJavaVersion = JavaVersion.VERSION_11 } dependencies { diff --git a/dd-java-agent/instrumentation/spark/spark_2.12/build.gradle b/dd-java-agent/instrumentation/spark/spark_2.12/build.gradle index 0f7451a25d7..3dfeaa0ce6a 100644 --- a/dd-java-agent/instrumentation/spark/spark_2.12/build.gradle +++ b/dd-java-agent/instrumentation/spark/spark_2.12/build.gradle @@ -22,12 +22,12 @@ addTestSuiteForDir('latestDepTest', 'test') addTestSuite('test_spark24') addTestSuite('test_spark32') -ext { +testJvmConstraints { // Hadoop does not behave correctly with OpenJ9 https://issues.apache.org/jira/browse/HADOOP-18174 excludeJdk = ['SEMERU8', 'SEMERU11'] // Spark does not support Java > 11 until 3.3.0 https://issues.apache.org/jira/browse/SPARK-33772 - maxJavaVersionForTests = JavaVersion.VERSION_11 + maxJavaVersion = JavaVersion.VERSION_11 } dependencies { diff --git a/dd-java-agent/instrumentation/spark/spark_2.12/src/main/java/datadog/trace/instrumentation/spark/Spark212Instrumentation.java b/dd-java-agent/instrumentation/spark/spark_2.12/src/main/java/datadog/trace/instrumentation/spark/Spark212Instrumentation.java index 5b29d586c46..4cd23089cd1 100644 --- a/dd-java-agent/instrumentation/spark/spark_2.12/src/main/java/datadog/trace/instrumentation/spark/Spark212Instrumentation.java +++ b/dd-java-agent/instrumentation/spark/spark_2.12/src/main/java/datadog/trace/instrumentation/spark/Spark212Instrumentation.java @@ -7,7 +7,6 @@ import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.Config; import de.thetaphi.forbiddenapis.SuppressForbidden; -import java.lang.reflect.Constructor; import net.bytebuddy.asm.Advice; import org.apache.spark.SparkContext; import org.apache.spark.sql.execution.SparkPlan; @@ -25,6 +24,7 @@ public String[] helperClassNames() { return new String[] { packageName + ".AbstractDatadogSparkListener", packageName + ".AbstractSparkPlanSerializer", + packageName + ".AbstractSparkPlanUtils", packageName + ".DatabricksParentContext", packageName + ".OpenlineageParentContext", packageName + ".DatadogSpark212Listener", @@ -35,7 +35,8 @@ public String[] helperClassNames() { packageName + ".SparkSQLUtils", packageName + ".SparkSQLUtils$SparkPlanInfoForStage", packageName + ".SparkSQLUtils$AccumulatorWithStage", - packageName + ".Spark212PlanSerializer" + packageName + ".Spark212PlanSerializer", + packageName + ".Spark212PlanUtils" }; } @@ -104,29 +105,15 @@ public static void exit( if (planInfo.metadata().size() == 0 && (Config.get().isDataJobsParseSparkPlanEnabled() || Config.get().isDataJobsExperimentalFeaturesEnabled())) { - Spark212PlanSerializer planUtils = new Spark212PlanSerializer(); + Spark212PlanSerializer planSerializer = new Spark212PlanSerializer(); Map meta = - JavaConverters.mapAsScalaMap(planUtils.extractFormattedProduct(plan)) + JavaConverters.mapAsScalaMap(planSerializer.extractFormattedProduct(plan)) .toMap(Predef.$conforms()); - try { - Constructor targetCtor = null; - for (Constructor c : SparkPlanInfo.class.getConstructors()) { - if (c.getParameterCount() == 5) { - targetCtor = c; - break; - } - } - if (targetCtor != null) { - Object newInst = - targetCtor.newInstance( - planInfo.nodeName(), - planInfo.simpleString(), - planInfo.children(), - meta, - planInfo.metrics()); - planInfo = (SparkPlanInfo) newInst; - } - } catch (Throwable ignored) { + + SparkPlanInfo newPlanInfo = + new Spark212PlanUtils().upsertSparkPlanInfoMetadata(planInfo, meta); + if (newPlanInfo != null) { + planInfo = newPlanInfo; } } } diff --git a/dd-java-agent/instrumentation/spark/spark_2.12/src/main/java/datadog/trace/instrumentation/spark/Spark212PlanUtils.java b/dd-java-agent/instrumentation/spark/spark_2.12/src/main/java/datadog/trace/instrumentation/spark/Spark212PlanUtils.java new file mode 100644 index 00000000000..4d9bef21cdd --- /dev/null +++ b/dd-java-agent/instrumentation/spark/spark_2.12/src/main/java/datadog/trace/instrumentation/spark/Spark212PlanUtils.java @@ -0,0 +1,45 @@ +package datadog.trace.instrumentation.spark; + +import java.lang.invoke.MethodHandle; +import org.apache.spark.sql.execution.SparkPlanInfo; +import scala.Option; +import scala.collection.immutable.Map; + +public class Spark212PlanUtils extends AbstractSparkPlanUtils { + private static final MethodHandle constructor = + methodLoader.constructor( + SparkPlanInfo.class, + String.class, + String.class, + scala.collection.Seq.class, + scala.collection.immutable.Map.class, + scala.collection.Seq.class); + private static final MethodHandle databricksConstructor = + methodLoader.constructor( + SparkPlanInfo.class, + String.class, + String.class, + scala.collection.Seq.class, + scala.collection.immutable.Map.class, + scala.collection.Seq.class, + Option.class, + String.class, + Option.class); + + @Override + protected MethodHandle getConstructor() { + return constructor; + } + + @Override + protected MethodHandle getDatabricksConstructor() { + return databricksConstructor; + } + + @Override + protected Object[] getStandardArgs(SparkPlanInfo planInfo, Map meta) { + return new Object[] { + planInfo.nodeName(), planInfo.simpleString(), planInfo.children(), meta, planInfo.metrics() + }; + } +} diff --git a/dd-java-agent/instrumentation/spark/spark_2.13/build.gradle b/dd-java-agent/instrumentation/spark/spark_2.13/build.gradle index 0dd13f5c96e..143a36be810 100644 --- a/dd-java-agent/instrumentation/spark/spark_2.13/build.gradle +++ b/dd-java-agent/instrumentation/spark/spark_2.13/build.gradle @@ -25,17 +25,19 @@ apply from: "$rootDir/gradle/java.gradle" addTestSuiteForDir('latestDepTest', 'test') addTestSuite('test_spark32') -ext { +testJvmConstraints { // Hadoop does not behave correctly with OpenJ9 https://issues.apache.org/jira/browse/HADOOP-18174 // Hadoop 3.3.1 (used by spark 3.2) does not support IBM java https://issues.apache.org/jira/browse/HADOOP-17971 excludeJdk = ['SEMERU8', 'SEMERU11', 'IBM8'] // Spark does not support Java > 11 until 3.3.0 https://issues.apache.org/jira/browse/SPARK-33772 - maxJavaVersionForTests = JavaVersion.VERSION_11 + maxJavaVersion = JavaVersion.VERSION_11 } + configurations.configureEach { resolutionStrategy.deactivateDependencyLocking() } + dependencies { implementation project(':dd-java-agent:instrumentation:spark') diff --git a/dd-java-agent/instrumentation/spark/spark_2.13/src/main/java/datadog/trace/instrumentation/spark/Spark213Instrumentation.java b/dd-java-agent/instrumentation/spark/spark_2.13/src/main/java/datadog/trace/instrumentation/spark/Spark213Instrumentation.java index 64439e2c6e2..c9e534f6429 100644 --- a/dd-java-agent/instrumentation/spark/spark_2.13/src/main/java/datadog/trace/instrumentation/spark/Spark213Instrumentation.java +++ b/dd-java-agent/instrumentation/spark/spark_2.13/src/main/java/datadog/trace/instrumentation/spark/Spark213Instrumentation.java @@ -7,7 +7,6 @@ import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.Config; import de.thetaphi.forbiddenapis.SuppressForbidden; -import java.lang.reflect.Constructor; import net.bytebuddy.asm.Advice; import org.apache.spark.SparkContext; import org.apache.spark.sql.execution.SparkPlan; @@ -25,6 +24,7 @@ public String[] helperClassNames() { return new String[] { packageName + ".AbstractDatadogSparkListener", packageName + ".AbstractSparkPlanSerializer", + packageName + ".AbstractSparkPlanUtils", packageName + ".DatabricksParentContext", packageName + ".OpenlineageParentContext", packageName + ".DatadogSpark213Listener", @@ -35,7 +35,8 @@ public String[] helperClassNames() { packageName + ".SparkSQLUtils", packageName + ".SparkSQLUtils$SparkPlanInfoForStage", packageName + ".SparkSQLUtils$AccumulatorWithStage", - packageName + ".Spark213PlanSerializer" + packageName + ".Spark213PlanSerializer", + packageName + ".Spark213PlanUtils" }; } @@ -105,28 +106,14 @@ public static void exit( if (planInfo.metadata().size() == 0 && (Config.get().isDataJobsParseSparkPlanEnabled() || Config.get().isDataJobsExperimentalFeaturesEnabled())) { - Spark213PlanSerializer planUtils = new Spark213PlanSerializer(); + Spark213PlanSerializer planSerializer = new Spark213PlanSerializer(); Map meta = - HashMap.from(JavaConverters.asScala(planUtils.extractFormattedProduct(plan))); - try { - Constructor targetCtor = null; - for (Constructor c : SparkPlanInfo.class.getConstructors()) { - if (c.getParameterCount() == 5) { - targetCtor = c; - break; - } - } - if (targetCtor != null) { - Object newInst = - targetCtor.newInstance( - planInfo.nodeName(), - planInfo.simpleString(), - planInfo.children(), - meta, - planInfo.metrics()); - planInfo = (SparkPlanInfo) newInst; - } - } catch (Throwable ignored) { + HashMap.from(JavaConverters.asScala(planSerializer.extractFormattedProduct(plan))); + + SparkPlanInfo newPlanInfo = + new Spark213PlanUtils().upsertSparkPlanInfoMetadata(planInfo, meta); + if (newPlanInfo != null) { + planInfo = newPlanInfo; } } } diff --git a/dd-java-agent/instrumentation/spark/spark_2.13/src/main/java/datadog/trace/instrumentation/spark/Spark213PlanUtils.java b/dd-java-agent/instrumentation/spark/spark_2.13/src/main/java/datadog/trace/instrumentation/spark/Spark213PlanUtils.java new file mode 100644 index 00000000000..c59b4fdf600 --- /dev/null +++ b/dd-java-agent/instrumentation/spark/spark_2.13/src/main/java/datadog/trace/instrumentation/spark/Spark213PlanUtils.java @@ -0,0 +1,45 @@ +package datadog.trace.instrumentation.spark; + +import java.lang.invoke.MethodHandle; +import org.apache.spark.sql.execution.SparkPlanInfo; +import scala.Option; +import scala.collection.immutable.Map; + +public class Spark213PlanUtils extends AbstractSparkPlanUtils { + private static final MethodHandle constructor = + methodLoader.constructor( + SparkPlanInfo.class, + String.class, + String.class, + scala.collection.immutable.Seq.class, + scala.collection.immutable.Map.class, + scala.collection.immutable.Seq.class); + private static final MethodHandle databricksConstructor = + methodLoader.constructor( + SparkPlanInfo.class, + String.class, + String.class, + scala.collection.immutable.Seq.class, + scala.collection.immutable.Map.class, + scala.collection.immutable.Seq.class, + Option.class, + String.class, + Option.class); + + @Override + protected MethodHandle getConstructor() { + return constructor; + } + + @Override + protected MethodHandle getDatabricksConstructor() { + return databricksConstructor; + } + + @Override + protected Object[] getStandardArgs(SparkPlanInfo planInfo, Map meta) { + return new Object[] { + planInfo.nodeName(), planInfo.simpleString(), planInfo.children(), meta, planInfo.metrics() + }; + } +} diff --git a/dd-java-agent/instrumentation/spark/src/main/java/datadog/trace/instrumentation/spark/AbstractSparkPlanSerializer.java b/dd-java-agent/instrumentation/spark/src/main/java/datadog/trace/instrumentation/spark/AbstractSparkPlanSerializer.java index d0a91e53416..271f273660a 100644 --- a/dd-java-agent/instrumentation/spark/src/main/java/datadog/trace/instrumentation/spark/AbstractSparkPlanSerializer.java +++ b/dd-java-agent/instrumentation/spark/src/main/java/datadog/trace/instrumentation/spark/AbstractSparkPlanSerializer.java @@ -60,7 +60,7 @@ public abstract class AbstractSparkPlanSerializer { private final MethodHandles methodLoader = new MethodHandles(ClassLoader.getSystemClassLoader()); private final MethodHandle getSimpleString = - methodLoader.method(TreeNode.class, "simpleString", new Class[] {int.class}); + methodLoader.method(TreeNode.class, "simpleString", int.class); private final MethodHandle getSimpleStringLegacy = methodLoader.method(TreeNode.class, "simpleString"); @@ -156,25 +156,20 @@ protected Object safeParseObjectToJson(Object value, int depth) { } private String getSimpleString(TreeNode value) { - Object simpleString = null; - if (getSimpleString != null) { - try { - simpleString = getSimpleString.invoke(value, MAX_LENGTH); - } catch (Throwable e) { + String simpleString = methodLoader.invoke(getSimpleString, value, MAX_LENGTH); + if (simpleString != null) { + return simpleString; } } if (getSimpleStringLegacy != null) { - try { - simpleString = getSimpleStringLegacy.invoke(value); - } catch (Throwable e) { + String simpleString = methodLoader.invoke(getSimpleStringLegacy, value); + if (simpleString != null) { + return simpleString; } } - if (simpleString != null && simpleString instanceof String) { - return (String) simpleString; - } return null; } diff --git a/dd-java-agent/instrumentation/spark/src/main/java/datadog/trace/instrumentation/spark/AbstractSparkPlanUtils.java b/dd-java-agent/instrumentation/spark/src/main/java/datadog/trace/instrumentation/spark/AbstractSparkPlanUtils.java new file mode 100644 index 00000000000..68af1f402dc --- /dev/null +++ b/dd-java-agent/instrumentation/spark/src/main/java/datadog/trace/instrumentation/spark/AbstractSparkPlanUtils.java @@ -0,0 +1,57 @@ +package datadog.trace.instrumentation.spark; + +import datadog.trace.util.MethodHandles; +import java.lang.invoke.MethodHandle; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.apache.spark.sql.execution.SparkPlanInfo; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import scala.collection.immutable.Map; + +abstract class AbstractSparkPlanUtils { + private static final Logger log = LoggerFactory.getLogger(AbstractSparkPlanUtils.class); + + protected static final MethodHandles methodLoader = + new MethodHandles(ClassLoader.getSystemClassLoader()); + + protected abstract MethodHandle getConstructor(); + + protected abstract MethodHandle getDatabricksConstructor(); + + // Deals with Seq which changed from Scala 2.12 to 2.13, so delegate to version-specific classes + protected abstract Object[] getStandardArgs(SparkPlanInfo planInfo, Map meta); + + // Attempt to create a new SparkPlanInfo with additional metadata replaced + // Since the fields are immutable we must instantiate a new SparkPlanInfo to do this + public SparkPlanInfo upsertSparkPlanInfoMetadata( + SparkPlanInfo planInfo, scala.collection.immutable.Map meta) { + if (getDatabricksConstructor() != null) { + List databricksArgs = new ArrayList<>(Arrays.asList(getStandardArgs(planInfo, meta))); + try { + databricksArgs.add(SparkPlanInfo.class.getMethod("estRowCount").invoke(planInfo)); + databricksArgs.add(SparkPlanInfo.class.getMethod("rddScopeId").invoke(planInfo)); + databricksArgs.add(SparkPlanInfo.class.getMethod("explainId").invoke(planInfo)); + } catch (Throwable t) { + log.warn("Error obtaining Databricks-specific SparkPlanInfo args", t); + } + + SparkPlanInfo newPlan = + methodLoader.invoke(getDatabricksConstructor(), databricksArgs.toArray()); + if (newPlan != null) { + return newPlan; + } + } + + if (getConstructor() != null) { + SparkPlanInfo newPlan = + methodLoader.invoke(getConstructor(), getStandardArgs(planInfo, meta)); + if (newPlan != null) { + return newPlan; + } + } + + return null; + } +} diff --git a/dd-java-agent/instrumentation/spring/spring-boot-1.3/build.gradle b/dd-java-agent/instrumentation/spring/spring-boot-1.3/build.gradle index 4c11d333d7d..26dd765c94b 100644 --- a/dd-java-agent/instrumentation/spring/spring-boot-1.3/build.gradle +++ b/dd-java-agent/instrumentation/spring/spring-boot-1.3/build.gradle @@ -1,9 +1,3 @@ -ext { - latestDepTestMinJavaVersionForTests = JavaVersion.VERSION_17 - latestDepForkedTestMinJavaVersionForTests = JavaVersion.VERSION_17 - boot3TestMinJavaVersionForTests = JavaVersion.VERSION_17 - boot3ForkedTestMinJavaVersionForTests = JavaVersion.VERSION_17 -} muzzle { pass { group = 'org.springframework.boot' @@ -51,3 +45,27 @@ dependencies { latestDepTestImplementation group: 'org.springframework.boot', name: 'spring-boot-starter-logging', version: '+' latestDepForkedTestImplementation group: 'org.springframework.boot', name: 'spring-boot-starter-logging', version: '+' } + +tasks.named("latestDepTest", Test) { + testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_17 + } +} + +tasks.named("latestDepForkedTest", Test) { + testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_17 + } +} + +tasks.named("boot3Test", Test) { + testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_17 + } +} + +tasks.named("boot3ForkedTest", Test) { + testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_17 + } +} diff --git a/dd-java-agent/instrumentation/spring/spring-boot-1.3/gradle.lockfile b/dd-java-agent/instrumentation/spring/spring-boot-1.3/gradle.lockfile index 0d8560d60ec..1d0b838e434 100644 --- a/dd-java-agent/instrumentation/spring/spring-boot-1.3/gradle.lockfile +++ b/dd-java-agent/instrumentation/spring/spring-boot-1.3/gradle.lockfile @@ -172,37 +172,37 @@ org.slf4j:slf4j-simple:2.0.0=spotbugsSlf4j org.snakeyaml:snakeyaml-engine:2.9=boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestRuntimeClasspath,boot3ForkedTestRuntimeClasspath,boot3TestRuntimeClasspath,instrumentPluginClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,muzzleTooling,runtimeClasspath,testRuntimeClasspath org.spockframework:spock-bom:2.4-M6-groovy-3.0=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestCompileClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestCompileClasspath,boot2TestRuntimeClasspath,boot3ForkedTestCompileClasspath,boot3ForkedTestRuntimeClasspath,boot3TestCompileClasspath,boot3TestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.spockframework:spock-core:2.4-M6-groovy-3.0=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestCompileClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestCompileClasspath,boot2TestRuntimeClasspath,boot3ForkedTestCompileClasspath,boot3ForkedTestRuntimeClasspath,boot3TestCompileClasspath,boot3TestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -org.springframework.boot:spring-boot-starter-logging:4.0.0-RC1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.springframework.boot:spring-boot-starter-logging:4.0.0-RC2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.springframework.boot:spring-boot:1.3.0.RELEASE=compileClasspath,testCompileClasspath,testRuntimeClasspath org.springframework.boot:spring-boot:1.5.22.RELEASE=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath,boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath org.springframework.boot:spring-boot:2.0.0.RELEASE=boot2ForkedTestCompileClasspath,boot2ForkedTestRuntimeClasspath,boot2TestCompileClasspath,boot2TestRuntimeClasspath org.springframework.boot:spring-boot:3.0.0=boot3ForkedTestCompileClasspath,boot3ForkedTestRuntimeClasspath,boot3TestCompileClasspath,boot3TestRuntimeClasspath -org.springframework.boot:spring-boot:4.0.0-RC1=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.springframework.boot:spring-boot:4.0.0-RC2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.springframework:spring-aop:4.2.3.RELEASE=compileClasspath,testCompileClasspath,testRuntimeClasspath org.springframework:spring-aop:4.3.25.RELEASE=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath,boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath org.springframework:spring-aop:5.0.4.RELEASE=boot2ForkedTestCompileClasspath,boot2ForkedTestRuntimeClasspath,boot2TestCompileClasspath,boot2TestRuntimeClasspath org.springframework:spring-aop:6.0.2=boot3ForkedTestCompileClasspath,boot3ForkedTestRuntimeClasspath,boot3TestCompileClasspath,boot3TestRuntimeClasspath -org.springframework:spring-aop:7.0.0-RC2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.springframework:spring-aop:7.0.0-RC3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.springframework:spring-beans:4.2.3.RELEASE=compileClasspath,testCompileClasspath,testRuntimeClasspath org.springframework:spring-beans:4.3.25.RELEASE=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath,boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath org.springframework:spring-beans:5.0.4.RELEASE=boot2ForkedTestCompileClasspath,boot2ForkedTestRuntimeClasspath,boot2TestCompileClasspath,boot2TestRuntimeClasspath org.springframework:spring-beans:6.0.2=boot3ForkedTestCompileClasspath,boot3ForkedTestRuntimeClasspath,boot3TestCompileClasspath,boot3TestRuntimeClasspath -org.springframework:spring-beans:7.0.0-RC2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.springframework:spring-beans:7.0.0-RC3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.springframework:spring-context:4.2.3.RELEASE=compileClasspath,testCompileClasspath,testRuntimeClasspath org.springframework:spring-context:4.3.25.RELEASE=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath,boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath org.springframework:spring-context:5.0.4.RELEASE=boot2ForkedTestCompileClasspath,boot2ForkedTestRuntimeClasspath,boot2TestCompileClasspath,boot2TestRuntimeClasspath org.springframework:spring-context:6.0.2=boot3ForkedTestCompileClasspath,boot3ForkedTestRuntimeClasspath,boot3TestCompileClasspath,boot3TestRuntimeClasspath -org.springframework:spring-context:7.0.0-RC2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.springframework:spring-context:7.0.0-RC3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.springframework:spring-core:4.2.3.RELEASE=compileClasspath,testCompileClasspath,testRuntimeClasspath org.springframework:spring-core:4.3.25.RELEASE=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath,boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath org.springframework:spring-core:5.0.4.RELEASE=boot2ForkedTestCompileClasspath,boot2ForkedTestRuntimeClasspath,boot2TestCompileClasspath,boot2TestRuntimeClasspath org.springframework:spring-core:6.0.2=boot3ForkedTestCompileClasspath,boot3ForkedTestRuntimeClasspath,boot3TestCompileClasspath,boot3TestRuntimeClasspath -org.springframework:spring-core:7.0.0-RC2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.springframework:spring-core:7.0.0-RC3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.springframework:spring-expression:4.2.3.RELEASE=compileClasspath,testCompileClasspath,testRuntimeClasspath org.springframework:spring-expression:4.3.25.RELEASE=boot1LatestDepForkedTestCompileClasspath,boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestCompileClasspath,boot1LatestDepTestRuntimeClasspath,boot2LatestDepForkedTestCompileClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestCompileClasspath,boot2LatestDepTestRuntimeClasspath org.springframework:spring-expression:5.0.4.RELEASE=boot2ForkedTestCompileClasspath,boot2ForkedTestRuntimeClasspath,boot2TestCompileClasspath,boot2TestRuntimeClasspath org.springframework:spring-expression:6.0.2=boot3ForkedTestCompileClasspath,boot3ForkedTestRuntimeClasspath,boot3TestCompileClasspath,boot3TestRuntimeClasspath -org.springframework:spring-expression:7.0.0-RC2=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +org.springframework:spring-expression:7.0.0-RC3=latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.springframework:spring-jcl:5.0.4.RELEASE=boot2ForkedTestCompileClasspath,boot2ForkedTestRuntimeClasspath,boot2TestCompileClasspath,boot2TestRuntimeClasspath org.springframework:spring-jcl:6.0.2=boot3ForkedTestCompileClasspath,boot3ForkedTestRuntimeClasspath,boot3TestCompileClasspath,boot3TestRuntimeClasspath org.testng:testng:7.5.1=boot1LatestDepForkedTestRuntimeClasspath,boot1LatestDepTestRuntimeClasspath,boot2ForkedTestRuntimeClasspath,boot2LatestDepForkedTestRuntimeClasspath,boot2LatestDepTestRuntimeClasspath,boot2TestRuntimeClasspath,boot3ForkedTestRuntimeClasspath,boot3TestRuntimeClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath diff --git a/dd-java-agent/instrumentation/spring/spring-data-1.8/build.gradle b/dd-java-agent/instrumentation/spring/spring-data-1.8/build.gradle index 16299481183..bd4060b5ca9 100644 --- a/dd-java-agent/instrumentation/spring/spring-data-1.8/build.gradle +++ b/dd-java-agent/instrumentation/spring/spring-data-1.8/build.gradle @@ -1,8 +1,3 @@ -ext { - // TODO Java 17: This version of spring-data doesn't support Java 17 - maxJavaVersionForTests = JavaVersion.VERSION_15 -} - // This file includes software developed at SignalFx muzzle { @@ -27,6 +22,11 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +testJvmConstraints { + // TODO Java 17: This version of spring-data doesn't support Java 17 + maxJavaVersion = JavaVersion.VERSION_15 +} + addTestSuiteForDir('latestDepTest', 'test') // DQH - API changes that impact instrumentation occurred in spring-data-commons in March 2014. diff --git a/dd-java-agent/instrumentation/spring/spring-jms-3.1/build.gradle b/dd-java-agent/instrumentation/spring/spring-jms-3.1/build.gradle index a8ed32d6221..ecc8a113a6f 100644 --- a/dd-java-agent/instrumentation/spring/spring-jms-3.1/build.gradle +++ b/dd-java-agent/instrumentation/spring/spring-jms-3.1/build.gradle @@ -12,8 +12,6 @@ apply from: "$rootDir/gradle/java.gradle" addTestSuiteForDir('latestDepTest', 'test') addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'test') -apply from: "$rootDir/gradle/configure_tests.gradle" - tasks.named("latestDepTest", Test) { finalizedBy 'latestDepForkedTest' } diff --git a/dd-java-agent/instrumentation/spring/spring-messaging-4.0/build.gradle b/dd-java-agent/instrumentation/spring/spring-messaging-4.0/build.gradle index 1815e56cd32..336ea73a0ec 100644 --- a/dd-java-agent/instrumentation/spring/spring-messaging-4.0/build.gradle +++ b/dd-java-agent/instrumentation/spring/spring-messaging-4.0/build.gradle @@ -1,4 +1,3 @@ - muzzle { pass { group = 'org.springframework' @@ -8,12 +7,12 @@ muzzle { } } -ext { - minJavaVersionForTests = JavaVersion.VERSION_17 -} - apply from: "$rootDir/gradle/java.gradle" +testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_17 +} + addTestSuiteForDir('latestDepTest', 'test') ["compileTestGroovy", "compileLatestDepTestGroovy"].each { name -> diff --git a/dd-java-agent/instrumentation/spring/spring-scheduling-3.1/build.gradle b/dd-java-agent/instrumentation/spring/spring-scheduling-3.1/build.gradle index 6a17318430c..03b31be626a 100644 --- a/dd-java-agent/instrumentation/spring/spring-scheduling-3.1/build.gradle +++ b/dd-java-agent/instrumentation/spring/spring-scheduling-3.1/build.gradle @@ -1,9 +1,3 @@ -ext { - latestDepForkedTestMinJavaVersionForTests = JavaVersion.VERSION_17 - latestDepTestMinJavaVersionForTests = JavaVersion.VERSION_17 - spring6TestMinJavaVersionForTests = JavaVersion.VERSION_17 -} - muzzle { pass { group = 'org.springframework' @@ -76,3 +70,21 @@ dependencies { latestDepTestImplementation group: 'org.springframework', name: 'spring-context', version: '6.+' latestDepTestImplementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa', version: '3.+' } + +tasks.named("latestDepForkedTest", Test) { + testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_17 + } +} + +tasks.named("latestDepTest", Test) { + testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_17 + } +} + +tasks.named("spring6Test", Test) { + testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_17 + } +} diff --git a/dd-java-agent/instrumentation/spring/spring-security/spring-security-6.0/build.gradle b/dd-java-agent/instrumentation/spring/spring-security/spring-security-6.0/build.gradle index 67d0c8ae4f2..e271c5ad55c 100644 --- a/dd-java-agent/instrumentation/spring/spring-security/spring-security-6.0/build.gradle +++ b/dd-java-agent/instrumentation/spring/spring-security/spring-security-6.0/build.gradle @@ -1,8 +1,9 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_17 +apply from: "$rootDir/gradle/java.gradle" + +testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_17 } -apply from: "$rootDir/gradle/java.gradle" addTestSuiteForDir('latestDepTest', 'test') final springBootVersion = '3.0.0' diff --git a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-6.0/build.gradle b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-6.0/build.gradle index c3ca09f8caf..74aa20688cd 100644 --- a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-6.0/build.gradle +++ b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-6.0/build.gradle @@ -1,9 +1,9 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_17 -} - apply from: "$rootDir/gradle/java.gradle" +testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_17 +} + // test that webflux5 instrumentation works for webflux6 too addTestSuite('iastTest') addTestSuite('bootTest') diff --git a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-6.0/gradle.lockfile b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-6.0/gradle.lockfile index c290e9b8800..d273743852e 100644 --- a/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-6.0/gradle.lockfile +++ b/dd-java-agent/instrumentation/spring/spring-webflux/spring-webflux-6.0/gradle.lockfile @@ -76,52 +76,53 @@ io.micrometer:micrometer-observation:1.14.12=latestDepBootTestCompileClasspath,l io.netty.incubator:netty-incubator-codec-classes-quic:0.0.36.Final=bootTestRuntimeClasspath,iastTestRuntimeClasspath,testRuntimeClasspath io.netty.incubator:netty-incubator-codec-native-quic:0.0.36.Final=bootTestRuntimeClasspath,iastTestRuntimeClasspath,testRuntimeClasspath io.netty:netty-buffer:4.1.89.Final=bootTestCompileClasspath,bootTestRuntimeClasspath,iastTestCompileClasspath,iastTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-buffer:4.2.6.Final=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.netty:netty-codec-base:4.2.6.Final=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.netty:netty-codec-classes-quic:4.2.6.Final=latestDepBootTestRuntimeClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath -io.netty:netty-codec-compression:4.2.6.Final=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-buffer:4.2.7.Final=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-base:4.2.7.Final=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-classes-quic:4.2.7.Final=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-compression:4.2.7.Final=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-dns:4.1.89.Final=bootTestCompileClasspath,bootTestRuntimeClasspath,iastTestCompileClasspath,iastTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-codec-dns:4.2.6.Final=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-dns:4.2.7.Final=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-http2:4.1.89.Final=bootTestCompileClasspath,bootTestRuntimeClasspath,iastTestCompileClasspath,iastTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-codec-http2:4.2.6.Final=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-http2:4.2.7.Final=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-http3:4.2.7.Final=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-http:4.1.89.Final=bootTestCompileClasspath,bootTestRuntimeClasspath,iastTestCompileClasspath,iastTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-codec-http:4.2.6.Final=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.netty:netty-codec-native-quic:4.2.6.Final=latestDepBootTestRuntimeClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-http:4.2.7.Final=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-native-quic:4.2.7.Final=latestDepBootTestRuntimeClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec-socks:4.1.89.Final=bootTestCompileClasspath,bootTestRuntimeClasspath,iastTestCompileClasspath,iastTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-codec-socks:4.2.6.Final=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-codec-socks:4.2.7.Final=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-codec:4.1.89.Final=bootTestCompileClasspath,bootTestRuntimeClasspath,iastTestCompileClasspath,iastTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath io.netty:netty-common:4.1.89.Final=bootTestCompileClasspath,bootTestRuntimeClasspath,iastTestCompileClasspath,iastTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-common:4.2.6.Final=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-common:4.2.7.Final=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-handler-proxy:4.1.89.Final=bootTestCompileClasspath,bootTestRuntimeClasspath,iastTestCompileClasspath,iastTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-handler-proxy:4.2.6.Final=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-handler-proxy:4.2.7.Final=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-handler:4.1.89.Final=bootTestCompileClasspath,bootTestRuntimeClasspath,iastTestCompileClasspath,iastTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-handler:4.2.6.Final=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-handler:4.2.7.Final=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-resolver-dns-classes-macos:4.1.89.Final=bootTestCompileClasspath,bootTestRuntimeClasspath,iastTestCompileClasspath,iastTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-resolver-dns-classes-macos:4.2.6.Final=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-resolver-dns-classes-macos:4.2.7.Final=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-resolver-dns-native-macos:4.1.89.Final=bootTestCompileClasspath,bootTestRuntimeClasspath,iastTestCompileClasspath,iastTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-resolver-dns-native-macos:4.2.6.Final=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-resolver-dns-native-macos:4.2.7.Final=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-resolver-dns:4.1.89.Final=bootTestCompileClasspath,bootTestRuntimeClasspath,iastTestCompileClasspath,iastTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-resolver-dns:4.2.6.Final=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-resolver-dns:4.2.7.Final=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-resolver:4.1.89.Final=bootTestCompileClasspath,bootTestRuntimeClasspath,iastTestCompileClasspath,iastTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-resolver:4.2.6.Final=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-resolver:4.2.7.Final=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-transport-classes-epoll:4.1.89.Final=bootTestCompileClasspath,bootTestRuntimeClasspath,iastTestCompileClasspath,iastTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-transport-classes-epoll:4.2.6.Final=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport-classes-epoll:4.2.7.Final=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-transport-native-epoll:4.1.89.Final=bootTestCompileClasspath,bootTestRuntimeClasspath,iastTestCompileClasspath,iastTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-transport-native-epoll:4.2.6.Final=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport-native-epoll:4.2.7.Final=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-transport-native-unix-common:4.1.89.Final=bootTestCompileClasspath,bootTestRuntimeClasspath,iastTestCompileClasspath,iastTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-transport-native-unix-common:4.2.6.Final=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport-native-unix-common:4.2.7.Final=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.netty:netty-transport:4.1.89.Final=bootTestCompileClasspath,bootTestRuntimeClasspath,iastTestCompileClasspath,iastTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -io.netty:netty-transport:4.2.6.Final=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.netty:netty-transport:4.2.7.Final=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.projectreactor.netty.incubator:reactor-netty-incubator-quic:0.1.3=bootTestRuntimeClasspath,iastTestRuntimeClasspath,testRuntimeClasspath io.projectreactor.netty:reactor-netty-core:1.1.3=bootTestCompileClasspath,bootTestRuntimeClasspath,iastTestCompileClasspath,iastTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -io.projectreactor.netty:reactor-netty-core:1.3.0-RC1=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.projectreactor.netty:reactor-netty-core:1.3.0=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.projectreactor.netty:reactor-netty-http:1.1.3=bootTestCompileClasspath,bootTestRuntimeClasspath,iastTestCompileClasspath,iastTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -io.projectreactor.netty:reactor-netty-http:1.3.0-RC1=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath -io.projectreactor.netty:reactor-netty-quic:1.0.0-RC1=latestDepBootTestRuntimeClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath +io.projectreactor.netty:reactor-netty-http:1.3.0=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.projectreactor.netty:reactor-netty-quic:1.3.0=latestDepBootTestRuntimeClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath io.projectreactor.netty:reactor-netty:1.1.3=bootTestCompileClasspath,bootTestRuntimeClasspath,iastTestCompileClasspath,iastTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -io.projectreactor.netty:reactor-netty:1.3.0-RC1=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.projectreactor.netty:reactor-netty:1.3.0=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.projectreactor:reactor-core:3.5.3=bootTestCompileClasspath,bootTestRuntimeClasspath,iastTestCompileClasspath,iastTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -io.projectreactor:reactor-core:3.8.0-RC1=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath +io.projectreactor:reactor-core:3.8.0=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath io.sqreen:libsqreen:17.2.0=bootTestRuntimeClasspath,iastTestRuntimeClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestRuntimeClasspath,testRuntimeClasspath jakarta.activation:jakarta.activation-api:2.1.0=bootTestCompileClasspath,bootTestRuntimeClasspath,iastTestCompileClasspath,iastTestRuntimeClasspath jakarta.activation:jakarta.activation-api:2.1.4=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath @@ -163,6 +164,7 @@ org.apiguardian:apiguardian-api:1.1.2=bootTestCompileClasspath,iastTestCompileCl org.assertj:assertj-core:3.23.1=bootTestCompileClasspath,bootTestRuntimeClasspath,iastTestCompileClasspath,iastTestRuntimeClasspath org.assertj:assertj-core:3.27.6=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath org.awaitility:awaitility:4.2.2=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath +org.bouncycastle:bcprov-jdk18on:1.80=latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath org.checkerframework:checker-qual:3.33.0=annotationProcessor,bootTestAnnotationProcessor,iastTestAnnotationProcessor,latestDepBootTestAnnotationProcessor,latestDepForkedTestAnnotationProcessor,latestDepTestAnnotationProcessor,testAnnotationProcessor org.codehaus.groovy:groovy-all:3.0.24=bootTestCompileClasspath,bootTestRuntimeClasspath,iastTestCompileClasspath,iastTestRuntimeClasspath,latestDepBootTestCompileClasspath,latestDepBootTestRuntimeClasspath,latestDepForkedTestCompileClasspath,latestDepForkedTestRuntimeClasspath,latestDepTestCompileClasspath,latestDepTestRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.codehaus.groovy:groovy-ant:3.0.23=codenarc diff --git a/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-6.0/build.gradle b/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-6.0/build.gradle index d68949f6133..95377bf5c18 100644 --- a/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-6.0/build.gradle +++ b/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-6.0/build.gradle @@ -1,7 +1,3 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_17 -} - muzzle { pass { group = 'org.springframework' @@ -14,6 +10,10 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +tracerJava { + addSourceSetFor(JavaVersion.VERSION_17) +} + addTestSuiteForDir("latestDepTest", "test") ["compileMain_java17Java", "compileTestJava", "compileLatestDepTestJava"].each { diff --git a/dd-java-agent/instrumentation/spymemcached-2.10/build.gradle b/dd-java-agent/instrumentation/spymemcached-2.10/build.gradle index 565824ff70d..81a3331232b 100644 --- a/dd-java-agent/instrumentation/spymemcached-2.10/build.gradle +++ b/dd-java-agent/instrumentation/spymemcached-2.10/build.gradle @@ -8,7 +8,6 @@ muzzle { } apply from: "$rootDir/gradle/java.gradle" -apply from: "$rootDir/gradle/configure_tests.gradle" addTestSuiteForDir('latestDepTest', 'test') addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'test') diff --git a/dd-java-agent/instrumentation/testng/testng-6/build.gradle b/dd-java-agent/instrumentation/testng/testng-6/build.gradle index ce584b3fe43..8721f9107b8 100644 --- a/dd-java-agent/instrumentation/testng/testng-6/build.gradle +++ b/dd-java-agent/instrumentation/testng/testng-6/build.gradle @@ -2,6 +2,8 @@ plugins { id 'java-test-fixtures' } +ext.testingInstrumentation = true + apply from: "$rootDir/gradle/java.gradle" muzzle { diff --git a/dd-java-agent/instrumentation/testng/testng-7/build.gradle b/dd-java-agent/instrumentation/testng/testng-7/build.gradle index 6385a574129..0bedab6fcd9 100644 --- a/dd-java-agent/instrumentation/testng/testng-7/build.gradle +++ b/dd-java-agent/instrumentation/testng/testng-7/build.gradle @@ -3,8 +3,7 @@ plugins { } ext { - // testng 7.6.0+ requires Java 11 or higher. - latestDepTestMinJavaVersionForTests = JavaVersion.VERSION_11 + testingInstrumentation = true } apply from: "$rootDir/gradle/java.gradle" @@ -25,9 +24,16 @@ muzzle { } } -addTestSuiteForDir('latestDepTest', 'test') // testng 7.5.1 is the latest version compatible with Java 8 addTestSuiteForDir('testng751Test', 'test') +addTestSuiteForDir('latestDepTest', 'test') + +tasks.named("latestDepTest", Test) { + // testng 7.6.0+ requires Java 11 or higher. + testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_11 + } +} dependencies { compileOnly group: 'org.testng', name: 'testng', version: '7.0.0' diff --git a/dd-java-agent/instrumentation/tomcat/tomcat-5.5/build.gradle b/dd-java-agent/instrumentation/tomcat/tomcat-5.5/build.gradle index 16c25302bbb..4263aff25f6 100644 --- a/dd-java-agent/instrumentation/tomcat/tomcat-5.5/build.gradle +++ b/dd-java-agent/instrumentation/tomcat/tomcat-5.5/build.gradle @@ -1,10 +1,3 @@ -ext { - latestDepTestMinJavaVersionForTests = JavaVersion.VERSION_17 - latestDepForkedTestMinJavaVersionForTests = JavaVersion.VERSION_17 - latest10TestMinJavaVersionForTests = JavaVersion.VERSION_11 - latest10ForkedTestMinJavaVersionForTests = JavaVersion.VERSION_11 -} - muzzle { // Catalina doesn't reliably depend on coyote, so we use a different dependency that does. pass { @@ -62,7 +55,6 @@ addTestSuite("tomcat9Test") addTestSuiteForDir('latest10Test', 'latestDepTest') addTestSuiteExtendingForDir('latest10ForkedTest', 'latest10Test', 'latestDepTest') - def tomcatVersion = '5.5.12' // earliest 5.5.x available in maven central (with all needed dependencies). configurations.configureEach { @@ -148,7 +140,7 @@ dependencies { tasks.withType(Test).configureEach { // to avoid java.lang.IllegalAccessException: class org.apache.tomcat.util.compat.JreCompat cannot access a member of class java.io.FileSystem (in module java.base) with modifiers "static final" - configureJvmArgs( + conditionalJvmArgs( it, JavaVersion.VERSION_16, ['--add-opens', 'java.base/java.io=ALL-UNNAMED'] @@ -168,3 +160,27 @@ tasks.withType(Test).configureEach { it.exclude group: 'javax.servlet', module: 'servlet-api' } } + +tasks.named("latestDepTest", Test) { + testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_17 + } +} + +tasks.named("latestDepForkedTest", Test) { + testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_17 + } +} + +tasks.named("latest10Test", Test) { + testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_11 + } +} + +tasks.named("latest10ForkedTest", Test) { + testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_11 + } +} diff --git a/dd-java-agent/instrumentation/undertow/undertow-2.2/build.gradle b/dd-java-agent/instrumentation/undertow/undertow-2.2/build.gradle index e5e8b6b3d99..e3abc5e9c39 100644 --- a/dd-java-agent/instrumentation/undertow/undertow-2.2/build.gradle +++ b/dd-java-agent/instrumentation/undertow/undertow-2.2/build.gradle @@ -1,7 +1,3 @@ -ext { - latestDepTestMinJavaVersionForTests = JavaVersion.VERSION_11 - latestDepForkedTestMinJavaVersionForTests = JavaVersion.VERSION_11 -} muzzle { pass { group = "io.undertow" @@ -24,6 +20,7 @@ addTestSuiteForDir('latestDepTest', 'test') addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'test') addTestSuiteForDir('latest22Test', 'test') addTestSuiteExtendingForDir('latest22ForkedTest', 'latest22Test', 'test') + dependencies { compileOnly group: 'io.undertow', name: 'undertow-servlet-jakarta', version: '2.2.14.Final' implementation project(':dd-java-agent:instrumentation:undertow') @@ -48,3 +45,16 @@ dependencies { exclude group: 'io.undertow', module: 'undertow-websocket-jsr-jakarta' } } + +tasks.named("latestDepTest", Test) { + testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_11 + } +} + +tasks.named("latestDepForkedTest", Test) { + testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_11 + } +} + diff --git a/dd-java-agent/instrumentation/vertx/vertx-mysql-client/vertx-mysql-client-3.9/build.gradle b/dd-java-agent/instrumentation/vertx/vertx-mysql-client/vertx-mysql-client-3.9/build.gradle index 93f9000af8d..47917d808bd 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-mysql-client/vertx-mysql-client-3.9/build.gradle +++ b/dd-java-agent/instrumentation/vertx/vertx-mysql-client/vertx-mysql-client-3.9/build.gradle @@ -14,8 +14,6 @@ muzzle { addTestSuiteForDir('latestDepTest', 'test') addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'test') -apply from: "$rootDir/gradle/configure_tests.gradle" - tasks.named("latestDepTest", Test) { finalizedBy 'latestDepForkedTest' } diff --git a/dd-java-agent/instrumentation/vertx/vertx-mysql-client/vertx-mysql-client-4.0/build.gradle b/dd-java-agent/instrumentation/vertx/vertx-mysql-client/vertx-mysql-client-4.0/build.gradle index e04507cb8ba..fcb046147b0 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-mysql-client/vertx-mysql-client-4.0/build.gradle +++ b/dd-java-agent/instrumentation/vertx/vertx-mysql-client/vertx-mysql-client-4.0/build.gradle @@ -13,8 +13,6 @@ muzzle { addTestSuiteForDir('latestDepTest', 'test') addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'test') -apply from: "$rootDir/gradle/configure_tests.gradle" - tasks.named("latestDepTest", Test) { finalizedBy 'latestDepForkedTest' } diff --git a/dd-java-agent/instrumentation/vertx/vertx-mysql-client/vertx-mysql-client-4.4.2/build.gradle b/dd-java-agent/instrumentation/vertx/vertx-mysql-client/vertx-mysql-client-4.4.2/build.gradle index 6159f4e43e8..c87098d8a90 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-mysql-client/vertx-mysql-client-4.4.2/build.gradle +++ b/dd-java-agent/instrumentation/vertx/vertx-mysql-client/vertx-mysql-client-4.4.2/build.gradle @@ -13,8 +13,6 @@ muzzle { addTestSuiteForDir('latestDepTest', 'test') addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'test') -apply from: "$rootDir/gradle/configure_tests.gradle" - tasks.named("latestDepTest", Test) { finalizedBy 'latestDepForkedTest' } diff --git a/dd-java-agent/instrumentation/vertx/vertx-pg-client/vertx-pg-client-4.0/build.gradle b/dd-java-agent/instrumentation/vertx/vertx-pg-client/vertx-pg-client-4.0/build.gradle index 46dfa1e16f4..002e1c63393 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-pg-client/vertx-pg-client-4.0/build.gradle +++ b/dd-java-agent/instrumentation/vertx/vertx-pg-client/vertx-pg-client-4.0/build.gradle @@ -21,8 +21,6 @@ muzzle { addTestSuiteForDir('latestDepTest', 'test') addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'test') -apply from: "$rootDir/gradle/configure_tests.gradle" - tasks.named("latestDepTest", Test) { finalizedBy 'latestDepForkedTest' } diff --git a/dd-java-agent/instrumentation/vertx/vertx-pg-client/vertx-pg-client-4.4.2/build.gradle b/dd-java-agent/instrumentation/vertx/vertx-pg-client/vertx-pg-client-4.4.2/build.gradle index 8f29134c68c..16e8f6d2ba8 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-pg-client/vertx-pg-client-4.4.2/build.gradle +++ b/dd-java-agent/instrumentation/vertx/vertx-pg-client/vertx-pg-client-4.4.2/build.gradle @@ -12,8 +12,6 @@ muzzle { addTestSuiteForDir('latestDepTest', 'test') addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'test') -apply from: "$rootDir/gradle/configure_tests.gradle" - tasks.named("latestDepTest", Test) { finalizedBy 'latestDepForkedTest' } diff --git a/dd-java-agent/instrumentation/vertx/vertx-redis-client-3.9/build.gradle b/dd-java-agent/instrumentation/vertx/vertx-redis-client-3.9/build.gradle index 5e847d89caa..ffbef8a91c3 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-redis-client-3.9/build.gradle +++ b/dd-java-agent/instrumentation/vertx/vertx-redis-client-3.9/build.gradle @@ -9,7 +9,6 @@ muzzle { } apply from: "$rootDir/gradle/java.gradle" -apply from: "$rootDir/gradle/configure_tests.gradle" addTestSuiteForDir('latestDepTest', 'test') addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'test') diff --git a/dd-java-agent/instrumentation/vertx/vertx-rx-3.5/build.gradle b/dd-java-agent/instrumentation/vertx/vertx-rx-3.5/build.gradle index fdf319a2514..8c98c54be0c 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-rx-3.5/build.gradle +++ b/dd-java-agent/instrumentation/vertx/vertx-rx-3.5/build.gradle @@ -3,8 +3,6 @@ apply from: "$rootDir/gradle/java.gradle" addTestSuiteForDir('latestDepTest', 'test') addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'test') -apply from: "$rootDir/gradle/configure_tests.gradle" - tasks.named("latestDepTest", Test) { finalizedBy 'latestDepForkedTest' } diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/build.gradle b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/build.gradle index 56f1bf53c32..2652d8fb60b 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/build.gradle +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/build.gradle @@ -1,11 +1,10 @@ -// Set properties before any plugins get loaded -ext { +apply from: "$rootDir/gradle/java.gradle" + +testJvmConstraints { // TODO Java 17: This version of vertx-web doesn't support Java 17 - maxJavaVersionForTests = JavaVersion.VERSION_15 + maxJavaVersion = JavaVersion.VERSION_15 } -apply from: "$rootDir/gradle/java.gradle" - muzzle { pass { group = 'io.vertx' @@ -18,8 +17,6 @@ muzzle { addTestSuiteForDir('latestDepTest', 'test') addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'test') -apply from: "$rootDir/gradle/configure_tests.gradle" - tasks.named("latestDepTest", Test) { finalizedBy 'latestDepForkedTest' } diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.5/build.gradle b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.5/build.gradle index e2fe7548b0d..53b4908a296 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.5/build.gradle +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.5/build.gradle @@ -1,11 +1,10 @@ -// Set properties before any plugins get loaded -ext { +apply from: "$rootDir/gradle/java.gradle" + +testJvmConstraints { // TODO Java 17: This version of vertx-web doesn't support Java 17 - maxJavaVersionForTests = JavaVersion.VERSION_15 + maxJavaVersion = JavaVersion.VERSION_15 } -apply from: "$rootDir/gradle/java.gradle" - muzzle { pass { group = 'io.vertx' @@ -18,8 +17,6 @@ muzzle { addTestSuiteForDir('latestDepTest', 'test') addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'test') -apply from: "$rootDir/gradle/configure_tests.gradle" - tasks.named("latestDepTest", Test) { finalizedBy 'latestDepForkedTest' } diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.9/build.gradle b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.9/build.gradle index 106cc9860ef..ca486c2a54a 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.9/build.gradle +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.9/build.gradle @@ -1,11 +1,10 @@ -// Set properties before any plugins get loaded -ext { +apply from: "$rootDir/gradle/java.gradle" + +testJvmConstraints { // TODO Java 17: This version of vertx-web doesn't support Java 17 - maxJavaVersionForTests = JavaVersion.VERSION_15 + maxJavaVersion = JavaVersion.VERSION_15 } -apply from: "$rootDir/gradle/java.gradle" - muzzle { pass { group = 'io.vertx' diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/build.gradle b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/build.gradle index 973810b24c5..ac2a06fce43 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/build.gradle +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-4.0/build.gradle @@ -1,16 +1,10 @@ -// Set properties before any plugins get loaded -ext { +apply from: "$rootDir/gradle/java.gradle" + +testJvmConstraints { // vertx-web doesn't support Java 17 until v4.2 - maxJavaVersionForTests = JavaVersion.VERSION_15 - // unbound it for latest - latestDepTestMinJavaVersionForTests = JavaVersion.VERSION_11 - latestDepForkedTestMinJavaVersionForTests = JavaVersion.VERSION_11 - latestDepTestMaxJavaVersionForTests = JavaVersion.VERSION_25 - latestDepForkedTestMaxJavaVersionForTests = JavaVersion.VERSION_25 + maxJavaVersion = JavaVersion.VERSION_15 } -apply from: "$rootDir/gradle/java.gradle" - muzzle { pass { group = 'io.vertx' @@ -68,3 +62,18 @@ dependencies { configureCompiler(it, 11) } } + +tasks.named("latestDepTest", Test) { + testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_11 + maxJavaVersion = JavaVersion.VERSION_25 + } +} + +tasks.named("latestDepForkedTest", Test) { + testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_11 + maxJavaVersion = JavaVersion.VERSION_25 + } +} + diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-5.0/build.gradle b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-5.0/build.gradle index aa38065c277..cc9336fd588 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-5.0/build.gradle +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-5.0/build.gradle @@ -1,9 +1,12 @@ -// Set properties before any plugins get loaded -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 +apply from: "$rootDir/gradle/java.gradle" + +tracerJava { + addSourceSetFor(JavaVersion.VERSION_11) } -apply from: "$rootDir/gradle/java.gradle" +testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_11 +} muzzle { pass { @@ -56,3 +59,4 @@ dependencies { tasks.named("compileJava", JavaCompile) { configureCompiler(it, 11, JavaVersion.VERSION_1_8) } + diff --git a/dd-java-agent/instrumentation/weaver/build.gradle b/dd-java-agent/instrumentation/weaver/build.gradle index f763985c7a8..fb392c43966 100644 --- a/dd-java-agent/instrumentation/weaver/build.gradle +++ b/dd-java-agent/instrumentation/weaver/build.gradle @@ -1,3 +1,5 @@ +ext.testingInstrumentation = true + apply from: "$rootDir/gradle/java.gradle" apply plugin: 'scala' diff --git a/dd-java-agent/instrumentation/websocket/jakarta-websocket-2.0/build.gradle b/dd-java-agent/instrumentation/websocket/jakarta-websocket-2.0/build.gradle index 5bc84784fb8..98c3921acfd 100644 --- a/dd-java-agent/instrumentation/websocket/jakarta-websocket-2.0/build.gradle +++ b/dd-java-agent/instrumentation/websocket/jakarta-websocket-2.0/build.gradle @@ -1,7 +1,3 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 - minJavaVersionForLatestDepTests = JavaVersion.VERSION_17 -} muzzle { pass { name = "jakarta-websocket" @@ -13,6 +9,11 @@ muzzle { } apply from: "$rootDir/gradle/java.gradle" + +testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_11 +} + addTestSuiteForDir("latestDepTest", "test") dependencies { @@ -23,3 +24,9 @@ dependencies { testImplementation group: 'org.glassfish.tyrus', name: 'tyrus-container-inmemory', version: '2.0.0' latestDepTestImplementation group: 'org.glassfish.tyrus', name: 'tyrus-container-inmemory', version: '+' } + +tasks.named('latestDepTest', Test) { + testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_17 + } +} diff --git a/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-10/build.gradle b/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-10/build.gradle index 3887a16899f..200313e411c 100644 --- a/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-10/build.gradle +++ b/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-10/build.gradle @@ -1,7 +1,3 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 -} - muzzle { pass { name = 'jetty-websocket-10' @@ -15,6 +11,10 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +tracerJava { + addSourceSetFor(JavaVersion.VERSION_11) +} + addTestSuite("latestDepTest") tasks.named("compileMain_java11Java", JavaCompile) { diff --git a/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-11/build.gradle b/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-11/build.gradle index 8bffea9cfe4..1084b4e40c4 100644 --- a/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-11/build.gradle +++ b/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-11/build.gradle @@ -1,7 +1,3 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 -} - muzzle { pass { name = 'jetty-websocket-11' @@ -15,6 +11,10 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_11 +} + addTestSuite("latestDepTest") ["compileTestGroovy", "compileLatestDepTestGroovy"].each { name -> diff --git a/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-12/build.gradle b/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-12/build.gradle index ca29fca2746..61410c1688a 100644 --- a/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-12/build.gradle +++ b/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-12/build.gradle @@ -1,7 +1,3 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_17 -} - muzzle { pass { name = 'jetty-websocket-12ee8' @@ -28,6 +24,10 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_17 +} + addTestSuiteForDir("latestDepTest", "test") ["compileTestGroovy", "compileLatestDepTestGroovy"].each { name -> diff --git a/dd-java-agent/instrumentation/wildfly-9.0/build.gradle b/dd-java-agent/instrumentation/wildfly-9.0/build.gradle index c930ee2e929..e7b7ebcde39 100644 --- a/dd-java-agent/instrumentation/wildfly-9.0/build.gradle +++ b/dd-java-agent/instrumentation/wildfly-9.0/build.gradle @@ -1,9 +1,3 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 - latestDepTestMinJavaVersionForTests = JavaVersion.VERSION_17 - latestDepForkedTestMinJavaVersionForTests = JavaVersion.VERSION_17 -} - repositories { maven { url = 'https://maven.repository.redhat.com/ga/' @@ -22,6 +16,10 @@ muzzle { apply from: "$rootDir/gradle/java.gradle" +testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_11 +} + addTestSuiteForDir("latestDepTest", "test") addTestSuiteExtendingForDir("latestDepForkedTest", "latestDepTest", "test") @@ -109,11 +107,10 @@ tasks.named("forkedTest", Test) { dependsOn 'extractWildfly' } -tasks.named("latestDepForkedTest", Test) { - dependsOn 'extractLatestWildfly' -} - tasks.named("latestDepTest", Test) { + testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_17 + } dependsOn 'extractLatestWildfly' } @@ -175,6 +172,9 @@ tasks.named("forkedTest", Test) { } tasks.named("latestDepForkedTest", Test) { + testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_17 + } jvmArgumentProviders.add( objects.newInstance(DistributionLocationProvider).tap { distribution = extractLatestWildfly.map { it.destinationDir } diff --git a/dd-smoke-tests/appsec/springboot-grpc/build.gradle b/dd-smoke-tests/appsec/springboot-grpc/build.gradle index 30c12e961de..2bf39be910c 100644 --- a/dd-smoke-tests/appsec/springboot-grpc/build.gradle +++ b/dd-smoke-tests/appsec/springboot-grpc/build.gradle @@ -4,13 +4,12 @@ plugins { id 'com.gradleup.shadow' } -ext { - // TODO Java 17: This version of spring-boot doesn't support Java 17 - maxJavaVersionForTests = JavaVersion.VERSION_15 -} - apply from: "$rootDir/gradle/java.gradle" +testJvmConstraints { + // TODO Java 17: This version of spring-boot doesn't support Java 17 + maxJavaVersion = JavaVersion.VERSION_15 +} // The standard spring-boot plugin doesn't play nice with our project // so we'll build a fat jar instead tasks.named("jar", Jar) { diff --git a/dd-smoke-tests/armeria-grpc/build.gradle b/dd-smoke-tests/armeria-grpc/build.gradle index fc5977dedcf..de48e239cb1 100644 --- a/dd-smoke-tests/armeria-grpc/build.gradle +++ b/dd-smoke-tests/armeria-grpc/build.gradle @@ -2,12 +2,12 @@ plugins { id 'com.google.protobuf' version '0.9.3' } -ext { - minJavaVersionForTests = JavaVersion.VERSION_17 -} - apply from: "$rootDir/gradle/java.gradle" +testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_17 +} + sourceSets { main { proto { diff --git a/dd-smoke-tests/concurrent/java-21/build.gradle b/dd-smoke-tests/concurrent/java-21/build.gradle index 86d1d025105..35fadfa2a29 100644 --- a/dd-smoke-tests/concurrent/java-21/build.gradle +++ b/dd-smoke-tests/concurrent/java-21/build.gradle @@ -5,13 +5,13 @@ plugins { id 'com.gradleup.shadow' } -ext { - minJavaVersionForTests = JavaVersion.VERSION_21 - maxJavaVersionForTests = JavaVersion.VERSION_25 -} - apply from: "$rootDir/gradle/java.gradle" +testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_21 + maxJavaVersion = JavaVersion.VERSION_25 +} + description = 'JDK 21 Concurrent Integration Tests' java { diff --git a/dd-smoke-tests/concurrent/java-25/build.gradle b/dd-smoke-tests/concurrent/java-25/build.gradle index 59be13d01a9..c77993038a5 100644 --- a/dd-smoke-tests/concurrent/java-25/build.gradle +++ b/dd-smoke-tests/concurrent/java-25/build.gradle @@ -5,19 +5,19 @@ plugins { id 'com.gradleup.shadow' } -ext { +apply from: "$rootDir/gradle/java.gradle" + +testJvmConstraints { // This smoke test should be limited to Java 25 and above // But the groovy testing framework cannot run on Java 25 // Using Java 8 for now and runs a JVM 25 when forking tests process. // Relying on forked JVM 25 is hardcoded in the test suites (see createProcessBuilder()). - minJavaVersionForTests = JavaVersion.VERSION_1_8 - maxJavaVersionForTests = JavaVersion.VERSION_1_8 + minJavaVersion = JavaVersion.VERSION_1_8 + maxJavaVersion = JavaVersion.VERSION_1_8 // Only runs on Temurin build as it spawns a Temurin 25 for test process. excludeJdk = ['IBM8', 'SEMERU8'] } -apply from: "$rootDir/gradle/java.gradle" - description = 'JDK 25 Concurrent Integration Tests' javaToolchains { diff --git a/dd-smoke-tests/crashtracking/build.gradle b/dd-smoke-tests/crashtracking/build.gradle index 7c3772504e0..9ce1f54afa2 100644 --- a/dd-smoke-tests/crashtracking/build.gradle +++ b/dd-smoke-tests/crashtracking/build.gradle @@ -4,12 +4,12 @@ plugins { id 'com.gradleup.shadow' } -ext { +apply from: "$rootDir/gradle/java.gradle" + +testJvmConstraints { excludeJdk = ['IBM8'] } -apply from: "$rootDir/gradle/java.gradle" - description = 'Crashtracking Integration Tests.' tasks.named("jar", Jar) { diff --git a/dd-smoke-tests/java9-modules/build.gradle b/dd-smoke-tests/java9-modules/build.gradle index dbf53f877f9..4840ab8eb3b 100644 --- a/dd-smoke-tests/java9-modules/build.gradle +++ b/dd-smoke-tests/java9-modules/build.gradle @@ -1,9 +1,9 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 -} - apply from: "$rootDir/gradle/java.gradle" +tracerJava { + addSourceSetFor(JavaVersion.VERSION_11) +} + tasks.named("jar", Jar) { manifest { attributes('Main-Class': 'datadog.smoketest.moduleapp.ModuleApplication') diff --git a/dd-smoke-tests/jboss-modules/build.gradle b/dd-smoke-tests/jboss-modules/build.gradle index b3cc061d502..e8c85649ab1 100644 --- a/dd-smoke-tests/jboss-modules/build.gradle +++ b/dd-smoke-tests/jboss-modules/build.gradle @@ -1,12 +1,11 @@ +apply from: "$rootDir/gradle/java.gradle" +description = 'JBoss Modules Smoke Tests.' -ext { +testJvmConstraints { // see https://datadoghq.atlassian.net/wiki/x/H4S2NQE excludeJdk = ['IBM8'] } -apply from: "$rootDir/gradle/java.gradle" -description = 'JBoss Modules Smoke Tests.' - configurations { register('jbossModulesV1') register('jbossModulesV2') diff --git a/dd-smoke-tests/kafka-3/build.gradle b/dd-smoke-tests/kafka-3/build.gradle index 0c805e1e6b3..fba27724ff3 100644 --- a/dd-smoke-tests/kafka-3/build.gradle +++ b/dd-smoke-tests/kafka-3/build.gradle @@ -1,9 +1,10 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_17 -} - apply from: "$rootDir/gradle/java.gradle" apply plugin: 'java-test-fixtures' + +testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_17 +} + description = 'Kafka 3.x Smoke Tests.' dependencies { diff --git a/dd-smoke-tests/play-2.4/build.gradle b/dd-smoke-tests/play-2.4/build.gradle index a20064aee21..1a0de08b58b 100644 --- a/dd-smoke-tests/play-2.4/build.gradle +++ b/dd-smoke-tests/play-2.4/build.gradle @@ -2,12 +2,13 @@ plugins { id 'org.gradle.playframework' } -ext { +apply from: "$rootDir/gradle/java.gradle" + +testJvmConstraints { // TODO Java 17: This version of play doesn't support Java 17 - maxJavaVersionForTests = JavaVersion.VERSION_15 + maxJavaVersion = JavaVersion.VERSION_15 } -apply from: "$rootDir/gradle/java.gradle" apply from: "$rootDir/dd-smoke-tests/play-common/fix-play-routes.gradle" def playVer = "2.4.11" diff --git a/dd-smoke-tests/play-2.5/build.gradle b/dd-smoke-tests/play-2.5/build.gradle index d4c8b14cee1..f0e71773b3a 100644 --- a/dd-smoke-tests/play-2.5/build.gradle +++ b/dd-smoke-tests/play-2.5/build.gradle @@ -2,14 +2,14 @@ plugins { id 'org.gradle.playframework' } -ext { - // TODO Java 17: This version of play doesn't support Java 17 - maxJavaVersionForTests = JavaVersion.VERSION_15 -} - apply from: "$rootDir/gradle/java.gradle" apply from: "$rootDir/dd-smoke-tests/play-common/fix-play-routes.gradle" +testJvmConstraints { + // TODO Java 17: This version of play doesn't support Java 17 + maxJavaVersion = JavaVersion.VERSION_15 +} + def playVer = "2.5.19" def scalaVer = System.getProperty("scala.binary.version", /* default = */ "2.11") diff --git a/dd-smoke-tests/play-2.6/build.gradle b/dd-smoke-tests/play-2.6/build.gradle index f2454a82f89..2d95b942697 100644 --- a/dd-smoke-tests/play-2.6/build.gradle +++ b/dd-smoke-tests/play-2.6/build.gradle @@ -2,14 +2,14 @@ plugins { id 'org.gradle.playframework' } -ext { - // TODO Java 17: This version of play doesn't support Java 17 - maxJavaVersionForTests = JavaVersion.VERSION_15 -} - apply from: "$rootDir/gradle/java.gradle" apply from: "$rootDir/dd-smoke-tests/play-common/fix-play-routes.gradle" +testJvmConstraints { + // TODO Java 17: This version of play doesn't support Java 17 + maxJavaVersion = JavaVersion.VERSION_15 +} + def playVer = "2.6.25" def scalaVer = System.getProperty("scala.binary.version", /* default = */ "2.12") diff --git a/dd-smoke-tests/play-2.7/build.gradle b/dd-smoke-tests/play-2.7/build.gradle index 543e37bad7b..32001a18e7e 100644 --- a/dd-smoke-tests/play-2.7/build.gradle +++ b/dd-smoke-tests/play-2.7/build.gradle @@ -2,14 +2,14 @@ plugins { id 'org.gradle.playframework' } -ext { - // TODO Java 17: This version of play doesn't support Java 17 - maxJavaVersionForTests = JavaVersion.VERSION_15 -} - apply from: "$rootDir/gradle/java.gradle" apply from: "$rootDir/dd-smoke-tests/play-common/fix-play-routes.gradle" +testJvmConstraints { + // TODO Java 17: This version of play doesn't support Java 17 + maxJavaVersion = JavaVersion.VERSION_15 +} + def playVer = "2.7.9" def scalaVer = System.getProperty("scala.version", /* default = */ "2.13") diff --git a/dd-smoke-tests/profiling-integration-tests/build.gradle b/dd-smoke-tests/profiling-integration-tests/build.gradle index 934a093faf5..cdab8646de2 100644 --- a/dd-smoke-tests/profiling-integration-tests/build.gradle +++ b/dd-smoke-tests/profiling-integration-tests/build.gradle @@ -4,12 +4,12 @@ plugins { id 'com.gradleup.shadow' } -ext { +apply from: "$rootDir/gradle/java.gradle" + +testJvmConstraints { excludeJdk = ['IBM8'] } -apply from: "$rootDir/gradle/java.gradle" - description = 'Profiling Integration Tests.' tasks.named("jar", Jar) { diff --git a/dd-smoke-tests/quarkus/build.gradle b/dd-smoke-tests/quarkus/build.gradle index e85c9653377..061140ddcc8 100644 --- a/dd-smoke-tests/quarkus/build.gradle +++ b/dd-smoke-tests/quarkus/build.gradle @@ -1,10 +1,10 @@ -ext { +apply from: "$rootDir/gradle/java.gradle" + +testJvmConstraints { // Quarkus is only supported up to Java 21: https://github.com/quarkusio/quarkus - maxJavaVersionForTests = JavaVersion.VERSION_21 + maxJavaVersion = JavaVersion.VERSION_21 } -apply from: "$rootDir/gradle/java.gradle" - dependencies { testImplementation project(':dd-smoke-tests') } diff --git a/dd-smoke-tests/rum/tomcat-10/build.gradle b/dd-smoke-tests/rum/tomcat-10/build.gradle index 20954f3c2c4..4c4202f65de 100644 --- a/dd-smoke-tests/rum/tomcat-10/build.gradle +++ b/dd-smoke-tests/rum/tomcat-10/build.gradle @@ -4,11 +4,12 @@ plugins { id 'com.gradleup.shadow' } -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 +apply from: "$rootDir/gradle/java.gradle" + +testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_11 } -apply from: "$rootDir/gradle/java.gradle" description = 'RUM Tomcat 10 Smoke Tests' dependencies { diff --git a/dd-smoke-tests/rum/tomcat-11/build.gradle b/dd-smoke-tests/rum/tomcat-11/build.gradle index b1f100486bf..6db96af2a51 100644 --- a/dd-smoke-tests/rum/tomcat-11/build.gradle +++ b/dd-smoke-tests/rum/tomcat-11/build.gradle @@ -4,11 +4,12 @@ plugins { id 'com.gradleup.shadow' } -ext { - minJavaVersionForTests = JavaVersion.VERSION_17 +apply from: "$rootDir/gradle/java.gradle" + +testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_17 } -apply from: "$rootDir/gradle/java.gradle" description = 'RUM Tomcat 11 Smoke Tests' dependencies { diff --git a/dd-smoke-tests/rum/wildfly-15/build.gradle b/dd-smoke-tests/rum/wildfly-15/build.gradle index e5e033007d8..bbdde991903 100644 --- a/dd-smoke-tests/rum/wildfly-15/build.gradle +++ b/dd-smoke-tests/rum/wildfly-15/build.gradle @@ -4,7 +4,6 @@ ext { serverModule = 'wildfly' serverVersion = '15.0.0.Final' serverExtension = 'zip' - maxJavaVersionForTests = JavaVersion.VERSION_11 } repositories { @@ -23,6 +22,10 @@ repositories { apply from: "$rootDir/gradle/java.gradle" +testJvmConstraints { + maxJavaVersion = JavaVersion.VERSION_11 +} + description = 'Wildfly Smoke Tests.' configurations { diff --git a/dd-smoke-tests/spring-boot-3.0-webflux/build.gradle b/dd-smoke-tests/spring-boot-3.0-webflux/build.gradle index 47ea9095ff9..6e03a501e58 100644 --- a/dd-smoke-tests/spring-boot-3.0-webflux/build.gradle +++ b/dd-smoke-tests/spring-boot-3.0-webflux/build.gradle @@ -1,9 +1,9 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_17 -} - apply from: "$rootDir/gradle/java.gradle" +testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_17 +} + description = 'Spring Boot 3.0 Webflux Smoke Tests.' dependencies { diff --git a/dd-smoke-tests/spring-boot-3.0-webmvc/build.gradle b/dd-smoke-tests/spring-boot-3.0-webmvc/build.gradle index 7ecbb274737..f66474ba3af 100644 --- a/dd-smoke-tests/spring-boot-3.0-webmvc/build.gradle +++ b/dd-smoke-tests/spring-boot-3.0-webmvc/build.gradle @@ -1,9 +1,9 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_17 -} - apply from: "$rootDir/gradle/java.gradle" +testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_17 +} + description = 'Spring Boot 3.0 WebMvc Smoke Tests.' dependencies { diff --git a/dd-smoke-tests/spring-boot-3.3-webmvc/build.gradle b/dd-smoke-tests/spring-boot-3.3-webmvc/build.gradle index 1c027cc7aca..d05f62e7e46 100644 --- a/dd-smoke-tests/spring-boot-3.3-webmvc/build.gradle +++ b/dd-smoke-tests/spring-boot-3.3-webmvc/build.gradle @@ -1,9 +1,9 @@ -ext { - minJavaVersionForTests = JavaVersion.VERSION_17 -} - apply from: "$rootDir/gradle/java.gradle" +testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_17 +} + description = 'Spring Boot 3.3 WebMvc Smoke Tests.' dependencies { diff --git a/dd-smoke-tests/spring-security/build.gradle b/dd-smoke-tests/spring-security/build.gradle index 0193dd0603d..2ebd9a22b5f 100644 --- a/dd-smoke-tests/spring-security/build.gradle +++ b/dd-smoke-tests/spring-security/build.gradle @@ -2,11 +2,12 @@ plugins { id 'java-test-fixtures' } -ext { - maxJavaVersionForTests = JavaVersion.VERSION_15 +apply from: "$rootDir/gradle/java.gradle" + +testJvmConstraints { + maxJavaVersion = JavaVersion.VERSION_15 } -apply from: "$rootDir/gradle/java.gradle" description = 'Spring Security Smoke Tests.' // The standard spring-boot plugin doesn't play nice with our project diff --git a/dd-smoke-tests/springboot-grpc/build.gradle b/dd-smoke-tests/springboot-grpc/build.gradle index 072bf5b65f5..e1e913266b1 100644 --- a/dd-smoke-tests/springboot-grpc/build.gradle +++ b/dd-smoke-tests/springboot-grpc/build.gradle @@ -5,12 +5,13 @@ plugins { id 'com.google.protobuf' version '0.8.18' } -ext { +apply from: "$rootDir/gradle/java.gradle" + +testJvmConstraints { // TODO Java 17: This version of spring-boot doesn't support Java 17 - maxJavaVersionForTests = JavaVersion.VERSION_15 + maxJavaVersion = JavaVersion.VERSION_15 } -apply from: "$rootDir/gradle/java.gradle" description = 'SpringBoot/gRPC combined Smoke Tests.' protobuf { diff --git a/dd-smoke-tests/springboot-java-11/build.gradle b/dd-smoke-tests/springboot-java-11/build.gradle index 17d299c8984..380230df34b 100644 --- a/dd-smoke-tests/springboot-java-11/build.gradle +++ b/dd-smoke-tests/springboot-java-11/build.gradle @@ -7,11 +7,12 @@ plugins { id 'java-test-fixtures' } -ext { - minJavaVersionForTests = JavaVersion.VERSION_11 +apply from: "$rootDir/gradle/java.gradle" + +testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_11 } -apply from: "$rootDir/gradle/java.gradle" apply from: "$rootDir/gradle/spring-boot-plugin.gradle" description = 'SpringBoot Java 11 Smoke Tests.' diff --git a/dd-smoke-tests/springboot-java-17/build.gradle b/dd-smoke-tests/springboot-java-17/build.gradle index 6dc9908b0c9..541b0c29fd2 100644 --- a/dd-smoke-tests/springboot-java-17/build.gradle +++ b/dd-smoke-tests/springboot-java-17/build.gradle @@ -7,11 +7,12 @@ plugins { id 'java-test-fixtures' } -ext { - minJavaVersionForTests = JavaVersion.VERSION_17 +apply from: "$rootDir/gradle/java.gradle" + +testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_17 } -apply from: "$rootDir/gradle/java.gradle" apply from: "$rootDir/gradle/spring-boot-plugin.gradle" description = 'SpringBoot Java 17 Smoke Tests.' diff --git a/dd-smoke-tests/springboot/build.gradle b/dd-smoke-tests/springboot/build.gradle index 9b825da8375..c19aa169476 100644 --- a/dd-smoke-tests/springboot/build.gradle +++ b/dd-smoke-tests/springboot/build.gradle @@ -5,11 +5,12 @@ plugins { id 'java-test-fixtures' } -ext { - maxJavaVersionForTests = JavaVersion.VERSION_15 +apply from: "$rootDir/gradle/java.gradle" + +testJvmConstraints { + maxJavaVersion = JavaVersion.VERSION_15 } -apply from: "$rootDir/gradle/java.gradle" description = 'SpringBoot Smoke Tests.' // The standard spring-boot plugin doesn't play nice with our project diff --git a/dd-smoke-tests/wildfly/build.gradle b/dd-smoke-tests/wildfly/build.gradle index b35ea823fd3..39d983e657d 100644 --- a/dd-smoke-tests/wildfly/build.gradle +++ b/dd-smoke-tests/wildfly/build.gradle @@ -4,7 +4,6 @@ ext { serverModule = 'wildfly' serverVersion = '15.0.0.Final' serverExtension = 'zip' - maxJavaVersionForTests = JavaVersion.VERSION_11 } repositories { @@ -23,6 +22,10 @@ repositories { apply from: "$rootDir/gradle/java.gradle" +testJvmConstraints { + maxJavaVersion = JavaVersion.VERSION_11 +} + description = 'Wildfly Smoke Tests.' configurations { diff --git a/dd-trace-api/build.gradle.kts b/dd-trace-api/build.gradle.kts index f191c71be0e..43637568c03 100644 --- a/dd-trace-api/build.gradle.kts +++ b/dd-trace-api/build.gradle.kts @@ -63,6 +63,8 @@ val excludedClassesCoverage by extra( "datadog.trace.payloadtags.PayloadTagsData", "datadog.trace.payloadtags.PayloadTagsData.PathAndValue", "datadog.trace.api.llmobs.LLMObsTags", + "datadog.trace.api.config.OtlpConfig.Protocol", + "datadog.trace.api.config.OtlpConfig.Temporality", ) ) diff --git a/dd-trace-api/src/main/java/datadog/trace/api/ConfigDefaults.java b/dd-trace-api/src/main/java/datadog/trace/api/ConfigDefaults.java index 49251171ebb..8ac6de1cf0b 100644 --- a/dd-trace-api/src/main/java/datadog/trace/api/ConfigDefaults.java +++ b/dd-trace-api/src/main/java/datadog/trace/api/ConfigDefaults.java @@ -101,6 +101,16 @@ public final class ConfigDefaults { static final boolean DEFAULT_JMX_FETCH_MULTIPLE_RUNTIME_SERVICES_ENABLED = false; static final int DEFAULT_JMX_FETCH_MULTIPLE_RUNTIME_SERVICES_LIMIT = 10; + public static final boolean DEFAULT_METRICS_OTEL_ENABLED = false; + // Default recommended by Datadog; it differs from Otel’s default of 60000 (60s) + static final int DEFAULT_METRICS_OTEL_INTERVAL = 10000; // ms + // Default recommended by Datadog; it differs from Otel’s default of 30000 (30s) + static final int DEFAULT_METRICS_OTEL_TIMEOUT = 7500; // ms + + static final String DEFAULT_OTLP_HTTP_METRIC_ENDPOINT = "v1/metrics"; + static final String DEFAULT_OTLP_HTTP_PORT = "4318"; + static final String DEFAULT_OTLP_GRPC_PORT = "4317"; + static final int DEFAULT_DOGSTATSD_START_DELAY = 15; // seconds static final boolean DEFAULT_HEALTH_METRICS_ENABLED = true; diff --git a/dd-trace-api/src/main/java/datadog/trace/api/config/OtlpConfig.java b/dd-trace-api/src/main/java/datadog/trace/api/config/OtlpConfig.java new file mode 100644 index 00000000000..29d7e144ca4 --- /dev/null +++ b/dd-trace-api/src/main/java/datadog/trace/api/config/OtlpConfig.java @@ -0,0 +1,29 @@ +package datadog.trace.api.config; + +public final class OtlpConfig { + + public static final String METRICS_OTEL_ENABLED = "metrics.otel.enabled"; + public static final String METRICS_OTEL_INTERVAL = "metrics.otel.interval"; + public static final String METRICS_OTEL_TIMEOUT = "metrics.otel.timeout"; + + public static final String OTLP_METRICS_ENDPOINT = "otlp.metrics.endpoint"; + public static final String OTLP_METRICS_HEADERS = "otlp.metrics.headers"; + public static final String OTLP_METRICS_PROTOCOL = "otlp.metrics.protocol"; + public static final String OTLP_METRICS_TIMEOUT = "otlp.metrics.timeout"; + public static final String OTLP_METRICS_TEMPORALITY_PREFERENCE = + "otlp.metrics.temporality.preference"; + + public enum Protocol { + GRPC, + HTTP_PROTOBUF, + HTTP_JSON + } + + public enum Temporality { + CUMULATIVE, + DELTA, + LOWMEMORY + } + + private OtlpConfig() {} +} diff --git a/dd-trace-api/src/main/java/datadog/trace/api/config/TraceInstrumentationConfig.java b/dd-trace-api/src/main/java/datadog/trace/api/config/TraceInstrumentationConfig.java index 98d1d25f286..120614cd5e7 100644 --- a/dd-trace-api/src/main/java/datadog/trace/api/config/TraceInstrumentationConfig.java +++ b/dd-trace-api/src/main/java/datadog/trace/api/config/TraceInstrumentationConfig.java @@ -161,6 +161,10 @@ public final class TraceInstrumentationConfig { public static final String RESOLVER_USE_URL_CACHES = "resolver.use.url.caches"; public static final String RESOLVER_RESET_INTERVAL = "resolver.reset.interval"; public static final String RESOLVER_NAMES_ARE_UNIQUE = "resolver.names.are.unique"; + + public static final String UNSAFE_CLASS_INJECTION = "unsafe.class.injection"; + public static final String VISITOR_CLASS_PARSING = "visitor.class.parsing"; + public static final String CASSANDRA_KEYSPACE_STATEMENT_EXTRACTION_ENABLED = "trace.cassandra.keyspace.statement.extraction.enabled"; public static final String COUCHBASE_INTERNAL_SPANS_ENABLED = diff --git a/dd-trace-core/src/main/java/datadog/trace/common/metrics/ConflatingMetricsAggregator.java b/dd-trace-core/src/main/java/datadog/trace/common/metrics/ConflatingMetricsAggregator.java index 0c8da5b8bb2..9ca468c24b4 100644 --- a/dd-trace-core/src/main/java/datadog/trace/common/metrics/ConflatingMetricsAggregator.java +++ b/dd-trace-core/src/main/java/datadog/trace/common/metrics/ConflatingMetricsAggregator.java @@ -277,7 +277,8 @@ public boolean publish(List> trace) { for (CoreSpan span : trace) { boolean isTopLevel = span.isTopLevel(); if (shouldComputeMetric(span)) { - if (ignoredResources.contains(span.getResourceName().toString())) { + final CharSequence resourceName = span.getResourceName(); + if (resourceName != null && ignoredResources.contains(resourceName.toString())) { // skip publishing all children forceKeep = false; break; diff --git a/dd-trace-core/src/test/groovy/datadog/trace/common/metrics/ConflatingMetricAggregatorTest.groovy b/dd-trace-core/src/test/groovy/datadog/trace/common/metrics/ConflatingMetricAggregatorTest.groovy index 5c6bd1524d2..34f666a61e4 100644 --- a/dd-trace-core/src/test/groovy/datadog/trace/common/metrics/ConflatingMetricAggregatorTest.groovy +++ b/dd-trace-core/src/test/groovy/datadog/trace/common/metrics/ConflatingMetricAggregatorTest.groovy @@ -1,22 +1,21 @@ package datadog.trace.common.metrics +import static datadog.trace.bootstrap.instrumentation.api.Tags.SPAN_KIND +import static java.util.concurrent.TimeUnit.MILLISECONDS +import static java.util.concurrent.TimeUnit.SECONDS + import datadog.communication.ddagent.DDAgentFeaturesDiscovery import datadog.trace.api.WellKnownTags import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString import datadog.trace.core.CoreSpan import datadog.trace.core.monitor.HealthMetrics import datadog.trace.test.util.DDSpecification -import spock.lang.Shared - import java.util.concurrent.CompletableFuture import java.util.concurrent.CountDownLatch import java.util.concurrent.TimeUnit import java.util.concurrent.TimeoutException import java.util.function.Supplier - -import static datadog.trace.bootstrap.instrumentation.api.Tags.SPAN_KIND -import static java.util.concurrent.TimeUnit.MILLISECONDS -import static java.util.concurrent.TimeUnit.SECONDS +import spock.lang.Shared class ConflatingMetricAggregatorTest extends DDSpecification { @@ -96,6 +95,48 @@ class ConflatingMetricAggregatorTest extends DDSpecification { aggregator.close() } + def "should be resilient to null resource names"() { + setup: + MetricWriter writer = Mock(MetricWriter) + Sink sink = Stub(Sink) + DDAgentFeaturesDiscovery features = Mock(DDAgentFeaturesDiscovery) + features.supportsMetrics() >> true + features.peerTags() >> [] + ConflatingMetricsAggregator aggregator = new ConflatingMetricsAggregator(empty, + features, HealthMetrics.NO_OP, sink, writer, 10, queueSize, reportingInterval, SECONDS) + aggregator.start() + + when: + CountDownLatch latch = new CountDownLatch(1) + aggregator.publish([ + new SimpleSpan("service", "operation", null, "type", false, true, false, 0, 100, HTTP_OK) + .setTag(SPAN_KIND, "baz") + ]) + aggregator.report() + def latchTriggered = latch.await(2, SECONDS) + + then: + latchTriggered + 1 * writer.startBucket(1, _, _) + 1 * writer.add(new MetricKey( + null, + "service", + "operation", + "type", + HTTP_OK, + false, + false, + "baz", + [] + ), _) >> { MetricKey key, AggregateMetric value -> + value.getHitCount() == 1 && value.getTopLevelCount() == 1 && value.getDuration() == 100 + } + 1 * writer.finishBucket() >> { latch.countDown() } + + cleanup: + aggregator.close() + } + def "unmeasured top level spans have metrics computed"() { setup: MetricWriter writer = Mock(MetricWriter) diff --git a/dd-trace-ot/build.gradle.kts b/dd-trace-ot/build.gradle.kts index f4c4273e30b..7c73abef06b 100644 --- a/dd-trace-ot/build.gradle.kts +++ b/dd-trace-ot/build.gradle.kts @@ -120,6 +120,8 @@ tasks.named("shadowJ exclude(dependency("io.opentracing.contrib:")) exclude(dependency("org.slf4j:")) exclude(dependency("com.github.jnr:")) + // indirect dependency of JNR, no need to embed + exclude(dependency("org.ow2.asm:")) } relocate("com.", "ddtrot.com.") { diff --git a/gradle/configure_tests.gradle b/gradle/configure_tests.gradle deleted file mode 100644 index 2afd783cc8e..00000000000 --- a/gradle/configure_tests.gradle +++ /dev/null @@ -1,133 +0,0 @@ -import java.time.Duration -import java.time.temporal.ChronoUnit - -def isTestingInstrumentation(Project project) { - return [ - "junit-4.10", - "cucumber", - "cucumber-junit-4", - "junit-4.13", - "munit-junit-4", - "junit-5.3", - "junit-5.8", - "cucumber-junit-5", - "spock-junit-5", - "testng-6", - "testng-7", - "karate", - "scalatest", - "selenium", - "weaver" - ].contains(project.name) -} - -def forkedTestLimit = gradle.sharedServices.registerIfAbsent("forkedTestLimit", BuildService) { - maxParallelUsages = 3 -} - -testing { - suites.configureEach { - // Use JUnit 5 to run tests - useJUnitJupiter() - } -} - -// Go through the Test tasks and configure them -tasks.withType(Test).configureEach { - // Disable all tests if skipTests property was specified - onlyIf { !project.rootProject.hasProperty("skipTests") } - - // Enable force rerun of tests with -Prerun.tests.${project.name} - outputs.upToDateWhen { - !project.rootProject.hasProperty("rerun.tests.${project.name}") - } - - // Avoid executing classes used to test testing frameworks instrumentation - if (isTestingInstrumentation(project)) { - exclude("**/TestSucceed*") - exclude("**/TestFailed*") - exclude("**/TestFailedWithSuccessPercentage*") - exclude("**/TestError*") - exclude("**/TestSkipped*") - exclude("**/TestSkippedClass*") - exclude("**/TestInheritance*", "**/BaseTestInheritance*") - exclude("**/TestFactory*") - exclude("**/TestParameterized*") - exclude("**/TestRepeated*") - exclude("**/TestTemplate*") - exclude("**/TestDisableTestTrace*") - exclude("**/TestAssumption*", "**/TestSuiteSetUpAssumption*") - exclude("**/TestUnskippable*") - exclude("**/TestWithSetup*") - } - - // Split up tests that want to run forked in their own separate JVM for generated tasks - if (name.startsWith("forkedTest") || name.endsWith("ForkedTest")) { - setExcludes([]) - setIncludes(["**/*ForkedTest*"]) - forkEvery = 1 - // Limit the number of concurrent forked tests - usesService(forkedTestLimit) - onlyIf { !project.rootProject.hasProperty("skipForkedTests") } - } else { - exclude("**/*ForkedTest*") - } - - // Set test timeout for 20 minutes. Default job timeout is 1h (configured on CI level). - timeout = Duration.of(20, ChronoUnit.MINUTES) - - check.dependsOn(it) -} - -Task allTestsTask = tasks.maybeCreate('allTests') -Task allLatestDepTestsTask = tasks.maybeCreate('allLatestDepTests') -project.afterEvaluate { - tasks.withType(Test).each { - if (it.name.containsIgnoreCase('latest')) { - allLatestDepTestsTask.dependsOn it - } else if (it.name != 'traceAgentTest') { - allTestsTask.dependsOn it - } - } -} - -// Setup flaky tests jobs. Done in afterEvaluate so that it applies to latestDepTest. -project.afterEvaluate { - tasks.withType(Test).configureEach { - // Flaky tests management for JUnit 5 - testFramework { - if (it instanceof JUnitPlatformOptions) { - if (project.rootProject.hasProperty("skipFlakyTests")) { - excludeTags("flaky") - } else if (project.rootProject.hasProperty("runFlakyTests")) { - includeTags("flaky") - } - } - } - - // Flaky tests management for Spock - if (project.rootProject.hasProperty("skipFlakyTests")) { - jvmArgs += ["-Drun.flaky.tests=false"] - } else if (project.rootProject.hasProperty("runFlakyTests")) { - jvmArgs += ["-Drun.flaky.tests=true"] - } - } -} - -if (!project.property("activePartition")) { - project.afterEvaluate { - tasks.withType(Test).configureEach { - enabled = false - } - } -} - -tasks.withType(Test).configureEach { - // https://docs.gradle.com/develocity/flaky-test-detection/ - // https://docs.gradle.com/develocity/gradle-plugin/current/#test_retry - develocity.testRetry { - if (providers.environmentVariable("CI").isPresent()) { - maxRetries = 3 - } - } -} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 6c5f7ab635d..2d9e51fe202 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,122 +1,169 @@ [versions] -slf4j = "1.7.30" -# The ranges are needed to allow instrumentation tests to specify the desired version. -guava = "[16.0,20.0]" # Last version to support Java 7 +# NOTE: Ranges for some versions are needed to allow instrumentation tests to specify the desired version. + +# Build +develocity = "4.2.2" +forbiddenapis = "3.10" +spotbugs_annotations = "4.9.8" + +# DataDog libs and forks +ddprof = "1.34.0" +dogstatsd = "4.4.3" okhttp = "3.12.15" # Datadog fork to support Java 7 -okhttp-legacy = "[3.0,3.12.12]" # 3.12.x is last version to support Java7 -okio = "1.17.6" # Datadog fork -spock = "2.4-M6-groovy-3.0" +# Languages +## Groovy groovy = "3.0.24" -junit5 = "5.12.2" -junit-platform = "1.12.2" -logback = "1.2.13" -bytebuddy = "1.17.7" -instrumentjava = "0.0.2" + +## Kotlin +kotlin = "1.6.21" +kotlin-plugin = "1.9.24" +kotlinx-coroutines = "1.3.0" + +## Scala scala = "2.11.12" # Last version to support Java 7 (2.12+ require Java 8+) scala211 = "2.11.12" scala212 = "2.12.18" scala213 = "2.13.11" scala33 = "3.3.0" -kotlin = "1.6.21" -kotlin-plugin = "1.9.24" -coroutines = "1.3.0" -dogstatsd = "4.4.3" -jnr-unixsocket = "0.38.22" -jnr-posix = '3.1.19' -commons = "3.2" -mockito = '4.4.0' -jctools = '3.3.0' -moshi = '1.11.0' -testcontainers = '1.21.3' -jmc = "8.1.0" + +# Bytecode manipulations & codegen autoservice = "1.1.1" -ddprof = "1.34.0" asm = "9.9" +byte-buddy = "1.17.7" +instrument-java = "0.0.2" + +# Benchmarks +jmh = "1.37" + +# Profiling +jmc = "8.1.0" + +# Web & Network +jnr-posix = "3.1.19" +jnr-unixsocket = "0.38.22" +okhttp-legacy = "[3.0,3.12.12]" # 3.12.x is last version to support Java7 +okio = "1.17.6" # Datadog fork + +# Cryptography cafe_crypto = "0.1.0" + +# Common utils +commons = "3.2" +guava = "[16.0,20.0]" # Last version to support Java 7 +jctools = "3.3.0" lz4 = "1.7.1" -jmh = "1.37" + +# Logging +slf4j = "1.7.30" +logback = "1.2.13" + +# JSON jackson = "2.20.0" -forbiddenapis = "3.10" -spotbugs_annotations = "4.9.8" +moshi = "1.11.0" + +# Testing +junit5 = "5.12.2" +junit-platform = "1.12.2" +mockito = "4.4.0" +spock = "2.4-M6-groovy-3.0" +testcontainers = "1.21.3" [libraries] -slf4j = { module = "org.slf4j:slf4j-api", version.ref = "slf4j" } -guava = { module = "com.google.guava:guava", version.ref = "guava" } -moshi = { module = "com.squareup.moshi:moshi", version.ref = "moshi" } -jctools = { module = "org.jctools:jctools-core", version.ref = "jctools" } +# Build +develocity = { module = "com.gradle:develocity-gradle-plugin", version.ref = "develocity" } +forbiddenapis = { module = "de.thetaphi:forbiddenapis", version.ref = "forbiddenapis" } +spotbugs-annotations = { module = "com.github.spotbugs:spotbugs-annotations", version.ref = "spotbugs_annotations" } + +# DataDog libs and forks +ddprof = { module = "com.datadoghq:ddprof", version.ref = "ddprof" } +dogstatsd = { module = "com.datadoghq:java-dogstatsd-client", version.ref = "dogstatsd" } okhttp = { module = "com.datadoghq.okhttp3:okhttp", version.ref = "okhttp" } -okio = { module = "com.datadoghq.okio:okio", version.ref = "okio" } -bytebuddy = { module = "net.bytebuddy:byte-buddy", version.ref = "bytebuddy" } -bytebuddyagent = { module = "net.bytebuddy:byte-buddy-agent", version.ref = "bytebuddy" } -instrumentjava = { module = "com.datadoghq:dd-instrument-java", version.ref = "instrumentjava" } + +# Languages +## Groovy +groovy = { module = "org.codehaus.groovy:groovy-all", version.ref = "groovy" } +groovy-yaml = { module = "org.codehaus.groovy:groovy-yaml", version.ref = "groovy" } + +## Kotlin +kotlin = { module = "org.jetbrains.kotlin:kotlin-stdlib", version.ref = "kotlin" } +coroutines = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinx-coroutines" } + +## Scala +scala = { module = "org.scala-lang:scala-library", version.ref = "scala" } +scala211 = { module = "org.scala-lang:scala-library", version.ref = "scala211" } +scala212 = { module = "org.scala-lang:scala-library", version.ref = "scala212" } +scala213 = { module = "org.scala-lang:scala-library", version.ref = "scala213" } +scala33 = { module = "org.scala-lang:scala3-library_3", version.ref = "scala33" } + +# Bytecode manipulations & codegen autoservice-processor = { module = "com.google.auto.service:auto-service", version.ref = "autoservice" } autoservice-annotation = { module = "com.google.auto.service:auto-service-annotations", version.ref = "autoservice" } -commons-math = { module = "org.apache.commons:commons-math3", version.ref = "commons" } -ddprof = { module = "com.datadoghq:ddprof", version.ref = "ddprof" } asm = { module = "org.ow2.asm:asm", version.ref = "asm" } +asm-commons = { module = "org.ow2.asm:asm-commons", version.ref = "asm" } asm-tree = { module = "org.ow2.asm:asm-tree", version.ref = "asm" } asm-util = { module = "org.ow2.asm:asm-util", version.ref = "asm" } -asmcommons = { module = "org.ow2.asm:asm-commons", version.ref = "asm" } -dogstatsd = { module = "com.datadoghq:java-dogstatsd-client", version.ref = "dogstatsd" } -jnr-unixsocket = { module = "com.github.jnr:jnr-unixsocket", version.ref = "jnr-unixsocket" } +bytebuddy = { module = "net.bytebuddy:byte-buddy", version.ref = "byte-buddy" } +bytebuddyagent = { module = "net.bytebuddy:byte-buddy-agent", version.ref = "byte-buddy" } +instrumentjava = { module = "com.datadoghq:dd-instrument-java", version.ref = "instrument-java" } +# Profiling +jmc-common = { module = "org.openjdk.jmc:common", version.ref = "jmc" } +jmc-flightrecorder = { module = "org.openjdk.jmc:flightrecorder", version.ref = "jmc" } + +# Web & Network +okio = { module = "com.datadoghq.okio:okio", version.ref = "okio" } +jnr-unixsocket = { module = "com.github.jnr:jnr-unixsocket", version.ref = "jnr-unixsocket"} + +# Cryptography cafe-crypto-ed25519 = { module = "cafe.cryptography:ed25519-elisabeth", version.ref = "cafe_crypto" } cafe-crypto-curve25519 = { module = "cafe.cryptography:curve25519-elisabeth", version.ref = "cafe_crypto" } +# Common utils +aircompressor = { module = "io.airlift:aircompressor", version = "2.0.2"} # aircompressor v3 requires Java 22 +commons-math = { module = "org.apache.commons:commons-math3", version.ref = "commons" } +guava = { module = "com.google.guava:guava", version.ref = "guava" } +jctools = { module = "org.jctools:jctools-core", version.ref = "jctools" } lz4 = { module = "org.lz4:lz4-java", version.ref = "lz4" } -# aircompressor v3 requires Java 22 -aircompressor = { module = 'io.airlift:aircompressor', version = '2.0.2' } -# Testing -spock-core = { module = "org.spockframework:spock-core", version.ref = "spock" } -spock-junit4 = { module = "org.spockframework:spock-junit4", version.ref = "spock" } -spock-spring = { module = "org.spockframework:spock-spring", version.ref = "spock" } -objenesis = { module = "org.objenesis:objenesis", version = "3.3" } # Used by Spock for mocking: +# Logging +logback-classic = { module = "ch.qos.logback:logback-classic", version.ref = "logback" } +logback-core = { module = "ch.qos.logback:logback-core", version.ref = "logback" } +log4j-over-slf4j = { module = "org.slf4j:log4j-over-slf4j", version.ref = "slf4j" } +jcl-over-slf4j = { module = "org.slf4j:jcl-over-slf4j", version.ref = "slf4j" } +jul-to-slf4j = { module = "org.slf4j:jul-to-slf4j", version.ref = "slf4j" } +slf4j = { module = "org.slf4j:slf4j-api", version.ref = "slf4j" } -groovy = { module = "org.codehaus.groovy:groovy-all", version.ref = "groovy" } -groovy-yaml = { module = "org.codehaus.groovy:groovy-yaml", version.ref = "groovy" } +# JSON +jackson-databind = {module = "com.fasterxml.jackson.core:jackson-databind", version.ref = "jackson"} +moshi = { module = "com.squareup.moshi:moshi", version.ref = "moshi" } + +# Testing junit-jupiter = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junit5" } junit-jupiter-params = { module = "org.junit.jupiter:junit-jupiter-params", version.ref = "junit5" } junit-platform-launcher = { module = "org.junit.platform:junit-platform-launcher", version.ref = "junit-platform" } - mokito-core = { module = "org.mockito:mockito-core", version.ref = "mockito" } mokito-junit-jupiter = { module = "org.mockito:mockito-junit-jupiter", version.ref = "mockito" } - +objenesis = { module = "org.objenesis:objenesis", version = "3.3" } # Used by Spock for mocking: +spock-core = { module = "org.spockframework:spock-core", version.ref = "spock" } +spock-junit4 = { module = "org.spockframework:spock-junit4", version.ref = "spock" } +spock-spring = { module = "org.spockframework:spock-spring", version.ref = "spock" } testcontainers = { module = "org.testcontainers:testcontainers", version.ref = "testcontainers" } testcontainers-localstack = { module = "org.testcontainers:localstack", version.ref = "testcontainers" } -logback-classic = { module = "ch.qos.logback:logback-classic", version.ref = "logback" } -logback-core = { module = "ch.qos.logback:logback-core", version.ref = "logback" } - -log4j-over-slf4j = { module = "org.slf4j:log4j-over-slf4j", version.ref = "slf4j" } -jcl-over-slf4j = { module = "org.slf4j:jcl-over-slf4j", version.ref = "slf4j" } -jul-to-slf4j = { module = "org.slf4j:jul-to-slf4j", version.ref = "slf4j" } - -scala = { module = "org.scala-lang:scala-library", version.ref = "scala" } -scala211 = { module = "org.scala-lang:scala-library", version.ref = "scala211" } -scala212 = { module = "org.scala-lang:scala-library", version.ref = "scala212" } -scala213 = { module = "org.scala-lang:scala-library", version.ref = "scala213" } -scala33 = { module = "org.scala-lang:scala3-library_3", version.ref = "scala33" } -kotlin = { module = "org.jetbrains.kotlin:kotlin-stdlib", version.ref = "kotlin" } -coroutines = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutines" } - -jmc-common = { module = "org.openjdk.jmc:common", version.ref = "jmc" } -jmc-flightrecorder = { module = "org.openjdk.jmc:flightrecorder", version.ref = "jmc" } +[bundles] +# Bytecode manipulations & codegen +asm = ["asm", "asm-commons"] +cafe-crypto = ["cafe-crypto-curve25519", "cafe-crypto-ed25519"] -jackson-databind = { module = "com.fasterxml.jackson.core:jackson-databind", version.ref = "jackson" } +# Profiling +jmc = ["jmc-common", "jmc-flightrecorder"] -forbiddenapis = { module = "de.thetaphi:forbiddenapis", version.ref = "forbiddenapis" } -spotbugs-annotations = { module = "com.github.spotbugs:spotbugs-annotations", version.ref = "spotbugs_annotations" } +# Logging +test-logging = ["logback-classic", "log4j-over-slf4j", "jcl-over-slf4j", "jul-to-slf4j"] -[bundles] -asm = ["asm", "asmcommons"] -cafe-crypto = ["cafe-crypto-curve25519", "cafe-crypto-ed25519"] # Testing -spock = ["spock-core", "objenesis"] junit5 = ["junit-jupiter", "junit-jupiter-params"] junit-platform = ["junit-platform-launcher"] mockito = ["mokito-core", "mokito-junit-jupiter", "bytebuddy", "bytebuddyagent"] -test-logging = ["logback-classic", "log4j-over-slf4j", "jcl-over-slf4j", "jul-to-slf4j"] - -jmc = ["jmc-common", "jmc-flightrecorder"] +spock = ["spock-core", "objenesis"] diff --git a/internal-api/internal-api-9/build.gradle.kts b/internal-api/internal-api-9/build.gradle.kts index 7e5e5da3ca7..753f55bcc2f 100644 --- a/internal-api/internal-api-9/build.gradle.kts +++ b/internal-api/internal-api-9/build.gradle.kts @@ -8,10 +8,12 @@ plugins { idea } -val minJavaVersionForTests by extra(JavaVersion.VERSION_11) - apply(from = "$rootDir/gradle/java.gradle") +extensions.getByName("tracerJava").withGroovyBuilder { + invokeMethod("addSourceSetFor", JavaVersion.VERSION_17) +} + java { toolchain { languageVersion = JavaLanguageVersion.of(11) diff --git a/internal-api/src/main/java/datadog/trace/api/Config.java b/internal-api/src/main/java/datadog/trace/api/Config.java index a932984bf99..04ee8330c86 100644 --- a/internal-api/src/main/java/datadog/trace/api/Config.java +++ b/internal-api/src/main/java/datadog/trace/api/Config.java @@ -114,6 +114,12 @@ import static datadog.trace.api.ConfigDefaults.DEFAULT_JMX_FETCH_MULTIPLE_RUNTIME_SERVICES_LIMIT; import static datadog.trace.api.ConfigDefaults.DEFAULT_LLM_OBS_AGENTLESS_ENABLED; import static datadog.trace.api.ConfigDefaults.DEFAULT_LOGS_INJECTION_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_METRICS_OTEL_ENABLED; +import static datadog.trace.api.ConfigDefaults.DEFAULT_METRICS_OTEL_INTERVAL; +import static datadog.trace.api.ConfigDefaults.DEFAULT_METRICS_OTEL_TIMEOUT; +import static datadog.trace.api.ConfigDefaults.DEFAULT_OTLP_GRPC_PORT; +import static datadog.trace.api.ConfigDefaults.DEFAULT_OTLP_HTTP_METRIC_ENDPOINT; +import static datadog.trace.api.ConfigDefaults.DEFAULT_OTLP_HTTP_PORT; import static datadog.trace.api.ConfigDefaults.DEFAULT_PARTIAL_FLUSH_MIN_SPANS; import static datadog.trace.api.ConfigDefaults.DEFAULT_PERF_METRICS_ENABLED; import static datadog.trace.api.ConfigDefaults.DEFAULT_PRIORITY_SAMPLING_ENABLED; @@ -438,6 +444,14 @@ import static datadog.trace.api.config.JmxFetchConfig.JMX_TAGS; import static datadog.trace.api.config.LlmObsConfig.LLMOBS_AGENTLESS_ENABLED; import static datadog.trace.api.config.LlmObsConfig.LLMOBS_ML_APP; +import static datadog.trace.api.config.OtlpConfig.METRICS_OTEL_ENABLED; +import static datadog.trace.api.config.OtlpConfig.METRICS_OTEL_INTERVAL; +import static datadog.trace.api.config.OtlpConfig.METRICS_OTEL_TIMEOUT; +import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_ENDPOINT; +import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_HEADERS; +import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_PROTOCOL; +import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_TEMPORALITY_PREFERENCE; +import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_TIMEOUT; import static datadog.trace.api.config.ProfilingConfig.PROFILING_AGENTLESS; import static datadog.trace.api.config.ProfilingConfig.PROFILING_AGENTLESS_DEFAULT; import static datadog.trace.api.config.ProfilingConfig.PROFILING_API_KEY_FILE_OLD; @@ -655,7 +669,6 @@ import static datadog.trace.api.config.TracerConfig.TRACE_X_DATADOG_TAGS_MAX_LENGTH; import static datadog.trace.api.config.TracerConfig.WRITER_BAGGAGE_INJECT; import static datadog.trace.api.config.TracerConfig.WRITER_TYPE; -import static datadog.trace.api.iast.IastDetectionMode.DEFAULT; import static datadog.trace.api.telemetry.LogCollector.SEND_TELEMETRY; import static datadog.trace.util.CollectionUtils.tryMakeImmutableList; import static datadog.trace.util.CollectionUtils.tryMakeImmutableSet; @@ -666,6 +679,7 @@ import datadog.environment.SystemProperties; import datadog.trace.api.civisibility.CiVisibilityWellKnownTags; import datadog.trace.api.config.GeneralConfig; +import datadog.trace.api.config.OtlpConfig; import datadog.trace.api.config.ProfilingConfig; import datadog.trace.api.config.TracerConfig; import datadog.trace.api.iast.IastContext; @@ -890,6 +904,15 @@ public static String getHostName() { private final boolean jmxFetchMultipleRuntimeServicesEnabled; private final int jmxFetchMultipleRuntimeServicesLimit; + private final boolean metricsOtelEnabled; + private final int metricsOtelInterval; + private final int metricsOtelTimeout; + private final String otlpMetricsEndpoint; + private final Map otlpMetricsHeaders; + private final OtlpConfig.Protocol otlpMetricsProtocol; + private final int otlpMetricsTimeout; + private final OtlpConfig.Temporality otlpMetricsTemporalityPreference; + // These values are default-ed to those of jmx fetch values as needed private final boolean healthMetricsEnabled; private final String healthMetricsStatsdHost; @@ -1454,7 +1477,7 @@ private Config(final ConfigProvider configProvider, final InstrumenterConfig ins } } - if (agentHostFromEnvironment == null) { + if (agentHostFromEnvironment == null || agentHostFromEnvironment.isEmpty()) { agentHost = DEFAULT_AGENT_HOST; } else if (agentHostFromEnvironment.charAt(0) == '[') { agentHost = agentHostFromEnvironment.substring(1, agentHostFromEnvironment.length() - 1); @@ -1833,6 +1856,61 @@ private Config(final ConfigProvider configProvider, final InstrumenterConfig ins statsDClientSocketBuffer = configProvider.getInteger(STATSD_CLIENT_SOCKET_BUFFER); statsDClientSocketTimeout = configProvider.getInteger(STATSD_CLIENT_SOCKET_TIMEOUT); + metricsOtelEnabled = + configProvider.getBoolean(METRICS_OTEL_ENABLED, DEFAULT_METRICS_OTEL_ENABLED); + + int otelInterval = + configProvider.getInteger(METRICS_OTEL_INTERVAL, DEFAULT_METRICS_OTEL_INTERVAL); + if (otelInterval < 0) { + log.warn("Invalid OTel metrics interval: {}. The value must be positive", otelInterval); + otelInterval = DEFAULT_METRICS_OTEL_INTERVAL; + } + metricsOtelInterval = otelInterval; + + int otelTimeout = configProvider.getInteger(METRICS_OTEL_TIMEOUT, DEFAULT_METRICS_OTEL_TIMEOUT); + if (otelTimeout < 0) { + log.warn("Invalid OTel metrics timeout: {}. The value must be positive", otelTimeout); + otelTimeout = DEFAULT_METRICS_OTEL_TIMEOUT; + } + metricsOtelTimeout = otelTimeout; + + // keep OTLP default timeout below the overall export timeout + int defaultOtlpTimeout = Math.min(metricsOtelTimeout, DEFAULT_METRICS_OTEL_TIMEOUT); + int otlpTimeout = configProvider.getInteger(OTLP_METRICS_TIMEOUT, defaultOtlpTimeout); + if (otlpTimeout < 0) { + log.warn("Invalid OTLP metrics timeout: {}. The value must be positive", otlpTimeout); + otlpTimeout = defaultOtlpTimeout; + } + otlpMetricsTimeout = otlpTimeout; + + otlpMetricsHeaders = configProvider.getMergedMap(OTLP_METRICS_HEADERS, '='); + otlpMetricsProtocol = + configProvider.getEnum( + OTLP_METRICS_PROTOCOL, OtlpConfig.Protocol.class, OtlpConfig.Protocol.HTTP_PROTOBUF); + + String otlpMetricsEndpointFromEnvironment = configProvider.getString(OTLP_METRICS_ENDPOINT); + if (otlpMetricsEndpointFromEnvironment == null) { + if (otlpMetricsProtocol == OtlpConfig.Protocol.GRPC) { + otlpMetricsEndpointFromEnvironment = "http://" + agentHost + ':' + DEFAULT_OTLP_GRPC_PORT; + } else { + otlpMetricsEndpointFromEnvironment = + "http://" + + agentHost + + ':' + + DEFAULT_OTLP_HTTP_PORT + + '/' + + DEFAULT_OTLP_HTTP_METRIC_ENDPOINT; + } + } + otlpMetricsEndpoint = otlpMetricsEndpointFromEnvironment; + + otlpMetricsTemporalityPreference = + configProvider.getEnum( + OTLP_METRICS_TEMPORALITY_PREFERENCE, + OtlpConfig.Temporality.class, + OtlpConfig.Temporality.DELTA); + + // Runtime metrics are disabled if Otel metrics are enabled and the metrics exporter is none runtimeMetricsEnabled = configProvider.getBoolean(RUNTIME_METRICS_ENABLED, true); jmxFetchEnabled = @@ -2158,7 +2236,8 @@ PROFILING_DATADOG_PROFILER_ENABLED, isDatadogProfilerSafeInCurrentEnvironment()) iastContextMode = configProvider.getEnum(IAST_CONTEXT_MODE, IastContext.Mode.class, IastContext.Mode.REQUEST); iastDetectionMode = - configProvider.getEnum(IAST_DETECTION_MODE, IastDetectionMode.class, DEFAULT); + configProvider.getEnum( + IAST_DETECTION_MODE, IastDetectionMode.class, IastDetectionMode.DEFAULT); iastMaxConcurrentRequests = iastDetectionMode.getIastMaxConcurrentRequests(configProvider); iastVulnerabilitiesPerRequest = iastDetectionMode.getIastVulnerabilitiesPerRequest(configProvider); @@ -4978,6 +5057,38 @@ public boolean isJmxFetchIntegrationEnabled( return configProvider.isEnabled(integrationNames, "jmxfetch.", ".enabled", defaultEnabled); } + public boolean isMetricsOtelEnabled() { + return metricsOtelEnabled; + } + + public int getMetricsOtelInterval() { + return metricsOtelInterval; + } + + public int getMetricsOtelTimeout() { + return metricsOtelTimeout; + } + + public String getOtlpMetricsEndpoint() { + return otlpMetricsEndpoint; + } + + public Map getOtlpMetricsHeaders() { + return otlpMetricsHeaders; + } + + public OtlpConfig.Protocol getOtlpMetricsProtocol() { + return otlpMetricsProtocol; + } + + public int getOtlpMetricsTimeout() { + return otlpMetricsTimeout; + } + + public OtlpConfig.Temporality getOtlpMetricsTemporalityPreference() { + return otlpMetricsTemporalityPreference; + } + public boolean isRuleEnabled(final String name) { return isRuleEnabled(name, true); } @@ -5965,6 +6076,22 @@ public String toString() { + aiGuardEnabled + ", aiGuardEndpoint=" + aiGuardEndpoint + + ", metricsOtelEnabled=" + + metricsOtelEnabled + + ", metricsOtelInterval=" + + metricsOtelInterval + + ", metricsOtelTimeout=" + + metricsOtelTimeout + + ", otlpMetricsEndpoint=" + + otlpMetricsEndpoint + + ", otlpMetricsHeaders=" + + otlpMetricsHeaders + + ", otlpMetricsProtocol=" + + otlpMetricsProtocol + + ", otlpMetricsTimeout=" + + otlpMetricsTimeout + + ", otlpMetricsTemporalityPreference=" + + otlpMetricsTemporalityPreference + ", serviceDiscoveryEnabled=" + serviceDiscoveryEnabled + '}'; diff --git a/internal-api/src/main/java/datadog/trace/api/InstrumenterConfig.java b/internal-api/src/main/java/datadog/trace/api/InstrumenterConfig.java index b06dea675a1..037d04b1b44 100644 --- a/internal-api/src/main/java/datadog/trace/api/InstrumenterConfig.java +++ b/internal-api/src/main/java/datadog/trace/api/InstrumenterConfig.java @@ -73,6 +73,8 @@ import static datadog.trace.api.config.TraceInstrumentationConfig.TRACE_PEKKO_SCHEDULER_ENABLED; import static datadog.trace.api.config.TraceInstrumentationConfig.TRACE_THREAD_POOL_EXECUTORS_EXCLUDE; import static datadog.trace.api.config.TraceInstrumentationConfig.TRACE_WEBSOCKET_MESSAGES_ENABLED; +import static datadog.trace.api.config.TraceInstrumentationConfig.UNSAFE_CLASS_INJECTION; +import static datadog.trace.api.config.TraceInstrumentationConfig.VISITOR_CLASS_PARSING; import static datadog.trace.api.config.UsmConfig.USM_ENABLED; import static datadog.trace.util.CollectionUtils.tryMakeImmutableList; import static datadog.trace.util.CollectionUtils.tryMakeImmutableSet; @@ -164,6 +166,9 @@ public class InstrumenterConfig { private final boolean resolverUseLoadClass; private final Boolean resolverUseUrlCaches; private final int resolverResetInterval; + private final boolean visitorClassParsing; + + private final boolean unsafeClassInjection; private final boolean runtimeContextFieldInjection; private final boolean serialVersionUIDFieldInjection; @@ -283,6 +288,9 @@ private InstrumenterConfig() { ? 0 : configProvider.getInteger(RESOLVER_RESET_INTERVAL, DEFAULT_RESOLVER_RESET_INTERVAL); + unsafeClassInjection = configProvider.getBoolean(UNSAFE_CLASS_INJECTION, false); + visitorClassParsing = configProvider.getBoolean(VISITOR_CLASS_PARSING, false); + runtimeContextFieldInjection = configProvider.getBoolean( RUNTIME_CONTEXT_FIELD_INJECTION, DEFAULT_RUNTIME_CONTEXT_FIELD_INJECTION); @@ -508,6 +516,14 @@ public String getResolverCacheDir() { return resolverCacheDir; } + public boolean isUnsafeClassInjection() { + return unsafeClassInjection; + } + + public boolean isVisitorClassParsing() { + return visitorClassParsing; + } + public String getInstrumentationConfigId() { return instrumentationConfigId; } diff --git a/internal-api/src/main/java/datadog/trace/api/telemetry/WafMetricCollector.java b/internal-api/src/main/java/datadog/trace/api/telemetry/WafMetricCollector.java index 1834ef73da5..032212a7f1a 100644 --- a/internal-api/src/main/java/datadog/trace/api/telemetry/WafMetricCollector.java +++ b/internal-api/src/main/java/datadog/trace/api/telemetry/WafMetricCollector.java @@ -1,5 +1,6 @@ package datadog.trace.api.telemetry; +import datadog.trace.api.aiguard.AIGuard; import java.util.Collection; import java.util.Collections; import java.util.HashMap; @@ -60,6 +61,11 @@ private WafMetricCollector() { private static final AtomicLongArray appSecSdkEventQueue = new AtomicLongArray(LoginEvent.getNumValues() * LoginVersion.getNumValues()); private static final AtomicInteger wafConfigErrorCounter = new AtomicInteger(); + private static final AtomicLongArray aiGuardRequests = + new AtomicLongArray(AIGuard.Action.values().length * 2); // 3 actions * block + private static final AtomicInteger aiGuardErrors = new AtomicInteger(); + private static final AtomicLongArray aiGuardTruncated = + new AtomicLongArray(AIGuardTruncationType.values().length); /** WAF version that will be initialized with wafInit and reused for all metrics. */ private static String wafVersion = ""; @@ -195,6 +201,18 @@ public void appSecSdkEvent(final LoginEvent event, final LoginVersion version) { appSecSdkEventQueue.incrementAndGet(index); } + public void aiGuardRequest(final AIGuard.Action action, final boolean block) { + aiGuardRequests.incrementAndGet(action.ordinal() * 2 + (block ? 1 : 0)); + } + + public void aiGuardError() { + aiGuardErrors.incrementAndGet(); + } + + public void aiGuardTruncated(final AIGuardTruncationType type) { + aiGuardTruncated.incrementAndGet(type.ordinal()); + } + @Override public Collection drain() { if (!rawMetricsQueue.isEmpty()) { @@ -364,6 +382,40 @@ public void prepareMetrics() { return; } } + + // AI Guard successful requests + for (final AIGuard.Action action : AIGuard.Action.values()) { + final long blocked = aiGuardRequests.getAndSet(action.ordinal() * 2 + 1, 0); + if (blocked > 0) { + if (!rawMetricsQueue.offer(AIGuardRequests.success(blocked, action, true))) { + break; + } + } + final long nonBlocked = aiGuardRequests.getAndSet(action.ordinal() * 2, 0); + if (nonBlocked > 0) { + if (!rawMetricsQueue.offer(AIGuardRequests.success(nonBlocked, action, false))) { + break; + } + } + } + + // AI Guard failed requests + final int aiGuardErrorRequests = aiGuardErrors.getAndSet(0); + if (aiGuardErrorRequests > 0) { + if (!rawMetricsQueue.offer(AIGuardRequests.error(aiGuardErrorRequests))) { + return; + } + } + + // AI Guard truncated messages + for (final AIGuardTruncationType type : AIGuardTruncationType.values()) { + final long count = aiGuardTruncated.getAndSet(type.ordinal(), 0); + if (count > 0) { + if (!rawMetricsQueue.offer(new AIGuardTruncated(count, type))) { + return; + } + } + } } public abstract static class WafMetric extends MetricCollector.Metric { @@ -579,6 +631,37 @@ public WafInputTruncated(final long counter, final int bitfield) { } } + public static class AIGuardRequests extends WafMetric { + private AIGuardRequests(final long count, final String... tags) { + super("ai_guard.requests", count, tags); + } + + public static AIGuardRequests success( + final long count, final AIGuard.Action action, final boolean block) { + return new AIGuardRequests(count, "action:" + action, "block:" + block, "error:false"); + } + + public static AIGuardRequests error(final long count) { + return new AIGuardRequests(count, "error:true"); + } + } + + public static class AIGuardTruncated extends WafMetric { + public AIGuardTruncated(final long count, final AIGuardTruncationType type) { + super("ai_guard.truncated", count, "type:" + type.tagValue); + } + } + + public enum AIGuardTruncationType { + MESSAGES("messages"), + CONTENT("content"); + public final String tagValue; + + AIGuardTruncationType(final String tagValue) { + this.tagValue = tagValue; + } + } + /** * Mirror of the {@code WafErrorCode} enum defined in the {@code libddwaf-java} module. * diff --git a/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy b/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy index 85a3c80974e..de9242161c9 100644 --- a/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy +++ b/internal-api/src/test/groovy/datadog/trace/api/ConfigTest.groovy @@ -6,7 +6,6 @@ import datadog.trace.bootstrap.config.provider.ConfigConverter import datadog.trace.bootstrap.config.provider.ConfigProvider import datadog.trace.test.util.DDSpecification import datadog.trace.util.throwable.FatalAgentMisconfigurationError - import static datadog.trace.api.ConfigDefaults.DEFAULT_HTTP_CLIENT_ERROR_STATUSES import static datadog.trace.api.ConfigDefaults.DEFAULT_HTTP_SERVER_ERROR_STATUSES import static datadog.trace.api.ConfigDefaults.DEFAULT_PARTIAL_FLUSH_MIN_SPANS @@ -137,6 +136,18 @@ import static datadog.trace.api.config.TracerConfig.TRACE_SAMPLING_OPERATION_RUL import static datadog.trace.api.config.TracerConfig.TRACE_SAMPLING_SERVICE_RULES import static datadog.trace.api.config.TracerConfig.TRACE_X_DATADOG_TAGS_MAX_LENGTH import static datadog.trace.api.config.TracerConfig.WRITER_TYPE +import static datadog.trace.api.config.OtlpConfig.Protocol.HTTP_PROTOBUF +import static datadog.trace.api.config.OtlpConfig.Protocol.HTTP_JSON +import static datadog.trace.api.config.OtlpConfig.Temporality.CUMULATIVE +import static datadog.trace.api.config.OtlpConfig.Temporality.DELTA +import static datadog.trace.api.config.OtlpConfig.METRICS_OTEL_ENABLED +import static datadog.trace.api.config.OtlpConfig.METRICS_OTEL_INTERVAL +import static datadog.trace.api.config.OtlpConfig.METRICS_OTEL_TIMEOUT +import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_ENDPOINT +import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_HEADERS +import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_PROTOCOL +import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_TIMEOUT +import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_TEMPORALITY_PREFERENCE import datadog.trace.config.inversion.ConfigHelper class ConfigTest extends DDSpecification { @@ -174,6 +185,37 @@ class ConfigTest extends DDSpecification { private static final DD_LLMOBS_ML_APP_ENV = "DD_LLMOBS_ML_APP" private static final DD_LLMOBS_AGENTLESS_ENABLED_ENV = "DD_LLMOBS_AGENTLESS_ENABLED" + private static final DD_TRACE_OTEL_ENABLED_ENV = "DD_TRACE_OTEL_ENABLED" + private static final DD_TRACE_OTEL_ENABLED_PROP = "dd.trace.otel.enabled" + + private static final DD_METRICS_OTEL_ENABLED_ENV = "DD_METRICS_OTEL_ENABLED" + private static final DD_METRICS_OTEL_ENABLED_PROP = "dd.metrics.otel.enabled" + + private static final OTEL_RESOURCE_ATTRIBUTES_ENV = "OTEL_RESOURCE_ATTRIBUTES" + private static final OTEL_RESOURCE_ATTRIBUTES_PROP = "otel.resource.attributes" + + private static final OTEL_METRIC_EXPORT_TIMEOUT_ENV = "OTEL_METRIC_EXPORT_TIMEOUT" + private static final OTEL_METRIC_EXPORT_TIMEOUT_PROP = "otel.metric.export.timeout" + private static final OTEL_METRIC_EXPORT_INTERVAL_ENV = "OTEL_METRIC_EXPORT_INTERVAL" + private static final OTEL_METRIC_EXPORT_INTERVAL_PROP = "otel.metric.export.interval" + + private static final OTEL_EXPORTER_OTLP_ENDPOINT_PROP = "otel.exporter.otlp.endpoint" + private static final OTEL_EXPORTER_OTLP_HEADERS_PROP = "otel.exporter.otlp.headers" + private static final OTEL_EXPORTER_OTLP_PROTOCOL_PROP = "otel.exporter.otlp.protocol" + private static final OTEL_EXPORTER_OTLP_TIMEOUT_PROP = "otel.exporter.otlp.timeout" + + private static final OTEL_EXPORTER_OTLP_METRICS_ENDPOINT_ENV = "OTEL_EXPORTER_OTLP_METRICS_ENDPOINT" + private static final OTEL_EXPORTER_OTLP_METRICS_ENDPOINT_PROP = "otel.exporter.otlp.metrics.endpoint" + private static final OTEL_EXPORTER_OTLP_METRICS_HEADERS_ENV = "OTEL_EXPORTER_OTLP_METRICS_HEADERS" + private static final OTEL_EXPORTER_OTLP_METRICS_HEADERS_PROP = "otel.exporter.otlp.metrics.headers" + private static final OTEL_EXPORTER_OTLP_METRICS_PROTOCOL_ENV = "OTEL_EXPORTER_OTLP_METRICS_PROTOCOL" + private static final OTEL_EXPORTER_OTLP_METRICS_PROTOCOL_PROP = "otel.exporter.otlp.metrics.protocol" + private static final OTEL_EXPORTER_OTLP_METRICS_TIMEOUT_ENV = "OTEL_EXPORTER_OTLP_METRICS_TIMEOUT" + private static final OTEL_EXPORTER_OTLP_METRICS_TIMEOUT_PROP = "otel.exporter.otlp.metrics.timeout" + + private static final OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE_ENV = "OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE" + private static final OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE_PROP = "otel.exporter.otlp.metrics.temporality.preference" + def setup() { FixedCapturedEnvironment.useFixedEnv([:]) } @@ -271,6 +313,15 @@ class ConfigTest extends DDSpecification { prop.setProperty(TRACE_X_DATADOG_TAGS_MAX_LENGTH, "128") prop.setProperty(JDK_SOCKET_ENABLED, "false") + prop.setProperty(METRICS_OTEL_ENABLED, "True") + prop.setProperty(METRICS_OTEL_INTERVAL, "11000") + prop.setProperty(METRICS_OTEL_TIMEOUT, "9000") + prop.setProperty(OTLP_METRICS_ENDPOINT, "http://localhost:4333/v1/metrics") + prop.setProperty(OTLP_METRICS_HEADERS, "api-key=key,other-config-value=value") + prop.setProperty(OTLP_METRICS_PROTOCOL, "http/protobuf") + prop.setProperty(OTLP_METRICS_TIMEOUT, "5000") + prop.setProperty(OTLP_METRICS_TEMPORALITY_PREFERENCE, "cumulative") + when: Config config = Config.get(prop) @@ -364,11 +415,207 @@ class ConfigTest extends DDSpecification { config.dynamicInstrumentationInstrumentTheWorld == "method" config.dynamicInstrumentationExcludeFiles == "exclude file" config.debuggerExceptionEnabled == true + config.xDatadogTagsMaxLength == 128 config.jdkSocketEnabled == false - config.xDatadogTagsMaxLength == 128 + config.metricsOtelEnabled + config.metricsOtelInterval == 11000 + config.metricsOtelTimeout == 9000 + config.otlpMetricsEndpoint == "http://localhost:4333/v1/metrics" + config.otlpMetricsHeaders["api-key"] == "key" + config.otlpMetricsHeaders["other-config-value"] == "value" + config.otlpMetricsProtocol == HTTP_PROTOBUF + config.otlpMetricsTimeout == 5000 + config.otlpMetricsTemporalityPreference == CUMULATIVE + } + + def "otel metrics: default values when configured incorrectly"() { + setup: + def prop = new Properties() + + prop.setProperty(METRICS_OTEL_ENABLED, "youhou") + prop.setProperty(METRICS_OTEL_INTERVAL, "-1") + prop.setProperty(METRICS_OTEL_TIMEOUT, "invalid") + prop.setProperty(OTLP_METRICS_ENDPOINT, "invalid") + prop.setProperty(OTLP_METRICS_HEADERS, "11") + prop.setProperty(OTLP_METRICS_PROTOCOL, "invalid") + prop.setProperty(OTLP_METRICS_TIMEOUT, "-34") + prop.setProperty(OTLP_METRICS_TEMPORALITY_PREFERENCE, "invalid") + + when: + Config config = Config.get(prop) + + then: + !config.metricsOtelEnabled + config.metricsOtelInterval == 10000 + config.metricsOtelTimeout == 7500 + config.otlpMetricsEndpoint == "invalid" + config.otlpMetricsHeaders == [:] + config.otlpMetricsProtocol == HTTP_PROTOBUF + config.otlpMetricsTimeout == 7500 + config.otlpMetricsTemporalityPreference == DELTA } + def "otel metrics: default values when not set"() { + setup: + def prop = new Properties() + + when: + Config config = Config.get(prop) + + then: + !config.metricsOtelEnabled + config.metricsOtelInterval == 10000 + config.metricsOtelTimeout == 7500 + config.otlpMetricsEndpoint == "http://localhost:4318/v1/metrics" + config.otlpMetricsHeaders == [:] + config.otlpMetricsProtocol == HTTP_PROTOBUF + config.otlpMetricsTimeout == 7500 + config.otlpMetricsTemporalityPreference == DELTA + } + + + def "otel metrics: check syntax for attributes and headers"() { + setup: + def prop = new Properties() + prop.setProperty(OTLP_METRICS_HEADERS, "api,key=key") + + when: + Config config = Config.get(prop) + + then: + config.otlpMetricsHeaders.size() == 0 + } + + def "otel generic config via system properties - metrics enabled"() { + setup: + System.setProperty(DD_METRICS_OTEL_ENABLED_PROP, "true") + System.setProperty(OTEL_RESOURCE_ATTRIBUTES_PROP, "service.name=my=app,service.version=1.0.0,deployment.environment=production, message=blahblah") + System.setProperty("otel.log.level", "warning") + + when: + Config config = new Config() + + then: + config.serviceName == "my=app" + config.version == "1.0.0" + config.env == "production" + config.tags.size() == 3 + config.tags["message"] == "blahblah" + config.tags["env"] == "production" + config.tags["version"] == "1.0.0" + config.logLevel == "warning" + } + + def "otel generic config via system properties - trace enabled"() { + setup: + System.setProperty(DD_TRACE_OTEL_ENABLED_PROP, "true") + System.setProperty(OTEL_RESOURCE_ATTRIBUTES_PROP, "service.name=my=app,service.version=1.0.0,deployment.environment=production, message=blahblah") + System.setProperty("otel.log.level", "warning") + + when: + Config config = new Config() + + then: + config.serviceName == "my=app" + config.version == "1.0.0" + config.env == "production" + config.tags.size() == 3 + config.tags["message"] == "blahblah" + config.tags["env"] == "production" + config.tags["version"] == "1.0.0" + config.logLevel == "warning" + } + + + def "otel generic config via env var - metrics enabled"() { + setup: + environmentVariables.set(DD_METRICS_OTEL_ENABLED_ENV, "true") + environmentVariables.set(OTEL_RESOURCE_ATTRIBUTES_ENV, "service.name=my=app,service.version=1.0.0,deployment.environment=production, message=blahblah") + environmentVariables.set("OTEL_LOG_LEVEL", "error") + when: + Config config = new Config() + + then: + config.serviceName == "my=app" + config.version == "1.0.0" + config.env == "production" + config.tags.size() == 3 + config.tags["message"] == "blahblah" + config.tags["env"] == "production" + config.tags["version"] == "1.0.0" + config.logLevel == "error" + } + + def "otel generic config via env var - traces enabled"() { + setup: + environmentVariables.set(DD_TRACE_OTEL_ENABLED_ENV, "true") + environmentVariables.set(OTEL_RESOURCE_ATTRIBUTES_ENV, "service.name=my=app,service.version=1.0.0,deployment.environment=production, message=blahblah") + environmentVariables.set("OTEL_LOG_LEVEL", "error") + when: + Config config = new Config() + + then: + config.serviceName == "my=app" + config.version == "1.0.0" + config.env == "production" + config.tags.size() == 3 + config.tags["message"] == "blahblah" + config.tags["env"] == "production" + config.tags["version"] == "1.0.0" + config.logLevel == "error" + } + + def "otel metrics: fallback keys"() { + setup: + System.setProperty(DD_METRICS_OTEL_ENABLED_PROP, "true") + System.setProperty(OTEL_EXPORTER_OTLP_PROTOCOL_PROP, "http/json") + System.setProperty(OTEL_EXPORTER_OTLP_ENDPOINT_PROP,"http://localhost:4319") + System.setProperty(OTEL_EXPORTER_OTLP_HEADERS_PROP,"api-key=key,other-config-value=value") + System.setProperty(OTEL_EXPORTER_OTLP_TIMEOUT_PROP,"1000") + + when: + Config config = new Config() + + then: + config.otlpMetricsProtocol == HTTP_JSON + config.otlpMetricsEndpoint == "http://localhost:4319/v1/metrics" + config.otlpMetricsHeaders.size() == 2 + config.otlpMetricsHeaders["api-key"] == "key" + config.otlpMetricsHeaders["other-config-value"] == "value" + config.otlpMetricsTimeout == 1000 + } + + def "otel metrics: fallback key endpoint"() { + setup: + System.setProperty(DD_METRICS_OTEL_ENABLED_PROP, "true") + System.setProperty(OTEL_EXPORTER_OTLP_PROTOCOL_PROP, "http/json") + System.setProperty(PREFIX + TRACE_AGENT_URL,"http://192.168.0.3:8126") + + when: + Config config = new Config() + + then: + config.agentHost == "192.168.0.3" + config.otlpMetricsProtocol == HTTP_JSON + config.otlpMetricsEndpoint == "http://192.168.0.3:4318/v1/metrics" + } + + def "otel metrics: fallback key endpoint 2"() { + setup: + System.setProperty(DD_METRICS_OTEL_ENABLED_PROP, "true") + System.setProperty(PREFIX + TRACE_AGENT_URL,"'/tmp/ddagent/trace.sock'") + + when: + Config config = new Config() + + then: + config.agentHost == "localhost" + config.otlpMetricsProtocol == HTTP_PROTOBUF + config.otlpMetricsEndpoint == "http://localhost:4318/v1/metrics" + } + + def "specify overrides via system properties"() { setup: System.setProperty(PREFIX + API_KEY, "new api key") @@ -460,6 +707,16 @@ class ConfigTest extends DDSpecification { System.setProperty(PREFIX + DYNAMIC_INSTRUMENTATION_EXCLUDE_FILES, "exclude file") System.setProperty(PREFIX + TRACE_X_DATADOG_TAGS_MAX_LENGTH, "128") + System.setProperty(DD_METRICS_OTEL_ENABLED_PROP, "True") + System.setProperty(OTEL_METRIC_EXPORT_INTERVAL_PROP, "11000") + System.setProperty(OTEL_METRIC_EXPORT_TIMEOUT_PROP, "9000") + System.setProperty(OTEL_EXPORTER_OTLP_METRICS_ENDPOINT_PROP, "http://localhost:4333/v1/metrics") + System.setProperty(OTEL_EXPORTER_OTLP_METRICS_HEADERS_PROP, "api-key=key,other-config-value=value") + System.setProperty(OTEL_EXPORTER_OTLP_METRICS_PROTOCOL_PROP, "http/protobuf") + System.setProperty(OTEL_EXPORTER_OTLP_METRICS_TIMEOUT_PROP, "5000") + System.setProperty(OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE_PROP, "cumulative") + System.setProperty(OTEL_RESOURCE_ATTRIBUTES_PROP, "service.name=my=app,service.version=1.0.0,deployment.environment=production") + when: Config config = new Config() @@ -476,8 +733,8 @@ class ConfigTest extends DDSpecification { config.prioritySamplingEnabled == false config.traceResolverEnabled == false config.serviceMapping == [a: "1"] - config.mergedSpanTags == [b: "2", c: "3"] - config.mergedJmxTags == [b: "2", d: "4", (RUNTIME_ID_TAG): config.getRuntimeId(), (SERVICE_TAG): config.serviceName] + config.mergedSpanTags == [b: "2", c: "3", env: "production", version:"1.0.0"] + config.mergedJmxTags == [b: "2", d: "4", (RUNTIME_ID_TAG): config.getRuntimeId(), (SERVICE_TAG): config.serviceName, env: "production", version:"1.0.0"] config.requestHeaderTags == [e: "five"] config.baggageMapping == [f: "six", g: "g"] config.httpServerErrorStatuses == toBitSet((122..457)) @@ -517,7 +774,7 @@ class ConfigTest extends DDSpecification { config.profilingEnabled == true config.profilingUrl == "new url" - config.mergedProfilingTags == [b: "2", f: "6", (HOST_TAG): "test-host", (RUNTIME_ID_TAG): config.getRuntimeId(), (RUNTIME_VERSION_TAG): config.getRuntimeVersion(), (SERVICE_TAG): config.serviceName, (LANGUAGE_TAG_KEY): LANGUAGE_TAG_VALUE] + config.mergedProfilingTags == [b: "2", f: "6", (HOST_TAG): "test-host", (RUNTIME_ID_TAG): config.getRuntimeId(), (RUNTIME_VERSION_TAG): config.getRuntimeVersion(), (SERVICE_TAG): config.serviceName, (LANGUAGE_TAG_KEY): LANGUAGE_TAG_VALUE, env: "production", version:"1.0.0"] config.profilingStartDelay == 1111 config.profilingStartForceFirst == true config.profilingUploadPeriod == 1112 @@ -552,6 +809,18 @@ class ConfigTest extends DDSpecification { config.dynamicInstrumentationExcludeFiles == "exclude file" config.xDatadogTagsMaxLength == 128 + + config.metricsOtelEnabled + config.version == "1.0.0" + config.env == "production" + config.metricsOtelInterval == 11000 + config.metricsOtelTimeout == 9000 + config.otlpMetricsEndpoint == "http://localhost:4333/v1/metrics" + config.otlpMetricsHeaders["api-key"] == "key" + config.otlpMetricsHeaders["other-config-value"] == "value" + config.otlpMetricsProtocol == HTTP_PROTOBUF + config.otlpMetricsTimeout == 5000 + config.otlpMetricsTemporalityPreference == CUMULATIVE } def "specify overrides via env vars"() { @@ -570,6 +839,15 @@ class ConfigTest extends DDSpecification { environmentVariables.set(DD_TRACE_LONG_RUNNING_ENABLED, "true") environmentVariables.set(DD_TRACE_LONG_RUNNING_FLUSH_INTERVAL, "81") environmentVariables.set(DD_TRACE_HEADER_TAGS, "*") + environmentVariables.set(DD_METRICS_OTEL_ENABLED_ENV, "True") + environmentVariables.set(OTEL_RESOURCE_ATTRIBUTES_ENV, "service.name=my=app,service.version=1.0.0,deployment.environment=production") + environmentVariables.set(OTEL_METRIC_EXPORT_INTERVAL_ENV, "11000") + environmentVariables.set(OTEL_METRIC_EXPORT_TIMEOUT_ENV, "9000") + environmentVariables.set(OTEL_EXPORTER_OTLP_METRICS_ENDPOINT_ENV, "http://localhost:4333/v1/metrics") + environmentVariables.set(OTEL_EXPORTER_OTLP_METRICS_HEADERS_ENV, "api-key=key,other-config-value=value") + environmentVariables.set(OTEL_EXPORTER_OTLP_METRICS_PROTOCOL_ENV, "http/protobuf") + environmentVariables.set(OTEL_EXPORTER_OTLP_METRICS_TIMEOUT_ENV, "5000") + environmentVariables.set(OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE_ENV, "cumulative") when: def config = new Config() @@ -591,6 +869,15 @@ class ConfigTest extends DDSpecification { config.getLongRunningTraceFlushInterval() == 81 config.requestHeaderTags == ["*":"http.request.headers."] config.responseHeaderTags == ["*":"http.response.headers."] + config.metricsOtelEnabled + config.metricsOtelInterval == 11000 + config.metricsOtelTimeout == 9000 + config.otlpMetricsEndpoint == "http://localhost:4333/v1/metrics" + config.otlpMetricsHeaders["api-key"] == "key" + config.otlpMetricsHeaders["other-config-value"] == "value" + config.otlpMetricsProtocol == HTTP_PROTOBUF + config.otlpMetricsTimeout == 5000 + config.otlpMetricsTemporalityPreference == CUMULATIVE } def "sys props override env vars"() { diff --git a/internal-api/src/test/groovy/datadog/trace/api/telemetry/WafMetricCollectorTest.groovy b/internal-api/src/test/groovy/datadog/trace/api/telemetry/WafMetricCollectorTest.groovy index b0166987bf1..251bdb4baef 100644 --- a/internal-api/src/test/groovy/datadog/trace/api/telemetry/WafMetricCollectorTest.groovy +++ b/internal-api/src/test/groovy/datadog/trace/api/telemetry/WafMetricCollectorTest.groovy @@ -1,5 +1,11 @@ package datadog.trace.api.telemetry +import static datadog.trace.api.aiguard.AIGuard.Action.ABORT +import static datadog.trace.api.aiguard.AIGuard.Action.ALLOW +import static datadog.trace.api.aiguard.AIGuard.Action.DENY +import static datadog.trace.api.telemetry.WafMetricCollector.AIGuardTruncationType.CONTENT +import static datadog.trace.api.telemetry.WafMetricCollector.AIGuardTruncationType.MESSAGES + import datadog.trace.test.util.DDSpecification import java.util.concurrent.CountDownLatch @@ -507,6 +513,78 @@ class WafMetricCollectorTest extends DDSpecification { metric.tags.toSet() == ['waf_version:waf_ver1', 'event_rules_version:rules.1'].toSet() } + void 'test ai guard request'() { + given: + final collector = WafMetricCollector.get() + + when: + collector.aiGuardRequest(action, block) + + then: + collector.prepareMetrics() + final metrics = collector.drain() + final configErrorMetrics = metrics.findAll { it.metricName == 'ai_guard.requests' } + + final metric = configErrorMetrics[0] + metric.type == 'count' + metric.metricName == 'ai_guard.requests' + metric.namespace == 'appsec' + metric.value == 1 + metric.tags.toSet() == ["action:${action.name()}", "block:${block}", 'error:false'].toSet() + + where: + action | block + ALLOW | true + ALLOW | false + DENY | true + DENY | false + ABORT | true + ABORT | false + } + + void 'test ai guard error'() { + given: + final collector = WafMetricCollector.get() + + when: + collector.aiGuardError() + + then: + collector.prepareMetrics() + final metrics = collector.drain() + final configErrorMetrics = metrics.findAll { it.metricName == 'ai_guard.requests' } + + final metric = configErrorMetrics[0] + metric.type == 'count' + metric.metricName == 'ai_guard.requests' + metric.namespace == 'appsec' + metric.value == 1 + metric.tags.toSet() == ['error:true'].toSet() + } + + void 'test ai guard truncated'() { + given: + final collector = WafMetricCollector.get() + + when: + collector.aiGuardTruncated(type) + + then: + collector.prepareMetrics() + final metrics = collector.drain() + final configErrorMetrics = metrics.findAll { it.metricName == 'ai_guard.truncated' } + + final metric = configErrorMetrics[0] + metric.type == 'count' + metric.metricName == 'ai_guard.truncated' + metric.namespace == 'appsec' + metric.value == 1 + metric.tags.toSet() == ["type:${type.tagValue}"].toSet() + + where: + type << [MESSAGES, CONTENT] + } + /** * Helper method to generate all combinations of n boolean values. */ diff --git a/metadata/supported-configurations.json b/metadata/supported-configurations.json index c52e1470ac9..8a90076eeac 100644 --- a/metadata/supported-configurations.json +++ b/metadata/supported-configurations.json @@ -285,8 +285,16 @@ "DD_LOG_LEVEL": ["A"], "DD_MEASURE_METHODS": ["A"], "DD_MESSAGE_BROKER_SPLIT_BY_DESTINATION": ["A"], + "DD_METRICS_OTEL_ENABLED": ["A"], + "DD_METRICS_OTEL_INTERVAL": ["A"], + "DD_METRICS_OTEL_TIMEOUT": ["A"], "DD_OBFUSCATION_QUERY_STRING_REGEXP": ["A"], "DD_OPTIMIZED_MAP_ENABLED": ["A"], + "DD_OTLP_METRICS_ENDPOINT": ["A"], + "DD_OTLP_METRICS_HEADERS": ["A"], + "DD_OTLP_METRICS_PROTOCOL": ["A"], + "DD_OTLP_METRICS_TIMEOUT": ["A"], + "DD_OTLP_METRICS_TEMPORALITY_PREFERENCE": ["A"], "DD_PIPELINE_EXECUTION_ID": ["A"], "DD_PRIMARY_TAG": ["A"], "DD_PRIORITIZATION_TYPE": ["A"], @@ -1340,8 +1348,10 @@ "DD_TRIAGE_REPORT_DIR": ["A"], "DD_TRIAGE_REPORT_TRIGGER": ["A"], "DD_UNDERTOW_CONTINUATION": ["A"], + "DD_UNSAFE_CLASS_INJECTION": ["A"], "DD_USM_ENABLED": ["A"], "DD_VERSION": ["A"], + "DD_VISITOR_CLASS_PARSING": ["A"], "DD_WRITER_BAGGAGE_INJECT": ["A"], "DD_WRITER_TYPE": ["A"], "OTEL_INSTRUMENTATION_HTTP_CLIENT_CAPTURE_REQUEST_HEADERS": ["A"], @@ -1359,7 +1369,18 @@ "OTEL_SERVICE_NAME": ["A"], "OTEL_TRACES_EXPORTER": ["A"], "OTEL_TRACES_SAMPLER_ARG": ["A"], - "OTEL_TRACES_SAMPLER": ["A"] + "OTEL_TRACES_SAMPLER": ["A"], + "OTEL_METRIC_EXPORT_INTERVAL": ["A"], + "OTEL_METRIC_EXPORT_TIMEOUT": ["A"], + "OTEL_EXPORTER_OTLP_ENDPOINT": ["A"], + "OTEL_EXPORTER_OTLP_HEADERS": ["A"], + "OTEL_EXPORTER_OTLP_PROTOCOL": ["A"], + "OTEL_EXPORTER_OTLP_TIMEOUT": ["A"], + "OTEL_EXPORTER_OTLP_METRICS_ENDPOINT": ["A"], + "OTEL_EXPORTER_OTLP_METRICS_HEADERS": ["A"], + "OTEL_EXPORTER_OTLP_METRICS_PROTOCOL": ["A"], + "OTEL_EXPORTER_OTLP_METRICS_TIMEOUT": ["A"], + "OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE": ["A"] }, "aliases": { "DD_APPLICATION_KEY": ["DD_APP_KEY"], diff --git a/utils/config-utils/src/main/java/datadog/trace/bootstrap/config/provider/ConfigProvider.java b/utils/config-utils/src/main/java/datadog/trace/bootstrap/config/provider/ConfigProvider.java index ef7a29b4072..64ceb175410 100644 --- a/utils/config-utils/src/main/java/datadog/trace/bootstrap/config/provider/ConfigProvider.java +++ b/utils/config-utils/src/main/java/datadog/trace/bootstrap/config/provider/ConfigProvider.java @@ -21,6 +21,7 @@ import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Objects; import java.util.Properties; @@ -111,7 +112,8 @@ public > T getEnum(String key, Class enumType, T defaultVal String value = getStringInternal(key); if (null != value) { try { - return Enum.valueOf(enumType, value); + // replace invalid characters with _ and make sure it's upper-case before converting + return Enum.valueOf(enumType, value.replace('/', '_').toUpperCase(Locale.ROOT)); } catch (Exception ignoreAndUseDefault) { log.debug("failed to parse {} for {}, defaulting to {}", value, key, defaultValue); } @@ -332,6 +334,10 @@ public List getSpacedList(String key) { } public Map getMergedMap(String key, String... aliases) { + return getMergedMap(key, ':', aliases); + } + + public Map getMergedMap(String key, char keyValueDelimiter, String... aliases) { ConfigMergeResolver mergeResolver = new ConfigMergeResolver(new HashMap<>()); int seqId = NON_DEFAULT_SEQ_ID; @@ -341,7 +347,7 @@ public Map getMergedMap(String key, String... aliases) { // We reverse iterate to allow overrides for (int i = sources.length - 1; 0 <= i; i--) { String value = sources[i].get(key, aliases); - Map parsedMap = ConfigConverter.parseMap(value, key); + Map parsedMap = ConfigConverter.parseMap(value, key, keyValueDelimiter); if (!parsedMap.isEmpty()) { if (collectConfig) { diff --git a/utils/config-utils/src/main/java/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSource.java b/utils/config-utils/src/main/java/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSource.java index 566c5ac5dc4..d8b12c81280 100644 --- a/utils/config-utils/src/main/java/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSource.java +++ b/utils/config-utils/src/main/java/datadog/trace/bootstrap/config/provider/OtelEnvironmentConfigSource.java @@ -1,5 +1,6 @@ package datadog.trace.bootstrap.config.provider; +import static datadog.trace.api.ConfigDefaults.DEFAULT_METRICS_OTEL_ENABLED; import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_OTEL_ENABLED; import static datadog.trace.api.config.GeneralConfig.ENV; import static datadog.trace.api.config.GeneralConfig.LOG_LEVEL; @@ -7,6 +8,14 @@ import static datadog.trace.api.config.GeneralConfig.SERVICE_NAME; import static datadog.trace.api.config.GeneralConfig.TAGS; import static datadog.trace.api.config.GeneralConfig.VERSION; +import static datadog.trace.api.config.OtlpConfig.METRICS_OTEL_ENABLED; +import static datadog.trace.api.config.OtlpConfig.METRICS_OTEL_INTERVAL; +import static datadog.trace.api.config.OtlpConfig.METRICS_OTEL_TIMEOUT; +import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_ENDPOINT; +import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_HEADERS; +import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_PROTOCOL; +import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_TEMPORALITY_PREFERENCE; +import static datadog.trace.api.config.OtlpConfig.OTLP_METRICS_TIMEOUT; import static datadog.trace.api.config.TraceInstrumentationConfig.TRACE_ENABLED; import static datadog.trace.api.config.TraceInstrumentationConfig.TRACE_EXTENSIONS_PATH; import static datadog.trace.api.config.TraceInstrumentationConfig.TRACE_OTEL_ENABLED; @@ -71,32 +80,26 @@ public ConfigOrigin origin() { } OtelEnvironmentConfigSource(Properties datadogConfigFile) { - this.enabled = traceOtelEnabled(); this.datadogConfigFile = datadogConfigFile; + this.enabled = traceOtelEnabled() || metricsOtelEnabled(); if (enabled) { - setupOteEnvironment(); + setupOtelEnvironment(); } } - private void setupOteEnvironment() { + private void setupOtelEnvironment() { - // only applies when OTEL is enabled by default (otherwise TRACE_OTEL_ENABLED takes precedence) + // only applies when OTEL is enabled by default String sdkDisabled = getOtelProperty("otel.sdk.disabled", "dd." + TRACE_OTEL_ENABLED); if ("true".equalsIgnoreCase(sdkDisabled)) { capture(TRACE_OTEL_ENABLED, "false"); + capture(METRICS_OTEL_ENABLED, "false"); return; } - - String serviceName = getOtelProperty("otel.service.name", "dd." + SERVICE_NAME); String logLevel = getOtelProperty("otel.log.level", "dd." + LOG_LEVEL); - String propagators = getOtelProperty("otel.propagators", "dd." + TRACE_PROPAGATION_STYLE); - String tracesSampler = getOtelProperty("otel.traces.sampler", "dd." + TRACE_SAMPLE_RATE); String resourceAttributes = getOtelProperty("otel.resource.attributes", "dd." + TAGS); - String requestHeaders = getOtelHeaders("request-headers", "dd." + REQUEST_HEADER_TAGS); - String responseHeaders = getOtelHeaders("response-headers", "dd." + RESPONSE_HEADER_TAGS); - String extensions = getOtelProperty("otel.javaagent.extensions", "dd." + TRACE_EXTENSIONS_PATH); - + String serviceName = getOtelProperty("otel.service.name", "dd." + SERVICE_NAME); if (null != resourceAttributes) { Map attributeMap = parseOtelMap(resourceAttributes); capture(SERVICE_NAME, attributeMap.remove("service.name")); @@ -104,22 +107,68 @@ private void setupOteEnvironment() { capture(ENV, attributeMap.remove("deployment.environment")); capture(TAGS, renderDatadogMap(attributeMap, 10)); } - capture(LOG_LEVEL, logLevel); capture(SERVICE_NAME, serviceName); - capture(TRACE_PROPAGATION_STYLE, mapPropagationStyle(propagators)); - capture(TRACE_SAMPLE_RATE, mapSampleRate(tracesSampler)); - capture(TRACE_ENABLED, mapDataCollection("traces")); - capture(RUNTIME_METRICS_ENABLED, mapDataCollection("metrics")); + if (traceOtelEnabled()) { + setupTraceOtelEnvironment(); + } + + if (metricsOtelEnabled()) { + setupMetricsOtelEnvironment(); + } else { + capture(RUNTIME_METRICS_ENABLED, mapDataCollection("metrics")); + } + mapDataCollection("logs"); // check setting, but no need to capture it + } + private void setupTraceOtelEnvironment() { + String propagators = getOtelProperty("otel.propagators", "dd." + TRACE_PROPAGATION_STYLE); + String tracesSampler = getOtelProperty("otel.traces.sampler", "dd." + TRACE_SAMPLE_RATE); + String requestHeaders = getOtelHeaders("request-headers", "dd." + REQUEST_HEADER_TAGS); + String responseHeaders = getOtelHeaders("response-headers", "dd." + RESPONSE_HEADER_TAGS); + String extensions = getOtelProperty("otel.javaagent.extensions", "dd." + TRACE_EXTENSIONS_PATH); + capture(TRACE_PROPAGATION_STYLE, mapPropagationStyle(propagators)); + capture(TRACE_SAMPLE_RATE, mapSampleRate(tracesSampler)); + capture(TRACE_ENABLED, mapDataCollection("traces")); capture(REQUEST_HEADER_TAGS, mapHeaderTags("http.request.header.", requestHeaders)); capture(RESPONSE_HEADER_TAGS, mapHeaderTags("http.response.header.", responseHeaders)); - capture(TRACE_EXTENSIONS_PATH, extensions); } + private void setupMetricsOtelEnvironment() { + capture( + METRICS_OTEL_INTERVAL, + getOtelProperty("otel.metric.export.interval", "dd." + METRICS_OTEL_INTERVAL)); + capture( + METRICS_OTEL_TIMEOUT, + getOtelProperty("otel.metric.export.timeout", "dd." + METRICS_OTEL_TIMEOUT)); + + String exporter = getOtelProperty("otel.metrics.exporter"); + if (exporter == null || "otlp".equalsIgnoreCase(exporter)) { + capture( + OTLP_METRICS_HEADERS, + getOtelOtlpProperty("metrics", "headers", "dd." + OTLP_METRICS_HEADERS)); + capture( + OTLP_METRICS_PROTOCOL, + getOtelOtlpProperty("metrics", "protocol", "dd." + OTLP_METRICS_PROTOCOL)); + capture( + OTLP_METRICS_TIMEOUT, + getOtelOtlpProperty("metrics", "timeout", "dd." + OTLP_METRICS_TIMEOUT)); + capture( + OTLP_METRICS_ENDPOINT, + getOtelOtlpProperty("metrics", "endpoint", "dd." + OTLP_METRICS_ENDPOINT)); + capture( + OTLP_METRICS_TEMPORALITY_PREFERENCE, + getOtelProperty( + "otel.exporter.otlp.metrics.temporality.preference", + "dd." + OTLP_METRICS_TEMPORALITY_PREFERENCE)); + } else { + capture(RUNTIME_METRICS_ENABLED, mapDataCollection("metrics")); + } + } + private boolean traceOtelEnabled() { String enabled = getDatadogProperty("dd." + TRACE_OTEL_ENABLED); if (null != enabled) { @@ -129,6 +178,15 @@ private boolean traceOtelEnabled() { } } + private boolean metricsOtelEnabled() { + String enabled = getDatadogProperty("dd." + METRICS_OTEL_ENABLED); + if (null != enabled) { + return Boolean.parseBoolean(enabled); + } else { + return DEFAULT_METRICS_OTEL_ENABLED; + } + } + /** * Gets an OpenTelemetry property. * @@ -164,6 +222,41 @@ private String getOtelProperty(String sysProp) { return value; } + /** + * Gets an OpenTelemetry OTLP property, checking the signal specific key before the general one. + * + *

Checks system properties, environment variables, and the optional OpenTelemetry config file. + * If the equivalent Datadog property is also set then log a warning and return {@code null}. + */ + private String getOtelOtlpProperty(String signal, String subkey, String ddSysProp) { + String otelKey = "otel.exporter.otlp." + signal + "." + subkey; + String otelValue = getOtelProperty(otelKey); + if (null == otelValue) { + // fall back to general configuration + otelKey = "otel.exporter.otlp." + subkey; + otelValue = getOtelProperty(otelKey); + // special case when using general endpoint as fallback: append appropriate metric suffix + if ("metrics".equals(signal) + && "endpoint".equals(subkey) + && otelValue != null + && !"grpc".equalsIgnoreCase(otelEnvironment.get(OTLP_METRICS_PROTOCOL))) { + otelValue = otelValue + "/v1/metrics"; + } + } + if (null == otelValue) { + return null; + } + String ddValue = getDatadogProperty(ddSysProp); + if (null != ddValue) { + String otelEnvVar = toEnvVar(otelKey); + log.warn("Both {} and {} are set, ignoring {}", toEnvVar(ddSysProp), otelEnvVar, otelEnvVar); + OtelEnvMetricCollectorProvider.get() + .setHidingOtelEnvVarMetric(toEnvVarLowerCase(otelKey), toEnvVarLowerCase(ddSysProp)); + return null; + } + return otelValue; + } + /** * Gets a Datadog property. * @@ -330,8 +423,8 @@ private String mapSampleRate(String tracesSampler) { } /** Maps an OpenTelemetry exporter setting to the equivalent Datadog collection setting. */ - private String mapDataCollection(String type) { - String exporter = getOtelProperty("otel." + type + ".exporter"); + private String mapDataCollection(String signal) { + String exporter = getOtelProperty("otel." + signal + ".exporter"); if (null == exporter) { return null; } @@ -340,9 +433,9 @@ private String mapDataCollection(String type) { return "false"; // currently we only accept "none" which maps to disable data collection } - log.warn("OTEL_{}_EXPORTER={} is not supported", type, exporter.toUpperCase(Locale.ROOT)); + log.warn("OTEL_{}_EXPORTER={} is not supported", signal, exporter.toUpperCase(Locale.ROOT)); OtelEnvMetricCollectorProvider.get() - .setUnsupportedOtelEnvVarMetric("otel_" + type + "_exporter"); + .setUnsupportedOtelEnvVarMetric("otel_" + signal + "_exporter"); return null; } diff --git a/utils/socket-utils/build.gradle.kts b/utils/socket-utils/build.gradle.kts index d76f3dd0b77..58d865be284 100644 --- a/utils/socket-utils/build.gradle.kts +++ b/utils/socket-utils/build.gradle.kts @@ -7,10 +7,12 @@ plugins { idea } -val minJavaVersionForTests by extra(JavaVersion.VERSION_17) - apply(from = "$rootDir/gradle/java.gradle") +extensions.getByName("tracerJava").withGroovyBuilder { + invokeMethod("addSourceSetFor", arrayOf(JavaVersion.VERSION_17, mapOf("compileOnly" to true))) +} + dependencies { implementation(libs.slf4j) implementation(project(":internal-api"))