diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index d93c261886a..35d9fed1085 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -49,6 +49,10 @@ apply { from("$rootDir/../gradle/repositories.gradle") } +repositories { + gradlePluginPortal() +} + dependencies { implementation(gradleApi()) implementation(localGroovy()) @@ -69,6 +73,8 @@ dependencies { implementation("com.fasterxml.jackson.core:jackson-databind") implementation("com.fasterxml.jackson.core:jackson-annotations") implementation("com.fasterxml.jackson.core:jackson-core") + + compileOnly(libs.develocity) } tasks.compileKotlin { diff --git a/buildSrc/src/main/kotlin/datadog.configure-tests.gradle.kts b/buildSrc/src/main/kotlin/datadog.configure-tests.gradle.kts new file mode 100644 index 00000000000..935b12c15c5 --- /dev/null +++ b/buildSrc/src/main/kotlin/datadog.configure-tests.gradle.kts @@ -0,0 +1,135 @@ +import org.gradle.api.tasks.testing.Test +import org.gradle.api.tasks.testing.junitplatform.JUnitPlatformOptions +import org.gradle.api.services.BuildService +import org.gradle.api.services.BuildServiceParameters +import org.gradle.testing.base.TestingExtension +import org.gradle.api.plugins.jvm.JvmTestSuite +import java.time.Duration +import java.time.temporal.ChronoUnit + +val isTestingInstrumentation = providers.provider { + project.findProperty("testingInstrumentation") as? Boolean ?: false +} + +// Need concrete implementation of BuildService in Kotlin +abstract class ForkedTestLimit : BuildService +// Forked tests will fail with OOM if the memory is set too high. Gitlab allows at least a limit of 3. +val forkedTestsMemoryLimit = 3 + +val forkedTestLimit = gradle.sharedServices.registerIfAbsent("forkedTestLimit", ForkedTestLimit::class.java) { + maxParallelUsages.set(forkedTestsMemoryLimit) +} + +extensions.findByType()?.apply { + suites.withType().configureEach { + // Use JUnit 5 to run tests + useJUnitJupiter() + } +} + +// Use lazy providers to avoid evaluating the property until it is needed +val skipTestsProvider = rootProject.providers.gradleProperty("skipTests") +val skipForkedTestsProvider = rootProject.providers.gradleProperty("skipForkedTests") +val skipFlakyTestsProvider = rootProject.providers.gradleProperty("skipFlakyTests") +val runFlakyTestsProvider = rootProject.providers.gradleProperty("runFlakyTests") +val activePartitionProvider = providers.provider { + project.extra.properties["activePartition"] as? Boolean ?: true +} + +// Go through the Test tasks and configure them +tasks.withType().configureEach { + enabled = activePartitionProvider.get() + + // Disable all tests if skipTests property was specified + onlyIf("skipTests are undefined or false") { !skipTestsProvider.isPresent } + + // Enable force rerun of tests with -Prerun.tests.${project.name} + outputs.upToDateWhen { + !rootProject.providers.gradleProperty("rerun.tests.${project.name}").isPresent + } + + // Avoid executing classes used to test testing frameworks instrumentation + if (isTestingInstrumentation.get()) { + exclude("**/TestAssumption*", "**/TestSuiteSetUpAssumption*") + exclude("**/TestDisableTestTrace*") + exclude("**/TestError*") + exclude("**/TestFactory*") + exclude("**/TestFailed*") + exclude("**/TestFailedWithSuccessPercentage*") + exclude("**/TestInheritance*", "**/BaseTestInheritance*") + exclude("**/TestParameterized*") + exclude("**/TestRepeated*") + exclude("**/TestSkipped*") + exclude("**/TestSkippedClass*") + exclude("**/TestSucceed*") + exclude("**/TestTemplate*") + exclude("**/TestUnskippable*") + exclude("**/TestWithSetup*") + } + + // Split up tests that want to run forked in their own separate JVM for generated tasks + if (name.startsWith("forkedTest") || name.endsWith("ForkedTest")) { + setExcludes(emptyList()) + setIncludes(listOf("**/*ForkedTest*")) + forkEvery = 1 + // Limit the number of concurrent forked tests + usesService(forkedTestLimit) + onlyIf("skipForkedTests are undefined or false") { !skipForkedTestsProvider.isPresent } + } else { + exclude("**/*ForkedTest*") + } + + // Set test timeout for 20 minutes. Default job timeout is 1h (configured on CI level). + timeout.set(Duration.of(20, ChronoUnit.MINUTES)) +} + +// Register a task "allTests" that depends on all non-latest and non-traceAgentTest Test tasks. +// This is used when we only want to run the 'main' test sets. +tasks.register("allTests") { + dependsOn(tasks.withType().matching { testTask -> + !testTask.name.contains("latest", ignoreCase = true) && testTask.name != "traceAgentTest" + }) +} + +// Register a task "allLatestDepTests" that depends on all Test tasks whose names include 'latest'. +// This is used when we want to run tests against the latest dependency versions. +tasks.register("allLatestDepTests") { + dependsOn(tasks.withType().matching { testTask -> + !testTask.name.contains("latest", ignoreCase = true) + }) +} + +// Make the 'check' task depend on all Test tasks in the project. +// This means that when running the 'check' task, all Test tasks will run as well. +tasks.named("check") { + dependsOn(tasks.withType()) +} + +tasks.withType().configureEach { + // Flaky tests management for JUnit 5 + if (testFramework is JUnitPlatformOptions) { + val junitPlatform = testFramework as JUnitPlatformOptions + if (skipFlakyTestsProvider.isPresent) { + junitPlatform.excludeTags("flaky") + } else if (runFlakyTestsProvider.isPresent) { + junitPlatform.includeTags("flaky") + } + } + + // Flaky tests management for Spock + if (skipFlakyTestsProvider.isPresent) { + jvmArgs("-Drun.flaky.tests=false") + } else if (runFlakyTestsProvider.isPresent) { + jvmArgs("-Drun.flaky.tests=true") + } +} + +tasks.withType().configureEach { + // https://docs.gradle.com/develocity/flaky-test-detection/ + // https://docs.gradle.com/develocity/gradle-plugin/current/#test_retry + develocity.testRetry { + if (providers.environmentVariable("CI").isPresent()) { + maxRetries = 3 + } + } +} diff --git a/dd-java-agent/instrumentation/armeria/armeria-grpc-0.84/build.gradle b/dd-java-agent/instrumentation/armeria/armeria-grpc-0.84/build.gradle index 32996b1f7e2..faf1cae4c43 100644 --- a/dd-java-agent/instrumentation/armeria/armeria-grpc-0.84/build.gradle +++ b/dd-java-agent/instrumentation/armeria/armeria-grpc-0.84/build.gradle @@ -40,8 +40,6 @@ protobuf { addTestSuiteForDir('latestDepTest', 'test') addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'test') -apply from: "$rootDir/gradle/configure_tests.gradle" - tasks.named("latestDepTest", Test) { finalizedBy 'latestDepForkedTest' } diff --git a/dd-java-agent/instrumentation/armeria/armeria-jetty-1.24/build.gradle b/dd-java-agent/instrumentation/armeria/armeria-jetty-1.24/build.gradle index 07e1be55c5c..ad3f4ed307c 100644 --- a/dd-java-agent/instrumentation/armeria/armeria-jetty-1.24/build.gradle +++ b/dd-java-agent/instrumentation/armeria/armeria-jetty-1.24/build.gradle @@ -16,7 +16,6 @@ muzzle { } apply from: "$rootDir/gradle/java.gradle" -apply from: "$rootDir/gradle/configure_tests.gradle" addTestSuiteForDir('latestDepTest', 'test') diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sqs-1.0/build.gradle b/dd-java-agent/instrumentation/aws-java/aws-java-sqs-1.0/build.gradle index 03b5fcdcb5c..879ed1cce12 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sqs-1.0/build.gradle +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sqs-1.0/build.gradle @@ -13,8 +13,6 @@ apply from: "$rootDir/gradle/java.gradle" addTestSuiteForDir('latestDepTest', 'test') addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'test') -apply from: "$rootDir/gradle/configure_tests.gradle" - dependencies { compileOnly group: 'com.amazonaws', name: 'aws-java-sdk-sqs', version: '1.11.0' compileOnly group: 'com.amazonaws', name: 'amazon-sqs-java-messaging-lib', version: '1.0.0' diff --git a/dd-java-agent/instrumentation/aws-java/aws-java-sqs-2.0/build.gradle b/dd-java-agent/instrumentation/aws-java/aws-java-sqs-2.0/build.gradle index ad8355da2f0..bde3f7ee5e0 100644 --- a/dd-java-agent/instrumentation/aws-java/aws-java-sqs-2.0/build.gradle +++ b/dd-java-agent/instrumentation/aws-java/aws-java-sqs-2.0/build.gradle @@ -14,8 +14,6 @@ apply from: "$rootDir/gradle/java.gradle" addTestSuiteForDir('latestDepTest', 'test') addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'test') -apply from: "$rootDir/gradle/configure_tests.gradle" - dependencies { compileOnly group: 'software.amazon.awssdk', name: 'sqs', version: '2.2.0' compileOnly group: 'com.amazonaws', name: 'amazon-sqs-java-messaging-lib', version: '2.0.0' diff --git a/dd-java-agent/instrumentation/cucumber/build.gradle b/dd-java-agent/instrumentation/cucumber/build.gradle index 21ae5de3546..4258244fb64 100644 --- a/dd-java-agent/instrumentation/cucumber/build.gradle +++ b/dd-java-agent/instrumentation/cucumber/build.gradle @@ -1,3 +1,5 @@ +ext.testingInstrumentation = true + apply from: "$rootDir/gradle/java.gradle" muzzle { diff --git a/dd-java-agent/instrumentation/jakarta-jms/build.gradle b/dd-java-agent/instrumentation/jakarta-jms/build.gradle index a86e2f3750c..297fad6eb15 100644 --- a/dd-java-agent/instrumentation/jakarta-jms/build.gradle +++ b/dd-java-agent/instrumentation/jakarta-jms/build.gradle @@ -14,7 +14,6 @@ muzzle { } apply from: "$rootDir/gradle/java.gradle" -apply from: "$rootDir/gradle/configure_tests.gradle" repositories { maven { diff --git a/dd-java-agent/instrumentation/jms/build.gradle b/dd-java-agent/instrumentation/jms/build.gradle index d8f1f40fbdb..717ef42380d 100644 --- a/dd-java-agent/instrumentation/jms/build.gradle +++ b/dd-java-agent/instrumentation/jms/build.gradle @@ -26,8 +26,6 @@ repositories { addTestSuite('latestDepTest') addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'test') -apply from: "$rootDir/gradle/configure_tests.gradle" - tasks.named("latestDepTest", Test) { finalizedBy 'latestDepForkedTest' } diff --git a/dd-java-agent/instrumentation/junit/junit-4.10/build.gradle b/dd-java-agent/instrumentation/junit/junit-4.10/build.gradle index f8d1abd9be1..99b4ef2e46c 100644 --- a/dd-java-agent/instrumentation/junit/junit-4.10/build.gradle +++ b/dd-java-agent/instrumentation/junit/junit-4.10/build.gradle @@ -5,6 +5,8 @@ plugins { id 'org.jetbrains.kotlin.jvm' } +ext.testingInstrumentation = true + apply from: "$rootDir/gradle/java.gradle" apply from: "$rootDir/gradle/test-with-kotlin.gradle" diff --git a/dd-java-agent/instrumentation/junit/junit-4.10/cucumber-junit-4/build.gradle b/dd-java-agent/instrumentation/junit/junit-4.10/cucumber-junit-4/build.gradle index 0e528111889..f5dc3d7ab87 100644 --- a/dd-java-agent/instrumentation/junit/junit-4.10/cucumber-junit-4/build.gradle +++ b/dd-java-agent/instrumentation/junit/junit-4.10/cucumber-junit-4/build.gradle @@ -1,3 +1,5 @@ +ext.testingInstrumentation = true + apply from: "$rootDir/gradle/java.gradle" muzzle { diff --git a/dd-java-agent/instrumentation/junit/junit-4.10/junit-4.13/build.gradle b/dd-java-agent/instrumentation/junit/junit-4.10/junit-4.13/build.gradle index 7c176ad7fe3..ab2434265ac 100644 --- a/dd-java-agent/instrumentation/junit/junit-4.10/junit-4.13/build.gradle +++ b/dd-java-agent/instrumentation/junit/junit-4.10/junit-4.13/build.gradle @@ -1,3 +1,5 @@ +ext.testingInstrumentation = true + apply from: "$rootDir/gradle/java.gradle" muzzle { diff --git a/dd-java-agent/instrumentation/junit/junit-4.10/munit-junit-4/build.gradle b/dd-java-agent/instrumentation/junit/junit-4.10/munit-junit-4/build.gradle index 5f3a1fd306e..f5dc8befbc2 100644 --- a/dd-java-agent/instrumentation/junit/junit-4.10/munit-junit-4/build.gradle +++ b/dd-java-agent/instrumentation/junit/junit-4.10/munit-junit-4/build.gradle @@ -1,3 +1,5 @@ +ext.testingInstrumentation = true + apply from: "$rootDir/gradle/java.gradle" apply plugin: 'scala' diff --git a/dd-java-agent/instrumentation/junit/junit-5.3/build.gradle b/dd-java-agent/instrumentation/junit/junit-5.3/build.gradle index fbffbe3af73..c0da8954d4a 100644 --- a/dd-java-agent/instrumentation/junit/junit-5.3/build.gradle +++ b/dd-java-agent/instrumentation/junit/junit-5.3/build.gradle @@ -1,3 +1,5 @@ +ext.testingInstrumentation = true + apply from: "$rootDir/gradle/java.gradle" // JUnit5 5.3.0+ version is needed because of the fix in the TestInheritance test suite names. diff --git a/dd-java-agent/instrumentation/junit/junit-5.3/cucumber-junit-5/build.gradle b/dd-java-agent/instrumentation/junit/junit-5.3/cucumber-junit-5/build.gradle index 344da340e60..c12695f5eba 100644 --- a/dd-java-agent/instrumentation/junit/junit-5.3/cucumber-junit-5/build.gradle +++ b/dd-java-agent/instrumentation/junit/junit-5.3/cucumber-junit-5/build.gradle @@ -1,3 +1,5 @@ +ext.testingInstrumentation = true + apply from: "$rootDir/gradle/java.gradle" muzzle { diff --git a/dd-java-agent/instrumentation/junit/junit-5.3/junit-5.8/build.gradle b/dd-java-agent/instrumentation/junit/junit-5.3/junit-5.8/build.gradle index 4129d7ce857..35f3dd4b4be 100644 --- a/dd-java-agent/instrumentation/junit/junit-5.3/junit-5.8/build.gradle +++ b/dd-java-agent/instrumentation/junit/junit-5.3/junit-5.8/build.gradle @@ -1,3 +1,5 @@ +ext.testingInstrumentation = true + apply from: "$rootDir/gradle/java.gradle" def jupiterVersion = '5.8.0' diff --git a/dd-java-agent/instrumentation/junit/junit-5.3/spock-junit-5/build.gradle b/dd-java-agent/instrumentation/junit/junit-5.3/spock-junit-5/build.gradle index 13c27b71fd3..7e0a67c2b9c 100644 --- a/dd-java-agent/instrumentation/junit/junit-5.3/spock-junit-5/build.gradle +++ b/dd-java-agent/instrumentation/junit/junit-5.3/spock-junit-5/build.gradle @@ -1,3 +1,5 @@ +ext.testingInstrumentation = true + apply from: "$rootDir/gradle/java.gradle" def spockGroovyVersion = '3.0' diff --git a/dd-java-agent/instrumentation/kafka/kafka-clients-0.11/build.gradle b/dd-java-agent/instrumentation/kafka/kafka-clients-0.11/build.gradle index b23bf4c1808..5a301dd5b82 100644 --- a/dd-java-agent/instrumentation/kafka/kafka-clients-0.11/build.gradle +++ b/dd-java-agent/instrumentation/kafka/kafka-clients-0.11/build.gradle @@ -20,8 +20,6 @@ apply from: "$rootDir/gradle/java.gradle" addTestSuite('latestDepTest') addTestSuite('iastLatestDepTest3') -apply from: "$rootDir/gradle/configure_tests.gradle" - dependencies { compileOnly group: 'org.apache.kafka', name: 'kafka-clients', version: '0.11.0.0' implementation project(':dd-java-agent:instrumentation:kafka:kafka-common') @@ -39,7 +37,6 @@ dependencies { testRuntimeOnly project(':dd-java-agent:instrumentation:reactive-streams') testImplementation project(':dd-java-agent:agent-iast:iast-test-fixtures') - // IAST testing dependencies testRuntimeOnly project(':dd-java-agent:instrumentation:iast-instrumenter') testRuntimeOnly project(':dd-java-agent:instrumentation:java:java-lang:java-lang-1.8') diff --git a/dd-java-agent/instrumentation/karate/build.gradle b/dd-java-agent/instrumentation/karate/build.gradle index 3b0ce1a8d97..4a55b4a2ed7 100644 --- a/dd-java-agent/instrumentation/karate/build.gradle +++ b/dd-java-agent/instrumentation/karate/build.gradle @@ -1,6 +1,7 @@ ext { // karate 1.4.0+ requires Java 11 or higher. latestDepTestMinJavaVersionForTests = JavaVersion.VERSION_11 + testingInstrumentation = true } apply from: "$rootDir/gradle/java.gradle" diff --git a/dd-java-agent/instrumentation/scala-promise/scala-promise-2.10/build.gradle b/dd-java-agent/instrumentation/scala-promise/scala-promise-2.10/build.gradle index 4d170e05420..8355186ebbd 100644 --- a/dd-java-agent/instrumentation/scala-promise/scala-promise-2.10/build.gradle +++ b/dd-java-agent/instrumentation/scala-promise/scala-promise-2.10/build.gradle @@ -28,8 +28,6 @@ apply plugin: 'scala' // Don't use test-with-scala since we want to pick our own addTestSuiteForDir('latestDepTest', 'test') addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'forkedTest') -apply from: "$rootDir/gradle/configure_tests.gradle" - tasks.named("latestDepTest", Test) { finalizedBy 'latestDepForkedTest' } diff --git a/dd-java-agent/instrumentation/scala-promise/scala-promise-2.13/build.gradle b/dd-java-agent/instrumentation/scala-promise/scala-promise-2.13/build.gradle index 3bb3d2df5dc..effcc09dc31 100644 --- a/dd-java-agent/instrumentation/scala-promise/scala-promise-2.13/build.gradle +++ b/dd-java-agent/instrumentation/scala-promise/scala-promise-2.13/build.gradle @@ -28,8 +28,6 @@ apply plugin: 'scala' // Don't use test-with-scala since we want to pick our own addTestSuiteForDir('latestDepTest', 'test') addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'forkedTest') -apply from: "$rootDir/gradle/configure_tests.gradle" - tasks.named("latestDepTest", Test) { finalizedBy 'latestDepForkedTest' } diff --git a/dd-java-agent/instrumentation/scalatest/build.gradle b/dd-java-agent/instrumentation/scalatest/build.gradle index baeab8c0849..1c758f3862e 100644 --- a/dd-java-agent/instrumentation/scalatest/build.gradle +++ b/dd-java-agent/instrumentation/scalatest/build.gradle @@ -1,3 +1,5 @@ +ext.testingInstrumentation = true + apply from: "$rootDir/gradle/java.gradle" apply plugin: 'scala' diff --git a/dd-java-agent/instrumentation/selenium/build.gradle b/dd-java-agent/instrumentation/selenium/build.gradle index 7c5c008d4d7..b40bca0d970 100644 --- a/dd-java-agent/instrumentation/selenium/build.gradle +++ b/dd-java-agent/instrumentation/selenium/build.gradle @@ -4,6 +4,7 @@ plugins { ext { latestDepTestMinJavaVersionForTests = JavaVersion.VERSION_11 + testingInstrumentation = true } apply from: "$rootDir/gradle/java.gradle" diff --git a/dd-java-agent/instrumentation/spring/spring-jms-3.1/build.gradle b/dd-java-agent/instrumentation/spring/spring-jms-3.1/build.gradle index a8ed32d6221..ecc8a113a6f 100644 --- a/dd-java-agent/instrumentation/spring/spring-jms-3.1/build.gradle +++ b/dd-java-agent/instrumentation/spring/spring-jms-3.1/build.gradle @@ -12,8 +12,6 @@ apply from: "$rootDir/gradle/java.gradle" addTestSuiteForDir('latestDepTest', 'test') addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'test') -apply from: "$rootDir/gradle/configure_tests.gradle" - tasks.named("latestDepTest", Test) { finalizedBy 'latestDepForkedTest' } diff --git a/dd-java-agent/instrumentation/spymemcached-2.10/build.gradle b/dd-java-agent/instrumentation/spymemcached-2.10/build.gradle index 565824ff70d..81a3331232b 100644 --- a/dd-java-agent/instrumentation/spymemcached-2.10/build.gradle +++ b/dd-java-agent/instrumentation/spymemcached-2.10/build.gradle @@ -8,7 +8,6 @@ muzzle { } apply from: "$rootDir/gradle/java.gradle" -apply from: "$rootDir/gradle/configure_tests.gradle" addTestSuiteForDir('latestDepTest', 'test') addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'test') diff --git a/dd-java-agent/instrumentation/testng/testng-6/build.gradle b/dd-java-agent/instrumentation/testng/testng-6/build.gradle index ce584b3fe43..8721f9107b8 100644 --- a/dd-java-agent/instrumentation/testng/testng-6/build.gradle +++ b/dd-java-agent/instrumentation/testng/testng-6/build.gradle @@ -2,6 +2,8 @@ plugins { id 'java-test-fixtures' } +ext.testingInstrumentation = true + apply from: "$rootDir/gradle/java.gradle" muzzle { diff --git a/dd-java-agent/instrumentation/testng/testng-7/build.gradle b/dd-java-agent/instrumentation/testng/testng-7/build.gradle index 6385a574129..ff5c8953b8c 100644 --- a/dd-java-agent/instrumentation/testng/testng-7/build.gradle +++ b/dd-java-agent/instrumentation/testng/testng-7/build.gradle @@ -5,6 +5,7 @@ plugins { ext { // testng 7.6.0+ requires Java 11 or higher. latestDepTestMinJavaVersionForTests = JavaVersion.VERSION_11 + testingInstrumentation = true } apply from: "$rootDir/gradle/java.gradle" diff --git a/dd-java-agent/instrumentation/vertx/vertx-mysql-client/vertx-mysql-client-3.9/build.gradle b/dd-java-agent/instrumentation/vertx/vertx-mysql-client/vertx-mysql-client-3.9/build.gradle index 93f9000af8d..47917d808bd 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-mysql-client/vertx-mysql-client-3.9/build.gradle +++ b/dd-java-agent/instrumentation/vertx/vertx-mysql-client/vertx-mysql-client-3.9/build.gradle @@ -14,8 +14,6 @@ muzzle { addTestSuiteForDir('latestDepTest', 'test') addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'test') -apply from: "$rootDir/gradle/configure_tests.gradle" - tasks.named("latestDepTest", Test) { finalizedBy 'latestDepForkedTest' } diff --git a/dd-java-agent/instrumentation/vertx/vertx-mysql-client/vertx-mysql-client-4.0/build.gradle b/dd-java-agent/instrumentation/vertx/vertx-mysql-client/vertx-mysql-client-4.0/build.gradle index e04507cb8ba..fcb046147b0 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-mysql-client/vertx-mysql-client-4.0/build.gradle +++ b/dd-java-agent/instrumentation/vertx/vertx-mysql-client/vertx-mysql-client-4.0/build.gradle @@ -13,8 +13,6 @@ muzzle { addTestSuiteForDir('latestDepTest', 'test') addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'test') -apply from: "$rootDir/gradle/configure_tests.gradle" - tasks.named("latestDepTest", Test) { finalizedBy 'latestDepForkedTest' } diff --git a/dd-java-agent/instrumentation/vertx/vertx-mysql-client/vertx-mysql-client-4.4.2/build.gradle b/dd-java-agent/instrumentation/vertx/vertx-mysql-client/vertx-mysql-client-4.4.2/build.gradle index 6159f4e43e8..c87098d8a90 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-mysql-client/vertx-mysql-client-4.4.2/build.gradle +++ b/dd-java-agent/instrumentation/vertx/vertx-mysql-client/vertx-mysql-client-4.4.2/build.gradle @@ -13,8 +13,6 @@ muzzle { addTestSuiteForDir('latestDepTest', 'test') addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'test') -apply from: "$rootDir/gradle/configure_tests.gradle" - tasks.named("latestDepTest", Test) { finalizedBy 'latestDepForkedTest' } diff --git a/dd-java-agent/instrumentation/vertx/vertx-pg-client/vertx-pg-client-4.0/build.gradle b/dd-java-agent/instrumentation/vertx/vertx-pg-client/vertx-pg-client-4.0/build.gradle index 46dfa1e16f4..002e1c63393 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-pg-client/vertx-pg-client-4.0/build.gradle +++ b/dd-java-agent/instrumentation/vertx/vertx-pg-client/vertx-pg-client-4.0/build.gradle @@ -21,8 +21,6 @@ muzzle { addTestSuiteForDir('latestDepTest', 'test') addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'test') -apply from: "$rootDir/gradle/configure_tests.gradle" - tasks.named("latestDepTest", Test) { finalizedBy 'latestDepForkedTest' } diff --git a/dd-java-agent/instrumentation/vertx/vertx-pg-client/vertx-pg-client-4.4.2/build.gradle b/dd-java-agent/instrumentation/vertx/vertx-pg-client/vertx-pg-client-4.4.2/build.gradle index 8f29134c68c..16e8f6d2ba8 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-pg-client/vertx-pg-client-4.4.2/build.gradle +++ b/dd-java-agent/instrumentation/vertx/vertx-pg-client/vertx-pg-client-4.4.2/build.gradle @@ -12,8 +12,6 @@ muzzle { addTestSuiteForDir('latestDepTest', 'test') addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'test') -apply from: "$rootDir/gradle/configure_tests.gradle" - tasks.named("latestDepTest", Test) { finalizedBy 'latestDepForkedTest' } diff --git a/dd-java-agent/instrumentation/vertx/vertx-redis-client-3.9/build.gradle b/dd-java-agent/instrumentation/vertx/vertx-redis-client-3.9/build.gradle index 5e847d89caa..ffbef8a91c3 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-redis-client-3.9/build.gradle +++ b/dd-java-agent/instrumentation/vertx/vertx-redis-client-3.9/build.gradle @@ -9,7 +9,6 @@ muzzle { } apply from: "$rootDir/gradle/java.gradle" -apply from: "$rootDir/gradle/configure_tests.gradle" addTestSuiteForDir('latestDepTest', 'test') addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'test') diff --git a/dd-java-agent/instrumentation/vertx/vertx-rx-3.5/build.gradle b/dd-java-agent/instrumentation/vertx/vertx-rx-3.5/build.gradle index fdf319a2514..8c98c54be0c 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-rx-3.5/build.gradle +++ b/dd-java-agent/instrumentation/vertx/vertx-rx-3.5/build.gradle @@ -3,8 +3,6 @@ apply from: "$rootDir/gradle/java.gradle" addTestSuiteForDir('latestDepTest', 'test') addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'test') -apply from: "$rootDir/gradle/configure_tests.gradle" - tasks.named("latestDepTest", Test) { finalizedBy 'latestDepForkedTest' } diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/build.gradle b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/build.gradle index 56f1bf53c32..445885de346 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/build.gradle +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.4/build.gradle @@ -18,8 +18,6 @@ muzzle { addTestSuiteForDir('latestDepTest', 'test') addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'test') -apply from: "$rootDir/gradle/configure_tests.gradle" - tasks.named("latestDepTest", Test) { finalizedBy 'latestDepForkedTest' } diff --git a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.5/build.gradle b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.5/build.gradle index e2fe7548b0d..fc5a94cf814 100644 --- a/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.5/build.gradle +++ b/dd-java-agent/instrumentation/vertx/vertx-web/vertx-web-3.5/build.gradle @@ -18,8 +18,6 @@ muzzle { addTestSuiteForDir('latestDepTest', 'test') addTestSuiteExtendingForDir('latestDepForkedTest', 'latestDepTest', 'test') -apply from: "$rootDir/gradle/configure_tests.gradle" - tasks.named("latestDepTest", Test) { finalizedBy 'latestDepForkedTest' } diff --git a/dd-java-agent/instrumentation/weaver/build.gradle b/dd-java-agent/instrumentation/weaver/build.gradle index f763985c7a8..fb392c43966 100644 --- a/dd-java-agent/instrumentation/weaver/build.gradle +++ b/dd-java-agent/instrumentation/weaver/build.gradle @@ -1,3 +1,5 @@ +ext.testingInstrumentation = true + apply from: "$rootDir/gradle/java.gradle" apply plugin: 'scala' diff --git a/gradle/configure_tests.gradle b/gradle/configure_tests.gradle deleted file mode 100644 index 2afd783cc8e..00000000000 --- a/gradle/configure_tests.gradle +++ /dev/null @@ -1,133 +0,0 @@ -import java.time.Duration -import java.time.temporal.ChronoUnit - -def isTestingInstrumentation(Project project) { - return [ - "junit-4.10", - "cucumber", - "cucumber-junit-4", - "junit-4.13", - "munit-junit-4", - "junit-5.3", - "junit-5.8", - "cucumber-junit-5", - "spock-junit-5", - "testng-6", - "testng-7", - "karate", - "scalatest", - "selenium", - "weaver" - ].contains(project.name) -} - -def forkedTestLimit = gradle.sharedServices.registerIfAbsent("forkedTestLimit", BuildService) { - maxParallelUsages = 3 -} - -testing { - suites.configureEach { - // Use JUnit 5 to run tests - useJUnitJupiter() - } -} - -// Go through the Test tasks and configure them -tasks.withType(Test).configureEach { - // Disable all tests if skipTests property was specified - onlyIf { !project.rootProject.hasProperty("skipTests") } - - // Enable force rerun of tests with -Prerun.tests.${project.name} - outputs.upToDateWhen { - !project.rootProject.hasProperty("rerun.tests.${project.name}") - } - - // Avoid executing classes used to test testing frameworks instrumentation - if (isTestingInstrumentation(project)) { - exclude("**/TestSucceed*") - exclude("**/TestFailed*") - exclude("**/TestFailedWithSuccessPercentage*") - exclude("**/TestError*") - exclude("**/TestSkipped*") - exclude("**/TestSkippedClass*") - exclude("**/TestInheritance*", "**/BaseTestInheritance*") - exclude("**/TestFactory*") - exclude("**/TestParameterized*") - exclude("**/TestRepeated*") - exclude("**/TestTemplate*") - exclude("**/TestDisableTestTrace*") - exclude("**/TestAssumption*", "**/TestSuiteSetUpAssumption*") - exclude("**/TestUnskippable*") - exclude("**/TestWithSetup*") - } - - // Split up tests that want to run forked in their own separate JVM for generated tasks - if (name.startsWith("forkedTest") || name.endsWith("ForkedTest")) { - setExcludes([]) - setIncludes(["**/*ForkedTest*"]) - forkEvery = 1 - // Limit the number of concurrent forked tests - usesService(forkedTestLimit) - onlyIf { !project.rootProject.hasProperty("skipForkedTests") } - } else { - exclude("**/*ForkedTest*") - } - - // Set test timeout for 20 minutes. Default job timeout is 1h (configured on CI level). - timeout = Duration.of(20, ChronoUnit.MINUTES) - - check.dependsOn(it) -} - -Task allTestsTask = tasks.maybeCreate('allTests') -Task allLatestDepTestsTask = tasks.maybeCreate('allLatestDepTests') -project.afterEvaluate { - tasks.withType(Test).each { - if (it.name.containsIgnoreCase('latest')) { - allLatestDepTestsTask.dependsOn it - } else if (it.name != 'traceAgentTest') { - allTestsTask.dependsOn it - } - } -} - -// Setup flaky tests jobs. Done in afterEvaluate so that it applies to latestDepTest. -project.afterEvaluate { - tasks.withType(Test).configureEach { - // Flaky tests management for JUnit 5 - testFramework { - if (it instanceof JUnitPlatformOptions) { - if (project.rootProject.hasProperty("skipFlakyTests")) { - excludeTags("flaky") - } else if (project.rootProject.hasProperty("runFlakyTests")) { - includeTags("flaky") - } - } - } - - // Flaky tests management for Spock - if (project.rootProject.hasProperty("skipFlakyTests")) { - jvmArgs += ["-Drun.flaky.tests=false"] - } else if (project.rootProject.hasProperty("runFlakyTests")) { - jvmArgs += ["-Drun.flaky.tests=true"] - } - } -} - -if (!project.property("activePartition")) { - project.afterEvaluate { - tasks.withType(Test).configureEach { - enabled = false - } - } -} - -tasks.withType(Test).configureEach { - // https://docs.gradle.com/develocity/flaky-test-detection/ - // https://docs.gradle.com/develocity/gradle-plugin/current/#test_retry - develocity.testRetry { - if (providers.environmentVariable("CI").isPresent()) { - maxRetries = 3 - } - } -} diff --git a/gradle/java_no_deps.gradle b/gradle/java_no_deps.gradle index 4a4e93f7667..27aea6968de 100644 --- a/gradle/java_no_deps.gradle +++ b/gradle/java_no_deps.gradle @@ -3,6 +3,7 @@ import java.nio.file.Paths import org.gradle.api.internal.provider.PropertyFactory import org.gradle.jvm.toolchain.internal.SpecificInstallationToolchainSpec +apply plugin: 'datadog.configure-tests' apply plugin: 'java-library' apply from: "$rootDir/gradle/codenarc.gradle" @@ -473,5 +474,3 @@ tasks.register('testJar', Jar) { from(sourceSets.test.output) archiveClassifier = 'test' } - -apply from: "$rootDir/gradle/configure_tests.gradle" diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index cc0abb6737b..2ccd16a647b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -37,6 +37,7 @@ cafe_crypto = "0.1.0" lz4 = "1.7.1" jmh = "1.37" jackson = "2.20.0" +develocity = "4.2.2" [libraries] slf4j = { module = "org.slf4j:slf4j-api", version.ref = "slf4j" } @@ -104,6 +105,8 @@ jmc-flightrecorder = { module = "org.openjdk.jmc:flightrecorder", version.ref = jackson-databind = {module = "com.fasterxml.jackson.core:jackson-databind", version.ref = "jackson"} +develocity = { module = "com.gradle:develocity-gradle-plugin", version.ref = "develocity" } + [bundles] asm = ["asm", "asmcommons"] cafe-crypto = ["cafe-crypto-curve25519", "cafe-crypto-ed25519"]