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 82fb3d1b1b9..3ec23afb510 100644 --- a/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPlugin.kt +++ b/buildSrc/src/main/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPlugin.kt @@ -139,38 +139,16 @@ class TestJvmConstraintsPlugin : Plugin { ) } - /** - * Configures the convention, this tells Gradle where to look for values. - * - * Currently, the extension is still configured to look at project's _extra_ properties. - */ - private fun Test.configureConventions( + private fun configureConventions( taskExtension: TestJvmConstraintsExtension, projectExtension: TestJvmConstraintsExtension ) { - taskExtension.minJavaVersion.convention(projectExtension.minJavaVersion - .orElse(project.providers.provider { project.findProperty("${name}MinJavaVersionForTests") as? JavaVersion }) - .orElse(project.providers.provider { project.findProperty("minJavaVersion") as? JavaVersion }) - ) - taskExtension.maxJavaVersion.convention(projectExtension.maxJavaVersion - .orElse(project.providers.provider { project.findProperty("${name}MaxJavaVersionForTests") as? JavaVersion }) - .orElse(project.providers.provider { project.findProperty("maxJavaVersion") as? JavaVersion }) - ) - taskExtension.forceJdk.convention(projectExtension.forceJdk - .orElse(project.providers.provider { - @Suppress("UNCHECKED_CAST") - project.findProperty("forceJdk") as? List ?: emptyList() - }) - ) - taskExtension.excludeJdk.convention(projectExtension.excludeJdk - .orElse(project.providers.provider { - @Suppress("UNCHECKED_CAST") - project.findProperty("excludeJdk") as? List ?: emptyList() - }) - ) - taskExtension.allowReflectiveAccessToJdk.convention(projectExtension.allowReflectiveAccessToJdk - .orElse(project.providers.provider { project.findProperty("allowReflectiveAccessToJdk") as? Boolean }) - ) + taskExtension.minJavaVersion.convention(projectExtension.minJavaVersion) + taskExtension.maxJavaVersion.convention(projectExtension.maxJavaVersion) + taskExtension.forceJdk.convention(projectExtension.forceJdk) + taskExtension.includeJdk.convention(projectExtension.includeJdk) + taskExtension.excludeJdk.convention(projectExtension.excludeJdk) + taskExtension.allowReflectiveAccessToJdk.convention(projectExtension.allowReflectiveAccessToJdk) taskExtension.nativeImageCapable.convention(projectExtension.nativeImageCapable) } } 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 f90b1fd28e5..3bf9b903257 100644 --- a/buildSrc/src/test/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPluginTest.kt +++ b/buildSrc/src/test/kotlin/datadog/gradle/plugin/testJvmConstraints/TestJvmConstraintsPluginTest.kt @@ -144,6 +144,49 @@ class TestJvmConstraintsPluginTest { } } + @Test + fun `project includeJdk controls test task eligibility`() { + val testJvm = JavaVersion.current().majorVersion + withTestJvm(testJvm) { + val project = ProjectBuilder.builder().build() + project.pluginManager.apply("dd-trace-java.test-jvm-constraints") + val projectExtension = project.extensions.getByType(TestJvmConstraintsExtension::class.java) + projectExtension.includeJdk.set(listOf(testJvm)) + + val testTask = project.tasks.named("test", GradleTest::class.java).get() + + assertThat(testTask.onlyIf.isSatisfiedBy(testTask)).isTrue() + + projectExtension.includeJdk.set(listOf("ORACLE8")) + + assertThat(testTask.onlyIf.isSatisfiedBy(testTask)).isFalse() + } + } + + @Test + fun `task includeJdk overrides project inclusion`() { + val testJvm = JavaVersion.current().majorVersion + withTestJvm(testJvm) { + val project = ProjectBuilder.builder().build() + project.pluginManager.apply("dd-trace-java.test-jvm-constraints") + project.extensions.getByType(TestJvmConstraintsExtension::class.java).includeJdk.set(listOf("ORACLE8")) + val testTask = project.tasks.named("test", GradleTest::class.java).get() + val taskExtension = testTask.extensions.getByType(TestJvmConstraintsExtension::class.java) + + taskExtension.includeJdk.set(listOf(testJvm)) + + assertThat(testTask.onlyIf.isSatisfiedBy(testTask)).isTrue() + + taskExtension.includeJdk.set(listOf("ZULU8")) + + assertThat(testTask.onlyIf.isSatisfiedBy(testTask)).isFalse() + + taskExtension.includeJdk.set(emptyList()) + + assertThat(testTask.onlyIf.isSatisfiedBy(testTask)).isTrue() + } + } + @Test fun `jacoco is disabled for additional test jvm when coverage is not checked`() { val testTask = testTaskWithJacoco() diff --git a/dd-java-agent/agent-debugger/build.gradle b/dd-java-agent/agent-debugger/build.gradle index a4de7c2a0cf..4bfa146df93 100644 --- a/dd-java-agent/agent-debugger/build.gradle +++ b/dd-java-agent/agent-debugger/build.gradle @@ -100,4 +100,6 @@ tasks.named("jar", Jar) { } // we want to test with no special reflective access (no --add-opens) -ext.allowReflectiveAccessToJdk = false +testJvmConstraints { + allowReflectiveAccessToJdk = false +} diff --git a/dd-java-agent/agent-debugger/debugger-bootstrap/build.gradle b/dd-java-agent/agent-debugger/debugger-bootstrap/build.gradle index 36a578f59bd..0531d0a9b39 100644 --- a/dd-java-agent/agent-debugger/debugger-bootstrap/build.gradle +++ b/dd-java-agent/agent-debugger/debugger-bootstrap/build.gradle @@ -3,6 +3,10 @@ plugins { id 'dd-trace-java.module.bootstrap-component' } +testJvmConstraints { + allowReflectiveAccessToJdk = false +} + // Most of the classes are just object model // Those which needs test coverage, test classes are in agent-debugger project // to avoid pull dependencies diff --git a/dd-java-agent/instrumentation/java/java-io-1.8/build.gradle b/dd-java-agent/instrumentation/java/java-io-1.8/build.gradle index acaa3054fb0..cd7e9be4cf5 100644 --- a/dd-java-agent/instrumentation/java/java-io-1.8/build.gradle +++ b/dd-java-agent/instrumentation/java/java-io-1.8/build.gradle @@ -12,8 +12,11 @@ muzzle { addTestSuiteForDir('latestDepTest', 'test') addTestSuiteForDir('java11Test', 'java11Test') -// java11Test only runs on JDK 11+; the testJvmConstraints plugin reads this property by convention -ext.java11TestMinJavaVersionForTests = JavaVersion.VERSION_11 +tasks.named("java11Test", Test) { + testJvmConstraints { + minJavaVersion = JavaVersion.VERSION_11 + } +} tasks.named("compileJava11TestJava", JavaCompile) { configureCompiler(it, JavaVersion.VERSION_11)