|
|
|
|
@@ -25,6 +25,8 @@ import java.util.Random;
|
|
|
|
|
|
|
|
|
|
import org.junit.jupiter.api.TestTemplate;
|
|
|
|
|
import org.junit.jupiter.api.extension.ExtendWith;
|
|
|
|
|
import org.testcontainers.containers.GenericContainer;
|
|
|
|
|
import org.testcontainers.containers.wait.strategy.Wait;
|
|
|
|
|
|
|
|
|
|
import org.springframework.boot.buildpack.platform.docker.DockerApi;
|
|
|
|
|
import org.springframework.boot.buildpack.platform.docker.type.ImageName;
|
|
|
|
|
@@ -54,9 +56,15 @@ public class BuildImageTests extends AbstractArchiveIntegrationTests {
|
|
|
|
|
assertThat(original).doesNotExist();
|
|
|
|
|
assertThat(buildLog(project)).contains("Building image")
|
|
|
|
|
.contains("docker.io/library/build-image:0.0.1.BUILD-SNAPSHOT")
|
|
|
|
|
.contains("---> Test Info buildpack building").contains("env: BP_JVM_VERSION=8.*")
|
|
|
|
|
.contains("---> Test Info buildpack done").contains("Successfully built image");
|
|
|
|
|
removeImage("build-image", "0.0.1.BUILD-SNAPSHOT");
|
|
|
|
|
.contains("Successfully built image");
|
|
|
|
|
ImageReference imageReference = ImageReference.of(ImageName.of("build-image"),
|
|
|
|
|
"0.0.1.BUILD-SNAPSHOT");
|
|
|
|
|
try (GenericContainer<?> container = new GenericContainer<>(imageReference.toString())) {
|
|
|
|
|
container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start();
|
|
|
|
|
}
|
|
|
|
|
finally {
|
|
|
|
|
removeImage(imageReference);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -71,9 +79,15 @@ public class BuildImageTests extends AbstractArchiveIntegrationTests {
|
|
|
|
|
assertThat(classifier).doesNotExist();
|
|
|
|
|
assertThat(buildLog(project)).contains("Building image")
|
|
|
|
|
.contains("docker.io/library/build-image-classifier:0.0.1.BUILD-SNAPSHOT")
|
|
|
|
|
.contains("---> Test Info buildpack building").contains("env: BP_JVM_VERSION=8.*")
|
|
|
|
|
.contains("---> Test Info buildpack done").contains("Successfully built image");
|
|
|
|
|
removeImage("build-image-classifier", "0.0.1.BUILD-SNAPSHOT");
|
|
|
|
|
.contains("Successfully built image");
|
|
|
|
|
ImageReference imageReference = ImageReference.of(ImageName.of("build-image-classifier"),
|
|
|
|
|
"0.0.1.BUILD-SNAPSHOT");
|
|
|
|
|
try (GenericContainer<?> container = new GenericContainer<>(imageReference.toString())) {
|
|
|
|
|
container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start();
|
|
|
|
|
}
|
|
|
|
|
finally {
|
|
|
|
|
removeImage(imageReference);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -90,9 +104,15 @@ public class BuildImageTests extends AbstractArchiveIntegrationTests {
|
|
|
|
|
assertThat(original).doesNotExist();
|
|
|
|
|
assertThat(buildLog(project)).contains("Building image")
|
|
|
|
|
.contains("docker.io/library/build-image-classifier-source:0.0.1.BUILD-SNAPSHOT")
|
|
|
|
|
.contains("---> Test Info buildpack building").contains("---> Test Info buildpack done")
|
|
|
|
|
.contains("Successfully built image");
|
|
|
|
|
removeImage("build-image-classifier-source", "0.0.1.BUILD-SNAPSHOT");
|
|
|
|
|
ImageReference imageReference = ImageReference.of(ImageName.of("build-image-classifier-source"),
|
|
|
|
|
"0.0.1.BUILD-SNAPSHOT");
|
|
|
|
|
try (GenericContainer<?> container = new GenericContainer<>(imageReference.toString())) {
|
|
|
|
|
container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start();
|
|
|
|
|
}
|
|
|
|
|
finally {
|
|
|
|
|
removeImage(imageReference);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -108,9 +128,15 @@ public class BuildImageTests extends AbstractArchiveIntegrationTests {
|
|
|
|
|
assertThat(original).isFile();
|
|
|
|
|
assertThat(buildLog(project)).contains("Building image")
|
|
|
|
|
.contains("docker.io/library/build-image-with-repackage:0.0.1.BUILD-SNAPSHOT")
|
|
|
|
|
.contains("---> Test Info buildpack building").contains("---> Test Info buildpack done")
|
|
|
|
|
.contains("Successfully built image");
|
|
|
|
|
removeImage("build-image-with-repackage", "0.0.1.BUILD-SNAPSHOT");
|
|
|
|
|
ImageReference imageReference = ImageReference.of(ImageName.of("build-image-with-repackage"),
|
|
|
|
|
"0.0.1.BUILD-SNAPSHOT");
|
|
|
|
|
try (GenericContainer<?> container = new GenericContainer<>(imageReference.toString())) {
|
|
|
|
|
container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start();
|
|
|
|
|
}
|
|
|
|
|
finally {
|
|
|
|
|
removeImage(imageReference);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -127,9 +153,15 @@ public class BuildImageTests extends AbstractArchiveIntegrationTests {
|
|
|
|
|
assertThat(original).isFile();
|
|
|
|
|
assertThat(buildLog(project)).contains("Building image")
|
|
|
|
|
.contains("docker.io/library/build-image-classifier-with-repackage:0.0.1.BUILD-SNAPSHOT")
|
|
|
|
|
.contains("---> Test Info buildpack building").contains("---> Test Info buildpack done")
|
|
|
|
|
.contains("Successfully built image");
|
|
|
|
|
removeImage("build-image-classifier-with-repackage", "0.0.1.BUILD-SNAPSHOT");
|
|
|
|
|
ImageReference imageReference = ImageReference
|
|
|
|
|
.of(ImageName.of("build-image-classifier-with-repackage"), "0.0.1.BUILD-SNAPSHOT");
|
|
|
|
|
try (GenericContainer<?> container = new GenericContainer<>(imageReference.toString())) {
|
|
|
|
|
container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start();
|
|
|
|
|
}
|
|
|
|
|
finally {
|
|
|
|
|
removeImage(imageReference);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -146,9 +178,15 @@ public class BuildImageTests extends AbstractArchiveIntegrationTests {
|
|
|
|
|
assertThat(original).isFile();
|
|
|
|
|
assertThat(buildLog(project)).contains("Building image").contains(
|
|
|
|
|
"docker.io/library/build-image-classifier-source-with-repackage:0.0.1.BUILD-SNAPSHOT")
|
|
|
|
|
.contains("---> Test Info buildpack building").contains("---> Test Info buildpack done")
|
|
|
|
|
.contains("Successfully built image");
|
|
|
|
|
removeImage("build-image-classifier-source-with-repackage", "0.0.1.BUILD-SNAPSHOT");
|
|
|
|
|
ImageReference imageReference = ImageReference
|
|
|
|
|
.of(ImageName.of("build-image-classifier-source-with-repackage"), "0.0.1.BUILD-SNAPSHOT");
|
|
|
|
|
try (GenericContainer<?> container = new GenericContainer<>(imageReference.toString())) {
|
|
|
|
|
container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start();
|
|
|
|
|
}
|
|
|
|
|
finally {
|
|
|
|
|
removeImage(imageReference);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -165,9 +203,15 @@ public class BuildImageTests extends AbstractArchiveIntegrationTests {
|
|
|
|
|
assertThat(original).doesNotExist();
|
|
|
|
|
assertThat(buildLog(project)).contains("Building image")
|
|
|
|
|
.contains("example.com/test/build-image:0.0.1.BUILD-SNAPSHOT")
|
|
|
|
|
.contains("---> Test Info buildpack building").contains("---> Test Info buildpack done")
|
|
|
|
|
.contains("Successfully built image");
|
|
|
|
|
removeImage("example.com/test/build-image", "0.0.1.BUILD-SNAPSHOT");
|
|
|
|
|
ImageReference imageReference = ImageReference
|
|
|
|
|
.of("example.com/test/build-image:0.0.1.BUILD-SNAPSHOT");
|
|
|
|
|
try (GenericContainer<?> container = new GenericContainer<>(imageReference.toString())) {
|
|
|
|
|
container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start();
|
|
|
|
|
}
|
|
|
|
|
finally {
|
|
|
|
|
removeImage(imageReference);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -176,14 +220,18 @@ public class BuildImageTests extends AbstractArchiveIntegrationTests {
|
|
|
|
|
mavenBuild.project("build-image").goals("package")
|
|
|
|
|
.systemProperty("spring-boot.build-image.pullPolicy", "IF_NOT_PRESENT")
|
|
|
|
|
.systemProperty("spring-boot.build-image.imageName", "example.com/test/cmd-property-name:v1")
|
|
|
|
|
.systemProperty("spring-boot.build-image.builder", "springci/spring-boot-cnb-builder:0.0.1")
|
|
|
|
|
.systemProperty("spring-boot.build-image.runImage", "paketobuildpacks/run:tiny-cnb")
|
|
|
|
|
.systemProperty("spring-boot.build-image.builder", "paketobuildpacks/builder:full")
|
|
|
|
|
.systemProperty("spring-boot.build-image.runImage", "paketobuildpacks/run:full-cnb")
|
|
|
|
|
.execute((project) -> {
|
|
|
|
|
assertThat(buildLog(project)).contains("Building image")
|
|
|
|
|
.contains("example.com/test/cmd-property-name:v1")
|
|
|
|
|
.contains("---> Test Info buildpack building").contains("---> Test Info buildpack done")
|
|
|
|
|
.contains("Successfully built image");
|
|
|
|
|
removeImage("example.com/test/cmd-property-name", "v1");
|
|
|
|
|
.contains("example.com/test/cmd-property-name:v1").contains("Successfully built image");
|
|
|
|
|
ImageReference imageReference = ImageReference.of("example.com/test/cmd-property-name:v1");
|
|
|
|
|
try (GenericContainer<?> container = new GenericContainer<>(imageReference.toString())) {
|
|
|
|
|
container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start();
|
|
|
|
|
}
|
|
|
|
|
finally {
|
|
|
|
|
removeImage(imageReference);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -193,21 +241,34 @@ public class BuildImageTests extends AbstractArchiveIntegrationTests {
|
|
|
|
|
.systemProperty("spring-boot.build-image.pullPolicy", "IF_NOT_PRESENT").execute((project) -> {
|
|
|
|
|
assertThat(buildLog(project)).contains("Building image")
|
|
|
|
|
.contains("docker.io/library/build-image-v2-builder:0.0.1.BUILD-SNAPSHOT")
|
|
|
|
|
.contains("---> Test Info buildpack building").contains("---> Test Info buildpack done")
|
|
|
|
|
.contains("Successfully built image");
|
|
|
|
|
removeImage("docker.io/library/build-image-v2-builder", "0.0.1.BUILD-SNAPSHOT");
|
|
|
|
|
ImageReference imageReference = ImageReference
|
|
|
|
|
.of("docker.io/library/build-image-v2-builder:0.0.1.BUILD-SNAPSHOT");
|
|
|
|
|
try (GenericContainer<?> container = new GenericContainer<>(imageReference.toString())) {
|
|
|
|
|
container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start();
|
|
|
|
|
}
|
|
|
|
|
finally {
|
|
|
|
|
removeImage(imageReference);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@TestTemplate
|
|
|
|
|
void whenBuildImageIsInvokedWithEmptyEnvEntry(MavenBuild mavenBuild) {
|
|
|
|
|
mavenBuild.project("build-image-empty-env-entry").goals("package").prepare(this::writeLongNameResource)
|
|
|
|
|
.systemProperty("spring-boot.build-image.pullPolicy", "IF_NOT_PRESENT").execute((project) -> {
|
|
|
|
|
mavenBuild.project("build-image-empty-env-entry").goals("package")
|
|
|
|
|
.systemProperty("spring-boot.build-image.pullPolicy", "IF_NOT_PRESENT")
|
|
|
|
|
.prepare(this::writeLongNameResource).execute((project) -> {
|
|
|
|
|
assertThat(buildLog(project)).contains("Building image")
|
|
|
|
|
.contains("docker.io/library/build-image-empty-env-entry:0.0.1.BUILD-SNAPSHOT")
|
|
|
|
|
.contains("---> Test Info buildpack building").contains("---> Test Info buildpack done")
|
|
|
|
|
.contains("Successfully built image");
|
|
|
|
|
removeImage("build-image-empty-env-entry", "0.0.1.BUILD-SNAPSHOT");
|
|
|
|
|
ImageReference imageReference = ImageReference.of(ImageName.of("build-image-empty-env-entry"),
|
|
|
|
|
"0.0.1.BUILD-SNAPSHOT");
|
|
|
|
|
try (GenericContainer<?> container = new GenericContainer<>(imageReference.toString())) {
|
|
|
|
|
container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start();
|
|
|
|
|
}
|
|
|
|
|
finally {
|
|
|
|
|
removeImage(imageReference);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -222,7 +283,6 @@ public class BuildImageTests extends AbstractArchiveIntegrationTests {
|
|
|
|
|
mavenBuild.project("build-image-builder-error").goals("package")
|
|
|
|
|
.systemProperty("spring-boot.build-image.pullPolicy", "IF_NOT_PRESENT")
|
|
|
|
|
.executeAndFail((project) -> assertThat(buildLog(project)).contains("Building image")
|
|
|
|
|
.contains("---> Test Info buildpack building").contains("Forced builder failure")
|
|
|
|
|
.containsPattern("Builder lifecycle '.*' failed with status code"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -252,8 +312,7 @@ public class BuildImageTests extends AbstractArchiveIntegrationTests {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void removeImage(String name, String version) {
|
|
|
|
|
ImageReference imageReference = ImageReference.of(ImageName.of(name), version);
|
|
|
|
|
private void removeImage(ImageReference imageReference) {
|
|
|
|
|
try {
|
|
|
|
|
new DockerApi().image().remove(imageReference, false);
|
|
|
|
|
}
|
|
|
|
|
|