From e84c1abb0f0de615907829109d068f55009f5dfb Mon Sep 17 00:00:00 2001 From: Scott Frederick Date: Thu, 21 Oct 2021 15:07:15 -0500 Subject: [PATCH] Prevent Docker volume name clashes in tests during parallel builds See gh-28292 --- .../bundling/BootBuildImageIntegrationTests.java | 2 +- ...tegrationTests-buildsImageWithVolumeCaches.gradle | 4 ++-- .../springframework/boot/maven/BuildImageTests.java | 12 ++++++++++-- .../src/intTest/projects/build-image-caches/pom.xml | 4 ++-- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests.java b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests.java index c47a7cfe02..304f93b0c2 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/java/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests.java @@ -290,7 +290,7 @@ class BootBuildImageIntegrationTests { assertThat(result.getOutput()).contains("---> Test Info buildpack building"); assertThat(result.getOutput()).contains("---> Test Info buildpack done"); removeImages(projectName); - deleteVolumes("build-cache-volume", "launch-cache-volume"); + deleteVolumes("cache-" + projectName + ".build", "cache-" + projectName + ".launch"); } @TestTemplate diff --git a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithVolumeCaches.gradle b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithVolumeCaches.gradle index e1b771bce1..75db68229e 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithVolumeCaches.gradle +++ b/spring-boot-project/spring-boot-tools/spring-boot-gradle-plugin/src/test/resources/org/springframework/boot/gradle/tasks/bundling/BootBuildImageIntegrationTests-buildsImageWithVolumeCaches.gradle @@ -10,12 +10,12 @@ bootBuildImage { builder = "projects.registry.vmware.com/springboot/spring-boot-cnb-builder:0.0.1" buildCache { volume { - name = "build-cache-volume" + name = "cache-${rootProject.name}.build" } } launchCache { volume { - name = "launch-cache-volume" + name = "cache-${rootProject.name}.launch" } } } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/BuildImageTests.java b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/BuildImageTests.java index cae1331f7f..87f5f7b3db 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/BuildImageTests.java +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/java/org/springframework/boot/maven/BuildImageTests.java @@ -22,6 +22,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Random; +import java.util.stream.IntStream; import org.junit.jupiter.api.TestTemplate; import org.junit.jupiter.api.extension.ExtendWith; @@ -310,13 +311,15 @@ class BuildImageTests extends AbstractArchiveIntegrationTests { @TestTemplate void whenBuildImageIsInvokedWithVolumeCaches(MavenBuild mavenBuild) { + String testBuildId = randomString(); mavenBuild.project("build-image-caches").goals("package") - .systemProperty("spring-boot.build-image.pullPolicy", "IF_NOT_PRESENT").execute((project) -> { + .systemProperty("spring-boot.build-image.pullPolicy", "IF_NOT_PRESENT") + .systemProperty("test-build-id", testBuildId).execute((project) -> { assertThat(buildLog(project)).contains("Building image") .contains("docker.io/library/build-image-caches:0.0.1.BUILD-SNAPSHOT") .contains("Successfully built image"); removeImage("build-image-caches", "0.0.1.BUILD-SNAPSHOT"); - deleteVolumes("build-cache-volume", "launch-cache-volume"); + deleteVolumes("cache-" + testBuildId + ".build", "cache-" + testBuildId + ".launch"); }); } @@ -394,4 +397,9 @@ class BuildImageTests extends AbstractArchiveIntegrationTests { } } + private String randomString() { + IntStream chars = new Random().ints('a', 'z' + 1).limit(10); + return chars.collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append).toString(); + } + } diff --git a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-caches/pom.xml b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-caches/pom.xml index 771cb54836..c94015106f 100644 --- a/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-caches/pom.xml +++ b/spring-boot-project/spring-boot-tools/spring-boot-maven-plugin/src/intTest/projects/build-image-caches/pom.xml @@ -26,12 +26,12 @@ projects.registry.vmware.com/springboot/spring-boot-cnb-builder:0.0.1 - build-cache-volume + cache-${test-build-id}.build - launch-cache-volume + cache-${test-build-id}.launch