diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6d739a42199..685d949f9a4 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -171,6 +171,7 @@ default: - export ORG_GRADLE_PROJECT_mavenRepositoryProxy=$MAVEN_REPOSITORY_PROXY - export ORG_GRADLE_PROJECT_gradlePluginProxy=$GRADLE_PLUGIN_PROXY - mkdir -p .gradle + - export GRADLE_USER_HOME=$(pwd)/.gradle # replace maven central part by MAVEN_REPOSITORY_PROXY in .mvn/wrapper/maven-wrapper.properties - sed -i "s|https://repo.maven.apache.org/maven2/|$MAVEN_REPOSITORY_PROXY|g" .mvn/wrapper/maven-wrapper.properties - export GRADLE_OPTS="-Dorg.gradle.jvmargs='-Xms$GRADLE_MEM -Xmx$GRADLE_MEM -XX:ErrorFile=/tmp/hs_err_pid%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp'" diff --git a/build.gradle.kts b/build.gradle.kts index eb7d87b4c43..4341037656f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -6,9 +6,9 @@ plugins { id("datadog.tracer-version") id("datadog.dump-hanged-test") - id("com.diffplug.spotless") version "6.13.0" - id("com.github.spotbugs") version "5.0.14" - id("de.thetaphi.forbiddenapis") version "3.8" + id("com.diffplug.spotless") version "8.0.0" + id("com.github.spotbugs") version "6.4.4" + id("de.thetaphi.forbiddenapis") version "3.10" id("io.github.gradle-nexus.publish-plugin") version "2.0.0" id("com.gradleup.shadow") version "8.3.6" apply false id("me.champeau.jmh") version "0.7.3" apply false @@ -33,7 +33,7 @@ with(extensions["spotlessPredeclare"] as SpotlessExtension) { removeUnusedImports() // This is the last Google Java Format version that supports Java 8 - googleJavaFormat("1.7") + googleJavaFormat("1.29.0") } groovyGradle { greclipse() @@ -42,13 +42,13 @@ with(extensions["spotlessPredeclare"] as SpotlessExtension) { greclipse() } kotlinGradle { - ktlint("0.41.0") + ktlint("1.7.1") } kotlin { - ktlint("0.41.0") + ktlint("1.7.1") } scala { - scalafmt("2.7.5") + scalafmt("3.9.10") } } apply(from = rootDir.resolve("gradle/spotless.gradle")) @@ -59,13 +59,15 @@ allprojects { group = "com.datadoghq" if (isCI.isPresent) { - layout.buildDirectory = providers.provider { - val newProjectCIPath = projectDir.path.replace( - rootDir.path, - "" - ) - rootDir.resolve("workspace/$newProjectCIPath/build/") - } + layout.buildDirectory = + providers.provider { + val newProjectCIPath = + projectDir.path.replace( + rootDir.path, + "", + ) + rootDir.resolve("workspace/$newProjectCIPath/build/") + } } apply(from = rootDir.resolve("gradle/dependencies.gradle")) @@ -82,7 +84,7 @@ allprojects { jvmArgs( "-XX:ErrorFile=/tmp/hs_err_pid%p.log", "-XX:+HeapDumpOnOutOfMemoryError", - "-XX:HeapDumpPath=/tmp" + "-XX:HeapDumpPath=/tmp", ) } } @@ -121,15 +123,24 @@ nexusPublishing { } } -val writeMainVersionFileTask = tasks.register("writeMainVersionFile") { - val versionFile = rootProject.layout.buildDirectory.file("main.version") - inputs.property("version", project.version) - outputs.file(versionFile) - doFirst { - require(versionFile.get().asFile.parentFile.mkdirs() || versionFile.get().asFile.parentFile.isDirectory) - versionFile.get().asFile.writeText(project.version.toString()) +val writeMainVersionFileTask = + tasks.register("writeMainVersionFile") { + val versionFile = rootProject.layout.buildDirectory.file("main.version") + inputs.property("version", project.version) + outputs.file(versionFile) + doFirst { + require( + versionFile + .get() + .asFile.parentFile + .mkdirs() || + versionFile + .get() + .asFile.parentFile.isDirectory, + ) + versionFile.get().asFile.writeText(project.version.toString()) + } } -} allprojects { tasks.withType().configureEach { diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index d93c261886a..43b0392aef5 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -3,7 +3,7 @@ plugins { `java-gradle-plugin` `kotlin-dsl` `jvm-test-suite` - id("com.diffplug.spotless") version "6.13.0" + id("com.diffplug.spotless") version "8.0.0" } java { diff --git a/buildSrc/call-site-instrumentation-plugin/build.gradle.kts b/buildSrc/call-site-instrumentation-plugin/build.gradle.kts index 1987bd5f91d..0dc8ef52039 100644 --- a/buildSrc/call-site-instrumentation-plugin/build.gradle.kts +++ b/buildSrc/call-site-instrumentation-plugin/build.gradle.kts @@ -1,7 +1,7 @@ plugins { java groovy - id("com.diffplug.spotless") version "6.13.0" + id("com.diffplug.spotless") version "8.0.0" id("com.gradleup.shadow") version "8.3.6" } @@ -18,7 +18,7 @@ spotless { // ignore embedded test projects targetExclude("src/test/resources/**") // This is the last Google Java Format version that supports Java 8 - googleJavaFormat("1.7") + googleJavaFormat("1.29.0") } } @@ -39,7 +39,7 @@ dependencies { testImplementation("org.objenesis", "objenesis", "3.0.1") testImplementation(libs.groovy) testImplementation("javax.servlet", "javax.servlet-api", "3.0.1") - testImplementation("com.github.spotbugs", "spotbugs-annotations", "4.2.0") + testImplementation("com.github.spotbugs", "spotbugs-annotations", "4.9.8") } sourceSets { diff --git a/communication/build.gradle.kts b/communication/build.gradle.kts index 4b631161bd6..d58452233de 100644 --- a/communication/build.gradle.kts +++ b/communication/build.gradle.kts @@ -29,7 +29,10 @@ dependencies { testImplementation( group = "com.squareup.okhttp3", name = "mockwebserver", - version = libs.versions.okhttp.legacy.get() // actually a version range + version = + libs.versions.okhttp.legacy + .get(), + // actually a version range ) } @@ -57,7 +60,7 @@ val excludedClassesCoverage by extra( "datadog.communication.IntakeApi", "datadog.communication.util.IOUtils", "datadog.communication.util.IOUtils.1", - ) + ), ) val excludedClassesBranchCoverage by extra( listOf( @@ -65,7 +68,7 @@ val excludedClassesBranchCoverage by extra( "datadog.communication.BackendApiFactory", "datadog.communication.EvpProxyApi", "datadog.communication.IntakeApi", - ) + ), ) val excludedClassesInstructionCoverage by extra( listOf( @@ -79,5 +82,5 @@ val excludedClassesInstructionCoverage by extra( "datadog.communication.IntakeApi", "datadog.communication.util.IOUtils", "datadog.communication.util.IOUtils.1", - ) + ), ) diff --git a/communication/src/main/java/datadog/communication/ddagent/SharedCommunicationObjects.java b/communication/src/main/java/datadog/communication/ddagent/SharedCommunicationObjects.java index 3864ccbded1..08a08df040f 100644 --- a/communication/src/main/java/datadog/communication/ddagent/SharedCommunicationObjects.java +++ b/communication/src/main/java/datadog/communication/ddagent/SharedCommunicationObjects.java @@ -11,6 +11,7 @@ import datadog.remoteconfig.DefaultConfigurationPoller; import datadog.trace.api.Config; import datadog.trace.util.AgentTaskScheduler; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.security.Security; import java.util.ArrayList; import java.util.List; @@ -21,6 +22,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +@SuppressFBWarnings("PA_PUBLIC_PRIMITIVE_ATTRIBUTE") public class SharedCommunicationObjects { private static final Logger log = LoggerFactory.getLogger(SharedCommunicationObjects.class); diff --git a/communication/src/main/java/datadog/communication/monitor/DDAgentStatsDClientManager.java b/communication/src/main/java/datadog/communication/monitor/DDAgentStatsDClientManager.java index 80ed525130d..56880ae6913 100644 --- a/communication/src/main/java/datadog/communication/monitor/DDAgentStatsDClientManager.java +++ b/communication/src/main/java/datadog/communication/monitor/DDAgentStatsDClientManager.java @@ -14,6 +14,10 @@ public final class DDAgentStatsDClientManager implements StatsDClientManager { private static final DDAgentStatsDClientManager INSTANCE = new DDAgentStatsDClientManager(); + private DDAgentStatsDClientManager() { + // No-op. + } + private static final boolean USE_LOGGING_CLIENT = LOGGING_WRITER_TYPE.equals(Config.get().getWriterType()); 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 6fe43876afa..eee5637c142 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 @@ -1465,7 +1465,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(); @@ -1495,7 +1497,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(); @@ -1533,7 +1537,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 fdf65823555..ecb5dd769e3 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 @@ -17,7 +17,9 @@ public final class InstanceStore implements ContextStore { private static final ClassValue> classInstanceStore = GenericClassValue.of(input -> 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 (InstanceStore) 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/jms/SessionState.java b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/jms/SessionState.java index 7142ac3a505..be2179818ea 100644 --- a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/jms/SessionState.java +++ b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/jms/SessionState.java @@ -2,7 +2,6 @@ import datadog.trace.api.Config; import datadog.trace.bootstrap.instrumentation.api.AgentSpan; -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.ArrayDeque; import java.util.Collections; import java.util.Comparator; @@ -65,7 +64,6 @@ public int compare(Map.Entry o1, Map.Entry 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 b22de7dadd0..2a76549a503 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/uploader/BatchUploader.java b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/uploader/BatchUploader.java index 3d478707e67..cf08ff36095 100644 --- a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/uploader/BatchUploader.java +++ b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/uploader/BatchUploader.java @@ -8,6 +8,7 @@ import datadog.trace.api.Config; import datadog.trace.relocate.api.RatelimitedLogger; import datadog.trace.util.AgentThreadFactory; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.io.IOException; import java.time.Duration; import java.util.concurrent.ConcurrentHashMap; @@ -33,6 +34,7 @@ import org.slf4j.LoggerFactory; /** Handles batching logic of upload requests sent to the intake */ +@SuppressFBWarnings("CT_CONSTRUCTOR_THROW") public class BatchUploader { public static class MultiPartContent { private final byte[] content; diff --git a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/util/DebuggerMetrics.java b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/util/DebuggerMetrics.java index 3d656089e38..fa99a37ee8a 100644 --- a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/util/DebuggerMetrics.java +++ b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/util/DebuggerMetrics.java @@ -7,7 +7,7 @@ /** implements a StatsD client for internal debugger agent metrics */ public class DebuggerMetrics implements StatsDClient { - private static DebuggerMetrics INSTANCE = null; + private static volatile DebuggerMetrics INSTANCE = null; private static final String STATSD_NAMESPACE_PREFIX = "datadog.debugger"; @@ -31,7 +31,11 @@ private DebuggerMetrics(Config config) { public static DebuggerMetrics getInstance(Config config) { if (INSTANCE == null) { - INSTANCE = new DebuggerMetrics(config); + synchronized (DebuggerMetrics.class) { + if (INSTANCE == null) { + INSTANCE = new DebuggerMetrics(config); + } + } } return INSTANCE; } 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/propagation/StringModuleImpl.java b/dd-java-agent/agent-iast/src/main/java/com/datadog/iast/propagation/StringModuleImpl.java index 36efc48205a..bbf6be3fe53 100644 --- a/dd-java-agent/agent-iast/src/main/java/com/datadog/iast/propagation/StringModuleImpl.java +++ b/dd-java-agent/agent-iast/src/main/java/com/datadog/iast/propagation/StringModuleImpl.java @@ -224,7 +224,6 @@ public void onStringConcatFactory( } @Override - @SuppressFBWarnings("ES_COMPARING_PARAMETER_STRING_WITH_EQ") public void onStringSubSequence( @Nonnull CharSequence self, int beginIndex, int endIndex, @Nullable CharSequence result) { if (self == result || !canBeTainted(result)) { @@ -722,7 +721,6 @@ public void onStringReplace( /** This method is used to make an {@code CallSite.Around} of the {@code String.replace} method */ @Override - @SuppressFBWarnings("ES_COMPARING_PARAMETER_STRING_WITH_EQ") public String onStringReplace( @Nonnull String self, CharSequence oldCharSeq, CharSequence newCharSeq) { final IastContext ctx = IastContext.Provider.get(); @@ -805,7 +803,6 @@ public String onStringReplace( } @Override - @SuppressFBWarnings("ES_COMPARING_PARAMETER_STRING_WITH_EQ") public void onStringValueOf(Object param, @Nonnull String result) { if (param == null || !canBeTainted(result)) { return; 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-profiling/profiling-controller-ddprof/src/main/java/com/datadog/profiling/controller/ddprof/DatadogProfilerOngoingRecording.java b/dd-java-agent/agent-profiling/profiling-controller-ddprof/src/main/java/com/datadog/profiling/controller/ddprof/DatadogProfilerOngoingRecording.java index 7976f7f81a9..21131c259b0 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-ddprof/src/main/java/com/datadog/profiling/controller/ddprof/DatadogProfilerOngoingRecording.java +++ b/dd-java-agent/agent-profiling/profiling-controller-ddprof/src/main/java/com/datadog/profiling/controller/ddprof/DatadogProfilerOngoingRecording.java @@ -22,10 +22,12 @@ import datadog.environment.JavaVirtualMachine; import datadog.trace.api.profiling.ProfilingSnapshot; import datadog.trace.api.profiling.RecordingData; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.time.Instant; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +@SuppressFBWarnings("CT_CONSTRUCTOR_THROW") public class DatadogProfilerOngoingRecording implements OngoingRecording { private static final Logger log = LoggerFactory.getLogger(DatadogProfilerOngoingRecording.class); diff --git a/dd-java-agent/agent-profiling/profiling-controller/src/main/java/com/datadog/profiling/controller/EnvironmentChecker.java b/dd-java-agent/agent-profiling/profiling-controller/src/main/java/com/datadog/profiling/controller/EnvironmentChecker.java index 2d8a4979938..05edf77ad5a 100644 --- a/dd-java-agent/agent-profiling/profiling-controller/src/main/java/com/datadog/profiling/controller/EnvironmentChecker.java +++ b/dd-java-agent/agent-profiling/profiling-controller/src/main/java/com/datadog/profiling/controller/EnvironmentChecker.java @@ -50,7 +50,8 @@ public static boolean checkEnvironment(String temp, StringBuilder sb) { boolean result = false; result |= checkJFR(sb); result |= checkDdprof(sb); - if (!result) {; + if (!result) { + ; appendLine("Profiler is not supported on this JVM.", sb); return false; } else { diff --git a/dd-java-agent/agent-profiling/src/main/java/com/datadog/profiling/agent/CompositeController.java b/dd-java-agent/agent-profiling/src/main/java/com/datadog/profiling/agent/CompositeController.java index 5cec160a754..3cca6ab3bc6 100644 --- a/dd-java-agent/agent-profiling/src/main/java/com/datadog/profiling/agent/CompositeController.java +++ b/dd-java-agent/agent-profiling/src/main/java/com/datadog/profiling/agent/CompositeController.java @@ -23,6 +23,7 @@ import datadog.trace.api.profiling.RecordingInputStream; import datadog.trace.bootstrap.config.provider.ConfigProvider; import de.thetaphi.forbiddenapis.SuppressForbidden; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.io.IOException; import java.io.SequenceInputStream; import java.time.Instant; @@ -39,6 +40,7 @@ * This class composes one or more controllers (i.e. profilers), synchronizing their recordings and * concatenating their outputs. */ +@SuppressFBWarnings("CT_CONSTRUCTOR_THROW") public class CompositeController implements Controller { private static final Logger log = LoggerFactory.getLogger(CompositeController.class); 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/agent-tooling/src/main/java/datadog/trace/agent/tooling/usm/UsmMessageImpl.java b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/usm/UsmMessageImpl.java index 0833d933394..2c2edc83e19 100644 --- a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/usm/UsmMessageImpl.java +++ b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/usm/UsmMessageImpl.java @@ -22,7 +22,8 @@ enum MessageType { private static final Logger log = LoggerFactory.getLogger(BaseUsmMessage.class); // TODO: sync with systemprobe code - static final NativeLong USM_IOCTL_ID = new NativeLong(0xda7ad09L);; + static final NativeLong USM_IOCTL_ID = new NativeLong(0xda7ad09L); + ; abstract static class BaseUsmMessage implements UsmMessage { 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 1bf6dfab1c3..239f0d3bfdf 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 @@ -656,7 +656,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..bde56c7ac07 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) { @@ -18,7 +18,7 @@ class HomeController @Inject() (cc: ControllerComponents) extends AbstractContro implicit request: Request[AnyContent] => error match { case Some(x) => throw new RuntimeException("some sync error") - case None => { + case None => { var workTime = workTimeMS.getOrElse(0L) scheduleWork(workTime) Ok("Did " + workTime + "ms of work.") diff --git a/dd-java-agent/build.gradle b/dd-java-agent/build.gradle index cacc90e7d92..c1db4026ca6 100644 --- a/dd-java-agent/build.gradle +++ b/dd-java-agent/build.gradle @@ -29,7 +29,6 @@ tasks.named("processResources") { sourceSets { "main_java6" { java.srcDirs "${project.projectDir}/src/main/java6" - } main.resources.srcDir(includedAgentDir) } @@ -43,7 +42,7 @@ tasks.named("compileJava") { } dependencies { - main_java6CompileOnly 'de.thetaphi:forbiddenapis:3.8' + main_java6CompileOnly 'de.thetaphi:forbiddenapis:3.10' testImplementation sourceSets.main_java6.output } 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 6da827a1b76..b0a968f5f91 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()) @@ -251,7 +251,7 @@ abstract class InstrumentationSpecification extends DDSpecification implements A } } - boolean originalAppSecRuntimeValue + volatile boolean originalAppSecRuntimeValue @Shared ConcurrentHashMap> spanFinishLocations = new ConcurrentHashMap<>() @@ -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 } @@ -654,7 +654,7 @@ abstract class InstrumentationSpecification extends DDSpecification implements A } /** Used to signal that a transformation was intentionally aborted and is not an error. */ -@SuppressFBWarnings("RANGE_ARRAY_INDEX") +@SuppressFBWarnings(value = ["RANGE_ARRAY_INDEX", "CT_CONSTRUCTOR_THROW"]) class AbortTransformationException extends RuntimeException { AbortTransformationException(final String message) { super(message) diff --git a/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/TrackingSpanDecorator.groovy b/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/TrackingSpanDecorator.groovy index a5aba89b4cb..ebf2744ccf4 100644 --- a/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/TrackingSpanDecorator.groovy +++ b/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/TrackingSpanDecorator.groovy @@ -11,7 +11,7 @@ import datadog.trace.bootstrap.instrumentation.api.AgentSpan import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext import datadog.trace.bootstrap.instrumentation.api.AgentSpanLink import datadog.trace.core.DDSpan - +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings import java.util.concurrent.ConcurrentHashMap /** @@ -21,6 +21,7 @@ import java.util.concurrent.ConcurrentHashMap * *

It also wraps the span's {@link RequestContext} with {@link ValidatingRequestContextDecorator} */ +@SuppressFBWarnings("CT_CONSTRUCTOR_THROW") class TrackingSpanDecorator implements AgentSpan { private final AgentSpan delegate diff --git a/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/ValidatingRequestContextDecorator.groovy b/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/ValidatingRequestContextDecorator.groovy index 13c7ab59c3c..239b9218f54 100644 --- a/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/ValidatingRequestContextDecorator.groovy +++ b/dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/ValidatingRequestContextDecorator.groovy @@ -4,7 +4,7 @@ import datadog.trace.api.gateway.BlockResponseFunction import datadog.trace.api.gateway.RequestContext import datadog.trace.api.gateway.RequestContextSlot import datadog.trace.api.internal.TraceSegment - +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings import java.util.function.Function /** @@ -12,6 +12,7 @@ import java.util.function.Function * if there is an attempt to modify the trace segment after the root span has finished, * an assertion error will be thrown. */ +@SuppressFBWarnings("CT_CONSTRUCTOR_THROW") class ValidatingRequestContextDecorator implements RequestContext { private final RequestContext delegate 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-actor-2.5/src/akka23Test/scala/AkkaActors.scala b/dd-java-agent/instrumentation/akka/akka-actor-2.5/src/akka23Test/scala/AkkaActors.scala index c34972a1663..6ce5ab7483d 100644 --- a/dd-java-agent/instrumentation/akka/akka-actor-2.5/src/akka23Test/scala/AkkaActors.scala +++ b/dd-java-agent/instrumentation/akka/akka-actor-2.5/src/akka23Test/scala/AkkaActors.scala @@ -15,7 +15,7 @@ import scala.concurrent.duration._ class AkkaActors extends AutoCloseable { val system: ActorSystem = ActorSystem("akka-actors-test") - val receiver: ActorRef = + val receiver: ActorRef = system.actorOf(Receiver.props, "receiver") val forwarder: ActorRef = system.actorOf(Forwarder.props(receiver), "forwarder") 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 7e5b182cc28..7729b7d77ac 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 @@ -117,7 +117,7 @@ dependencies { baseTestImplementation group: 'com.typesafe.akka', name: 'akka-http-spray-json_2.11', version: '10.0.10' iastTestImplementation project(':dd-java-agent:agent-iast:iast-test-fixtures') - iastTestCompileOnly group: 'de.thetaphi', name: 'forbiddenapis', version: '3.4' + iastTestCompileOnly group: 'de.thetaphi', name: 'forbiddenapis', version: '3.10' iastTestRuntimeOnly project(':dd-java-agent:instrumentation:jackson-core') iastTestRuntimeOnly project(':dd-java-agent:instrumentation:jackson-core:jackson-core-2.8') iastTestRuntimeOnly project(':dd-java-agent:instrumentation:iast-instrumenter') 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..4c6d5b3f142 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 @@ -353,8 +354,8 @@ object AkkaHttpTestWebServer { resp.withEntity(uri.queryString().orNull) case REDIRECT => resp.withHeaders(headers.Location(endpoint.getBody)) - case ERROR => resp.withEntity(endpoint.getBody) - case EXCEPTION => throw new Exception(endpoint.getBody) + case ERROR => resp.withEntity(endpoint.getBody) + case EXCEPTION => throw new Exception(endpoint.getBody) case USER_BLOCK => { Blocking.forUser("user-to-block").blockIfMatch() // should never be output: @@ -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.0/src/main/java/datadog/trace/instrumentation/akkahttp/iast/HttpRequestInstrumentation.java b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/iast/HttpRequestInstrumentation.java index b9ae249e0d1..b0b027bcfd7 100644 --- a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/iast/HttpRequestInstrumentation.java +++ b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/iast/HttpRequestInstrumentation.java @@ -24,7 +24,6 @@ import datadog.trace.api.iast.Source; import datadog.trace.api.iast.SourceTypes; import datadog.trace.api.iast.propagation.PropagationModule; -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import net.bytebuddy.asm.Advice; import scala.collection.Iterator; import scala.collection.immutable.Seq; @@ -61,7 +60,6 @@ public void methodAdvice(MethodTransformer transformer) { HttpRequestInstrumentation.class.getName() + "$EntityAdvice"); } - @SuppressFBWarnings("BC_IMPOSSIBLE_INSTANCEOF") @RequiresRequestContext(RequestContextSlot.IAST) static class RequestHeadersAdvice { @Advice.OnMethodExit(suppress = Throwable.class) diff --git a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/iast/RequestContextInstrumentation.java b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/iast/RequestContextInstrumentation.java index 34b9e7a1490..f1cf128078e 100644 --- a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/iast/RequestContextInstrumentation.java +++ b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/iast/RequestContextInstrumentation.java @@ -19,7 +19,6 @@ import datadog.trace.api.iast.InstrumentationBridge; import datadog.trace.api.iast.Propagation; import datadog.trace.api.iast.propagation.PropagationModule; -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import net.bytebuddy.asm.Advice; /** Propagates taint when fetching the {@link HttpRequest} from the {@link RequestContext}. */ @@ -46,7 +45,6 @@ public void methodAdvice(MethodTransformer transformer) { RequestContextInstrumentation.class.getName() + "$GetRequestAdvice"); } - @SuppressFBWarnings("BC_IMPOSSIBLE_INSTANCEOF") @RequiresRequestContext(RequestContextSlot.IAST) static class GetRequestAdvice { @Advice.OnMethodExit(suppress = Throwable.class) diff --git a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/iast/helpers/TaintRequestFunction.java b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/iast/helpers/TaintRequestFunction.java index c881037cf1c..cd80b65b56f 100644 --- a/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/iast/helpers/TaintRequestFunction.java +++ b/dd-java-agent/instrumentation/akka/akka-http/akka-http-10.0/src/main/java/datadog/trace/instrumentation/akkahttp/iast/helpers/TaintRequestFunction.java @@ -6,7 +6,6 @@ import datadog.trace.api.iast.SourceTypes; import datadog.trace.api.iast.propagation.PropagationModule; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import scala.Tuple1; import scala.compat.java8.JFunction1; @@ -14,7 +13,6 @@ public class TaintRequestFunction implements JFunction1, Tup public static final TaintRequestFunction INSTANCE = new TaintRequestFunction(); @Override - @SuppressFBWarnings("BC_IMPOSSIBLE_INSTANCEOF") public Tuple1 apply(Tuple1 v1) { HttpRequest httpRequest = v1._1(); 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..4c6d5b3f142 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 @@ -353,8 +354,8 @@ object AkkaHttpTestWebServer { resp.withEntity(uri.queryString().orNull) case REDIRECT => resp.withHeaders(headers.Location(endpoint.getBody)) - case ERROR => resp.withEntity(endpoint.getBody) - case EXCEPTION => throw new Exception(endpoint.getBody) + case ERROR => resp.withEntity(endpoint.getBody) + case EXCEPTION => throw new Exception(endpoint.getBody) case USER_BLOCK => { Blocking.forUser("user-to-block").blockIfMatch() // should never be output: @@ -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/exception-profiling/build.gradle b/dd-java-agent/instrumentation/exception-profiling/build.gradle index 6f90365731c..fcd7cf22849 100644 --- a/dd-java-agent/instrumentation/exception-profiling/build.gradle +++ b/dd-java-agent/instrumentation/exception-profiling/build.gradle @@ -11,7 +11,7 @@ apply from: "$rootDir/gradle/java.gradle" apply plugin: "idea" dependencies { - testImplementation 'de.thetaphi:forbiddenapis:3.8' + testImplementation 'de.thetaphi:forbiddenapis:3.10' testImplementation libs.bundles.junit5 testImplementation libs.bundles.jmc testImplementation libs.commons.math 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/gradle/gradle-8.3/src/main/groovy/datadog/trace/instrumentation/gradle/GradleLauncherInstrumentation.java b/dd-java-agent/instrumentation/gradle/gradle-8.3/src/main/groovy/datadog/trace/instrumentation/gradle/GradleLauncherInstrumentation.java index 94bbc34fcc4..5c16964e933 100644 --- a/dd-java-agent/instrumentation/gradle/gradle-8.3/src/main/groovy/datadog/trace/instrumentation/gradle/GradleLauncherInstrumentation.java +++ b/dd-java-agent/instrumentation/gradle/gradle-8.3/src/main/groovy/datadog/trace/instrumentation/gradle/GradleLauncherInstrumentation.java @@ -6,7 +6,6 @@ import com.google.auto.service.AutoService; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.InstrumenterModule; -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.Map; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; @@ -50,9 +49,6 @@ public String[] helperClassNames() { }; } - @SuppressFBWarnings( - value = "UC_USELESS_OBJECT", - justification = "jvmOptions is the return value of the original method") public static class PropertiesAugmentationAdvice { @Advice.OnMethodExit(suppress = Throwable.class) public static void addJavaagentToGradleDaemonProperties( 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/junit/junit-4.10/munit-junit-4/src/main/java/datadog/trace/instrumentation/junit4/execution/MUnitExecutionInstrumentation.java b/dd-java-agent/instrumentation/junit/junit-4.10/munit-junit-4/src/main/java/datadog/trace/instrumentation/junit4/execution/MUnitExecutionInstrumentation.java index a5dae830aa8..94fe65f9f4a 100644 --- a/dd-java-agent/instrumentation/junit/junit-4.10/munit-junit-4/src/main/java/datadog/trace/instrumentation/junit4/execution/MUnitExecutionInstrumentation.java +++ b/dd-java-agent/instrumentation/junit/junit-4.10/munit-junit-4/src/main/java/datadog/trace/instrumentation/junit4/execution/MUnitExecutionInstrumentation.java @@ -17,7 +17,6 @@ import datadog.trace.instrumentation.junit4.MUnitUtils; import datadog.trace.instrumentation.junit4.TestEventsHandlerHolder; import datadog.trace.util.Strings; -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.lang.reflect.Method; import java.util.Collection; import java.util.Collections; @@ -122,9 +121,6 @@ public static Future apply( } @SuppressWarnings("bytebuddy-exception-suppression") - @SuppressFBWarnings( - value = "UC_USELESS_OBJECT", - justification = "result is the return value of the original method") @Advice.OnMethodExit public static void returnResult( @Advice.Enter Future overriddenResult, diff --git a/dd-java-agent/instrumentation/junit/junit-4.10/src/test/kotlin/org/example/TestSucceedKotlin.kt b/dd-java-agent/instrumentation/junit/junit-4.10/src/test/kotlin/org/example/TestSucceedKotlin.kt index 748dcfa23a9..4fd3c2c7511 100644 --- a/dd-java-agent/instrumentation/junit/junit-4.10/src/test/kotlin/org/example/TestSucceedKotlin.kt +++ b/dd-java-agent/instrumentation/junit/junit-4.10/src/test/kotlin/org/example/TestSucceedKotlin.kt @@ -4,7 +4,6 @@ import org.junit.Assert import org.junit.Test class TestSucceedKotlin { - @Test fun `single document (without provider) deserialized from json`() { Assert.assertTrue(true) diff --git a/dd-java-agent/instrumentation/junit/junit-4.10/src/test/kotlin/org/example/TestSucceedParameterizedKotlin.kt b/dd-java-agent/instrumentation/junit/junit-4.10/src/test/kotlin/org/example/TestSucceedParameterizedKotlin.kt index 109bda5e4ed..4f39600a4cd 100644 --- a/dd-java-agent/instrumentation/junit/junit-4.10/src/test/kotlin/org/example/TestSucceedParameterizedKotlin.kt +++ b/dd-java-agent/instrumentation/junit/junit-4.10/src/test/kotlin/org/example/TestSucceedParameterizedKotlin.kt @@ -9,16 +9,16 @@ import org.junit.runners.Parameterized class TestSucceedParameterizedKotlin( private val param1: ParamObject, private val param2: String, - private val param3: Int + private val param3: Int, ) { - companion object { @JvmStatic @Parameterized.Parameters(name = "{1}") - fun data(): Collection> = listOf( - arrayOf(ParamObject(), "str1", 0), - arrayOf(ParamObject(), "str2", 1) - ) + fun data(): Collection> = + listOf( + arrayOf(ParamObject(), "str1", 0), + arrayOf(ParamObject(), "str2", 1), + ) } @Test diff --git a/dd-java-agent/instrumentation/junit/junit-5.3/cucumber-junit-5/src/main/java/datadog/trace/instrumentation/junit5/JUnit5CucumberSkipInstrumentation.java b/dd-java-agent/instrumentation/junit/junit-5.3/cucumber-junit-5/src/main/java/datadog/trace/instrumentation/junit5/JUnit5CucumberSkipInstrumentation.java index cc5ff7d2e40..0a30861948f 100644 --- a/dd-java-agent/instrumentation/junit/junit-5.3/cucumber-junit-5/src/main/java/datadog/trace/instrumentation/junit5/JUnit5CucumberSkipInstrumentation.java +++ b/dd-java-agent/instrumentation/junit/junit-5.3/cucumber-junit-5/src/main/java/datadog/trace/instrumentation/junit5/JUnit5CucumberSkipInstrumentation.java @@ -14,7 +14,6 @@ import datadog.trace.api.civisibility.events.TestEventsHandler; import datadog.trace.api.civisibility.telemetry.tag.SkipReason; import datadog.trace.api.civisibility.telemetry.tag.TestFrameworkInstrumentation; -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.Collection; import java.util.Set; import net.bytebuddy.asm.Advice; @@ -85,10 +84,6 @@ public void methodAdvice(MethodTransformer transformer) { * available in CL where this instrumentation is injected */ public static class JUnit5SkipAdvice { - - @SuppressFBWarnings( - value = "UC_USELESS_OBJECT", - justification = "skipResult is the return value of the instrumented method") @Advice.OnMethodExit public static void shouldBeSkipped( @Advice.This TestDescriptor testDescriptor, diff --git a/dd-java-agent/instrumentation/junit/junit-5.3/junit-5.8/src/main/java/datadog/trace/instrumentation/junit5/order/JUnit5TestOrderInstrumentation.java b/dd-java-agent/instrumentation/junit/junit-5.3/junit-5.8/src/main/java/datadog/trace/instrumentation/junit5/order/JUnit5TestOrderInstrumentation.java index 2e5686f5fc7..0841857fa4a 100644 --- a/dd-java-agent/instrumentation/junit/junit-5.3/junit-5.8/src/main/java/datadog/trace/instrumentation/junit5/order/JUnit5TestOrderInstrumentation.java +++ b/dd-java-agent/instrumentation/junit/junit-5.3/junit-5.8/src/main/java/datadog/trace/instrumentation/junit5/order/JUnit5TestOrderInstrumentation.java @@ -13,7 +13,6 @@ import datadog.trace.instrumentation.junit5.JUnitPlatformUtils; import datadog.trace.instrumentation.junit5.TestEventsHandlerHolder; import datadog.trace.util.Strings; -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.Optional; import java.util.Set; import net.bytebuddy.asm.Advice; @@ -76,9 +75,6 @@ public static void onGetClassOrdererEnter() { CallDepthThreadLocalMap.incrementCallDepth(JupiterConfiguration.class); } - @SuppressFBWarnings( - value = "UC_USELESS_OBJECT", - justification = "classOrderer is the return value of the instrumented method") @Advice.OnMethodExit public static void onGetClassOrdererExit( @Advice.Return(readOnly = false) Optional classOrderer) { @@ -105,9 +101,6 @@ public static void onGetMethodOrdererEnter() { CallDepthThreadLocalMap.incrementCallDepth(JupiterConfiguration.class); } - @SuppressFBWarnings( - value = "UC_USELESS_OBJECT", - justification = "methodOrderer is the return value of the instrumented method") @Advice.OnMethodExit public static void onGetMethodOrdererExit( @Advice.Return(readOnly = false) Optional methodOrderer) { diff --git a/dd-java-agent/instrumentation/junit/junit-5.3/spock-junit-5/src/main/java/datadog/trace/instrumentation/junit5/JUnit5SpockSkipInstrumentation.java b/dd-java-agent/instrumentation/junit/junit-5.3/spock-junit-5/src/main/java/datadog/trace/instrumentation/junit5/JUnit5SpockSkipInstrumentation.java index 465b85ff991..397cbb031a5 100644 --- a/dd-java-agent/instrumentation/junit/junit-5.3/spock-junit-5/src/main/java/datadog/trace/instrumentation/junit5/JUnit5SpockSkipInstrumentation.java +++ b/dd-java-agent/instrumentation/junit/junit-5.3/spock-junit-5/src/main/java/datadog/trace/instrumentation/junit5/JUnit5SpockSkipInstrumentation.java @@ -14,7 +14,6 @@ import datadog.trace.api.civisibility.telemetry.tag.SkipReason; import datadog.trace.api.civisibility.telemetry.tag.TestFrameworkInstrumentation; import datadog.trace.bootstrap.CallDepthThreadLocalMap; -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.Set; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; @@ -85,9 +84,6 @@ public static void beforeSkipCheck() { } @SuppressWarnings("bytebuddy-exception-suppression") - @SuppressFBWarnings( - value = "UC_USELESS_OBJECT", - justification = "skipResult is the return value of the instrumented method") @Advice.OnMethodExit public static void shouldBeSkipped( @Advice.This SpockNode spockNode, diff --git a/dd-java-agent/instrumentation/junit/junit-5.3/spock-junit-5/src/main/java/datadog/trace/instrumentation/junit5/execution/JUnit5SpockParameterizedExecutionInstrumentation.java b/dd-java-agent/instrumentation/junit/junit-5.3/spock-junit-5/src/main/java/datadog/trace/instrumentation/junit5/execution/JUnit5SpockParameterizedExecutionInstrumentation.java index a7642ad3259..6e5d505fb95 100644 --- a/dd-java-agent/instrumentation/junit/junit-5.3/spock-junit-5/src/main/java/datadog/trace/instrumentation/junit5/execution/JUnit5SpockParameterizedExecutionInstrumentation.java +++ b/dd-java-agent/instrumentation/junit/junit-5.3/spock-junit-5/src/main/java/datadog/trace/instrumentation/junit5/execution/JUnit5SpockParameterizedExecutionInstrumentation.java @@ -8,7 +8,6 @@ import datadog.trace.api.Config; import datadog.trace.instrumentation.junit5.JUnitPlatformUtils; import datadog.trace.util.Strings; -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.Map; import java.util.Set; import java.util.concurrent.CompletableFuture; @@ -62,9 +61,6 @@ public void methodAdvice(MethodTransformer transformer) { public static class SpockParameterizedExecutionAdvice { @SuppressWarnings("bytebuddy-exception-suppression") - @SuppressFBWarnings( - value = "UC_USELESS_OBJECT", - justification = "executionListener is a field in the instrumented class") @Advice.OnMethodExit public static void afterConstructor( @Advice.FieldValue(value = "executionListener", readOnly = false) diff --git a/dd-java-agent/instrumentation/junit/junit-5.3/src/main/java/datadog/trace/instrumentation/junit5/JUnit5Instrumentation.java b/dd-java-agent/instrumentation/junit/junit-5.3/src/main/java/datadog/trace/instrumentation/junit5/JUnit5Instrumentation.java index ad5ab0f6f1a..bacbafe3464 100644 --- a/dd-java-agent/instrumentation/junit/junit-5.3/src/main/java/datadog/trace/instrumentation/junit5/JUnit5Instrumentation.java +++ b/dd-java-agent/instrumentation/junit/junit-5.3/src/main/java/datadog/trace/instrumentation/junit5/JUnit5Instrumentation.java @@ -11,7 +11,6 @@ import datadog.trace.api.civisibility.telemetry.tag.TestFrameworkInstrumentation; import datadog.trace.bootstrap.ContextStore; import datadog.trace.bootstrap.InstrumentationContext; -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.Collections; import java.util.Map; import net.bytebuddy.asm.Advice; @@ -76,9 +75,6 @@ public void methodAdvice(MethodTransformer transformer) { } public static class ContextStoreAdvice { - @SuppressFBWarnings( - value = "UC_USELESS_OBJECT", - justification = "executionRequest is the argument of the original method") @Advice.OnMethodEnter public static void setContextStores(@Advice.This TestEngine testEngine) { ContextStore contextStore = @@ -89,9 +85,6 @@ public static void setContextStores(@Advice.This TestEngine testEngine) { } public static class JUnit5Advice { - @SuppressFBWarnings( - value = "UC_USELESS_OBJECT", - justification = "executionRequest is the argument of the original method") @Advice.OnMethodEnter public static void addTracingListener( @Advice.This TestEngine testEngine, diff --git a/dd-java-agent/instrumentation/junit/junit-5.3/src/main/java/datadog/trace/instrumentation/junit5/JUnit5SkipInstrumentation.java b/dd-java-agent/instrumentation/junit/junit-5.3/src/main/java/datadog/trace/instrumentation/junit5/JUnit5SkipInstrumentation.java index 35218d456a9..614d95a98e1 100644 --- a/dd-java-agent/instrumentation/junit/junit-5.3/src/main/java/datadog/trace/instrumentation/junit5/JUnit5SkipInstrumentation.java +++ b/dd-java-agent/instrumentation/junit/junit-5.3/src/main/java/datadog/trace/instrumentation/junit5/JUnit5SkipInstrumentation.java @@ -15,7 +15,6 @@ import datadog.trace.api.civisibility.events.TestEventsHandler; import datadog.trace.api.civisibility.telemetry.tag.SkipReason; import datadog.trace.api.civisibility.telemetry.tag.TestFrameworkInstrumentation; -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.Collection; import java.util.Set; import net.bytebuddy.asm.Advice; @@ -77,9 +76,6 @@ public void methodAdvice(MethodTransformer transformer) { */ public static class JUnit5SkipAdvice { - @SuppressFBWarnings( - value = "UC_USELESS_OBJECT", - justification = "skipResult is the return value of the instrumented method") @Advice.OnMethodExit public static void shouldBeSkipped( @Advice.This TestDescriptor testDescriptor, diff --git a/dd-java-agent/instrumentation/junit/junit-5.3/src/main/java/datadog/trace/instrumentation/junit5/execution/JUnit5ExecutionStoreInstrumentation.java b/dd-java-agent/instrumentation/junit/junit-5.3/src/main/java/datadog/trace/instrumentation/junit5/execution/JUnit5ExecutionStoreInstrumentation.java index 019b4a6b4dd..18ea443fb60 100644 --- a/dd-java-agent/instrumentation/junit/junit-5.3/src/main/java/datadog/trace/instrumentation/junit5/execution/JUnit5ExecutionStoreInstrumentation.java +++ b/dd-java-agent/instrumentation/junit/junit-5.3/src/main/java/datadog/trace/instrumentation/junit5/execution/JUnit5ExecutionStoreInstrumentation.java @@ -14,7 +14,6 @@ import datadog.trace.instrumentation.junit5.JUnitPlatformUtils; import datadog.trace.instrumentation.junit5.TestEventsHandlerHolder; import datadog.trace.util.Strings; -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.Collections; import java.util.Map; import net.bytebuddy.asm.Advice; @@ -73,9 +72,6 @@ public void methodAdvice(MethodTransformer transformer) { } public static class ContextStoreAdvice { - @SuppressFBWarnings( - value = "UC_USELESS_OBJECT", - justification = "executionRequest is the argument of the original method") @Advice.OnMethodEnter public static void setContextStores() { ContextStore contextStore = 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/build.gradle b/dd-java-agent/instrumentation/kotlin-coroutines/build.gradle index 453ab37dfe6..ff8932dfef9 100644 --- a/dd-java-agent/instrumentation/kotlin-coroutines/build.gradle +++ b/dd-java-agent/instrumentation/kotlin-coroutines/build.gradle @@ -60,7 +60,7 @@ dependencies { testFixturesApi project(':dd-trace-api') testFixturesApi project(':dd-java-agent:instrumentation:trace-annotation') testFixturesApi project(':dd-java-agent:instrumentation-testing') - testFixturesApi 'com.github.spotbugs:spotbugs-annotations:4.2.0' + testFixturesApi 'com.github.spotbugs:spotbugs-annotations:4.9.8' testImplementation libs.kotlin testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.0" 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 577dfd14727..89f9f9322d0 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 @@ -10,88 +10,77 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.withTimeout @SuppressFBWarnings("NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE") -class KotlinCoroutineTests(dispatcher: CoroutineDispatcher) : CoreKotlinCoroutineTests(dispatcher) { - +class KotlinCoroutineTests( + dispatcher: CoroutineDispatcher, +) : CoreKotlinCoroutineTests(dispatcher) { @Trace - fun tracedAcrossFlows(withModifiedContext: Boolean): Int = runTest { - val producer = flow { - repeat(3) { - tracedChild("produce_$it") - if (withModifiedContext) { - withTimeout(100) { - emit(it) + fun tracedAcrossFlows(withModifiedContext: Boolean): Int = + runTest { + val producer = + flow { + repeat(3) { + tracedChild("produce_$it") + if (withModifiedContext) { + withTimeout(100) { + emit(it) + } + } else { + emit(it) + } } - } else { - emit(it) + }.flowOn(jobName("producer")) + + launch(jobName("consumer")) { + producer.collect { + tracedChild("consume_$it") } } - }.flowOn(jobName("producer")) - launch(jobName("consumer")) { - producer.collect { - tracedChild("consume_$it") - } + 7 } - 7 - } - @Trace - fun traceAfterFlow(): Int = runTest { - val f = flow { - childSpan("inside-flow").activateAndUse { - println("insideFlowSpan") + fun traceAfterFlow(): Int = + runTest { + val f = + flow { + childSpan("inside-flow").activateAndUse { + println("insideFlowSpan") + } + emit(1) + }.flowOn(Dispatchers.IO) + val ff = f.single() + + childSpan("outside-flow").activateAndUse { + println("hello $ff") } - emit(1) - }.flowOn(Dispatchers.IO) - val ff = f.single() - childSpan("outside-flow").activateAndUse { - println("hello $ff") + 3 } - 3 - } - @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 3fb4e460ca8..f91116c6423 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 @@ -10,69 +10,57 @@ import kotlinx.coroutines.channels.toChannel @OptIn(ExperimentalCoroutinesApi::class) @SuppressFBWarnings("NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE") -class KotlinCoroutineTests(dispatcher: CoroutineDispatcher) : CoreKotlinCoroutineTests(dispatcher) { - +class KotlinCoroutineTests( + dispatcher: CoroutineDispatcher, +) : CoreKotlinCoroutineTests(dispatcher) { @Trace - fun tracedAcrossChannels(): Int = runTest { - val producer = produce(jobName("producer")) { - repeat(3) { - tracedChild("produce_$it") - send(it) - } - } + fun tracedAcrossChannels(): Int = + runTest { + val producer = + produce(jobName("producer")) { + repeat(3) { + tracedChild("produce_$it") + send(it) + } + } - val actor = actor(jobName("consumer")) { - consumeEach { - tracedChild("consume_$it") - } - } + val actor = + actor(jobName("consumer")) { + consumeEach { + tracedChild("consume_$it") + } + } - @Suppress("DEPRECATION_ERROR") - producer.toChannel(actor) - actor.close() + @Suppress("DEPRECATION_ERROR") + producer.toChannel(actor) + actor.close() - 7 - } + 7 + } @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 45252e74867..737901200f8 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 @@ -29,11 +29,11 @@ import java.util.concurrent.TimeUnit import java.util.concurrent.atomic.AtomicInteger @SuppressFBWarnings("NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE") -abstract class CoreKotlinCoroutineTests(private val dispatcher: CoroutineDispatcher) { - +abstract class CoreKotlinCoroutineTests( + private val dispatcher: CoroutineDispatcher, +) { @Trace open fun tracePreventedByCancellation(): Int { - kotlin.runCatching { runTest { tracedChild("preLaunch") @@ -52,80 +52,85 @@ abstract class CoreKotlinCoroutineTests(private val dispatcher: CoroutineDispatc } @Trace - open fun tracedAcrossThreadsWithNested(): Int = runTest { - val goodDeferred = async(jobName("goodDeferred")) { 1 } - - launch(jobName("root")) { - goodDeferred.await() - launch(jobName("nested")) { - tracedChild("nested") + open fun tracedAcrossThreadsWithNested(): Int = + runTest { + val goodDeferred = async(jobName("goodDeferred")) { 1 } + + launch(jobName("root")) { + goodDeferred.await() + launch(jobName("nested")) { + tracedChild("nested") + } } - } - 2 - } + 2 + } @Trace - open fun traceWithDeferred(): Int = runTest { - - val keptPromise = CompletableDeferred() - val brokenPromise = CompletableDeferred() - val afterPromise = async(jobName("afterPromise")) { - keptPromise.await() - tracedChild("keptPromise") - } - val afterPromise2 = async(jobName("afterPromise2")) { - keptPromise.await() - tracedChild("keptPromise2") - } - val failedAfterPromise = async(jobName("failedAfterPromise")) { - brokenPromise - .runCatching { await() } - .onFailure { tracedChild("brokenPromise") } - } + open fun traceWithDeferred(): Int = + runTest { + val keptPromise = CompletableDeferred() + val brokenPromise = CompletableDeferred() + val afterPromise = + async(jobName("afterPromise")) { + keptPromise.await() + tracedChild("keptPromise") + } + val afterPromise2 = + async(jobName("afterPromise2")) { + keptPromise.await() + tracedChild("keptPromise2") + } + val failedAfterPromise = + async(jobName("failedAfterPromise")) { + brokenPromise + .runCatching { await() } + .onFailure { tracedChild("brokenPromise") } + } - launch(jobName("future1")) { - tracedChild("future1") - keptPromise.complete(true) - brokenPromise.completeExceptionally(IllegalStateException()) - } + launch(jobName("future1")) { + tracedChild("future1") + keptPromise.complete(true) + brokenPromise.completeExceptionally(IllegalStateException()) + } - listOf(afterPromise, afterPromise2, failedAfterPromise).awaitAll() + listOf(afterPromise, afterPromise2, failedAfterPromise).awaitAll() - 5 - } + 5 + } /** * @return Number of expected spans in the trace */ @Trace - open fun tracedWithDeferredFirstCompletions(): Int = runTest { - - val children = listOf( - async(jobName("timeout1")) { - tracedChild("timeout1") - false - }, - async(jobName("timeout2")) { - tracedChild("timeout2") - false - }, - async(jobName("timeout3")) { - tracedChild("timeout3") - true - } - ) - - withTimeout(TimeUnit.SECONDS.toMillis(30)) { - select { - children.forEach { child -> - child.onAwait { it } + open fun tracedWithDeferredFirstCompletions(): Int = + runTest { + val children = + listOf( + async(jobName("timeout1")) { + tracedChild("timeout1") + false + }, + async(jobName("timeout2")) { + tracedChild("timeout2") + false + }, + async(jobName("timeout3")) { + tracedChild("timeout3") + true + }, + ) + + withTimeout(TimeUnit.SECONDS.toMillis(30)) { + select { + children.forEach { child -> + child.onAwait { it } + } } } - } - 4 - } + 4 + } /** * --- First job starts -------------------------- First job completes --- @@ -133,160 +138,144 @@ abstract class CoreKotlinCoroutineTests(private val dispatcher: CoroutineDispatc * -------------------- Second job starts ---------------------------- Second job completes --- */ @Trace - open fun tracedWithSuspendingCoroutines(): Int = runTest { - val jobs = mutableListOf>() + open fun tracedWithSuspendingCoroutines(): Int = + runTest { + val jobs = mutableListOf>() - val beforeFirstJobStartedMutex = Mutex(locked = true) - val afterFirstJobStartedMutex = Mutex(locked = true) + val beforeFirstJobStartedMutex = Mutex(locked = true) + val afterFirstJobStartedMutex = Mutex(locked = true) - val beforeFirstJobCompletedMutex = Mutex(locked = true) - val afterFirstJobCompletedMutex = Mutex(locked = true) + val beforeFirstJobCompletedMutex = Mutex(locked = true) + val afterFirstJobCompletedMutex = Mutex(locked = true) - childSpan("top-level").activateAndUse { - childSpan("synchronous-child").activateAndUse { - delay(5) - } - - // this coroutine starts before the second one starts and completes before the second one - async(jobName("first")) { - beforeFirstJobStartedMutex.lock() - childSpan("first-span").activateAndUse { - afterFirstJobStartedMutex.unlock() - beforeFirstJobCompletedMutex.lock() + childSpan("top-level").activateAndUse { + childSpan("synchronous-child").activateAndUse { + delay(5) } - afterFirstJobCompletedMutex.unlock() - }.run(jobs::add) - // this coroutine starts after the first one and completes after the first one - async(jobName("second")) { - afterFirstJobStartedMutex.withLock { - childSpan("second-span").activateAndUse { - beforeFirstJobCompletedMutex.unlock() - afterFirstJobCompletedMutex.lock() + // this coroutine starts before the second one starts and completes before the second one + async(jobName("first")) { + beforeFirstJobStartedMutex.lock() + childSpan("first-span").activateAndUse { + afterFirstJobStartedMutex.unlock() + beforeFirstJobCompletedMutex.lock() } - } - }.run(jobs::add) - } - beforeFirstJobStartedMutex.unlock() - - jobs.awaitAll() - - 5 - } - - @Trace - open fun tracedWithLazyStarting(): Int = runTest { - val spans = AtomicInteger(1) - val jobs = mutableListOf>() - - childSpan("top-level").activateAndUse { - spans.incrementAndGet() - async(jobName("first"), CoroutineStart.LAZY) { - childSpan("first-span").activateAndUse { - spans.incrementAndGet() - delay(1) - } - }.run(jobs::add) - - async(jobName("second"), CoroutineStart.LAZY) { - childSpan("second-span").activateAndUse { - spans.incrementAndGet() - delay(1) - } - }.run(jobs::add) - } + afterFirstJobCompletedMutex.unlock() + }.run(jobs::add) - jobs[0].start() - childSpan("lazy-start").activateAndUse { - spans.incrementAndGet() - jobs[1].start() - } - jobs.awaitAll() + // this coroutine starts after the first one and completes after the first one + async(jobName("second")) { + afterFirstJobStartedMutex.withLock { + childSpan("second-span").activateAndUse { + beforeFirstJobCompletedMutex.unlock() + afterFirstJobCompletedMutex.lock() + } + } + }.run(jobs::add) + } + beforeFirstJobStartedMutex.unlock() - spans.get() - } + jobs.awaitAll() - open fun withNoTraceParentSpan(lazy: Boolean, throwing: Boolean): Int { - val spans = AtomicInteger(0) - try { - runTest { - createAndWaitForCoroutines(lazy, throwing, spans) - spans.get() - } - } catch (_: Exception) { + 5 } - return spans.get() - } - private suspend fun createAndWaitForCoroutines(lazy: Boolean = false, throwing: Boolean = false, spans: AtomicInteger) = - coroutineScope { + @Trace + open fun tracedWithLazyStarting(): Int = + runTest { + val spans = AtomicInteger(1) val jobs = mutableListOf>() - val start = if (lazy) CoroutineStart.LAZY else CoroutineStart.DEFAULT childSpan("top-level").activateAndUse { spans.incrementAndGet() - async(jobName("first"), start) { + async(jobName("first"), CoroutineStart.LAZY) { childSpan("first-span").activateAndUse { spans.incrementAndGet() - if (throwing) { - throw IllegalStateException("first") - } delay(1) } }.run(jobs::add) - async(jobName("second"), start) { + async(jobName("second"), CoroutineStart.LAZY) { childSpan("second-span").activateAndUse { spans.incrementAndGet() - if (throwing) { - throw IllegalStateException("second") - } delay(1) } }.run(jobs::add) } - if (lazy) { - jobs.forEach { it.start() } + jobs[0].start() + childSpan("lazy-start").activateAndUse { + spans.incrementAndGet() + jobs[1].start() } + jobs.awaitAll() - jobs.forEach { - try { - it.await() - } catch (_: Exception) { - } + spans.get() + } + + open fun withNoTraceParentSpan( + lazy: Boolean, + throwing: Boolean, + ): Int { + val spans = AtomicInteger(0) + try { + runTest { + createAndWaitForCoroutines(lazy, throwing, spans) + spans.get() } + } catch (_: Exception) { } + return spans.get() + } - open fun withNoParentSpan(lazy: Boolean): Int = runTest { + 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 - async(jobName("first"), start) { - childSpan("first-span").activateAndUse { - delay(1) - } - }.run(jobs::add) + childSpan("top-level").activateAndUse { + spans.incrementAndGet() + async(jobName("first"), start) { + childSpan("first-span").activateAndUse { + spans.incrementAndGet() + if (throwing) { + throw IllegalStateException("first") + } + delay(1) + } + }.run(jobs::add) - async(jobName("second"), start) { - childSpan("second-span").activateAndUse { - delay(1) - } - }.run(jobs::add) + async(jobName("second"), start) { + childSpan("second-span").activateAndUse { + spans.incrementAndGet() + if (throwing) { + throw IllegalStateException("second") + } + delay(1) + } + }.run(jobs::add) + } if (lazy) { jobs.forEach { it.start() } } - jobs.awaitAll() - 2 + jobs.forEach { + try { + it.await() + } catch (_: Exception) { + } + } } - open fun withParentSpanAndOnlyCanceled(): Int = runTest { - val jobs = mutableListOf>() - val start = CoroutineStart.LAZY + open fun withNoParentSpan(lazy: Boolean): Int = + runTest { + val jobs = mutableListOf>() + val start = if (lazy) CoroutineStart.LAZY else CoroutineStart.DEFAULT - childSpan("top-level").activateAndUse { async(jobName("first"), start) { childSpan("first-span").activateAndUse { delay(1) @@ -298,62 +287,92 @@ abstract class CoreKotlinCoroutineTests(private val dispatcher: CoroutineDispatc delay(1) } }.run(jobs::add) - } - jobs.forEach { - try { - it.cancelAndJoin() - } catch (_: CancellationException) { + if (lazy) { + jobs.forEach { it.start() } } + jobs.awaitAll() + + 2 } - 1 - } + open fun withParentSpanAndOnlyCanceled(): Int = + runTest { + val jobs = mutableListOf>() + val start = CoroutineStart.LAZY - @Trace - open fun traceAfterTimeout(): Int = runTest { - childSpan("1-before-timeout").activateAndUse { - delay(10) + childSpan("top-level").activateAndUse { + async(jobName("first"), start) { + childSpan("first-span").activateAndUse { + delay(1) + } + }.run(jobs::add) + + async(jobName("second"), start) { + childSpan("second-span").activateAndUse { + delay(1) + } + }.run(jobs::add) + } + + jobs.forEach { + try { + it.cancelAndJoin() + } catch (_: CancellationException) { + } + } + + 1 } - withTimeout(50) { - childSpan("2-inside-timeout").activateAndUse { + + @Trace + open fun traceAfterTimeout(): Int = + runTest { + childSpan("1-before-timeout").activateAndUse { + delay(10) + } + withTimeout(50) { + childSpan("2-inside-timeout").activateAndUse { + delay(10) + } + } + childSpan("3-after-timeout").activateAndUse { + delay(10) + } + childSpan("4-after-timeout-2").activateAndUse { + delay(10) + } + childSpan("5-after-timeout-3").activateAndUse { delay(10) } - } - childSpan("3-after-timeout").activateAndUse { - delay(10) - } - childSpan("4-after-timeout-2").activateAndUse { - delay(10) - } - childSpan("5-after-timeout-3").activateAndUse { - delay(10) - } - 6 - } + 6 + } @Trace - open fun traceAfterDelay(): Int = runTest { - tracedChild("before-process") + open fun traceAfterDelay(): Int = + runTest { + tracedChild("before-process") - val inputs = listOf("a", "b", "c") + val inputs = listOf("a", "b", "c") - coroutineScope { - inputs.map { data -> - async { - upload(data) - } - }.awaitAll().map { - tracedChild("process-$it") - encrypt(it) + coroutineScope { + inputs + .map { data -> + async { + upload(data) + } + }.awaitAll() + .map { + tracedChild("process-$it") + encrypt(it) + } } - } - tracedChild("after-process") + tracedChild("after-process") - 6 - } + 6 + } private suspend fun upload(data: String): String { delay(100) @@ -370,9 +389,11 @@ abstract class CoreKotlinCoroutineTests(private val dispatcher: CoroutineDispatc activeSpan().setSpanName(opName) } - protected fun childSpan(opName: String): AgentSpan = get().buildSpan(opName) - .withResourceName("coroutines-test-span") - .start() + protected fun childSpan(opName: String): AgentSpan = + get() + .buildSpan(opName) + .withResourceName("coroutines-test-span") + .start() protected fun jobName(jobName: String) = CoroutineName(jobName) @@ -386,7 +407,10 @@ abstract class CoreKotlinCoroutineTests(private val dispatcher: CoroutineDispatc } } - protected fun runTest(asyncPropagation: Boolean = true, block: suspend CoroutineScope.() -> T): T { + protected fun runTest( + asyncPropagation: Boolean = true, + block: suspend CoroutineScope.() -> T, + ): T { setAsyncPropagationEnabled(asyncPropagation) return runBlocking(jobName("test") + dispatcher, block = block) } 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-concurrent-1.0/src/test/scala/PekkoActors.scala b/dd-java-agent/instrumentation/pekko/pekko-concurrent-1.0/src/test/scala/PekkoActors.scala index 2fb3089ad55..ae368996e07 100644 --- a/dd-java-agent/instrumentation/pekko/pekko-concurrent-1.0/src/test/scala/PekkoActors.scala +++ b/dd-java-agent/instrumentation/pekko/pekko-concurrent-1.0/src/test/scala/PekkoActors.scala @@ -17,7 +17,7 @@ import scala.concurrent.duration._ class PekkoActors extends AutoCloseable { val system: ActorSystem = ActorSystem("pekko-actors-test") - val receiver: ActorRef = + val receiver: ActorRef = system.actorOf(Receiver.props, "receiver") val forwarder: ActorRef = system.actorOf(Forwarder.props(receiver), "forwarder") diff --git a/dd-java-agent/instrumentation/pekko/pekko-http-1.0/build.gradle b/dd-java-agent/instrumentation/pekko/pekko-http-1.0/build.gradle index f282eec55d0..609d364984c 100644 --- a/dd-java-agent/instrumentation/pekko/pekko-http-1.0/build.gradle +++ b/dd-java-agent/instrumentation/pekko/pekko-http-1.0/build.gradle @@ -63,7 +63,7 @@ dependencies { iastTestImplementation group: 'com.github.pjfanning', name: 'pekko-http-jackson_2.12', version: '2.1.0' iastTestImplementation project(':dd-java-agent:agent-iast:iast-test-fixtures') - iastTestCompileOnly group: 'de.thetaphi', name: 'forbiddenapis', version: '3.4' + iastTestCompileOnly group: 'de.thetaphi', name: 'forbiddenapis', version: '3.10' iastTestRuntimeOnly project(':dd-java-agent:instrumentation:jackson-core') iastTestRuntimeOnly project(':dd-java-agent:instrumentation:jackson-core:jackson-core-2.12') iastTestRuntimeOnly project(':dd-java-agent:instrumentation:iast-instrumenter') 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..300e84478ad 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 @@ -244,7 +245,7 @@ object PekkoHttpTestWebServer { resp.withHeaders(headers.Location(endpoint.getBody)) case ERROR => resp.withEntity(endpoint.getBody) case EXCEPTION => throw new Exception(endpoint.getBody) - case _ => + case _ => if (path.startsWith("/injected-id/")) { val groups = path.split('/') if (groups.size == 4) { // The path starts with a / and has 3 segments diff --git a/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/iast/HttpRequestInstrumentation.java b/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/iast/HttpRequestInstrumentation.java index fb10785e46b..6a6a1eb88cb 100644 --- a/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/iast/HttpRequestInstrumentation.java +++ b/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/iast/HttpRequestInstrumentation.java @@ -22,7 +22,6 @@ import datadog.trace.api.iast.Source; import datadog.trace.api.iast.SourceTypes; import datadog.trace.api.iast.propagation.PropagationModule; -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import net.bytebuddy.asm.Advice; import org.apache.pekko.http.scaladsl.model.HttpHeader; import org.apache.pekko.http.scaladsl.model.HttpRequest; @@ -61,7 +60,6 @@ public void methodAdvice(MethodTransformer transformer) { HttpRequestInstrumentation.class.getName() + "$EntityAdvice"); } - @SuppressFBWarnings("BC_IMPOSSIBLE_INSTANCEOF") @RequiresRequestContext(RequestContextSlot.IAST) static class RequestHeadersAdvice { @Advice.OnMethodExit(suppress = Throwable.class) diff --git a/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/iast/RequestContextInstrumentation.java b/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/iast/RequestContextInstrumentation.java index 0f302d0f6b9..3bf9af6d546 100644 --- a/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/iast/RequestContextInstrumentation.java +++ b/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/iast/RequestContextInstrumentation.java @@ -17,7 +17,6 @@ import datadog.trace.api.iast.InstrumentationBridge; import datadog.trace.api.iast.Propagation; import datadog.trace.api.iast.propagation.PropagationModule; -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import net.bytebuddy.asm.Advice; import org.apache.pekko.http.scaladsl.model.HttpRequest; import org.apache.pekko.http.scaladsl.server.RequestContext; @@ -46,7 +45,6 @@ public void methodAdvice(MethodTransformer transformer) { RequestContextInstrumentation.class.getName() + "$GetRequestAdvice"); } - @SuppressFBWarnings("BC_IMPOSSIBLE_INSTANCEOF") @RequiresRequestContext(RequestContextSlot.IAST) static class GetRequestAdvice { @Advice.OnMethodExit(suppress = Throwable.class) diff --git a/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/iast/helpers/TaintRequestFunction.java b/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/iast/helpers/TaintRequestFunction.java index 2c11c014ccd..15e9486efa3 100644 --- a/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/iast/helpers/TaintRequestFunction.java +++ b/dd-java-agent/instrumentation/pekko/pekko-http-1.0/src/main/java/datadog/trace/instrumentation/pekkohttp/iast/helpers/TaintRequestFunction.java @@ -5,7 +5,6 @@ import datadog.trace.api.iast.SourceTypes; import datadog.trace.api.iast.propagation.PropagationModule; import datadog.trace.bootstrap.instrumentation.api.AgentTracer; -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.apache.pekko.http.scaladsl.model.HttpRequest; import scala.Tuple1; import scala.compat.java8.JFunction1; @@ -14,7 +13,6 @@ public class TaintRequestFunction implements JFunction1, Tup public static final TaintRequestFunction INSTANCE = new TaintRequestFunction(); @Override - @SuppressFBWarnings("BC_IMPOSSIBLE_INSTANCEOF") public Tuple1 apply(Tuple1 v1) { HttpRequest httpRequest = v1._1(); 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/build.gradle b/dd-java-agent/instrumentation/ratpack-1.5/build.gradle index 38ed3cbd41f..0dec654e03b 100644 --- a/dd-java-agent/instrumentation/ratpack-1.5/build.gradle +++ b/dd-java-agent/instrumentation/ratpack-1.5/build.gradle @@ -15,7 +15,7 @@ addTestSuiteForDir('latestDepTest', 'test') dependencies { compileOnly group: 'io.ratpack', name: 'ratpack-core', version: '1.5.0' - compileOnly group: 'com.github.spotbugs', name: 'spotbugs-annotations', version: '4.2.0' + compileOnly group: 'com.github.spotbugs', name: 'spotbugs-annotations', version: '4.9.8' testImplementation project(':dd-java-agent:instrumentation:netty:netty-4.1') testImplementation group: 'io.ratpack', name: 'ratpack-groovy-test', version: '1.5.0' 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/main/java/datadog/trace/instrumentation/scalatest/ScalatestSkipInstrumentation.java b/dd-java-agent/instrumentation/scalatest/src/main/java/datadog/trace/instrumentation/scalatest/ScalatestSkipInstrumentation.java index dfd6763c5df..e74e1e2f0ef 100644 --- a/dd-java-agent/instrumentation/scalatest/src/main/java/datadog/trace/instrumentation/scalatest/ScalatestSkipInstrumentation.java +++ b/dd-java-agent/instrumentation/scalatest/src/main/java/datadog/trace/instrumentation/scalatest/ScalatestSkipInstrumentation.java @@ -10,7 +10,6 @@ import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.civisibility.config.TestIdentifier; import datadog.trace.bootstrap.InstrumentationContext; -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.Collections; import java.util.Map; import java.util.Set; @@ -100,9 +99,6 @@ public static void apply( } public static class SingleTestFilterAdvice { - @SuppressFBWarnings( - value = "UC_USELESS_OBJECT", - justification = "filterResult is the return value of the instrumented method") @Advice.OnMethodExit public static void apply( @Advice.This Filter filter, @@ -129,9 +125,6 @@ public static void apply( } public static class MultipleTestsFilterAdvice { - @SuppressFBWarnings( - value = "UC_USELESS_OBJECT", - justification = "filterResult is the return value of the instrumented method") @Advice.OnMethodExit public static void apply( @Advice.This Filter filter, 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 875cdcafdbc..dcecf4fbac7 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 @@ -1038,7 +1038,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/testng/testng-7/src/main/java/datadog/trace/instrumentation/testng7/TestNGExecutionInstrumentation.java b/dd-java-agent/instrumentation/testng/testng-7/src/main/java/datadog/trace/instrumentation/testng7/TestNGExecutionInstrumentation.java index 7a30dd10405..64a065a0042 100644 --- a/dd-java-agent/instrumentation/testng/testng-7/src/main/java/datadog/trace/instrumentation/testng7/TestNGExecutionInstrumentation.java +++ b/dd-java-agent/instrumentation/testng/testng-7/src/main/java/datadog/trace/instrumentation/testng7/TestNGExecutionInstrumentation.java @@ -11,7 +11,6 @@ import datadog.trace.instrumentation.testng.TracingListener; import datadog.trace.instrumentation.testng.execution.RetryAnalyzer; import datadog.trace.util.Strings; -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.Collections; import java.util.Set; import net.bytebuddy.asm.Advice; @@ -96,7 +95,6 @@ public static void alignBeforeRetry( } @SuppressWarnings("bytebuddy-exception-suppression") - @SuppressFBWarnings("NP_BOOLEAN_RETURN_NULL") @Advice.OnMethodExit public static void shouldRetryTestMethod( @Advice.Argument(1) final ITestResult result, 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..eda6ef15dbf 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,10 +43,10 @@ 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 => + val taskDefs: Array[TaskDef] = scalaTestNames.map { name => new TaskDef(name, SuiteFingerprint, false, Array(new SuiteSelector())) }.toArray val tasks = runner.tasks(taskDefs) 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/instrumentation/websocket/jetty-websocket/jetty-websocket-10/build.gradle b/dd-java-agent/instrumentation/websocket/jetty-websocket/jetty-websocket-10/build.gradle index 2a012a08b81..d6be4a97009 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 @@ -28,7 +28,7 @@ tasks.named("compileMain_java11Java", JavaCompile) { dependencies { main_java11CompileOnly group: 'org.eclipse.jetty.websocket', name: 'websocket-javax-server', version: '10.0.0' - main_java11CompileOnly group: 'com.github.spotbugs', name: 'spotbugs-annotations', version: '4.2.0' + main_java11CompileOnly group: 'com.github.spotbugs', name: 'spotbugs-annotations', version: '4.9.8' testImplementation group: 'org.eclipse.jetty.websocket', name: 'websocket-javax-server', version: '10.0.0' latestDepTestImplementation group: 'org.eclipse.jetty.websocket', name: 'websocket-javax-server', version: '10.+' diff --git a/dd-java-agent/instrumentation/wildfly-9.0/build.gradle b/dd-java-agent/instrumentation/wildfly-9.0/build.gradle index 3d31584c469..c930ee2e929 100644 --- a/dd-java-agent/instrumentation/wildfly-9.0/build.gradle +++ b/dd-java-agent/instrumentation/wildfly-9.0/build.gradle @@ -123,7 +123,8 @@ tasks.named("compileTestGroovy", GroovyCompile) { ["compileLatestDepTestGroovy", "compileLatestDepForkedTestGroovy"].each { tasks.named(it, GroovyCompile) { - configureCompiler(it, 17)} + configureCompiler(it, 17) + } } tasks.named("compileTestJava", JavaCompile) { diff --git a/dd-java-agent/instrumentation/zio/zio-2.0/src/test/scala/ZioTestFixtures.scala b/dd-java-agent/instrumentation/zio/zio-2.0/src/test/scala/ZioTestFixtures.scala index eff669dc97c..c3d272e1a7b 100644 --- a/dd-java-agent/instrumentation/zio/zio-2.0/src/test/scala/ZioTestFixtures.scala +++ b/dd-java-agent/instrumentation/zio/zio-2.0/src/test/scala/ZioTestFixtures.scala @@ -19,7 +19,7 @@ object ZioTestFixtures { run { for { childStarted <- Promise.make[Nothing, Unit] - _ <- childSpan("fiber_1_span_1") { + _ <- childSpan("fiber_1_span_1") { for { child <- childSpan("fiber_2_span_1") { childStarted.succeed(()) *> @@ -117,7 +117,7 @@ object ZioTestFixtures { private def childSpan(opName: String)(op: UIO[Unit]): UIO[Unit] = ZIO.scoped { for { - scope <- ZIO.scope + scope <- ZIO.scope ddSpan <- ZIO.succeed( AgentTracer .get() @@ -137,7 +137,7 @@ object ZioTestFixtures { private def run[A](zio: ZIO[Any, Nothing, A]): Unit = { val executor = Executors.newSingleThreadExecutor() val zioExecutor = Executor.fromJavaExecutor(executor) - val layer = + val layer = Runtime.setExecutor(zioExecutor) >>> Runtime.setBlockingExecutor(zioExecutor) try { 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/apm-tracing-disabled/build.gradle b/dd-smoke-tests/apm-tracing-disabled/build.gradle index 638260752db..98bf8189f6a 100644 --- a/dd-smoke-tests/apm-tracing-disabled/build.gradle +++ b/dd-smoke-tests/apm-tracing-disabled/build.gradle @@ -22,6 +22,10 @@ dependencies { implementation project(':dd-trace-api') testImplementation project(':dd-smoke-tests') testImplementation(testFixtures(project(":dd-smoke-tests:iast-util"))) + + // Some strange issue with spotbug classpath??? + spotbugs "com.github.spotbugs:spotbugs:4.9.8" + spotbugs "org.apache.commons:commons-lang3:3.19.0" } tasks.withType(Test).configureEach { 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 4916db81f16..a8ea695509f 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/armeria-grpc/application/build.gradle b/dd-smoke-tests/armeria-grpc/application/build.gradle index 09a490a234a..4a29c226cf8 100644 --- a/dd-smoke-tests/armeria-grpc/application/build.gradle +++ b/dd-smoke-tests/armeria-grpc/application/build.gradle @@ -7,7 +7,7 @@ buildscript { plugins { id 'application' id 'java' - id 'com.diffplug.spotless' version '6.13.0' + id 'com.diffplug.spotless' version '8.0.0' id 'com.gradleup.shadow' version '8.3.6' id 'com.google.protobuf' version '0.9.3' } 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-propagation/src/main/kotlin/KotlinPropagation.kt b/dd-smoke-tests/iast-propagation/src/main/kotlin/KotlinPropagation.kt index 5b682833eab..8283b9eab0f 100644 --- a/dd-smoke-tests/iast-propagation/src/main/kotlin/KotlinPropagation.kt +++ b/dd-smoke-tests/iast-propagation/src/main/kotlin/KotlinPropagation.kt @@ -1,7 +1,6 @@ import java.util.function.Supplier class KotlinPropagation : Supplier> { - override fun get(): List = listOf("plus", "interpolation") fun plus(param: String): String = param + param 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/jboss-modules/src/main/java/datadog/smoketest/jbossmodules/common/LogSupport.java b/dd-smoke-tests/jboss-modules/src/main/java/datadog/smoketest/jbossmodules/common/LogSupport.java index 70467973386..c6227c7918b 100644 --- a/dd-smoke-tests/jboss-modules/src/main/java/datadog/smoketest/jbossmodules/common/LogSupport.java +++ b/dd-smoke-tests/jboss-modules/src/main/java/datadog/smoketest/jbossmodules/common/LogSupport.java @@ -1,8 +1,10 @@ package datadog.smoketest.jbossmodules.common; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +@SuppressFBWarnings("CT_CONSTRUCTOR_THROW") public abstract class LogSupport { protected final Log log = LogFactory.getLog(getClass()); } diff --git a/dd-smoke-tests/kafka-2/build.gradle b/dd-smoke-tests/kafka-2/build.gradle index c947425a4ba..f8a7558e265 100644 --- a/dd-smoke-tests/kafka-2/build.gradle +++ b/dd-smoke-tests/kafka-2/build.gradle @@ -20,6 +20,10 @@ dependencies { testImplementation project(':dd-smoke-tests') implementation project(':dd-smoke-tests:iast-util') testImplementation(testFixtures(project(":dd-smoke-tests:iast-util"))) + + // Some strange issue with spotbug classpath??? + spotbugs "com.github.spotbugs:spotbugs:4.9.8" + spotbugs "org.apache.commons:commons-lang3:3.19.0" } tasks.withType(Test).configureEach { diff --git a/dd-smoke-tests/kafka-3/application/build.gradle b/dd-smoke-tests/kafka-3/application/build.gradle index 32171468d86..4b40f414f3e 100644 --- a/dd-smoke-tests/kafka-3/application/build.gradle +++ b/dd-smoke-tests/kafka-3/application/build.gradle @@ -2,7 +2,7 @@ plugins { id 'java' id 'org.springframework.boot' version '3.2.2' id 'io.spring.dependency-management' version '1.1.4' - id 'com.diffplug.spotless' version '6.13.0' + id 'com.diffplug.spotless' version '8.0.0' } java { 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/app/filters/AbstractFilter.scala b/dd-smoke-tests/play-2.4/app/filters/AbstractFilter.scala index fe22c47ae90..3f52aedd56b 100644 --- a/dd-smoke-tests/play-2.4/app/filters/AbstractFilter.scala +++ b/dd-smoke-tests/play-2.4/app/filters/AbstractFilter.scala @@ -18,7 +18,7 @@ abstract class AbstractFilter(val operationName: String, val wrap: Boolean) exte )(requestHeader: RequestHeader): Future[Result] = { val tracer = GlobalTracer.get val startedSpan = if (wrap) tracer.buildSpan(operationName).start else null - val outerScope = + val outerScope = if (wrap) tracer.scopeManager.activate(startedSpan) else null try { nextFilter(requestHeader).map { result => 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/application/build.gradle b/dd-smoke-tests/quarkus-native/application/build.gradle index c51e374fda3..bd501df82bb 100644 --- a/dd-smoke-tests/quarkus-native/application/build.gradle +++ b/dd-smoke-tests/quarkus-native/application/build.gradle @@ -1,7 +1,7 @@ plugins { id 'java' id 'io.quarkus' - id 'com.diffplug.spotless' version '6.13.0' + id 'com.diffplug.spotless' version '8.0.0' } def sharedRootDir = "$rootDir/../../../" 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/quarkus/application/build.gradle b/dd-smoke-tests/quarkus/application/build.gradle index 068eaf57a67..6357f3f3655 100644 --- a/dd-smoke-tests/quarkus/application/build.gradle +++ b/dd-smoke-tests/quarkus/application/build.gradle @@ -1,7 +1,7 @@ plugins { id 'java' id 'io.quarkus' - id 'com.diffplug.spotless' version '6.13.0' + id 'com.diffplug.spotless' version '8.0.0' } def sharedRootDir = "$rootDir/../../../" diff --git a/dd-smoke-tests/rum/wildfly-15/rum-ear/build.gradle b/dd-smoke-tests/rum/wildfly-15/rum-ear/build.gradle index 25eb46b1db0..03d1deffa30 100644 --- a/dd-smoke-tests/rum/wildfly-15/rum-ear/build.gradle +++ b/dd-smoke-tests/rum/wildfly-15/rum-ear/build.gradle @@ -1,7 +1,7 @@ plugins { id 'java' id 'ear' - id 'com.diffplug.spotless' version '6.13.0' + id 'com.diffplug.spotless' version '8.0.0' } def sharedRootDir = "$rootDir/../../../../" diff --git a/dd-smoke-tests/spring-boot-2.6-webflux/build.gradle b/dd-smoke-tests/spring-boot-2.6-webflux/build.gradle index a37983936fe..516a2b79890 100644 --- a/dd-smoke-tests/spring-boot-2.6-webflux/build.gradle +++ b/dd-smoke-tests/spring-boot-2.6-webflux/build.gradle @@ -25,7 +25,8 @@ tasks.named("shadowJar", ShadowJar) { transform(PropertiesFileTransformer) { paths = ['META-INF/spring.factories'] mergeStrategy = "append" - }} + } +} dependencies { implementation group: 'org.springframework.boot', name: 'spring-boot-starter-webflux', version: '2.6.0+' diff --git a/dd-smoke-tests/spring-boot-2.7-webflux/application/build.gradle b/dd-smoke-tests/spring-boot-2.7-webflux/application/build.gradle index 6eaffaa238a..c913bddc394 100644 --- a/dd-smoke-tests/spring-boot-2.7-webflux/application/build.gradle +++ b/dd-smoke-tests/spring-boot-2.7-webflux/application/build.gradle @@ -2,7 +2,13 @@ plugins { id 'java' id 'org.springframework.boot' version '2.7.4' id 'io.spring.dependency-management' version '1.0.14.RELEASE' - id 'com.diffplug.spotless' version '6.13.0' + id 'com.diffplug.spotless' version '8.0.0' +} + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(8) + } } def sharedRootDir = "$rootDir/../../../" diff --git a/dd-smoke-tests/spring-boot-3.0-native/application/build.gradle b/dd-smoke-tests/spring-boot-3.0-native/application/build.gradle index a545d93ece0..af8748e1e44 100644 --- a/dd-smoke-tests/spring-boot-3.0-native/application/build.gradle +++ b/dd-smoke-tests/spring-boot-3.0-native/application/build.gradle @@ -3,7 +3,7 @@ plugins { id 'org.springframework.boot' version '3.0.0' id 'io.spring.dependency-management' version '1.0.14.RELEASE' id 'org.graalvm.buildtools.native' version '0.9.28' - id 'com.diffplug.spotless' version '6.13.0' + id 'com.diffplug.spotless' version '8.0.0' } def sharedRootDir = "$rootDir/../../../" 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/spring-boot-3.0-webflux/application/build.gradle b/dd-smoke-tests/spring-boot-3.0-webflux/application/build.gradle index 582c3c5fc90..e2e4f6f8822 100644 --- a/dd-smoke-tests/spring-boot-3.0-webflux/application/build.gradle +++ b/dd-smoke-tests/spring-boot-3.0-webflux/application/build.gradle @@ -2,7 +2,13 @@ plugins { id 'java' id 'org.springframework.boot' version '3.0.0' id 'io.spring.dependency-management' version '1.0.14.RELEASE' - id 'com.diffplug.spotless' version '6.13.0' + id 'com.diffplug.spotless' version '8.0.0' +} + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(17) + } } def sharedRootDir = "$rootDir/../../../" diff --git a/dd-smoke-tests/spring-boot-3.0-webmvc/application/build.gradle b/dd-smoke-tests/spring-boot-3.0-webmvc/application/build.gradle index 303f0074cf8..0c8a7c2d468 100644 --- a/dd-smoke-tests/spring-boot-3.0-webmvc/application/build.gradle +++ b/dd-smoke-tests/spring-boot-3.0-webmvc/application/build.gradle @@ -2,7 +2,13 @@ plugins { id 'java' id 'org.springframework.boot' version '3.0.0' id 'io.spring.dependency-management' version '1.0.14.RELEASE' - id 'com.diffplug.spotless' version '6.13.0' + id 'com.diffplug.spotless' version '8.0.0' +} + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(17) + } } def sharedRootDir = "$rootDir/../../../" diff --git a/dd-smoke-tests/spring-boot-3.3-webmvc/application/build.gradle b/dd-smoke-tests/spring-boot-3.3-webmvc/application/build.gradle index 2fb70486c46..3643c976357 100644 --- a/dd-smoke-tests/spring-boot-3.3-webmvc/application/build.gradle +++ b/dd-smoke-tests/spring-boot-3.3-webmvc/application/build.gradle @@ -2,7 +2,7 @@ plugins { id 'java' id 'org.springframework.boot' version '3.3.5' id 'io.spring.dependency-management' version '1.0.14.RELEASE' - id 'com.diffplug.spotless' version '6.13.0' + id 'com.diffplug.spotless' version '8.0.0' } def sharedRootDir = "$rootDir/../../../" diff --git a/dd-smoke-tests/springboot-freemarker/build.gradle b/dd-smoke-tests/springboot-freemarker/build.gradle index 57c7a4e9eb1..1a63496e1a2 100644 --- a/dd-smoke-tests/springboot-freemarker/build.gradle +++ b/dd-smoke-tests/springboot-freemarker/build.gradle @@ -21,6 +21,10 @@ dependencies { testImplementation project(':dd-smoke-tests') testImplementation(testFixtures(project(":dd-smoke-tests:iast-util"))) + + // Some strange issue with spotbug classpath??? + spotbugs "com.github.spotbugs:spotbugs:4.9.8" + spotbugs "org.apache.commons:commons-lang3:3.19.0" } tasks.withType(Test).configureEach { diff --git a/dd-smoke-tests/springboot-java-11/build.gradle b/dd-smoke-tests/springboot-java-11/build.gradle index 17d299c8984..9978c28e7d8 100644 --- a/dd-smoke-tests/springboot-java-11/build.gradle +++ b/dd-smoke-tests/springboot-java-11/build.gradle @@ -23,6 +23,10 @@ dependencies { testImplementation testFixtures(project(':dd-smoke-tests:iast-util')) implementation project(':dd-smoke-tests:iast-util:iast-util-11') + + // Some strange issue with spotbug classpath??? + spotbugs "com.github.spotbugs:spotbugs:4.9.8" + spotbugs "org.apache.commons:commons-lang3:3.19.0" } tasks.named("compileJava", JavaCompile) { 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-java-17/build.gradle b/dd-smoke-tests/springboot-java-17/build.gradle index 6dc9908b0c9..e561a40caee 100644 --- a/dd-smoke-tests/springboot-java-17/build.gradle +++ b/dd-smoke-tests/springboot-java-17/build.gradle @@ -23,6 +23,10 @@ dependencies { testImplementation testFixtures(project(':dd-smoke-tests:iast-util')) implementation project(':dd-smoke-tests:iast-util:iast-util-17') + + // Some strange issue with spotbug classpath??? + spotbugs "com.github.spotbugs:spotbugs:4.9.8" + spotbugs "org.apache.commons:commons-lang3:3.19.0" } tasks.named("compileJava", JavaCompile) { diff --git a/dd-smoke-tests/springboot-jetty-jsp/build.gradle b/dd-smoke-tests/springboot-jetty-jsp/build.gradle index d8fdc4fbab4..6257d956d83 100644 --- a/dd-smoke-tests/springboot-jetty-jsp/build.gradle +++ b/dd-smoke-tests/springboot-jetty-jsp/build.gradle @@ -32,6 +32,10 @@ dependencies { testImplementation project(':dd-smoke-tests') testImplementation(testFixtures(project(":dd-smoke-tests:iast-util"))) + + // Some strange issue with spotbug classpath??? + spotbugs "com.github.spotbugs:spotbugs:4.9.8" + spotbugs "org.apache.commons:commons-lang3:3.19.0" } tasks.withType(Test).configureEach { diff --git a/dd-smoke-tests/springboot-jpa/build.gradle b/dd-smoke-tests/springboot-jpa/build.gradle index af9c22ff235..357eabf239d 100644 --- a/dd-smoke-tests/springboot-jpa/build.gradle +++ b/dd-smoke-tests/springboot-jpa/build.gradle @@ -25,6 +25,10 @@ dependencies { testCompileOnly 'org.projectlombok:lombok:1.18.34' testAnnotationProcessor 'org.projectlombok:lombok:1.18.34' + + // Some strange issue with spotbug classpath??? + spotbugs "com.github.spotbugs:spotbugs:4.9.8" + spotbugs "org.apache.commons:commons-lang3:3.19.0" } tasks.withType(Test).configureEach { 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 e38090b2b5d..29936bffa88 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 2e9ce62849d..7ba3b54aa95 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-thymeleaf/build.gradle b/dd-smoke-tests/springboot-thymeleaf/build.gradle index 7de0a0833e5..ab35c40d279 100644 --- a/dd-smoke-tests/springboot-thymeleaf/build.gradle +++ b/dd-smoke-tests/springboot-thymeleaf/build.gradle @@ -21,6 +21,10 @@ dependencies { testImplementation project(':dd-smoke-tests') testImplementation(testFixtures(project(":dd-smoke-tests:iast-util"))) + + // Some strange issue with spotbug classpath??? + spotbugs "com.github.spotbugs:spotbugs:4.9.8" + spotbugs "org.apache.commons:commons-lang3:3.19.0" } tasks.withType(Test).configureEach { diff --git a/dd-smoke-tests/springboot-tomcat-jsp/build.gradle b/dd-smoke-tests/springboot-tomcat-jsp/build.gradle index 224274ece2a..e59d658bc46 100644 --- a/dd-smoke-tests/springboot-tomcat-jsp/build.gradle +++ b/dd-smoke-tests/springboot-tomcat-jsp/build.gradle @@ -32,6 +32,10 @@ dependencies { testImplementation project(':dd-smoke-tests') testImplementation(testFixtures(project(":dd-smoke-tests:iast-util"))) + + // Some strange issue with spotbug classpath??? + spotbugs "com.github.spotbugs:spotbugs:4.9.8" + spotbugs "org.apache.commons:commons-lang3:3.19.0" } tasks.withType(Test).configureEach { diff --git a/dd-smoke-tests/springboot-velocity/build.gradle b/dd-smoke-tests/springboot-velocity/build.gradle index 76881a53bc1..42783d853ad 100644 --- a/dd-smoke-tests/springboot-velocity/build.gradle +++ b/dd-smoke-tests/springboot-velocity/build.gradle @@ -20,6 +20,10 @@ dependencies { testImplementation project(':dd-smoke-tests') testImplementation(testFixtures(project(":dd-smoke-tests:iast-util"))) + + // Some strange issue with spotbug classpath??? + spotbugs "com.github.spotbugs:spotbugs:4.9.8" + spotbugs "org.apache.commons:commons-lang3:3.19.0" } tasks.withType(Test).configureEach { 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 bd1761402a3..2b94edfa467 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-smoke-tests/wildfly/spring-ear/build.gradle b/dd-smoke-tests/wildfly/spring-ear/build.gradle index e9f10e11cb9..d278b480cd5 100644 --- a/dd-smoke-tests/wildfly/spring-ear/build.gradle +++ b/dd-smoke-tests/wildfly/spring-ear/build.gradle @@ -1,7 +1,7 @@ plugins { id 'java' id 'ear' - id 'com.diffplug.spotless' version '6.13.0' + id 'com.diffplug.spotless' version '8.0.0' } def sharedRootDir = "$rootDir/../../../" diff --git a/dd-trace-api/build.gradle.kts b/dd-trace-api/build.gradle.kts index f191c71be0e..e11fb514710 100644 --- a/dd-trace-api/build.gradle.kts +++ b/dd-trace-api/build.gradle.kts @@ -63,7 +63,7 @@ val excludedClassesCoverage by extra( "datadog.trace.payloadtags.PayloadTagsData", "datadog.trace.payloadtags.PayloadTagsData.PathAndValue", "datadog.trace.api.llmobs.LLMObsTags", - ) + ), ) description = "dd-trace-api" 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 e96900c073d..2667daad96e 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"; @@ -183,6 +184,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/build.gradle b/dd-trace-core/build.gradle index 7b111ed4e38..e3a636cc890 100644 --- a/dd-trace-core/build.gradle +++ b/dd-trace-core/build.gradle @@ -80,7 +80,7 @@ dependencies { implementation group: 'com.google.re2j', name: 're2j', version: '1.7' - compileOnly group: 'com.github.spotbugs', name: 'spotbugs-annotations', version: '4.2.0' + compileOnly group: 'com.github.spotbugs', name: 'spotbugs-annotations', version: '4.9.8' // We have autoservices defined in test subtree, looks like we need this to be able to properly rebuild this testAnnotationProcessor libs.autoservice.processor 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/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/build.gradle.kts b/dd-trace-ot/build.gradle.kts index f4c4273e30b..8feaa24d2cd 100644 --- a/dd-trace-ot/build.gradle.kts +++ b/dd-trace-ot/build.gradle.kts @@ -24,8 +24,8 @@ val excludedClassesCoverage by extra( "datadog.opentracing.OTSpanContext", "datadog.opentracing.CustomScopeManagerWrapper.CustomScopeState", // The builder is generated - "datadog.opentracing.DDTracer.DDTracerBuilder" - ) + "datadog.opentracing.DDTracer.DDTracerBuilder", + ), ) // Helper extensions for custom methods from Groovy DSL diff --git a/dd-trace-ot/correlation-id-injection/build.gradle.kts b/dd-trace-ot/correlation-id-injection/build.gradle.kts index f2613570972..fab0b03b45a 100644 --- a/dd-trace-ot/correlation-id-injection/build.gradle.kts +++ b/dd-trace-ot/correlation-id-injection/build.gradle.kts @@ -9,8 +9,8 @@ val minimumBranchCoverage by extra(0.8) val excludedClassesCoverage by extra( listOf( "datadog.trace.correlation.CorrelationIdInjectors", - "datadog.trace.correlation.CorrelationIdInjectors.InjectorType" - ) + "datadog.trace.correlation.CorrelationIdInjectors.InjectorType", + ), ) description = "correlation-id-injection" 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/enforcement/spotless-scalafmt.conf b/gradle/enforcement/spotless-scalafmt.conf index 2368ce01777..b4f583c0ec4 100644 --- a/gradle/enforcement/spotless-scalafmt.conf +++ b/gradle/enforcement/spotless-scalafmt.conf @@ -1,2 +1,4 @@ +version = 3.9.10 +runner.dialect = scala213 align.preset = more maxColumn = 100 diff --git a/gradle/forbiddenapis.gradle b/gradle/forbiddenapis.gradle index 7f94193dba4..cfcead99413 100644 --- a/gradle/forbiddenapis.gradle +++ b/gradle/forbiddenapis.gradle @@ -18,7 +18,7 @@ buildscript { } dependencies { - classpath "de.thetaphi:forbiddenapis:3.8" + classpath "de.thetaphi:forbiddenapis:3.10" } } @@ -40,5 +40,5 @@ afterEvaluate { } dependencies { - compileOnly group: 'de.thetaphi', name: 'forbiddenapis', version: '3.8' + compileOnly group: 'de.thetaphi', name: 'forbiddenapis', version: '3.10' } diff --git a/gradle/gradle-daemon-jvm.properties b/gradle/gradle-daemon-jvm.properties new file mode 100644 index 00000000000..136e81ad0a0 --- /dev/null +++ b/gradle/gradle-daemon-jvm.properties @@ -0,0 +1,3 @@ +org.gradle.java.installations.auto-detect=false +org.gradle.java.installations.auto-download=false +toolchainVersion=21 diff --git a/gradle/java_no_deps.gradle b/gradle/java_no_deps.gradle index 095bd98cc0a..7d8288a34aa 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"] } @@ -448,11 +472,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/spotbugFilters/exclude.xml b/gradle/spotbugFilters/exclude.xml index 50ec78a6c56..d2a60770d23 100644 --- a/gradle/spotbugFilters/exclude.xml +++ b/gradle/spotbugFilters/exclude.xml @@ -22,6 +22,17 @@ + + + + + + + + + + + diff --git a/gradle/spotbugs.gradle b/gradle/spotbugs.gradle index e36e6ec8f09..e62ec0a919c 100644 --- a/gradle/spotbugs.gradle +++ b/gradle/spotbugs.gradle @@ -8,6 +8,15 @@ spotbugs { // configure spotbugs for Main tasks and disable it for all other afterEvaluate { tasks.withType(spotbugsMain.class).configureEach { + // Temporary disable for `internal-api` module to make CI green. + // `internal-api` is the only module that failed after update of spotbugs plugin with error: + // FindBugs2 has been compiled by a more recent version of the Java Runtime (class file version 55.0), + // this version of the Java Runtime only recognizes class file versions up to 52.0 + if (it.project.name == "internal-api") { + it.enabled = false + return + } + def name = it.name if (name.endsWith("Main") || name.endsWith("Main_java11")) { it.ignoreFailures = false @@ -50,8 +59,8 @@ afterEvaluate { dependencies { compileOnly 'net.jcip:jcip-annotations:1.0' - compileOnly 'com.github.spotbugs:spotbugs-annotations:4.2.0' + compileOnly 'com.github.spotbugs:spotbugs-annotations:4.9.8' testImplementation 'net.jcip:jcip-annotations:1.0' - testImplementation 'com.github.spotbugs:spotbugs-annotations:4.2.0' + testImplementation 'com.github.spotbugs:spotbugs-annotations:4.9.8' } diff --git a/gradle/spotless.gradle b/gradle/spotless.gradle index 3c64ef5c0a0..2833f42f71a 100644 --- a/gradle/spotless.gradle +++ b/gradle/spotless.gradle @@ -22,7 +22,7 @@ spotless { // ignore embedded test projects and everything in build dir, e.g. generated sources targetExclude('src/test/resources/**', buildDirectoryFiles) // This is the last Google Java Format version that supports Java 8 - googleJavaFormat('1.7') + googleJavaFormat('1.29.0') } } @@ -46,7 +46,7 @@ spotless { target '*.gradle.kts' // ktfmt('0.40').kotlinlangStyle() // needs Java 11+ // Newer versions do not work well with the older version of kotlin in this build - ktlint('0.41.0').userData(['indent_size': '2', 'continuation_indent_size': '2']) + ktlint('1.7.1') } project.pluginManager.withPlugin('groovy') { @@ -66,21 +66,21 @@ spotless { scala { toggleOffOn() targetExclude(buildDirectoryFiles) - scalafmt('2.7.5').configFile(configPath + '/enforcement/spotless-scalafmt.conf') + scalafmt('3.9.10').configFile(configPath + '/enforcement/spotless-scalafmt.conf') } } format 'markdown', { toggleOffOn() target '*.md', '.github/**/*.md', 'src/**/*.md', 'application/**/*.md' - indentWithSpaces() + leadingTabsToSpaces() endWithNewline() } format 'misc', { toggleOffOn() target '.gitignore', '*.sh', 'tooling/*.sh', '.gitlab/*.sh' - indentWithSpaces() + leadingTabsToSpaces() trimTrailingWhitespace() endWithNewline() } @@ -91,7 +91,7 @@ spotless { // ktfmt('0.40').kotlinlangStyle() // needs Java 11+ targetExclude(buildDirectoryFiles) // Newer versions do not work well with the older version of kotlin in this build - ktlint('0.41.0').userData(['indent_size': '2', 'continuation_indent_size': '2']) + ktlint('1.7.1') } } } 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/gradlew b/gradlew index 23d15a93670..f158c238a4f 100755 --- a/gradlew +++ b/gradlew @@ -118,26 +118,26 @@ CLASSPATH="\\\"\\\"" # Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then +if [ -n "$JAVA_21_HOME" ] ; then + if [ -x "$JAVA_21_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java + JAVACMD=$JAVA_21_HOME/jre/sh/java else - JAVACMD=$JAVA_HOME/bin/java + JAVACMD=$JAVA_21_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + die "ERROR: JAVA_21_HOME is set to an invalid directory: $JAVA_21_HOME -Please set the JAVA_HOME variable in your environment to match the +Please set the JAVA_21_HOME variable in your environment to match the location of your Java installation." fi else JAVACMD=java if ! command -v java >/dev/null 2>&1 then - die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + die "ERROR: JAVA_21_HOME is not set and no 'java' command could be found in your PATH. -Please set the JAVA_HOME variable in your environment to match the +Please set the JAVA_21_HOME variable in your environment to match the location of your Java installation." fi fi diff --git a/internal-api/build.gradle.kts b/internal-api/build.gradle.kts index 6ff3e6d63bd..2cc463bb80f 100644 --- a/internal-api/build.gradle.kts +++ b/internal-api/build.gradle.kts @@ -2,6 +2,7 @@ import groovy.lang.Closure plugins { `java-library` + id("de.thetaphi.forbiddenapis") version "3.10" id("me.champeau.jmh") } @@ -14,11 +15,19 @@ java { } } +tasks.forbiddenApisMain { + failOnMissingClasses = false +} + tasks.withType().configureEach { configureCompiler(8, JavaVersion.VERSION_1_8, "Need access to sun.misc.SharedSecrets") } -fun AbstractCompile.configureCompiler(javaVersionInteger: Int, compatibilityVersion: JavaVersion? = null, unsetReleaseFlagReason: String? = null) { +fun AbstractCompile.configureCompiler( + javaVersionInteger: Int, + compatibilityVersion: JavaVersion? = null, + unsetReleaseFlagReason: String? = null, +) { (project.extra["configureCompiler"] as Closure<*>).call(this, javaVersionInteger, compatibilityVersion, unsetReleaseFlagReason) } @@ -234,7 +243,7 @@ val excludedClassesCoverage by extra( "datadog.trace.bootstrap.instrumentation.api.SpanPostProcessor.NoOpSpanPostProcessor", "datadog.trace.util.TempLocationManager", "datadog.trace.util.TempLocationManager.*", - ) + ), ) val excludedClassesBranchCoverage by extra( @@ -247,13 +256,13 @@ val excludedClassesBranchCoverage by extra( "datadog.trace.util.TempLocationManager.*", // Branches depend on RUM injector state that cannot be reliably controlled in unit tests "datadog.trace.api.rum.RumInjectorMetrics", - ) + ), ) val excludedClassesInstructionCoverage by extra( listOf( - "datadog.trace.util.stacktrace.StackWalkerFactory" - ) + "datadog.trace.util.stacktrace.StackWalkerFactory", + ), ) tasks.compileTestJava { diff --git a/internal-api/internal-api-9/build.gradle.kts b/internal-api/internal-api-9/build.gradle.kts index f8af68a73d9..07cc3337de5 100644 --- a/internal-api/internal-api-9/build.gradle.kts +++ b/internal-api/internal-api-9/build.gradle.kts @@ -3,7 +3,7 @@ import java.nio.file.Paths plugins { `java-library` - id("de.thetaphi.forbiddenapis") version "3.8" + id("de.thetaphi.forbiddenapis") version "3.10" id("me.champeau.jmh") idea } @@ -18,11 +18,15 @@ java { } } -tasks.withType().configureEach() { +tasks.withType().configureEach { javadocTool = javaToolchains.javadocToolFor(java.toolchain) } -fun AbstractCompile.configureCompiler(javaVersionInteger: Int, compatibilityVersion: JavaVersion? = null, unsetReleaseFlagReason: String? = null) { +fun AbstractCompile.configureCompiler( + javaVersionInteger: Int, + compatibilityVersion: JavaVersion? = null, + unsetReleaseFlagReason: String? = null, +) { (project.extra["configureCompiler"] as Closure<*>).call(this, javaVersionInteger, compatibilityVersion, unsetReleaseFlagReason) } 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 b643371221b..2e5aea7c1a0 100644 --- a/internal-api/src/main/java/datadog/trace/api/Config.java +++ b/internal-api/src/main/java/datadog/trace/api/Config.java @@ -801,6 +801,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; @@ -3824,12 +3825,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; } @@ -4568,7 +4573,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 e795f6c98dc..7a9c411e773 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/main/java/datadog/trace/util/stacktrace/HotSpotStackWalker.java b/internal-api/src/main/java/datadog/trace/util/stacktrace/HotSpotStackWalker.java index 4eac781efb9..6621478b502 100644 --- a/internal-api/src/main/java/datadog/trace/util/stacktrace/HotSpotStackWalker.java +++ b/internal-api/src/main/java/datadog/trace/util/stacktrace/HotSpotStackWalker.java @@ -1,18 +1,19 @@ package datadog.trace.util.stacktrace; import datadog.environment.JavaVirtualMachine; +import de.thetaphi.forbiddenapis.SuppressForbidden; import java.util.function.Function; import java.util.stream.Stream; import java.util.stream.StreamSupport; public class HotSpotStackWalker extends AbstractStackWalker { + @SuppressForbidden sun.misc.JavaLangAccess access; - sun.misc.JavaLangAccess access; - + @SuppressForbidden HotSpotStackWalker() { try { access = sun.misc.SharedSecrets.getJavaLangAccess(); - } catch (Throwable e) { + } catch (Throwable ignored) { } } 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 b7f429e2509..9e4019c824e 100644 --- a/internal-api/src/test/groovy/datadog/trace/api/InstrumenterConfigTest.groovy +++ b/internal-api/src/test/groovy/datadog/trace/api/InstrumenterConfigTest.groovy @@ -109,7 +109,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-api/build.gradle.kts b/remote-config/remote-config-api/build.gradle.kts index 212bbb3ab44..69eccc7391b 100644 --- a/remote-config/remote-config-api/build.gradle.kts +++ b/remote-config/remote-config-api/build.gradle.kts @@ -2,6 +2,6 @@ apply(from = "$rootDir/gradle/java.gradle") val excludedClassesBranchCoverage by extra( listOf( - "datadog.remoteconfig.ConfigurationChangesListener.PollingHinterNoop" - ) + "datadog.remoteconfig.ConfigurationChangesListener.PollingHinterNoop", + ), ) diff --git a/remote-config/remote-config-core/build.gradle.kts b/remote-config/remote-config-core/build.gradle.kts index f3d0200b797..af1859277a8 100644 --- a/remote-config/remote-config-core/build.gradle.kts +++ b/remote-config/remote-config-core/build.gradle.kts @@ -15,18 +15,18 @@ val excludedClassesCoverage by extra( // idem "datadog.remoteconfig.tuf.RawJsonAdapter", "datadog.remoteconfig.ExceptionHelper", - ) + ), ) val excludedClassesBranchCoverage by extra( listOf( "datadog.remoteconfig.tuf.FeaturesConfig", "datadog.remoteconfig.PollerRequestFactory", - ) + ), ) val excludedClassesInstructionCoverage by extra( listOf( "datadog.remoteconfig.ConfigurationChangesListener.PollingHinterNoop", - ) + ), ) dependencies { 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/settings.gradle.kts b/settings.gradle.kts index b00542cdaed..d46b7798a58 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -616,7 +616,7 @@ include( // Optional `akka-http-10.6` instrumentation (see BUILDING.md for how to enable it): if (providers.gradleProperty("akkaRepositoryToken").isPresent) { include( - ":dd-java-agent:instrumentation:akka:akka-http:akka-http-10.6" + ":dd-java-agent:instrumentation:akka:akka-http:akka-http-10.6", ) } else { logger.quiet("Omitting :dd-java-agent:instrumentation:akka:akka-http:akka-http-10.6: 'akkaRepositoryToken' not configured") diff --git a/telemetry/build.gradle.kts b/telemetry/build.gradle.kts index 1b66facc063..68b08fcda97 100644 --- a/telemetry/build.gradle.kts +++ b/telemetry/build.gradle.kts @@ -18,15 +18,15 @@ val excludedClassesCoverage by extra( "datadog.telemetry.RequestBuilderSupplier", "datadog.telemetry.TelemetrySystem", "datadog.telemetry.api.*", - "datadog.telemetry.metric.CiVisibilityMetricPeriodicAction" - ) + "datadog.telemetry.metric.CiVisibilityMetricPeriodicAction", + ), ) val excludedClassesBranchCoverage by extra( listOf( "datadog.telemetry.PolymorphicAdapterFactory.1", "datadog.telemetry.HostInfo", - "datadog.telemetry.HostInfo.Os" - ) + "datadog.telemetry.HostInfo.Os", + ), ) val excludedClassesInstructionCoverage by extra(emptyList()) 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/telemetry/src/test/groovy/datadog/telemetry/dependency/DependencyResolverQueueSpecification.groovy b/telemetry/src/test/groovy/datadog/telemetry/dependency/DependencyResolverQueueSpecification.groovy index 89f6237dcbd..18825f3b2fb 100644 --- a/telemetry/src/test/groovy/datadog/telemetry/dependency/DependencyResolverQueueSpecification.groovy +++ b/telemetry/src/test/groovy/datadog/telemetry/dependency/DependencyResolverQueueSpecification.groovy @@ -98,6 +98,5 @@ class DependencyResolverQueueSpecification extends DepSpecification { then: assert deps.isEmpty() - } } diff --git a/test-published-dependencies/build.gradle b/test-published-dependencies/build.gradle index 75054666df2..8f474b63507 100644 --- a/test-published-dependencies/build.gradle +++ b/test-published-dependencies/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'com.diffplug.spotless' version '6.13.0' + id 'com.diffplug.spotless' version '8.0.0' } def sharedConfigDirectory = "$rootDir/../gradle" diff --git a/utils/config-utils/build.gradle.kts b/utils/config-utils/build.gradle.kts index 7ef5a9b0e34..7afa7138285 100644 --- a/utils/config-utils/build.gradle.kts +++ b/utils/config-utils/build.gradle.kts @@ -32,8 +32,8 @@ val excludedClassesCoverage by extra( "datadog.trace.bootstrap.config.provider.stableconfig.Selector", // tested in internal-api "datadog.trace.bootstrap.config.provider.StableConfigParser", - "datadog.trace.bootstrap.config.provider.SystemPropertiesConfigSource" - ) + "datadog.trace.bootstrap.config.provider.SystemPropertiesConfigSource", + ), ) val excludedClassesBranchCoverage by extra( @@ -41,15 +41,15 @@ val excludedClassesBranchCoverage by extra( "datadog.trace.bootstrap.config.provider.AgentArgsInjector", // Enum "datadog.trace.config.inversion.ConfigHelper.StrictnessPolicy", - "datadog.trace.util.ConfigStrings" - ) + "datadog.trace.util.ConfigStrings", + ), ) val excludedClassesInstructionCoverage by extra( listOf( "datadog.trace.config.inversion.GeneratedSupportedConfigurations", - "datadog.trace.config.inversion.SupportedConfigurationSource" - ) + "datadog.trace.config.inversion.SupportedConfigurationSource", + ), ) dependencies { 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 df54d9d2a48..6a6870579b1 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 @@ -147,7 +147,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"); diff --git a/utils/socket-utils/build.gradle.kts b/utils/socket-utils/build.gradle.kts index d76f3dd0b77..a73c879e39a 100644 --- a/utils/socket-utils/build.gradle.kts +++ b/utils/socket-utils/build.gradle.kts @@ -22,7 +22,11 @@ tasks.named("forbiddenApisMain_java17") { failOnMissingClasses = false } -fun AbstractCompile.configureCompiler(javaVersionInteger: Int, compatibilityVersion: JavaVersion? = null, unsetReleaseFlagReason: String? = null) { +fun AbstractCompile.configureCompiler( + javaVersionInteger: Int, + compatibilityVersion: JavaVersion? = null, + unsetReleaseFlagReason: String? = null, +) { (project.extra["configureCompiler"] as Closure<*>).call(this, javaVersionInteger, compatibilityVersion, unsetReleaseFlagReason) } diff --git a/utils/test-agent-utils/decoder/build.gradle.kts b/utils/test-agent-utils/decoder/build.gradle.kts index 853fc6516f5..bcc593bf06c 100644 --- a/utils/test-agent-utils/decoder/build.gradle.kts +++ b/utils/test-agent-utils/decoder/build.gradle.kts @@ -9,7 +9,7 @@ val excludedClassesCoverage by extra( listOf( "datadog.trace.test.agent.decoder.v04.raw.*", "datadog.trace.test.agent.decoder.v05.raw.*", - ) + ), ) dependencies { diff --git a/utils/test-utils/src/main/java/datadog/trace/test/util/GCUtils.java b/utils/test-utils/src/main/java/datadog/trace/test/util/GCUtils.java index ad7333202a7..93683ee22b2 100644 --- a/utils/test-utils/src/main/java/datadog/trace/test/util/GCUtils.java +++ b/utils/test-utils/src/main/java/datadog/trace/test/util/GCUtils.java @@ -2,11 +2,9 @@ import static java.util.concurrent.TimeUnit.MINUTES; -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.lang.ref.WeakReference; import java.util.concurrent.TimeUnit; -@SuppressFBWarnings("DM_GC") public abstract class GCUtils { public static void awaitGC() throws InterruptedException { diff --git a/utils/time-utils/build.gradle.kts b/utils/time-utils/build.gradle.kts index e89a0f94e2c..14a0a7786a6 100644 --- a/utils/time-utils/build.gradle.kts +++ b/utils/time-utils/build.gradle.kts @@ -7,8 +7,8 @@ apply(from = "$rootDir/gradle/java.gradle") val excludedClassesCoverage by extra( listOf( "datadog.trace.api.time.ControllableTimeSource:", - "datadog.trace.api.time.SystemTimeSource" - ) + "datadog.trace.api.time.SystemTimeSource", + ), ) dependencies {