Skip to content

Commit

Permalink
test(docker-build): add tests for merging build arguments in BuildSer…
Browse files Browse the repository at this point in the history
…vice

Signed-off-by: Sun Seng David TAN <sutan@redhat.com>
  • Loading branch information
sunix committed Apr 24, 2024
1 parent 263fd1e commit 9894f83
Showing 1 changed file with 111 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import org.eclipse.jkube.kit.common.KitLogger;
import org.eclipse.jkube.kit.config.image.ImageConfiguration;
import org.eclipse.jkube.kit.config.image.build.BuildConfiguration;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
Expand All @@ -34,6 +35,7 @@
import java.util.Properties;

import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
Expand Down Expand Up @@ -132,6 +134,115 @@ void mergeBuildArgs_whenBuildArgsFromImageConfigAndFromProjectProperties_shouldM
.containsEntry("IMAGE-1", "openjdk");
}

@Test
void mergeBuildArgs_whenBuildArgsFromAllSourcesWithDifferentKeys_shouldMergeBuildArgs() {
// Given
// Build args from build configuration
Map<String, String> imgConfigBuildArg = new HashMap<>();
imgConfigBuildArg.put("VERSION", "latest");
imageConfiguration = ImageConfiguration.builder()
.name("image-name")
.build(BuildConfiguration.builder()
.args(imgConfigBuildArg)
.build())
.build();
// Build args from system properties
System.setProperty("docker.buildArg.IMAGE-1", "openjdk");
// Build args from project properties
Properties props = new Properties();
props.setProperty("docker.buildArg.REPO_1", "docker.io/library");
when(mockedJKubeConfiguration.getProject().getProperties()).thenReturn(props);
// Build args from JKube configuration
Map<String, String> jkubeConfigBuildArg = new HashMap<>();
jkubeConfigBuildArg.put("FULL_IMAGE", "busybox:latest");
when(mockedJKubeConfiguration.getBuildArgs()).thenReturn(jkubeConfigBuildArg);

// When
Map<String, String> mergedBuildArgs = BuildService.mergeBuildArgs(imageConfiguration, mockedJKubeConfiguration);

// Then
assertThat(mergedBuildArgs)
.containsEntry("VERSION", "latest")
.containsEntry("FULL_IMAGE", "busybox:latest")
.containsEntry("REPO_1", "docker.io/library")
.containsEntry("IMAGE-1", "openjdk");
}

@AfterEach
void clearSystemPropertiesUsedInTests() {
System.clearProperty("docker.buildArg.IMAGE-1");
System.clearProperty("docker.buildArg.REPO_1");
System.clearProperty("docker.buildArg.VERSION");
System.clearProperty("docker.buildArg.FULL_IMAGE");
}

@Test
void mergeBuildArgs_whenBuildArgsFromBuildConfigurationAndSystemPropertiesWithSameKey_shouldNotMergeBuildArgs() {
// Given
// from build configuration
Map<String, String> imgConfigBuildArg = new HashMap<>();
imgConfigBuildArg.put("VERSION", "latest");
imageConfiguration = ImageConfiguration.builder()
.name("image-name")
.build(BuildConfiguration.builder()
.args(imgConfigBuildArg)
.build())
.build();
// from system properties
System.setProperty("docker.buildArg.VERSION", "1.0.0");

// When & Then
assertThatIllegalArgumentException()
.isThrownBy(() -> BuildService.mergeBuildArgs(imageConfiguration, mockedJKubeConfiguration))
.withMessage("Multiple entries with same key: VERSION=latest and VERSION=1.0.0");
}

@Test
void mergeBuildArgs_whenBuildArgsFromBuildConfigurationAndProjectPropertiesWithSameKey_shouldNotMergeBuildArgs() {
// Given
// from build configuration
Map<String, String> imgConfigBuildArg = new HashMap<>();
imgConfigBuildArg.put("VERSION", "latest");
imageConfiguration = ImageConfiguration.builder()
.name("image-name")
.build(BuildConfiguration.builder()
.args(imgConfigBuildArg)
.build())
.build();
// from project properties
Properties props = new Properties();
props.setProperty("docker.buildArg.VERSION", "1.0.0");
when(mockedJKubeConfiguration.getProject().getProperties()).thenReturn(props);

// When & Then
assertThatIllegalArgumentException()
.isThrownBy(() -> BuildService.mergeBuildArgs(imageConfiguration, mockedJKubeConfiguration))
.withMessage("Multiple entries with same key: VERSION=latest and VERSION=1.0.0");
}

@Test
void mergeBuildArgs_whenBuildArgsFromBuildConfigurationAndJKubeConfigurationWithSameKey_shouldNotMergeBuildArgs() {
// Given
// from build configuration
Map<String, String> imgConfigBuildArg = new HashMap<>();
imgConfigBuildArg.put("VERSION", "latest");
imageConfiguration = ImageConfiguration.builder()
.name("image-name")
.build(BuildConfiguration.builder()
.args(imgConfigBuildArg)
.build())
.build();
// from JKube configuration
Map<String, String> jkubeConfigBuildArg = new HashMap<>();
jkubeConfigBuildArg.put("VERSION", "1.0.0");
when(mockedJKubeConfiguration.getBuildArgs()).thenReturn(jkubeConfigBuildArg);

// When & Then
assertThatIllegalArgumentException()
.isThrownBy(() -> BuildService.mergeBuildArgs(imageConfiguration, mockedJKubeConfiguration))
.withMessage("Multiple entries with same key: VERSION=latest and VERSION=1.0.0");
}

@Test
void buildImage_whenMultiStageDockerfileWithBuildArgs_shouldPrepullImages() throws IOException {
// Given
Expand Down

0 comments on commit 9894f83

Please sign in to comment.