From 9894f835a8254bbd744059187bb3c9d3aa586c98 Mon Sep 17 00:00:00 2001 From: Sun Seng David TAN Date: Wed, 24 Apr 2024 16:35:46 +0200 Subject: [PATCH] test(docker-build): add tests for merging build arguments in BuildService Signed-off-by: Sun Seng David TAN --- .../service/docker/BuildServiceTest.java | 111 ++++++++++++++++++ 1 file changed, 111 insertions(+) diff --git a/jkube-kit/build/service/docker/src/test/java/org/eclipse/jkube/kit/build/service/docker/BuildServiceTest.java b/jkube-kit/build/service/docker/src/test/java/org/eclipse/jkube/kit/build/service/docker/BuildServiceTest.java index 7b785dfa82..3b9699b6e5 100644 --- a/jkube-kit/build/service/docker/src/test/java/org/eclipse/jkube/kit/build/service/docker/BuildServiceTest.java +++ b/jkube-kit/build/service/docker/src/test/java/org/eclipse/jkube/kit/build/service/docker/BuildServiceTest.java @@ -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; @@ -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; @@ -132,6 +134,115 @@ void mergeBuildArgs_whenBuildArgsFromImageConfigAndFromProjectProperties_shouldM .containsEntry("IMAGE-1", "openjdk"); } + @Test + void mergeBuildArgs_whenBuildArgsFromAllSourcesWithDifferentKeys_shouldMergeBuildArgs() { + // Given + // Build args from build configuration + Map 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 jkubeConfigBuildArg = new HashMap<>(); + jkubeConfigBuildArg.put("FULL_IMAGE", "busybox:latest"); + when(mockedJKubeConfiguration.getBuildArgs()).thenReturn(jkubeConfigBuildArg); + + // When + Map 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 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 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 imgConfigBuildArg = new HashMap<>(); + imgConfigBuildArg.put("VERSION", "latest"); + imageConfiguration = ImageConfiguration.builder() + .name("image-name") + .build(BuildConfiguration.builder() + .args(imgConfigBuildArg) + .build()) + .build(); + // from JKube configuration + Map 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