Browse Source

Use build instead of temp dir for Gradle TestKit directories

Closes gh-46479
pull/46604/head
Andy Wilkinson 5 months ago
parent
commit
3e6e64ec49
  1. 19
      spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleCompatibilityExtension.java
  2. 11
      spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleMultiDslExtension.java
  3. 3
      spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests.java
  4. 9
      spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/testkit/PluginClasspathGradleBuild.java
  5. 2
      spring-boot-project/spring-boot-tools/spring-boot-gradle-test-support/build.gradle
  6. 16
      spring-boot-project/spring-boot-tools/spring-boot-gradle-test-support/src/main/java/org/springframework/boot/testsupport/gradle/testkit/GradleBuild.java
  7. 12
      spring-boot-system-tests/spring-boot-image-tests/src/systemTest/java/org/springframework/boot/image/junit/GradleBuildInjectionExtension.java

19
spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleCompatibilityExtension.java

@ -32,6 +32,7 @@ import org.junit.jupiter.api.extension.TestTemplateInvocationContextProvider; @@ -32,6 +32,7 @@ import org.junit.jupiter.api.extension.TestTemplateInvocationContextProvider;
import org.junit.platform.commons.util.AnnotationUtils;
import org.springframework.boot.gradle.testkit.PluginClasspathGradleBuild;
import org.springframework.boot.testsupport.BuildOutput;
import org.springframework.boot.testsupport.gradle.testkit.GradleBuild;
import org.springframework.boot.testsupport.gradle.testkit.GradleBuildExtension;
import org.springframework.boot.testsupport.gradle.testkit.GradleVersions;
@ -54,8 +55,8 @@ final class GradleCompatibilityExtension implements TestTemplateInvocationContex @@ -54,8 +55,8 @@ final class GradleCompatibilityExtension implements TestTemplateInvocationContex
.map(GradleVersion::version)
.collect(Collectors.toCollection(TreeSet::new))
.last();
GradleCompatibility gradleCompatibility = AnnotationUtils
.findAnnotation(context.getRequiredTestClass(), GradleCompatibility.class)
Class<?> testClass = context.getRequiredTestClass();
GradleCompatibility gradleCompatibility = AnnotationUtils.findAnnotation(testClass, GradleCompatibility.class)
.get();
Stream<String> gradleVersions = GRADLE_VERSIONS.stream();
if (StringUtils.hasText(gradleCompatibility.versionsLessThan())) {
@ -65,10 +66,11 @@ final class GradleCompatibilityExtension implements TestTemplateInvocationContex @@ -65,10 +66,11 @@ final class GradleCompatibilityExtension implements TestTemplateInvocationContex
}
return gradleVersions.flatMap((version) -> {
List<TestTemplateInvocationContext> invocationContexts = new ArrayList<>();
invocationContexts.add(new GradleVersionTestTemplateInvocationContext(version, false));
BuildOutput buildOutput = new BuildOutput(testClass);
invocationContexts.add(new GradleVersionTestTemplateInvocationContext(version, false, buildOutput));
boolean configurationCache = gradleCompatibility.configurationCache();
if (configurationCache && GradleVersion.version(version).equals(highestVersion)) {
invocationContexts.add(new GradleVersionTestTemplateInvocationContext(version, true));
invocationContexts.add(new GradleVersionTestTemplateInvocationContext(version, true, buildOutput));
}
return invocationContexts.stream();
});
@ -81,11 +83,15 @@ final class GradleCompatibilityExtension implements TestTemplateInvocationContex @@ -81,11 +83,15 @@ final class GradleCompatibilityExtension implements TestTemplateInvocationContex
private static final class GradleVersionTestTemplateInvocationContext implements TestTemplateInvocationContext {
private final BuildOutput buildOutput;
private final String gradleVersion;
private final boolean configurationCache;
GradleVersionTestTemplateInvocationContext(String gradleVersion, boolean configurationCache) {
GradleVersionTestTemplateInvocationContext(String gradleVersion, boolean configurationCache,
BuildOutput buildOutput) {
this.buildOutput = buildOutput;
this.gradleVersion = gradleVersion;
this.configurationCache = configurationCache;
}
@ -97,7 +103,8 @@ final class GradleCompatibilityExtension implements TestTemplateInvocationContex @@ -97,7 +103,8 @@ final class GradleCompatibilityExtension implements TestTemplateInvocationContex
@Override
public List<Extension> getAdditionalExtensions() {
GradleBuild gradleBuild = new PluginClasspathGradleBuild().gradleVersion(this.gradleVersion);
GradleBuild gradleBuild = new PluginClasspathGradleBuild(this.buildOutput)
.gradleVersion(this.gradleVersion);
if (this.configurationCache) {
gradleBuild.configurationCache();
}

11
spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/junit/GradleMultiDslExtension.java

@ -27,6 +27,7 @@ import org.junit.jupiter.api.extension.TestTemplateInvocationContext; @@ -27,6 +27,7 @@ import org.junit.jupiter.api.extension.TestTemplateInvocationContext;
import org.junit.jupiter.api.extension.TestTemplateInvocationContextProvider;
import org.springframework.boot.gradle.testkit.PluginClasspathGradleBuild;
import org.springframework.boot.testsupport.BuildOutput;
import org.springframework.boot.testsupport.gradle.testkit.Dsl;
import org.springframework.boot.testsupport.gradle.testkit.GradleBuild;
import org.springframework.boot.testsupport.gradle.testkit.GradleBuildExtension;
@ -43,7 +44,8 @@ public class GradleMultiDslExtension implements TestTemplateInvocationContextPro @@ -43,7 +44,8 @@ public class GradleMultiDslExtension implements TestTemplateInvocationContextPro
@Override
public Stream<TestTemplateInvocationContext> provideTestTemplateInvocationContexts(ExtensionContext context) {
return Stream.of(Dsl.values()).map(DslTestTemplateInvocationContext::new);
BuildOutput buildOutput = new BuildOutput(context.getRequiredTestClass());
return Stream.of(Dsl.values()).map((dsl) -> new DslTestTemplateInvocationContext(buildOutput, dsl));
}
@Override
@ -53,15 +55,18 @@ public class GradleMultiDslExtension implements TestTemplateInvocationContextPro @@ -53,15 +55,18 @@ public class GradleMultiDslExtension implements TestTemplateInvocationContextPro
private static final class DslTestTemplateInvocationContext implements TestTemplateInvocationContext {
private final BuildOutput buildOutput;
private final Dsl dsl;
DslTestTemplateInvocationContext(Dsl dsl) {
DslTestTemplateInvocationContext(BuildOutput buildOutput, Dsl dsl) {
this.buildOutput = buildOutput;
this.dsl = dsl;
}
@Override
public List<Extension> getAdditionalExtensions() {
GradleBuild gradleBuild = new PluginClasspathGradleBuild(this.dsl)
GradleBuild gradleBuild = new PluginClasspathGradleBuild(this.buildOutput, this.dsl)
.gradleVersion(GradleVersions.minimumCompatible());
return Arrays.asList(new GradleBuildFieldSetter(gradleBuild), new GradleBuildExtension());
}

3
spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/plugin/KotlinPluginActionIntegrationTests.java

@ -30,6 +30,7 @@ import org.junit.jupiter.api.condition.JRE; @@ -30,6 +30,7 @@ import org.junit.jupiter.api.condition.JRE;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.boot.gradle.testkit.PluginClasspathGradleBuild;
import org.springframework.boot.testsupport.BuildOutput;
import org.springframework.boot.testsupport.gradle.testkit.GradleBuild;
import org.springframework.boot.testsupport.gradle.testkit.GradleBuildExtension;
@ -44,7 +45,7 @@ import static org.assertj.core.api.Assertions.assertThat; @@ -44,7 +45,7 @@ import static org.assertj.core.api.Assertions.assertThat;
@ExtendWith(GradleBuildExtension.class)
class KotlinPluginActionIntegrationTests {
GradleBuild gradleBuild = new PluginClasspathGradleBuild();
GradleBuild gradleBuild = new PluginClasspathGradleBuild(new BuildOutput(getClass()));
@Test
void noKotlinVersionPropertyWithoutKotlinPlugin() {

9
spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/testkit/PluginClasspathGradleBuild.java

@ -43,6 +43,7 @@ import org.tomlj.Toml; @@ -43,6 +43,7 @@ import org.tomlj.Toml;
import org.springframework.asm.ClassVisitor;
import org.springframework.boot.buildpack.platform.build.BuildRequest;
import org.springframework.boot.loader.tools.LaunchScript;
import org.springframework.boot.testsupport.BuildOutput;
import org.springframework.boot.testsupport.gradle.testkit.Dsl;
import org.springframework.boot.testsupport.gradle.testkit.GradleBuild;
@ -55,12 +56,12 @@ import org.springframework.boot.testsupport.gradle.testkit.GradleBuild; @@ -55,12 +56,12 @@ import org.springframework.boot.testsupport.gradle.testkit.GradleBuild;
*/
public class PluginClasspathGradleBuild extends GradleBuild {
public PluginClasspathGradleBuild() {
super();
public PluginClasspathGradleBuild(BuildOutput buildOutput) {
super(buildOutput);
}
public PluginClasspathGradleBuild(Dsl dsl) {
super(dsl);
public PluginClasspathGradleBuild(BuildOutput buildOutput, Dsl dsl) {
super(buildOutput, dsl);
}
@Override

2
spring-boot-project/spring-boot-tools/spring-boot-gradle-test-support/build.gradle

@ -21,6 +21,8 @@ plugins { @@ -21,6 +21,8 @@ plugins {
description = "Spring Boot Gradle Testing Support"
dependencies {
api(project(":spring-boot-project:spring-boot-tools:spring-boot-test-support"))
compileOnly("org.junit.jupiter:junit-jupiter")
implementation(gradleTestKit())

16
spring-boot-project/spring-boot-tools/spring-boot-gradle-test-support/src/main/java/org/springframework/boot/testsupport/gradle/testkit/GradleBuild.java

@ -37,6 +37,7 @@ import org.gradle.testkit.runner.BuildResult; @@ -37,6 +37,7 @@ import org.gradle.testkit.runner.BuildResult;
import org.gradle.testkit.runner.GradleRunner;
import org.gradle.util.GradleVersion;
import org.springframework.boot.testsupport.BuildOutput;
import org.springframework.util.FileCopyUtils;
import org.springframework.util.FileSystemUtils;
@ -51,6 +52,8 @@ import static org.assertj.core.api.Assertions.fail; @@ -51,6 +52,8 @@ import static org.assertj.core.api.Assertions.fail;
*/
public class GradleBuild {
private final BuildOutput buildOutput;
private final Dsl dsl;
private File projectDir;
@ -71,11 +74,12 @@ public class GradleBuild { @@ -71,11 +74,12 @@ public class GradleBuild {
private final Map<String, String> scriptProperties = new HashMap<>();
public GradleBuild() {
this(Dsl.GROOVY);
public GradleBuild(BuildOutput buildOutput) {
this(buildOutput, Dsl.GROOVY);
}
protected GradleBuild(Dsl dsl) {
protected GradleBuild(BuildOutput buildOutput, Dsl dsl) {
this.buildOutput = buildOutput;
this.dsl = dsl;
}
@ -202,10 +206,10 @@ public class GradleBuild { @@ -202,10 +206,10 @@ public class GradleBuild {
}
private File getTestKitDir() {
File temp = new File(System.getProperty("java.io.tmpdir"));
String username = System.getProperty("user.name");
File build = this.buildOutput.getRootLocation();
File testKitRoot = new File(build, "gradle-test-kit");
String gradleVersion = (this.gradleVersion != null) ? this.gradleVersion : "default";
return new File(temp, ".gradle-test-kit-" + username + "-" + getBootVersion() + "-" + gradleVersion);
return new File(testKitRoot, gradleVersion).getAbsoluteFile();
}
public File getProjectDir() {

12
spring-boot-system-tests/spring-boot-image-tests/src/systemTest/java/org/springframework/boot/image/junit/GradleBuildInjectionExtension.java

@ -21,6 +21,7 @@ import java.lang.reflect.Field; @@ -21,6 +21,7 @@ import java.lang.reflect.Field;
import org.junit.jupiter.api.extension.BeforeEachCallback;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.springframework.boot.testsupport.BuildOutput;
import org.springframework.boot.testsupport.gradle.testkit.GradleBuild;
import org.springframework.boot.testsupport.gradle.testkit.GradleVersions;
import org.springframework.util.Assert;
@ -34,21 +35,22 @@ import org.springframework.util.ReflectionUtils; @@ -34,21 +35,22 @@ import org.springframework.util.ReflectionUtils;
*/
public class GradleBuildInjectionExtension implements BeforeEachCallback {
private final GradleBuild gradleBuild;
private final String bootVersion;
GradleBuildInjectionExtension() {
this.gradleBuild = new GradleBuild();
this.gradleBuild.gradleVersion(GradleVersions.minimumCompatible());
String bootVersion = System.getProperty("springBootVersion");
Assert.notNull(bootVersion, "Property 'springBootVersion' must be set in build environment");
this.gradleBuild.bootVersion(bootVersion);
this.bootVersion = bootVersion;
}
@Override
public void beforeEach(ExtensionContext context) throws Exception {
GradleBuild gradleBuild = new GradleBuild(new BuildOutput(context.getRequiredTestClass()))
.gradleVersion(GradleVersions.minimumCompatible())
.bootVersion(this.bootVersion);
Field field = ReflectionUtils.findField(context.getRequiredTestClass(), "gradleBuild");
field.setAccessible(true);
field.set(context.getRequiredTestInstance(), this.gradleBuild);
field.set(context.getRequiredTestInstance(), gradleBuild);
}
}

Loading…
Cancel
Save