From 1a496d1fb8034bb8577c8d2c35dc773fa12d48a0 Mon Sep 17 00:00:00 2001 From: Brice Dutheil Date: Mon, 29 Jun 2026 11:31:50 +0200 Subject: [PATCH 1/2] fix(build): Enable coverge when asked for it --- .../TestJvmConstraintsPlugin.kt | 8 ++++++-- .../TestJvmConstraintsUtils.kt | 5 +++++ .../TestJvmConstraintsPluginTest.kt | 19 +++++++++++++++++++ 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPlugin.kt b/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPlugin.kt index e6465064015..972edb4096e 100644 --- a/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPlugin.kt +++ b/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPlugin.kt @@ -47,8 +47,12 @@ class TestJvmConstraintsPlugin : Plugin { project.tasks.withType().configureEach { // Disable jacoco for additional 'testJvm' tests to speed things up a bit if (testJvmSpec.javaTestLauncher.isPresent) { - extensions.configure { - isEnabled = false + val taskExtension = extensions.getByName(TEST_JVM_CONSTRAINTS) as TestJvmConstraintsExtension + val checkCoverage = project.rootProject.providers.gradleProperty("checkCoverage").isPresent + if (taskExtension.shouldDisableJacocoForAdditionalJvm(checkCoverage)) { + extensions.configure { + isEnabled = false + } } } } diff --git a/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsUtils.kt b/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsUtils.kt index efdc3662f6d..8d2a29a2dc5 100644 --- a/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsUtils.kt +++ b/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsUtils.kt @@ -32,6 +32,11 @@ internal fun TestJvmConstraintsExtension.isTestJvmAllowed(testJvmSpec: TestJvmSp return true } +internal fun TestJvmConstraintsExtension.shouldDisableJacocoForAdditionalJvm( + checkCoverage: Boolean +): Boolean = + !checkCoverage + /** * When [TestJvmConstraintsExtension.nativeImageCapable] is `true`, verify the chosen test * launcher ships the `native-image` tool. The actual binary lives under `lib/svm/bin/` on diff --git a/buildSrc/src/test/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPluginTest.kt b/buildSrc/src/test/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPluginTest.kt index aa05e0ef01d..45fceaaac08 100644 --- a/buildSrc/src/test/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPluginTest.kt +++ b/buildSrc/src/test/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPluginTest.kt @@ -19,4 +19,23 @@ class TestJvmConstraintsPluginTest { assertThat(project.extensions.findByName(TEST_JVM_CONSTRAINTS)).isInstanceOf(TestJvmConstraintsExtension::class.java) assertThat(testTask.extensions.findByName(TEST_JVM_CONSTRAINTS)).isInstanceOf(TestJvmConstraintsExtension::class.java) } + + @Test + fun `jacoco remains enabled for additional test jvm when coverage is checked`() { + val extension = testJvmConstraintsExtension() + + assertThat(extension.shouldDisableJacocoForAdditionalJvm(true)).isFalse() + } + + @Test + fun `jacoco is disabled for additional test jvm when coverage is not checked`() { + val extension = testJvmConstraintsExtension() + + assertThat(extension.shouldDisableJacocoForAdditionalJvm(false)).isTrue() + } + + private fun testJvmConstraintsExtension(): TestJvmConstraintsExtension { + val project = ProjectBuilder.builder().build() + return project.objects.newInstance(TestJvmConstraintsExtension::class.java) + } } From be38e1de691e90355809305979bf621f6d11c006 Mon Sep 17 00:00:00 2001 From: Brice Dutheil Date: Mon, 29 Jun 2026 11:45:05 +0200 Subject: [PATCH 2/2] fix(build): Also, enable coverage if testJvm is the same as daemon JDK --- .../TestJvmConstraintsPlugin.kt | 26 ++++++----- .../TestJvmConstraintsUtils.kt | 5 --- .../TestJvmConstraintsPluginTest.kt | 44 ++++++++++++++++--- 3 files changed, 53 insertions(+), 22 deletions(-) diff --git a/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPlugin.kt b/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPlugin.kt index 972edb4096e..02d1c0d0a9a 100644 --- a/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPlugin.kt +++ b/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPlugin.kt @@ -45,16 +45,10 @@ class TestJvmConstraintsPlugin : Plugin { // Jacoco plugin is not applied on every project project.pluginManager.withPlugin("org.gradle.jacoco") { project.tasks.withType().configureEach { - // Disable jacoco for additional 'testJvm' tests to speed things up a bit - if (testJvmSpec.javaTestLauncher.isPresent) { - val taskExtension = extensions.getByName(TEST_JVM_CONSTRAINTS) as TestJvmConstraintsExtension - val checkCoverage = project.rootProject.providers.gradleProperty("checkCoverage").isPresent - if (taskExtension.shouldDisableJacocoForAdditionalJvm(checkCoverage)) { - extensions.configure { - isEnabled = false - } - } - } + configureJacocoForAdditionalTestJvm( + testJvmSpec.javaTestLauncher.isPresent, + project.rootProject.providers.gradleProperty("checkCoverage").isPresent + ) } } } @@ -157,3 +151,15 @@ class TestJvmConstraintsPlugin : Plugin { taskExtension.nativeImageCapable.convention(projectExtension.nativeImageCapable) } } + +internal fun Test.configureJacocoForAdditionalTestJvm( + hasAdditionalTestJvmLauncher: Boolean, + checkCoverage: Boolean +) { + // Disable jacoco for additional 'testJvm' tests unless coverage was explicitly requested. + if (hasAdditionalTestJvmLauncher && !checkCoverage) { + extensions.configure { + isEnabled = false + } + } +} diff --git a/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsUtils.kt b/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsUtils.kt index 8d2a29a2dc5..efdc3662f6d 100644 --- a/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsUtils.kt +++ b/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsUtils.kt @@ -32,11 +32,6 @@ internal fun TestJvmConstraintsExtension.isTestJvmAllowed(testJvmSpec: TestJvmSp return true } -internal fun TestJvmConstraintsExtension.shouldDisableJacocoForAdditionalJvm( - checkCoverage: Boolean -): Boolean = - !checkCoverage - /** * When [TestJvmConstraintsExtension.nativeImageCapable] is `true`, verify the chosen test * launcher ships the `native-image` tool. The actual binary lives under `lib/svm/bin/` on diff --git a/buildSrc/src/test/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPluginTest.kt b/buildSrc/src/test/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPluginTest.kt index 45fceaaac08..438da18f92b 100644 --- a/buildSrc/src/test/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPluginTest.kt +++ b/buildSrc/src/test/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPluginTest.kt @@ -4,6 +4,7 @@ import datadog.gradle.plugin.testJvmConstraints.TestJvmConstraintsExtension.Comp import org.assertj.core.api.Assertions.assertThat import org.gradle.api.tasks.testing.Test as GradleTest import org.gradle.testfixtures.ProjectBuilder +import org.gradle.testing.jacoco.plugins.JacocoTaskExtension import org.junit.jupiter.api.Test class TestJvmConstraintsPluginTest { @@ -20,22 +21,51 @@ class TestJvmConstraintsPluginTest { assertThat(testTask.extensions.findByName(TEST_JVM_CONSTRAINTS)).isInstanceOf(TestJvmConstraintsExtension::class.java) } + @Test + fun `jacoco is disabled for additional test jvm when coverage is not checked`() { + val testTask = testTaskWithJacoco() + + testTask.configureJacocoForAdditionalTestJvm( + hasAdditionalTestJvmLauncher = true, + checkCoverage = false + ) + + assertThat(jacocoExtension(testTask).isEnabled).isFalse() + } + @Test fun `jacoco remains enabled for additional test jvm when coverage is checked`() { - val extension = testJvmConstraintsExtension() + val testTask = testTaskWithJacoco() - assertThat(extension.shouldDisableJacocoForAdditionalJvm(true)).isFalse() + testTask.configureJacocoForAdditionalTestJvm( + hasAdditionalTestJvmLauncher = true, + checkCoverage = true + ) + + assertThat(jacocoExtension(testTask).isEnabled).isTrue() } @Test - fun `jacoco is disabled for additional test jvm when coverage is not checked`() { - val extension = testJvmConstraintsExtension() + fun `jacoco remains enabled when using the daemon jvm`() { + val testTask = testTaskWithJacoco() + + testTask.configureJacocoForAdditionalTestJvm( + hasAdditionalTestJvmLauncher = false, + checkCoverage = false + ) - assertThat(extension.shouldDisableJacocoForAdditionalJvm(false)).isTrue() + assertThat(jacocoExtension(testTask).isEnabled).isTrue() } - private fun testJvmConstraintsExtension(): TestJvmConstraintsExtension { + private fun testTaskWithJacoco(): GradleTest { val project = ProjectBuilder.builder().build() - return project.objects.newInstance(TestJvmConstraintsExtension::class.java) + + project.pluginManager.apply("java") + project.pluginManager.apply("jacoco") + + return project.tasks.named("test", GradleTest::class.java).get() } + + private fun jacocoExtension(testTask: GradleTest): JacocoTaskExtension = + testTask.extensions.getByType(JacocoTaskExtension::class.java) }