From 93db133ef8a388ba2e002574113c5bb4e0c1a809 Mon Sep 17 00:00:00 2001 From: Alexey Kuznetsov Date: Sun, 1 Nov 2026 10:46:37 -0500 Subject: [PATCH] Remove Groovy from internal-api modules All internal-api tests are now Java/JUnit 5, so the internal-api module convention no longer applies the groovy plugin, Spock or CodeNarc. A temporary java-only convention backs migrated modules while the rest keep the Groovy-based one. Co-Authored-By: Claude Opus 5.5 --- ...race-java.conventions.java-only.gradle.kts | 13 +++ ...-trace-java.module.internal-api.gradle.kts | 2 +- gradle/java_deps.gradle | 11 +-- gradle/java_no_deps.gradle | 4 +- gradle/java_test_deps.gradle | 9 ++ internal-api/build.gradle.kts | 1 - internal-api/gradle.lockfile | 26 +----- internal-api/internal-api-9/build.gradle.kts | 10 +-- internal-api/internal-api-9/gradle.lockfile | 23 +----- .../datadog/trace/api/TagMapEntryTest.java | 2 +- products/metrics/metrics-api/gradle.lockfile | 10 +-- .../remote-config-api/gradle.lockfile | 10 +-- .../datadog/trace/test/util/ThreadUtils.java | 28 +------ .../trace/test/util/ThreadUtilsTest.java | 82 +++++++++++++++++++ 14 files changed, 126 insertions(+), 105 deletions(-) create mode 100644 buildSrc/src/main/kotlin/dd-trace-java.conventions.java-only.gradle.kts create mode 100644 gradle/java_test_deps.gradle create mode 100644 utils/test-utils/src/test/java/datadog/trace/test/util/ThreadUtilsTest.java diff --git a/buildSrc/src/main/kotlin/dd-trace-java.conventions.java-only.gradle.kts b/buildSrc/src/main/kotlin/dd-trace-java.conventions.java-only.gradle.kts new file mode 100644 index 00000000000..a8638e764fe --- /dev/null +++ b/buildSrc/src/main/kotlin/dd-trace-java.conventions.java-only.gradle.kts @@ -0,0 +1,13 @@ +/* + * Temporary Java-only counterpart of `dd-trace-java.conventions.java` while modules migrate from + * Groovy/Spock to Java/JUnit 5. Migrated modules use this pure Java convention (no `groovy` plugin, + * Spock or CodeNarc), while modules not yet migrated keep using `dd-trace-java.conventions.java`. + * Once all modules are migrated, merge this with `dd-trace-java.conventions.java`. + */ +plugins { + id("dd-trace-java.dependency-locking") + java +} + +apply(from = rootDir.resolve("gradle/java_no_deps.gradle")) +apply(from = rootDir.resolve("gradle/java_test_deps.gradle")) diff --git a/buildSrc/src/main/kotlin/dd-trace-java.module.internal-api.gradle.kts b/buildSrc/src/main/kotlin/dd-trace-java.module.internal-api.gradle.kts index 10e5514f683..9d76ad82be3 100644 --- a/buildSrc/src/main/kotlin/dd-trace-java.module.internal-api.gradle.kts +++ b/buildSrc/src/main/kotlin/dd-trace-java.module.internal-api.gradle.kts @@ -1,3 +1,3 @@ plugins { - id("dd-trace-java.conventions.java") + id("dd-trace-java.conventions.java-only") } diff --git a/gradle/java_deps.gradle b/gradle/java_deps.gradle index 19a0e517e60..f9ae772f1df 100644 --- a/gradle/java_deps.gradle +++ b/gradle/java_deps.gradle @@ -1,15 +1,8 @@ apply plugin: 'groovy' +apply from: "$rootDir/gradle/java_test_deps.gradle" + dependencies { - testImplementation platform(libs.junit.bom) testImplementation libs.bundles.spock testImplementation libs.bundles.groovy - testImplementation libs.tabletest - - testImplementation libs.bundles.test.logging - - // JUnit and Mockito compatible with Spock 2.4.0 - testRuntimeOnly libs.bundles.junit5 - testRuntimeOnly libs.bundles.junit.platform - testRuntimeOnly libs.mokito.core } diff --git a/gradle/java_no_deps.gradle b/gradle/java_no_deps.gradle index f558fc04fb4..8f215e873b3 100644 --- a/gradle/java_no_deps.gradle +++ b/gradle/java_no_deps.gradle @@ -13,7 +13,9 @@ apply plugin: 'dd-trace-java.test-jvm-constraints' apply plugin: 'dd-trace-java.conventions.forbidden-apis' apply plugin: 'dd-trace-java.conventions.spotbugs' -apply from: "$rootDir/gradle/codenarc.gradle" +pluginManager.withPlugin('groovy') { + apply from: "$rootDir/gradle/codenarc.gradle" +} apply from: "$rootDir/gradle/spotless.gradle" apply from: "$rootDir/gradle/repositories.gradle" apply from: "$rootDir/gradle/test-suites.gradle" diff --git a/gradle/java_test_deps.gradle b/gradle/java_test_deps.gradle new file mode 100644 index 00000000000..4125023a857 --- /dev/null +++ b/gradle/java_test_deps.gradle @@ -0,0 +1,9 @@ +dependencies { + testImplementation platform(libs.junit.bom) + testImplementation libs.tabletest + testImplementation libs.bundles.test.logging + + testRuntimeOnly libs.bundles.junit5 + testRuntimeOnly libs.bundles.junit.platform + testRuntimeOnly libs.mokito.core +} diff --git a/internal-api/build.gradle.kts b/internal-api/build.gradle.kts index 7e113cb60f5..37a46c35b28 100644 --- a/internal-api/build.gradle.kts +++ b/internal-api/build.gradle.kts @@ -289,7 +289,6 @@ dependencies { testImplementation(project(":utils:test-utils")) testImplementation(libs.bundles.junit5) testImplementation(libs.assertj.core) - testImplementation("org.junit.vintage:junit-vintage-engine:${libs.versions.junit5.get()}") testImplementation(libs.commons.math) testImplementation(libs.bundles.mockito) testImplementation(libs.jol.core) diff --git a/internal-api/gradle.lockfile b/internal-api/gradle.lockfile index a9e4b3de0d4..06f786e8de1 100644 --- a/internal-api/gradle.lockfile +++ b/internal-api/gradle.lockfile @@ -6,27 +6,21 @@ ch.qos.logback:logback-classic:1.2.13=jmhRuntimeClasspath,testCompileClasspath,t ch.qos.logback:logback-core:1.2.13=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath com.datadoghq:dd-instrument-java:0.0.6=jmhRuntimeClasspath,runtimeClasspath,testFixturesRuntimeClasspath,testRuntimeClasspath com.datadoghq:dd-javac-plugin-client:0.2.2=compileClasspath,jmhCompileClasspath,jmhRuntimeClasspath,runtimeClasspath,testCompileClasspath,testFixturesCompileClasspath,testFixturesRuntimeClasspath,testRuntimeClasspath -com.github.javaparser:javaparser-core:3.25.6=codenarc com.github.spotbugs:spotbugs-annotations:4.10.4=compileClasspath,jmhCompileClasspath,spotbugs com.github.spotbugs:spotbugs:4.10.4=spotbugs com.github.stephenc.jcip:jcip-annotations:1.0-1=spotbugs com.google.code.findbugs:jsr305:3.0.2=compileClasspath,jmhCompileClasspath,jmhRuntimeClasspath,spotbugs,testCompileClasspath,testRuntimeClasspath com.google.code.gson:gson:2.14.0=spotbugs com.google.errorprone:error_prone_annotations:2.48.0=spotbugs -com.thoughtworks.qdox:qdox:1.12.1=codenarc commons-fileupload:commons-fileupload:1.5=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath commons-io:commons-io:2.11.0=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath commons-io:commons-io:2.21.0=spotbugs de.thetaphi:forbiddenapis:3.11=compileClasspath,jmhCompileClasspath,jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -io.leangen.geantyref:geantyref:1.3.16=jmhRuntimeClasspath,testRuntimeClasspath jaxen:jaxen:2.0.6=spotbugs -junit:junit:4.13.2=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath net.bytebuddy:byte-buddy-agent:1.18.12=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath net.bytebuddy:byte-buddy:1.18.12=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath net.sf.jopt-simple:jopt-simple:5.0.4=jmh,jmhCompileClasspath,jmhRuntimeClasspath net.sf.saxon:Saxon-HE:12.10=spotbugs -org.apache.ant:ant-antlr:1.10.14=codenarc -org.apache.ant:ant-junit:1.10.14=codenarc org.apache.bcel:bcel:6.12.0=spotbugs org.apache.commons:commons-lang3:3.20.0=spotbugs org.apache.commons:commons-math3:3.2=testCompileClasspath,testRuntimeClasspath @@ -36,20 +30,7 @@ org.apache.logging.log4j:log4j-api:2.26.1=spotbugs org.apache.logging.log4j:log4j-core:2.26.1=spotbugs org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath org.assertj:assertj-core:3.27.7=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -org.codehaus.groovy:groovy-ant:3.0.23=codenarc -org.codehaus.groovy:groovy-docgenerator:3.0.23=codenarc -org.codehaus.groovy:groovy-groovydoc:3.0.23=codenarc -org.codehaus.groovy:groovy-json:3.0.23=codenarc -org.codehaus.groovy:groovy-json:3.0.25=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -org.codehaus.groovy:groovy-templates:3.0.23=codenarc -org.codehaus.groovy:groovy-xml:3.0.23=codenarc -org.codehaus.groovy:groovy:3.0.23=codenarc -org.codehaus.groovy:groovy:3.0.25=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -org.codenarc:CodeNarc:3.7.0=codenarc org.dom4j:dom4j:2.2.0=spotbugs -org.gmetrics:GMetrics:2.1.0=codenarc -org.hamcrest:hamcrest-core:1.3=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -org.hamcrest:hamcrest:3.0=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.jacoco:org.jacoco.agent:0.8.15=jacocoAgent,jacocoAnt org.jacoco:org.jacoco.ant:0.8.15=jacocoAnt org.jacoco:org.jacoco.core:0.8.15=jacocoAnt @@ -59,13 +40,12 @@ org.junit.jupiter:junit-jupiter-engine:5.14.1=jmhRuntimeClasspath,testRuntimeCla org.junit.jupiter:junit-jupiter-params:5.14.1=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter:5.14.1=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.junit.platform:junit-platform-commons:1.14.1=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -org.junit.platform:junit-platform-engine:1.14.1=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.junit.platform:junit-platform-engine:1.14.1=jmhRuntimeClasspath,testRuntimeClasspath org.junit.platform:junit-platform-launcher:1.14.1=jmhRuntimeClasspath,testRuntimeClasspath -org.junit.vintage:junit-vintage-engine:5.14.1=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.junit:junit-bom:5.14.1=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.mockito:mockito-core:4.4.0=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.mockito:mockito-junit-jupiter:4.4.0=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -org.objenesis:objenesis:3.3=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.objenesis:objenesis:3.2=jmhRuntimeClasspath,testRuntimeClasspath org.openjdk.jmh:jmh-core:1.37=jmh,jmhCompileClasspath,jmhRuntimeClasspath org.openjdk.jmh:jmh-generator-asm:1.37=jmh,jmhCompileClasspath,jmhRuntimeClasspath org.openjdk.jmh:jmh-generator-bytecode:1.37=jmh,jmhCompileClasspath,jmhRuntimeClasspath @@ -87,8 +67,6 @@ org.slf4j:slf4j-api:2.0.17=spotbugsSlf4j org.slf4j:slf4j-api:2.0.18=spotbugs org.slf4j:slf4j-simple:2.0.17=spotbugsSlf4j org.snakeyaml:snakeyaml-engine:2.9=jmhRuntimeClasspath,runtimeClasspath,testCompileClasspath,testFixturesRuntimeClasspath,testRuntimeClasspath -org.spockframework:spock-bom:2.4-groovy-3.0=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -org.spockframework:spock-core:2.4-groovy-3.0=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.tabletest:tabletest-junit:1.2.2=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.tabletest:tabletest-parser:1.2.1=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.xmlresolver:xmlresolver:5.3.3=spotbugs diff --git a/internal-api/internal-api-9/build.gradle.kts b/internal-api/internal-api-9/build.gradle.kts index 47ede220d8b..533565396f7 100644 --- a/internal-api/internal-api-9/build.gradle.kts +++ b/internal-api/internal-api-9/build.gradle.kts @@ -24,12 +24,10 @@ tasks.withType().configureEach { javadocTool = javaToolchains.javadocToolFor(java.toolchain) } -listOf(JavaCompile::class.java, GroovyCompile::class.java).forEach { compileTaskType -> - tasks.withType(compileTaskType).configureEach { - // These implementations are selected only on Java 9+, so they can target Java 9 and restore - // --release after confirming no project output must be loaded during Java 8 discovery. - configureCompiler(JavaVersion.VERSION_1_8, "Uses Java 9+ APIs (StackWalker, ProcessHandle, Module) at Java 8 bytecode") - } +tasks.withType().configureEach { + // These implementations are selected only on Java 9+, so they can target Java 9 and restore + // --release after confirming no project output must be loaded during Java 8 discovery. + configureCompiler(JavaVersion.VERSION_1_8, "Uses Java 9+ APIs (StackWalker, ProcessHandle, Module) at Java 8 bytecode") } extra["minimumBranchCoverage"] = 0.8 diff --git a/internal-api/internal-api-9/gradle.lockfile b/internal-api/internal-api-9/gradle.lockfile index a0f126c5923..a458d3b0628 100644 --- a/internal-api/internal-api-9/gradle.lockfile +++ b/internal-api/internal-api-9/gradle.lockfile @@ -13,7 +13,6 @@ com.datadoghq:dd-instrument-java:0.0.6=jmhRuntimeClasspath,runtimeClasspath,test com.datadoghq:dd-javac-plugin-client:0.2.2=compileClasspath,jmhCompileClasspath,jmhRuntimeClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath com.datadoghq:java-dogstatsd-client:4.4.5=jmhRuntimeClasspath,testRuntimeClasspath com.datadoghq:sketches-java:0.8.3=jmhRuntimeClasspath,testRuntimeClasspath -com.github.javaparser:javaparser-core:3.25.6=codenarc com.github.jnr:jffi:1.3.15=jmhRuntimeClasspath,testRuntimeClasspath com.github.jnr:jnr-a64asm:1.0.0=jmhRuntimeClasspath,testRuntimeClasspath com.github.jnr:jnr-constants:0.10.4=jmhRuntimeClasspath,testRuntimeClasspath @@ -38,12 +37,10 @@ com.squareup.moshi:moshi:1.11.0=jmhRuntimeClasspath,testCompileClasspath,testRun com.squareup.okhttp3:logging-interceptor:3.12.12=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath com.squareup.okhttp3:okhttp:3.12.12=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath com.squareup.okio:okio:1.17.5=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -com.thoughtworks.qdox:qdox:1.12.1=codenarc commons-fileupload:commons-fileupload:1.5=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath commons-io:commons-io:2.11.0=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath commons-io:commons-io:2.21.0=spotbugs de.thetaphi:forbiddenapis:3.11=compileClasspath,jmhCompileClasspath,jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -io.leangen.geantyref:geantyref:1.3.16=jmhRuntimeClasspath,testRuntimeClasspath io.sqreen:libsqreen:17.6.0=jmhRuntimeClasspath,testRuntimeClasspath javax.servlet:javax.servlet-api:3.1.0=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath jaxen:jaxen:2.0.6=spotbugs @@ -54,8 +51,6 @@ net.java.dev.jna:jna-platform:5.8.0=jmhRuntimeClasspath,testRuntimeClasspath net.java.dev.jna:jna:5.8.0=jmhRuntimeClasspath,testRuntimeClasspath net.sf.jopt-simple:jopt-simple:5.0.4=jmh,jmhCompileClasspath,jmhRuntimeClasspath net.sf.saxon:Saxon-HE:12.10=spotbugs -org.apache.ant:ant-antlr:1.10.14=codenarc -org.apache.ant:ant-junit:1.10.14=codenarc org.apache.bcel:bcel:6.12.0=spotbugs org.apache.commons:commons-lang3:3.20.0=spotbugs org.apache.commons:commons-math3:3.6.1=jmh,jmhCompileClasspath,jmhRuntimeClasspath @@ -63,20 +58,8 @@ org.apache.commons:commons-text:1.15.0=spotbugs org.apache.logging.log4j:log4j-api:2.26.1=spotbugs org.apache.logging.log4j:log4j-core:2.26.1=spotbugs org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath -org.codehaus.groovy:groovy-ant:3.0.23=codenarc -org.codehaus.groovy:groovy-docgenerator:3.0.23=codenarc -org.codehaus.groovy:groovy-groovydoc:3.0.23=codenarc -org.codehaus.groovy:groovy-json:3.0.23=codenarc -org.codehaus.groovy:groovy-json:3.0.25=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -org.codehaus.groovy:groovy-templates:3.0.23=codenarc -org.codehaus.groovy:groovy-xml:3.0.23=codenarc -org.codehaus.groovy:groovy:3.0.23=codenarc -org.codehaus.groovy:groovy:3.0.25=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -org.codenarc:CodeNarc:3.7.0=codenarc org.dom4j:dom4j:2.2.0=spotbugs -org.gmetrics:GMetrics:2.1.0=codenarc org.hamcrest:hamcrest-core:1.3=jmhRuntimeClasspath,testRuntimeClasspath -org.hamcrest:hamcrest:3.0=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.jacoco:org.jacoco.agent:0.8.15=jacocoAgent,jacocoAnt org.jacoco:org.jacoco.ant:0.8.15=jacocoAnt org.jacoco:org.jacoco.core:0.8.15=jacocoAnt @@ -89,14 +72,14 @@ org.junit.jupiter:junit-jupiter-engine:5.14.1=jmhRuntimeClasspath,testRuntimeCla org.junit.jupiter:junit-jupiter-params:5.14.1=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter:5.14.1=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.junit.platform:junit-platform-commons:1.14.1=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -org.junit.platform:junit-platform-engine:1.14.1=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.junit.platform:junit-platform-engine:1.14.1=jmhRuntimeClasspath,testRuntimeClasspath org.junit.platform:junit-platform-launcher:1.14.1=jmhRuntimeClasspath,testRuntimeClasspath org.junit.platform:junit-platform-runner:1.14.1=jmhRuntimeClasspath,testRuntimeClasspath org.junit.platform:junit-platform-suite-api:1.14.1=jmhRuntimeClasspath,testRuntimeClasspath org.junit.platform:junit-platform-suite-commons:1.14.1=jmhRuntimeClasspath,testRuntimeClasspath org.junit:junit-bom:5.14.1=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.mockito:mockito-core:4.4.0=jmhRuntimeClasspath,testRuntimeClasspath -org.objenesis:objenesis:3.3=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.objenesis:objenesis:3.2=jmhRuntimeClasspath,testRuntimeClasspath org.openjdk.jmh:jmh-core:1.37=jmh,jmhCompileClasspath,jmhRuntimeClasspath org.openjdk.jmh:jmh-generator-asm:1.37=jmh,jmhCompileClasspath,jmhRuntimeClasspath org.openjdk.jmh:jmh-generator-bytecode:1.37=jmh,jmhCompileClasspath,jmhRuntimeClasspath @@ -121,8 +104,6 @@ org.slf4j:slf4j-api:2.0.17=spotbugsSlf4j org.slf4j:slf4j-api:2.0.18=spotbugs org.slf4j:slf4j-simple:2.0.17=spotbugsSlf4j org.snakeyaml:snakeyaml-engine:2.9=jmhRuntimeClasspath,runtimeClasspath,testRuntimeClasspath -org.spockframework:spock-bom:2.4-groovy-3.0=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -org.spockframework:spock-core:2.4-groovy-3.0=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.tabletest:tabletest-junit:1.2.2=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.tabletest:tabletest-parser:1.2.1=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.xmlresolver:xmlresolver:5.3.3=spotbugs diff --git a/internal-api/src/test/java/datadog/trace/api/TagMapEntryTest.java b/internal-api/src/test/java/datadog/trace/api/TagMapEntryTest.java index e7c483e80ec..8ec3bd68c3a 100644 --- a/internal-api/src/test/java/datadog/trace/api/TagMapEntryTest.java +++ b/internal-api/src/test/java/datadog/trace/api/TagMapEntryTest.java @@ -1,9 +1,9 @@ package datadog.trace.api; -import static org.junit.Assert.assertSame; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertSame; import static org.junit.jupiter.api.Assertions.assertTrue; import datadog.trace.api.TagMap.Entry; diff --git a/products/metrics/metrics-api/gradle.lockfile b/products/metrics/metrics-api/gradle.lockfile index 8e6dfda4965..ff958e19e42 100644 --- a/products/metrics/metrics-api/gradle.lockfile +++ b/products/metrics/metrics-api/gradle.lockfile @@ -14,7 +14,6 @@ com.google.errorprone:error_prone_annotations:2.48.0=spotbugs com.thoughtworks.qdox:qdox:1.12.1=codenarc commons-io:commons-io:2.21.0=spotbugs de.thetaphi:forbiddenapis:3.11=compileClasspath,jmhCompileClasspath -io.leangen.geantyref:geantyref:1.3.16=jmhRuntimeClasspath,testRuntimeClasspath jaxen:jaxen:2.0.6=spotbugs net.bytebuddy:byte-buddy-agent:1.18.12=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath net.bytebuddy:byte-buddy:1.18.12=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath @@ -33,15 +32,12 @@ org.codehaus.groovy:groovy-ant:3.0.23=codenarc org.codehaus.groovy:groovy-docgenerator:3.0.23=codenarc org.codehaus.groovy:groovy-groovydoc:3.0.23=codenarc org.codehaus.groovy:groovy-json:3.0.23=codenarc -org.codehaus.groovy:groovy-json:3.0.25=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.codehaus.groovy:groovy-templates:3.0.23=codenarc org.codehaus.groovy:groovy-xml:3.0.23=codenarc org.codehaus.groovy:groovy:3.0.23=codenarc -org.codehaus.groovy:groovy:3.0.25=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.codenarc:CodeNarc:3.7.0=codenarc org.dom4j:dom4j:2.2.0=spotbugs org.gmetrics:GMetrics:2.1.0=codenarc -org.hamcrest:hamcrest:3.0=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.jacoco:org.jacoco.agent:0.8.15=jacocoAgent,jacocoAnt org.jacoco:org.jacoco.ant:0.8.15=jacocoAnt org.jacoco:org.jacoco.core:0.8.15=jacocoAnt @@ -51,12 +47,12 @@ org.junit.jupiter:junit-jupiter-engine:5.14.1=jmhRuntimeClasspath,testRuntimeCla org.junit.jupiter:junit-jupiter-params:5.14.1=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter:5.14.1=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.junit.platform:junit-platform-commons:1.14.1=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -org.junit.platform:junit-platform-engine:1.14.1=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.junit.platform:junit-platform-engine:1.14.1=jmhRuntimeClasspath,testRuntimeClasspath org.junit.platform:junit-platform-launcher:1.14.1=jmhRuntimeClasspath,testRuntimeClasspath org.junit:junit-bom:5.14.1=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.mockito:mockito-core:4.4.0=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.mockito:mockito-junit-jupiter:4.4.0=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -org.objenesis:objenesis:3.3=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath +org.objenesis:objenesis:3.2=jmhRuntimeClasspath,testRuntimeClasspath org.openjdk.jmh:jmh-core:1.37=jmh,jmhCompileClasspath,jmhRuntimeClasspath org.openjdk.jmh:jmh-generator-asm:1.37=jmh,jmhCompileClasspath,jmhRuntimeClasspath org.openjdk.jmh:jmh-generator-bytecode:1.37=jmh,jmhCompileClasspath,jmhRuntimeClasspath @@ -77,8 +73,6 @@ org.slf4j:slf4j-api:1.7.32=jmhRuntimeClasspath,testCompileClasspath,testRuntimeC org.slf4j:slf4j-api:2.0.17=spotbugsSlf4j org.slf4j:slf4j-api:2.0.18=spotbugs org.slf4j:slf4j-simple:2.0.17=spotbugsSlf4j -org.spockframework:spock-bom:2.4-groovy-3.0=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath -org.spockframework:spock-core:2.4-groovy-3.0=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.tabletest:tabletest-junit:1.2.2=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.tabletest:tabletest-parser:1.2.1=jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.xmlresolver:xmlresolver:5.3.3=spotbugs diff --git a/remote-config/remote-config-api/gradle.lockfile b/remote-config/remote-config-api/gradle.lockfile index 6874f76cee7..a230bcf6413 100644 --- a/remote-config/remote-config-api/gradle.lockfile +++ b/remote-config/remote-config-api/gradle.lockfile @@ -14,7 +14,6 @@ com.google.errorprone:error_prone_annotations:2.48.0=spotbugs com.thoughtworks.qdox:qdox:1.12.1=codenarc commons-io:commons-io:2.21.0=spotbugs de.thetaphi:forbiddenapis:3.11=compileClasspath -io.leangen.geantyref:geantyref:1.3.16=testRuntimeClasspath jaxen:jaxen:2.0.6=spotbugs net.bytebuddy:byte-buddy-agent:1.12.8=testRuntimeClasspath net.bytebuddy:byte-buddy:1.12.8=testRuntimeClasspath @@ -31,15 +30,12 @@ org.codehaus.groovy:groovy-ant:3.0.23=codenarc org.codehaus.groovy:groovy-docgenerator:3.0.23=codenarc org.codehaus.groovy:groovy-groovydoc:3.0.23=codenarc org.codehaus.groovy:groovy-json:3.0.23=codenarc -org.codehaus.groovy:groovy-json:3.0.25=testCompileClasspath,testRuntimeClasspath org.codehaus.groovy:groovy-templates:3.0.23=codenarc org.codehaus.groovy:groovy-xml:3.0.23=codenarc org.codehaus.groovy:groovy:3.0.23=codenarc -org.codehaus.groovy:groovy:3.0.25=testCompileClasspath,testRuntimeClasspath org.codenarc:CodeNarc:3.7.0=codenarc org.dom4j:dom4j:2.2.0=spotbugs org.gmetrics:GMetrics:2.1.0=codenarc -org.hamcrest:hamcrest:3.0=testCompileClasspath,testRuntimeClasspath org.jacoco:org.jacoco.agent:0.8.15=jacocoAgent,jacocoAnt org.jacoco:org.jacoco.ant:0.8.15=jacocoAnt org.jacoco:org.jacoco.core:0.8.15=jacocoAnt @@ -49,11 +45,11 @@ org.junit.jupiter:junit-jupiter-engine:5.14.1=testRuntimeClasspath org.junit.jupiter:junit-jupiter-params:5.14.1=testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter:5.14.1=testCompileClasspath,testRuntimeClasspath org.junit.platform:junit-platform-commons:1.14.1=testCompileClasspath,testRuntimeClasspath -org.junit.platform:junit-platform-engine:1.14.1=testCompileClasspath,testRuntimeClasspath +org.junit.platform:junit-platform-engine:1.14.1=testRuntimeClasspath org.junit.platform:junit-platform-launcher:1.14.1=testRuntimeClasspath org.junit:junit-bom:5.14.1=testCompileClasspath,testRuntimeClasspath org.mockito:mockito-core:4.4.0=testRuntimeClasspath -org.objenesis:objenesis:3.3=testCompileClasspath,testRuntimeClasspath +org.objenesis:objenesis:3.2=testRuntimeClasspath org.opentest4j:opentest4j:1.3.0=testCompileClasspath,testRuntimeClasspath org.ow2.asm:asm-analysis:9.10.1=spotbugs org.ow2.asm:asm-commons:9.10.1=jacocoAnt,spotbugs @@ -67,8 +63,6 @@ org.slf4j:slf4j-api:1.7.32=testCompileClasspath,testRuntimeClasspath org.slf4j:slf4j-api:2.0.17=spotbugsSlf4j org.slf4j:slf4j-api:2.0.18=spotbugs org.slf4j:slf4j-simple:2.0.17=spotbugsSlf4j -org.spockframework:spock-bom:2.4-groovy-3.0=testCompileClasspath,testRuntimeClasspath -org.spockframework:spock-core:2.4-groovy-3.0=testCompileClasspath,testRuntimeClasspath org.tabletest:tabletest-junit:1.2.2=testCompileClasspath,testRuntimeClasspath org.tabletest:tabletest-parser:1.2.1=testCompileClasspath,testRuntimeClasspath org.xmlresolver:xmlresolver:5.3.3=spotbugs diff --git a/utils/test-utils/src/main/java/datadog/trace/test/util/ThreadUtils.java b/utils/test-utils/src/main/java/datadog/trace/test/util/ThreadUtils.java index 8439c2c038a..8ec2bd97138 100644 --- a/utils/test-utils/src/main/java/datadog/trace/test/util/ThreadUtils.java +++ b/utils/test-utils/src/main/java/datadog/trace/test/util/ThreadUtils.java @@ -1,6 +1,5 @@ package datadog.trace.test.util; -import groovy.lang.Closure; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -38,34 +37,13 @@ public interface ThrowingRunnable { public static boolean runConcurrently( final int concurrency, final int totalInvocations, final ThrowingRunnable runnable) throws Throwable { - return runConcurrently( - concurrency, - totalInvocations, - new Closure(null) { - @Override - public Void call() { - try { - runnable.run(); - } catch (RuntimeException | Error e) { - throw e; - } catch (Throwable t) { - throw new RuntimeException(t); - } - return null; - } - }); - } - - public static boolean runConcurrently( - final int concurrency, final int totalInvocations, final Closure closure) - throws Throwable { // There is no reason in creating more threads than invocations int poolSize = Math.min(concurrency, totalInvocations); - // If we are not running anything concurrently, then just call the closure directly + // If we are not running anything concurrently, then just run the action directly if (poolSize == 1) { for (int c = 0; c < totalInvocations; c++) { - closure.call(); + runnable.run(); } return true; } @@ -85,7 +63,7 @@ public static boolean runConcurrently( startBarrier.await(); for (int c = 0; c < invocations && throwable.get() == null; c++) { try { - closure.call(); + runnable.run(); } catch (Throwable t) { throwable.compareAndSet(null, t); } diff --git a/utils/test-utils/src/test/java/datadog/trace/test/util/ThreadUtilsTest.java b/utils/test-utils/src/test/java/datadog/trace/test/util/ThreadUtilsTest.java new file mode 100644 index 00000000000..5e56309b930 --- /dev/null +++ b/utils/test-utils/src/test/java/datadog/trace/test/util/ThreadUtilsTest.java @@ -0,0 +1,82 @@ +package datadog.trace.test.util; + +import static datadog.trace.test.util.ThreadUtils.runConcurrently; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertSame; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.IOException; +import java.util.concurrent.atomic.AtomicInteger; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +class ThreadUtilsTest { + + @ParameterizedTest + @ValueSource(ints = {1, 4}) + void runsEveryInvocation(int concurrency) throws Throwable { + AtomicInteger count = new AtomicInteger(); + + assertTrue(runConcurrently(concurrency, 11, count::incrementAndGet)); + + assertEquals(11, count.get()); + } + + @ParameterizedTest + @ValueSource(ints = {1, 4}) + void propagatesCheckedException(int concurrency) { + IOException failure = new IOException("action failed"); + + IOException actual = + assertThrows( + IOException.class, + () -> + runConcurrently( + concurrency, + 11, + () -> { + throw failure; + })); + + assertSame(failure, actual); + } + + @ParameterizedTest + @ValueSource(ints = {1, 4}) + void propagatesRuntimeException(int concurrency) { + IllegalStateException failure = new IllegalStateException("action failed"); + + IllegalStateException actual = + assertThrows( + IllegalStateException.class, + () -> + runConcurrently( + concurrency, + 11, + () -> { + throw failure; + })); + + assertSame(failure, actual); + } + + @ParameterizedTest + @ValueSource(ints = {1, 4}) + void propagatesError(int concurrency) { + AssertionError failure = new AssertionError("action failed"); + + AssertionError actual = + assertThrows( + AssertionError.class, + () -> + runConcurrently( + concurrency, + 11, + () -> { + throw failure; + })); + + assertSame(failure, actual); + } +}