@ -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 ) ;
}