Skip to content

Commit 3e6e64e

Browse files
committed
Use build instead of temp dir for Gradle TestKit directories
Closes gh-46479
1 parent a8172e2 commit 3e6e64e

File tree

7 files changed

+47
-25
lines changed

7 files changed

+47
-25
lines changed

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

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.junit.platform.commons.util.AnnotationUtils;
3333

3434
import org.springframework.boot.gradle.testkit.PluginClasspathGradleBuild;
35+
import org.springframework.boot.testsupport.BuildOutput;
3536
import org.springframework.boot.testsupport.gradle.testkit.GradleBuild;
3637
import org.springframework.boot.testsupport.gradle.testkit.GradleBuildExtension;
3738
import org.springframework.boot.testsupport.gradle.testkit.GradleVersions;
@@ -54,8 +55,8 @@ public Stream<TestTemplateInvocationContext> provideTestTemplateInvocationContex
5455
.map(GradleVersion::version)
5556
.collect(Collectors.toCollection(TreeSet::new))
5657
.last();
57-
GradleCompatibility gradleCompatibility = AnnotationUtils
58-
.findAnnotation(context.getRequiredTestClass(), GradleCompatibility.class)
58+
Class<?> testClass = context.getRequiredTestClass();
59+
GradleCompatibility gradleCompatibility = AnnotationUtils.findAnnotation(testClass, GradleCompatibility.class)
5960
.get();
6061
Stream<String> gradleVersions = GRADLE_VERSIONS.stream();
6162
if (StringUtils.hasText(gradleCompatibility.versionsLessThan())) {
@@ -65,10 +66,11 @@ public Stream<TestTemplateInvocationContext> provideTestTemplateInvocationContex
6566
}
6667
return gradleVersions.flatMap((version) -> {
6768
List<TestTemplateInvocationContext> invocationContexts = new ArrayList<>();
68-
invocationContexts.add(new GradleVersionTestTemplateInvocationContext(version, false));
69+
BuildOutput buildOutput = new BuildOutput(testClass);
70+
invocationContexts.add(new GradleVersionTestTemplateInvocationContext(version, false, buildOutput));
6971
boolean configurationCache = gradleCompatibility.configurationCache();
7072
if (configurationCache && GradleVersion.version(version).equals(highestVersion)) {
71-
invocationContexts.add(new GradleVersionTestTemplateInvocationContext(version, true));
73+
invocationContexts.add(new GradleVersionTestTemplateInvocationContext(version, true, buildOutput));
7274
}
7375
return invocationContexts.stream();
7476
});
@@ -81,11 +83,15 @@ public boolean supportsTestTemplate(ExtensionContext context) {
8183

8284
private static final class GradleVersionTestTemplateInvocationContext implements TestTemplateInvocationContext {
8385

86+
private final BuildOutput buildOutput;
87+
8488
private final String gradleVersion;
8589

8690
private final boolean configurationCache;
8791

88-
GradleVersionTestTemplateInvocationContext(String gradleVersion, boolean configurationCache) {
92+
GradleVersionTestTemplateInvocationContext(String gradleVersion, boolean configurationCache,
93+
BuildOutput buildOutput) {
94+
this.buildOutput = buildOutput;
8995
this.gradleVersion = gradleVersion;
9096
this.configurationCache = configurationCache;
9197
}
@@ -97,7 +103,8 @@ public String getDisplayName(int invocationIndex) {
97103

98104
@Override
99105
public List<Extension> getAdditionalExtensions() {
100-
GradleBuild gradleBuild = new PluginClasspathGradleBuild().gradleVersion(this.gradleVersion);
106+
GradleBuild gradleBuild = new PluginClasspathGradleBuild(this.buildOutput)
107+
.gradleVersion(this.gradleVersion);
101108
if (this.configurationCache) {
102109
gradleBuild.configurationCache();
103110
}

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

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.junit.jupiter.api.extension.TestTemplateInvocationContextProvider;
2828

2929
import org.springframework.boot.gradle.testkit.PluginClasspathGradleBuild;
30+
import org.springframework.boot.testsupport.BuildOutput;
3031
import org.springframework.boot.testsupport.gradle.testkit.Dsl;
3132
import org.springframework.boot.testsupport.gradle.testkit.GradleBuild;
3233
import org.springframework.boot.testsupport.gradle.testkit.GradleBuildExtension;
@@ -43,7 +44,8 @@ public class GradleMultiDslExtension implements TestTemplateInvocationContextPro
4344

4445
@Override
4546
public Stream<TestTemplateInvocationContext> provideTestTemplateInvocationContexts(ExtensionContext context) {
46-
return Stream.of(Dsl.values()).map(DslTestTemplateInvocationContext::new);
47+
BuildOutput buildOutput = new BuildOutput(context.getRequiredTestClass());
48+
return Stream.of(Dsl.values()).map((dsl) -> new DslTestTemplateInvocationContext(buildOutput, dsl));
4749
}
4850

4951
@Override
@@ -53,15 +55,18 @@ public boolean supportsTestTemplate(ExtensionContext context) {
5355

5456
private static final class DslTestTemplateInvocationContext implements TestTemplateInvocationContext {
5557

58+
private final BuildOutput buildOutput;
59+
5660
private final Dsl dsl;
5761

58-
DslTestTemplateInvocationContext(Dsl dsl) {
62+
DslTestTemplateInvocationContext(BuildOutput buildOutput, Dsl dsl) {
63+
this.buildOutput = buildOutput;
5964
this.dsl = dsl;
6065
}
6166

6267
@Override
6368
public List<Extension> getAdditionalExtensions() {
64-
GradleBuild gradleBuild = new PluginClasspathGradleBuild(this.dsl)
69+
GradleBuild gradleBuild = new PluginClasspathGradleBuild(this.buildOutput, this.dsl)
6570
.gradleVersion(GradleVersions.minimumCompatible());
6671
return Arrays.asList(new GradleBuildFieldSetter(gradleBuild), new GradleBuildExtension());
6772
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import org.junit.jupiter.api.extension.ExtendWith;
3131

3232
import org.springframework.boot.gradle.testkit.PluginClasspathGradleBuild;
33+
import org.springframework.boot.testsupport.BuildOutput;
3334
import org.springframework.boot.testsupport.gradle.testkit.GradleBuild;
3435
import org.springframework.boot.testsupport.gradle.testkit.GradleBuildExtension;
3536

@@ -44,7 +45,7 @@
4445
@ExtendWith(GradleBuildExtension.class)
4546
class KotlinPluginActionIntegrationTests {
4647

47-
GradleBuild gradleBuild = new PluginClasspathGradleBuild();
48+
GradleBuild gradleBuild = new PluginClasspathGradleBuild(new BuildOutput(getClass()));
4849

4950
@Test
5051
void noKotlinVersionPropertyWithoutKotlinPlugin() {

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import org.springframework.asm.ClassVisitor;
4444
import org.springframework.boot.buildpack.platform.build.BuildRequest;
4545
import org.springframework.boot.loader.tools.LaunchScript;
46+
import org.springframework.boot.testsupport.BuildOutput;
4647
import org.springframework.boot.testsupport.gradle.testkit.Dsl;
4748
import org.springframework.boot.testsupport.gradle.testkit.GradleBuild;
4849

@@ -55,12 +56,12 @@
5556
*/
5657
public class PluginClasspathGradleBuild extends GradleBuild {
5758

58-
public PluginClasspathGradleBuild() {
59-
super();
59+
public PluginClasspathGradleBuild(BuildOutput buildOutput) {
60+
super(buildOutput);
6061
}
6162

62-
public PluginClasspathGradleBuild(Dsl dsl) {
63-
super(dsl);
63+
public PluginClasspathGradleBuild(BuildOutput buildOutput, Dsl dsl) {
64+
super(buildOutput, dsl);
6465
}
6566

6667
@Override

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ plugins {
2121
description = "Spring Boot Gradle Testing Support"
2222

2323
dependencies {
24+
api(project(":spring-boot-project:spring-boot-tools:spring-boot-test-support"))
25+
2426
compileOnly("org.junit.jupiter:junit-jupiter")
2527

2628
implementation(gradleTestKit())

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

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import org.gradle.testkit.runner.GradleRunner;
3838
import org.gradle.util.GradleVersion;
3939

40+
import org.springframework.boot.testsupport.BuildOutput;
4041
import org.springframework.util.FileCopyUtils;
4142
import org.springframework.util.FileSystemUtils;
4243

@@ -51,6 +52,8 @@
5152
*/
5253
public class GradleBuild {
5354

55+
private final BuildOutput buildOutput;
56+
5457
private final Dsl dsl;
5558

5659
private File projectDir;
@@ -71,11 +74,12 @@ public class GradleBuild {
7174

7275
private final Map<String, String> scriptProperties = new HashMap<>();
7376

74-
public GradleBuild() {
75-
this(Dsl.GROOVY);
77+
public GradleBuild(BuildOutput buildOutput) {
78+
this(buildOutput, Dsl.GROOVY);
7679
}
7780

78-
protected GradleBuild(Dsl dsl) {
81+
protected GradleBuild(BuildOutput buildOutput, Dsl dsl) {
82+
this.buildOutput = buildOutput;
7983
this.dsl = dsl;
8084
}
8185

@@ -202,10 +206,10 @@ private void copyTransformedScript(String script, File destination) throws IOExc
202206
}
203207

204208
private File getTestKitDir() {
205-
File temp = new File(System.getProperty("java.io.tmpdir"));
206-
String username = System.getProperty("user.name");
209+
File build = this.buildOutput.getRootLocation();
210+
File testKitRoot = new File(build, "gradle-test-kit");
207211
String gradleVersion = (this.gradleVersion != null) ? this.gradleVersion : "default";
208-
return new File(temp, ".gradle-test-kit-" + username + "-" + getBootVersion() + "-" + gradleVersion);
212+
return new File(testKitRoot, gradleVersion).getAbsoluteFile();
209213
}
210214

211215
public File getProjectDir() {

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

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.junit.jupiter.api.extension.BeforeEachCallback;
2222
import org.junit.jupiter.api.extension.ExtensionContext;
2323

24+
import org.springframework.boot.testsupport.BuildOutput;
2425
import org.springframework.boot.testsupport.gradle.testkit.GradleBuild;
2526
import org.springframework.boot.testsupport.gradle.testkit.GradleVersions;
2627
import org.springframework.util.Assert;
@@ -34,21 +35,22 @@
3435
*/
3536
public class GradleBuildInjectionExtension implements BeforeEachCallback {
3637

37-
private final GradleBuild gradleBuild;
38+
private final String bootVersion;
3839

3940
GradleBuildInjectionExtension() {
40-
this.gradleBuild = new GradleBuild();
41-
this.gradleBuild.gradleVersion(GradleVersions.minimumCompatible());
4241
String bootVersion = System.getProperty("springBootVersion");
4342
Assert.notNull(bootVersion, "Property 'springBootVersion' must be set in build environment");
44-
this.gradleBuild.bootVersion(bootVersion);
43+
this.bootVersion = bootVersion;
4544
}
4645

4746
@Override
4847
public void beforeEach(ExtensionContext context) throws Exception {
48+
GradleBuild gradleBuild = new GradleBuild(new BuildOutput(context.getRequiredTestClass()))
49+
.gradleVersion(GradleVersions.minimumCompatible())
50+
.bootVersion(this.bootVersion);
4951
Field field = ReflectionUtils.findField(context.getRequiredTestClass(), "gradleBuild");
5052
field.setAccessible(true);
51-
field.set(context.getRequiredTestInstance(), this.gradleBuild);
53+
field.set(context.getRequiredTestInstance(), gradleBuild);
5254
}
5355

5456
}

0 commit comments

Comments
 (0)