From d136324b993db016b23c40ae7ea680f00f790cef Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 1 Oct 2020 14:13:14 +0100 Subject: [PATCH] Add support for testing the Gradle plugin with --configuration-cache See gh-22922 --- .../gradle/junit/GradleCompatibility.java | 7 ++++ .../junit/GradleCompatibilityExtension.java | 35 ++++++++++++++----- .../boot/gradle/testkit/GradleBuild.java | 10 ++++++ 3 files changed, 44 insertions(+), 8 deletions(-) diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleCompatibility.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleCompatibility.java index 28cc5b7067..73fe2698f0 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleCompatibility.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleCompatibility.java @@ -41,4 +41,11 @@ import org.springframework.boot.gradle.testkit.GradleBuild; @ExtendWith(GradleCompatibilityExtension.class) public @interface GradleCompatibility { + /** + * Whether to include running Gradle with {@code --cache-configuration} cache in the + * compatibility matrix. + * @return {@code true} to enable the configuration cache, {@code false} otherwise + */ + boolean configurationCache() default false; + } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleCompatibilityExtension.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleCompatibilityExtension.java index e492e6b43e..91950952c6 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleCompatibilityExtension.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleCompatibilityExtension.java @@ -16,16 +16,19 @@ package org.springframework.boot.gradle.junit; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Stream; import org.gradle.api.JavaVersion; +import org.gradle.util.GradleVersion; import org.junit.jupiter.api.TestTemplate; import org.junit.jupiter.api.extension.Extension; import org.junit.jupiter.api.extension.ExtensionContext; import org.junit.jupiter.api.extension.TestTemplateInvocationContext; import org.junit.jupiter.api.extension.TestTemplateInvocationContextProvider; +import org.junit.platform.commons.util.AnnotationUtils; import org.springframework.boot.gradle.testkit.GradleBuild; import org.springframework.boot.gradle.testkit.GradleBuildExtension; @@ -45,16 +48,29 @@ final class GradleCompatibilityExtension implements TestTemplateInvocationContex JavaVersion javaVersion = JavaVersion.current(); if (javaVersion.isCompatibleWith(JavaVersion.VERSION_14) || javaVersion.isCompatibleWith(JavaVersion.VERSION_13)) { - GRADLE_VERSIONS = Arrays.asList("6.3", "6.4.1", "6.5.1", "6.6.1", "default"); + GRADLE_VERSIONS = Arrays.asList("6.3", "6.4.1", "6.5.1", "6.6.1", "current"); } else { - GRADLE_VERSIONS = Arrays.asList("5.6.4", "6.3", "6.4.1", "6.5.1", "6.6.1", "default"); + GRADLE_VERSIONS = Arrays.asList("5.6.4", "6.3", "6.4.1", "6.5.1", "6.6.1", "current"); } } @Override public Stream provideTestTemplateInvocationContexts(ExtensionContext context) { - return GRADLE_VERSIONS.stream().map(GradleVersionTestTemplateInvocationContext::new); + return GRADLE_VERSIONS.stream().flatMap((version) -> { + if (version.equals("current")) { + version = GradleVersion.current().getVersion(); + } + List invocationContexts = new ArrayList<>(); + invocationContexts.add(new GradleVersionTestTemplateInvocationContext(version, false)); + boolean configurationCache = AnnotationUtils + .findAnnotation(context.getRequiredTestClass(), GradleCompatibility.class).get() + .configurationCache(); + if (configurationCache && GradleVersion.version(version).compareTo(GradleVersion.version("6.6")) >= 0) { + invocationContexts.add(new GradleVersionTestTemplateInvocationContext(version, true)); + } + return invocationContexts.stream(); + }); } @Override @@ -66,20 +82,23 @@ final class GradleCompatibilityExtension implements TestTemplateInvocationContex private final String gradleVersion; - GradleVersionTestTemplateInvocationContext(String gradleVersion) { + private final boolean configurationCache; + + GradleVersionTestTemplateInvocationContext(String gradleVersion, boolean configurationCache) { this.gradleVersion = gradleVersion; + this.configurationCache = configurationCache; } @Override public String getDisplayName(int invocationIndex) { - return "Gradle " + this.gradleVersion; + return "Gradle " + this.gradleVersion + ((this.configurationCache) ? " --configuration-cache" : ""); } @Override public List getAdditionalExtensions() { - GradleBuild gradleBuild = new GradleBuild(); - if (!this.gradleVersion.equals("default")) { - gradleBuild.gradleVersion(this.gradleVersion); + GradleBuild gradleBuild = new GradleBuild().gradleVersion(this.gradleVersion); + if (this.configurationCache) { + gradleBuild.configurationCache(); } return Arrays.asList(new GradleBuildFieldSetter(gradleBuild), new GradleBuildExtension()); } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/testkit/GradleBuild.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/testkit/GradleBuild.java index 41522140ac..1f9a3da743 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/testkit/GradleBuild.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/testkit/GradleBuild.java @@ -72,6 +72,8 @@ public class GradleBuild { private GradleVersion expectDeprecationWarnings; + private boolean configurationCache = false; + public GradleBuild() { this(Dsl.GROOVY); } @@ -124,6 +126,11 @@ public class GradleBuild { return this; } + public GradleBuild configurationCache() { + this.configurationCache = true; + return this; + } + public BuildResult build(String... arguments) { try { BuildResult result = prepareRunner(arguments).build(); @@ -169,6 +176,9 @@ public class GradleBuild { allArguments.addAll(Arrays.asList(arguments)); allArguments.add("--warning-mode"); allArguments.add("all"); + if (this.configurationCache) { + allArguments.add("--configuration-cache"); + } return gradleRunner.withArguments(allArguments); }