diff --git a/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/PropertiesUtil.java b/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/PropertiesUtil.java index 932c82a554..5d7c1edfa6 100644 --- a/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/PropertiesUtil.java +++ b/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/PropertiesUtil.java @@ -33,6 +33,8 @@ public class PropertiesUtil { + public static final String JKUBE_INTERNAL_APP_CONFIG_FILE_LOCATION = "jkube.internal.application-config-file.path"; + private PropertiesUtil() {} /** @@ -102,14 +104,16 @@ public static Properties fromApplicationConfig(JavaProject javaProject, String[] final URLClassLoader urlClassLoader = getClassLoader(javaProject); for (String source : appConfigSources) { final Properties properties; + URL applicationConfigSource = urlClassLoader.findResource(source); if (source.endsWith(".properties")) { - properties = getPropertiesFromResource(urlClassLoader.findResource(source)); + properties = getPropertiesFromResource(applicationConfigSource); } else { - properties = getPropertiesFromYamlResource(urlClassLoader.findResource(source)); + properties = getPropertiesFromYamlResource(applicationConfigSource); } // Consider only the first non-empty application config source if (!properties.isEmpty()) { properties.putAll(toMap(javaProject.getProperties())); + properties.put(JKUBE_INTERNAL_APP_CONFIG_FILE_LOCATION, applicationConfigSource); return properties; } } diff --git a/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/SpringBootUtil.java b/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/SpringBootUtil.java index 186fc4c51e..669dfa9671 100644 --- a/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/SpringBootUtil.java +++ b/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/SpringBootUtil.java @@ -24,6 +24,7 @@ import org.eclipse.jkube.kit.common.JavaProject; import org.eclipse.jkube.kit.common.Plugin; +import static org.eclipse.jkube.kit.common.util.PropertiesUtil.JKUBE_INTERNAL_APP_CONFIG_FILE_LOCATION; import static org.eclipse.jkube.kit.common.util.PropertiesUtil.getPropertiesFromResource; /** @@ -71,8 +72,13 @@ public static Properties getSpringBootApplicationProperties(String springActiveP Properties props = YamlUtil.getPropertiesFromYamlResource(springActiveProfile, ymlResource); props.putAll(getPropertiesFromResource(propertiesResource)); + if (ymlResource != null) { + props.put(JKUBE_INTERNAL_APP_CONFIG_FILE_LOCATION, ymlResource.toString()); + } else if (propertiesResource != null) { + props.put(JKUBE_INTERNAL_APP_CONFIG_FILE_LOCATION, propertiesResource.toString()); + } return new SpringBootPropertyPlaceholderHelper(PLACEHOLDER_PREFIX, PLACEHOLDER_SUFFIX, VALUE_SEPARATOR, true) - .replaceAllPlaceholders(props); + .replaceAllPlaceholders(props); } /** diff --git a/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/util/PropertiesUtilTest.java b/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/util/PropertiesUtilTest.java index 5618ff6f2a..ca9e9f41e6 100644 --- a/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/util/PropertiesUtilTest.java +++ b/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/util/PropertiesUtilTest.java @@ -154,8 +154,10 @@ void yml() { // When Properties properties = PropertiesUtil.fromApplicationConfig(javaProject, new String[]{"application.yml"}); // Then - assertThat(properties).containsExactly( - entry("application.name", "name-via-yaml")); + assertThat(properties) + .containsOnly( + entry("jkube.internal.application-config-file.path", PropertiesUtilTest.class.getResource("/util/properties-util/yaml/application.yml")), + entry("application.name", "name-via-yaml")); } @Test @@ -164,8 +166,10 @@ void properties() { // When Properties properties = PropertiesUtil.fromApplicationConfig(javaProject, new String[]{"application.properties"}); // Then - assertThat(properties).containsExactly( - entry("application.name", "name-via-properties")); + assertThat(properties) + .containsOnly( + entry("jkube.internal.application-config-file.path", PropertiesUtilTest.class.getResource("/util/properties-util/properties/application.properties")), + entry("application.name", "name-via-properties")); } @Test @@ -174,8 +178,10 @@ void multipleSources_thenFirstOneTakesPrecedence() { // When Properties properties = PropertiesUtil.fromApplicationConfig(javaProject, new String[]{"application.properties", "application.yml"}); // Then - assertThat(properties).containsExactly( - entry("application.name", "name-via-properties")); + assertThat(properties) + .containsOnly( + entry("jkube.internal.application-config-file.path", PropertiesUtilTest.class.getResource("/util/properties-util/properties/application.properties")), + entry("application.name", "name-via-properties")); } @Test @@ -184,8 +190,10 @@ void multipleSourcesWithEmpty_thenFirstNonEmptyTakesPrecedence() { // When Properties properties = PropertiesUtil.fromApplicationConfig(javaProject, new String[]{"not-there", "application.yml", "application.properties"}); // Then - assertThat(properties).containsExactly( - entry("application.name", "name-via-yaml")); + assertThat(properties) + .containsOnly( + entry("jkube.internal.application-config-file.path", PropertiesUtilTest.class.getResource("/util/properties-util/yaml/application.yml")), + entry("application.name", "name-via-yaml")); } } } diff --git a/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/util/SpringBootUtilTest.java b/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/util/SpringBootUtilTest.java index 44ef5a8090..7ad36ffd16 100644 --- a/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/util/SpringBootUtilTest.java +++ b/jkube-kit/common/src/test/java/org/eclipse/jkube/kit/common/util/SpringBootUtilTest.java @@ -57,6 +57,7 @@ void getSpringBootApplicationPropertiesLoadsStandardProperties(@TempDir File tem Properties result = SpringBootUtil.getSpringBootApplicationProperties(cl); //Then assertThat(result).containsOnly( + entry("jkube.internal.application-config-file.path", tempDir.toPath().resolve("target/classes/application.properties").toUri().toURL().toString()), entry("spring.application.name", "demoservice"), entry("server.port", "9090") ); diff --git a/jkube-kit/jkube-kit-helidon/pom.xml b/jkube-kit/jkube-kit-helidon/pom.xml index a9fdbfd85a..edc407f53f 100644 --- a/jkube-kit/jkube-kit-helidon/pom.xml +++ b/jkube-kit/jkube-kit-helidon/pom.xml @@ -65,6 +65,10 @@ org.assertj assertj-core + + org.mockito + mockito-core + diff --git a/jkube-kit/jkube-kit-helidon/src/main/java/org/eclipse/jkube/helidon/enricher/HelidonHealthCheckEnricher.java b/jkube-kit/jkube-kit-helidon/src/main/java/org/eclipse/jkube/helidon/enricher/HelidonHealthCheckEnricher.java index 470e51501f..136416ca23 100644 --- a/jkube-kit/jkube-kit-helidon/src/main/java/org/eclipse/jkube/helidon/enricher/HelidonHealthCheckEnricher.java +++ b/jkube-kit/jkube-kit-helidon/src/main/java/org/eclipse/jkube/helidon/enricher/HelidonHealthCheckEnricher.java @@ -16,15 +16,23 @@ import org.eclipse.jkube.kit.enricher.api.JKubeEnricherContext; import org.eclipse.jkube.microprofile.enricher.AbstractMicroprofileHealthCheckEnricher; +import java.util.Properties; + import static org.eclipse.jkube.helidon.HelidonUtils.extractPort; import static org.eclipse.jkube.helidon.HelidonUtils.getHelidonConfiguration; import static org.eclipse.jkube.helidon.HelidonUtils.hasHelidonHealthDependency; import static org.eclipse.jkube.kit.common.Configs.asInteger; +import static org.eclipse.jkube.kit.common.util.PropertiesUtil.JKUBE_INTERNAL_APP_CONFIG_FILE_LOCATION; public class HelidonHealthCheckEnricher extends AbstractMicroprofileHealthCheckEnricher { private static final String DEFAULT_HELIDON_PORT = "8080"; + private final Properties helidonApplicationConfiguration; + public HelidonHealthCheckEnricher(JKubeEnricherContext buildContext) { super(buildContext, "jkube-healthcheck-helidon"); + helidonApplicationConfiguration = getHelidonConfiguration(getContext().getProject()); + log.debug("Helidon Application Config loaded from: %s", + helidonApplicationConfiguration.get(JKUBE_INTERNAL_APP_CONFIG_FILE_LOCATION)); } @Override @@ -34,6 +42,6 @@ protected boolean shouldAddProbe() { @Override protected int getPort() { - return asInteger(extractPort(getHelidonConfiguration(getContext().getProject()), DEFAULT_HELIDON_PORT)); + return asInteger(extractPort(helidonApplicationConfiguration, DEFAULT_HELIDON_PORT)); } -} \ No newline at end of file +} diff --git a/jkube-kit/jkube-kit-helidon/src/main/java/org/eclipse/jkube/helidon/generator/HelidonGenerator.java b/jkube-kit/jkube-kit-helidon/src/main/java/org/eclipse/jkube/helidon/generator/HelidonGenerator.java index aa0ed1195e..5dec0f05b3 100644 --- a/jkube-kit/jkube-kit-helidon/src/main/java/org/eclipse/jkube/helidon/generator/HelidonGenerator.java +++ b/jkube-kit/jkube-kit-helidon/src/main/java/org/eclipse/jkube/helidon/generator/HelidonGenerator.java @@ -21,18 +21,24 @@ import java.util.List; import java.util.Optional; +import java.util.Properties; import static org.eclipse.jkube.helidon.HelidonUtils.extractPort; import static org.eclipse.jkube.helidon.HelidonUtils.getHelidonConfiguration; import static org.eclipse.jkube.helidon.HelidonUtils.hasHelidonDependencies; +import static org.eclipse.jkube.kit.common.util.PropertiesUtil.JKUBE_INTERNAL_APP_CONFIG_FILE_LOCATION; public class HelidonGenerator extends JavaExecGenerator { public static final String HELIDON = "helidon"; private final HelidonNestedGenerator nestedGenerator; + private final Properties helidonApplicationConfiguration; public HelidonGenerator(GeneratorContext context) { super(context, HELIDON); nestedGenerator = HelidonNestedGenerator.from(context, getGeneratorConfig()); + helidonApplicationConfiguration = getHelidonConfiguration(getContext().getProject()); + log.debug("Helidon Application Config loaded from: %s", + helidonApplicationConfiguration.get(JKUBE_INTERNAL_APP_CONFIG_FILE_LOCATION)); } @Override @@ -62,7 +68,7 @@ protected Arguments getBuildEntryPoint() { @Override protected String getDefaultWebPort() { - return extractPort(getHelidonConfiguration(getProject()), super.getDefaultWebPort()); + return extractPort(helidonApplicationConfiguration, super.getDefaultWebPort()); } @Override diff --git a/jkube-kit/jkube-kit-helidon/src/test/java/org/eclipse/jkube/helidon/HelidonUtilsTest.java b/jkube-kit/jkube-kit-helidon/src/test/java/org/eclipse/jkube/helidon/HelidonUtilsTest.java index 9dbf6fd89f..570f645739 100644 --- a/jkube-kit/jkube-kit-helidon/src/test/java/org/eclipse/jkube/helidon/HelidonUtilsTest.java +++ b/jkube-kit/jkube-kit-helidon/src/test/java/org/eclipse/jkube/helidon/HelidonUtilsTest.java @@ -92,6 +92,7 @@ void getHelidonConfiguration_whenApplicationYamlProvided_thenShouldExtractConfig final Properties props = HelidonUtils.getHelidonConfiguration(javaProject); // Then assertThat(props).containsOnly( + entry("jkube.internal.application-config-file.path", HelidonUtilsTest.class.getResource("/utils-test/config/yaml/application.yml")), entry("app.greeting", "Hello"), entry("server.port", "8080"), entry("server.host", "0.0.0.0")); @@ -109,6 +110,7 @@ void getHelidonConfiguration_whenMicroprofilePropertiesProvided_thenShouldExtrac final Properties props = HelidonUtils.getHelidonConfiguration(javaProject); // Then assertThat(props).containsOnly( + entry("jkube.internal.application-config-file.path", HelidonUtilsTest.class.getResource("/utils-test/config/properties/META-INF/microprofile-config.properties")), entry("app.greeting", "Hello"), entry("server.port", "8080"), entry("server.host", "0.0.0.0")); diff --git a/jkube-kit/jkube-kit-helidon/src/test/java/org/eclipse/jkube/helidon/enricher/HelidonHealthCheckEnricherTest.java b/jkube-kit/jkube-kit-helidon/src/test/java/org/eclipse/jkube/helidon/enricher/HelidonHealthCheckEnricherTest.java index d914c0c167..7a14a0e8af 100644 --- a/jkube-kit/jkube-kit-helidon/src/test/java/org/eclipse/jkube/helidon/enricher/HelidonHealthCheckEnricherTest.java +++ b/jkube-kit/jkube-kit-helidon/src/test/java/org/eclipse/jkube/helidon/enricher/HelidonHealthCheckEnricherTest.java @@ -18,6 +18,7 @@ import io.fabric8.kubernetes.api.model.Probe; import io.fabric8.kubernetes.api.model.apps.Deployment; import io.fabric8.kubernetes.api.model.apps.DeploymentBuilder; +import org.assertj.core.api.Assertions; import org.assertj.core.api.AssertionsForInterfaceTypes; import org.eclipse.jkube.kit.common.Dependency; import org.eclipse.jkube.kit.common.JavaProject; @@ -28,7 +29,9 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import java.io.ByteArrayOutputStream; import java.io.File; +import java.io.PrintStream; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -42,11 +45,13 @@ class HelidonHealthCheckEnricherTest { private JavaProject javaProject; private Properties properties; private KubernetesListBuilder klb; + private ByteArrayOutputStream out; @BeforeEach void setup() { properties = new Properties(); klb = new KubernetesListBuilder(); + out = new ByteArrayOutputStream(); klb.addToItems(new DeploymentBuilder() .editOrNewSpec() .editOrNewTemplate() @@ -67,12 +72,29 @@ void setup() { .dependenciesWithTransitive(new ArrayList<>()) .build(); context = JKubeEnricherContext.builder() - .log(new KitLogger.SilentLogger()) + .log(new KitLogger.PrintStreamLogger(new PrintStream(out))) .project(javaProject) .processorConfig(new ProcessorConfig()) .build(); } + @Test + void constructorShouldLogHelidonApplicationConfigPath() { + // Given + context = context.toBuilder() + .project(javaProject.toBuilder() + .compileClassPathElement(Objects.requireNonNull(getClass().getResource("/custom-port-microprofile-configuration")).getPath()) + .build()) + .build(); + // When + HelidonHealthCheckEnricher helidonHealthCheckEnricher = new HelidonHealthCheckEnricher(context); + // Then + assertThat(helidonHealthCheckEnricher).isNotNull(); + Assertions.assertThat(out.toString()) + .contains("jkube-healthcheck-helidon: Helidon Application Config loaded from: " + + HelidonHealthCheckEnricherTest.class.getResource("/custom-port-microprofile-configuration/META-INF/microprofile-config.properties")); + } + @Test void create_withNoMicroprofileDependency_shouldNotAddProbes() { // Given diff --git a/jkube-kit/jkube-kit-helidon/src/test/java/org/eclipse/jkube/helidon/generator/HelidonGeneratorTest.java b/jkube-kit/jkube-kit-helidon/src/test/java/org/eclipse/jkube/helidon/generator/HelidonGeneratorTest.java index d74a85729a..5e3c469aff 100644 --- a/jkube-kit/jkube-kit-helidon/src/test/java/org/eclipse/jkube/helidon/generator/HelidonGeneratorTest.java +++ b/jkube-kit/jkube-kit-helidon/src/test/java/org/eclipse/jkube/helidon/generator/HelidonGeneratorTest.java @@ -34,13 +34,16 @@ import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; +import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; +import java.io.PrintStream; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Objects; import java.util.Properties; import java.util.stream.Stream; @@ -54,11 +57,13 @@ class HelidonGeneratorTest { private Properties projectProps; private JavaProject project; private GeneratorContext ctx; + private ByteArrayOutputStream out; @BeforeEach public void setUp() throws IOException { ProcessorConfig config = new ProcessorConfig(); projectProps = new Properties(); + out = new ByteArrayOutputStream(); projectProps.put("jkube.generator.name", "helidon"); targetDir = Files.createDirectory(temporaryFolder.resolve("target")).toFile(); project = JavaProject.builder() @@ -73,13 +78,30 @@ public void setUp() throws IOException { .packaging("jar") .build(); ctx = GeneratorContext.builder() - .logger(new KitLogger.SilentLogger()) + .logger(new KitLogger.PrintStreamLogger(new PrintStream(out))) .project(project) .config(config) .strategy(JKubeBuildStrategy.s2i) .build(); } + @Test + void constructorShouldLogHelidonApplicationConfigPath() { + // Given + ctx = ctx.toBuilder() + .project(project.toBuilder() + .compileClassPathElement(Objects.requireNonNull(getClass().getResource("/custom-port-microprofile-configuration")).getPath()) + .build()) + .build(); + // When + HelidonGenerator helidonGenerator = new HelidonGenerator(ctx); + // Then + assertThat(helidonGenerator).isNotNull(); + assertThat(out.toString()) + .contains("helidon: Helidon Application Config loaded from: " + + HelidonGeneratorTest.class.getResource("/custom-port-microprofile-configuration/META-INF/microprofile-config.properties")); + } + @Test @DisplayName("isApplicable, when valid ImageConfiguration present, then returns false") void isApplicable_whenImageConfigurationPresent_thenReturnFalse() { diff --git a/jkube-kit/jkube-kit-micronaut/src/main/java/org/eclipse/jkube/micronaut/enricher/MicronautHealthCheckEnricher.java b/jkube-kit/jkube-kit-micronaut/src/main/java/org/eclipse/jkube/micronaut/enricher/MicronautHealthCheckEnricher.java index c3d2fb5730..0a792f538b 100644 --- a/jkube-kit/jkube-kit-micronaut/src/main/java/org/eclipse/jkube/micronaut/enricher/MicronautHealthCheckEnricher.java +++ b/jkube-kit/jkube-kit-micronaut/src/main/java/org/eclipse/jkube/micronaut/enricher/MicronautHealthCheckEnricher.java @@ -14,6 +14,7 @@ package org.eclipse.jkube.micronaut.enricher; import java.util.Collections; +import java.util.Properties; import org.eclipse.jkube.kit.common.Configs; import org.eclipse.jkube.kit.config.image.ImageConfiguration; @@ -27,6 +28,7 @@ import lombok.Getter; import static org.eclipse.jkube.kit.common.Configs.asInteger; +import static org.eclipse.jkube.kit.common.util.PropertiesUtil.JKUBE_INTERNAL_APP_CONFIG_FILE_LOCATION; import static org.eclipse.jkube.micronaut.MicronautUtils.extractPort; import static org.eclipse.jkube.micronaut.MicronautUtils.getMicronautConfiguration; import static org.eclipse.jkube.micronaut.MicronautUtils.hasMicronautPlugin; @@ -34,6 +36,8 @@ public class MicronautHealthCheckEnricher extends AbstractHealthCheckEnricher { + private final Properties micronautApplicationConfiguration; + @AllArgsConstructor private enum Config implements Configs.Config { READINESS_PROBE_INITIAL_DELAY_SECONDS("readinessProbeInitialDelaySeconds", null), @@ -55,6 +59,9 @@ private enum Config implements Configs.Config { public MicronautHealthCheckEnricher(JKubeEnricherContext buildContext) { super(buildContext, "jkube-healthcheck-micronaut"); + micronautApplicationConfiguration = getMicronautConfiguration(getContext().getProject()); + log.debug("Micronaut Application Config loaded from: %s", + micronautApplicationConfiguration.get(JKUBE_INTERNAL_APP_CONFIG_FILE_LOCATION)); } @Override @@ -77,7 +84,7 @@ private boolean isApplicable() { if (!hasMicronautPlugin(getContext().getProject())){ return false; } - return isHealthEnabled(getMicronautConfiguration(getContext().getProject())); + return isHealthEnabled(micronautApplicationConfiguration); } private Probe buildProbe(Integer initialDelaySeconds, Integer periodSeconds){ diff --git a/jkube-kit/jkube-kit-micronaut/src/main/java/org/eclipse/jkube/micronaut/generator/MicronautGenerator.java b/jkube-kit/jkube-kit-micronaut/src/main/java/org/eclipse/jkube/micronaut/generator/MicronautGenerator.java index 00cfd56753..a74ac1d12b 100644 --- a/jkube-kit/jkube-kit-micronaut/src/main/java/org/eclipse/jkube/micronaut/generator/MicronautGenerator.java +++ b/jkube-kit/jkube-kit-micronaut/src/main/java/org/eclipse/jkube/micronaut/generator/MicronautGenerator.java @@ -16,24 +16,30 @@ import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.Properties; import org.eclipse.jkube.generator.api.GeneratorContext; import org.eclipse.jkube.generator.javaexec.JavaExecGenerator; import org.eclipse.jkube.kit.common.Arguments; import org.eclipse.jkube.kit.common.AssemblyConfiguration; import org.eclipse.jkube.kit.config.image.ImageConfiguration; +import org.eclipse.jkube.micronaut.MicronautUtils; +import static org.eclipse.jkube.kit.common.util.PropertiesUtil.JKUBE_INTERNAL_APP_CONFIG_FILE_LOCATION; import static org.eclipse.jkube.micronaut.MicronautUtils.extractPort; -import static org.eclipse.jkube.micronaut.MicronautUtils.getMicronautConfiguration; import static org.eclipse.jkube.micronaut.MicronautUtils.hasMicronautPlugin; public class MicronautGenerator extends JavaExecGenerator { private final MicronautNestedGenerator nestedGenerator; + private final Properties micronautApplicationConfiguration; public MicronautGenerator(GeneratorContext context) { super(context, "micronaut"); this.nestedGenerator = MicronautNestedGenerator.from(context, getGeneratorConfig()); + micronautApplicationConfiguration = MicronautUtils.getMicronautConfiguration(getContext().getProject()); + log.debug("Micronaut Application Config loaded from: %s", + micronautApplicationConfiguration.get(JKUBE_INTERNAL_APP_CONFIG_FILE_LOCATION)); } @Override @@ -80,7 +86,7 @@ protected AssemblyConfiguration createAssembly() { @Override protected String getDefaultWebPort() { return extractPort( - getMicronautConfiguration(getProject()), super.getDefaultWebPort() + micronautApplicationConfiguration, super.getDefaultWebPort() ); } } diff --git a/jkube-kit/jkube-kit-micronaut/src/test/java/org/eclipse/jkube/micronaut/MicronautUtilsGetMicronautConfigurationTest.java b/jkube-kit/jkube-kit-micronaut/src/test/java/org/eclipse/jkube/micronaut/MicronautUtilsGetMicronautConfigurationTest.java index 5690f3e61f..fc4c628d62 100644 --- a/jkube-kit/jkube-kit-micronaut/src/test/java/org/eclipse/jkube/micronaut/MicronautUtilsGetMicronautConfigurationTest.java +++ b/jkube-kit/jkube-kit-micronaut/src/test/java/org/eclipse/jkube/micronaut/MicronautUtilsGetMicronautConfigurationTest.java @@ -52,9 +52,10 @@ void getMicronautConfigurationFromProperties(String directory, String nameSuffix // When final Properties props = getMicronautConfiguration(javaProject); // Then - assertThat(props).containsExactly( + assertThat(props).contains( entry("micronaut.application.name", "port-config-test-" + nameSuffix), - entry("micronaut.server.port", "1337")); + entry("micronaut.server.port", "1337")) + .containsKey("jkube.internal.application-config-file.path"); } } diff --git a/jkube-kit/jkube-kit-micronaut/src/test/java/org/eclipse/jkube/micronaut/MicronautUtilsTest.java b/jkube-kit/jkube-kit-micronaut/src/test/java/org/eclipse/jkube/micronaut/MicronautUtilsTest.java index 89d12abdc7..6b1fcc93e7 100644 --- a/jkube-kit/jkube-kit-micronaut/src/test/java/org/eclipse/jkube/micronaut/MicronautUtilsTest.java +++ b/jkube-kit/jkube-kit-micronaut/src/test/java/org/eclipse/jkube/micronaut/MicronautUtilsTest.java @@ -85,7 +85,8 @@ void getMicronautConfigurationPrecedence() throws IOException { // When final Properties props = getMicronautConfiguration(javaProject); // Then - assertThat(props).containsExactly( + assertThat(props).containsOnly( + entry("jkube.internal.application-config-file.path", MicronautUtilsTest.class.getResource("/utils-test/port-config/properties/application.properties")), entry("micronaut.application.name", "port-config-test-PROPERTIES"), entry("micronaut.server.port", "1337")); } diff --git a/jkube-kit/jkube-kit-micronaut/src/test/java/org/eclipse/jkube/micronaut/enricher/MicronautHealthCheckEnricherTest.java b/jkube-kit/jkube-kit-micronaut/src/test/java/org/eclipse/jkube/micronaut/enricher/MicronautHealthCheckEnricherTest.java index c36304b35d..c01f6446ce 100644 --- a/jkube-kit/jkube-kit-micronaut/src/test/java/org/eclipse/jkube/micronaut/enricher/MicronautHealthCheckEnricherTest.java +++ b/jkube-kit/jkube-kit-micronaut/src/test/java/org/eclipse/jkube/micronaut/enricher/MicronautHealthCheckEnricherTest.java @@ -13,8 +13,11 @@ */ package org.eclipse.jkube.micronaut.enricher; +import java.io.ByteArrayOutputStream; import java.io.File; +import java.io.PrintStream; import java.util.Collections; +import java.util.Objects; import org.eclipse.jkube.kit.common.JavaProject; import org.eclipse.jkube.kit.common.KitLogger; @@ -44,6 +47,7 @@ class MicronautHealthCheckEnricherTest { private JKubeEnricherContext context; private JavaProject project; private KubernetesListBuilder klb; + private ByteArrayOutputStream out; @BeforeEach void setUp() { @@ -51,16 +55,34 @@ void setUp() { .outputDirectory(new File("target")) .build(); klb = new KubernetesListBuilder(); + out = new ByteArrayOutputStream(); klb.addToItems(new ServiceBuilder() .withNewMetadata().withName("make-it-real").endMetadata() .build()); context = JKubeEnricherContext.builder() - .log(new KitLogger.SilentLogger()) + .log(new KitLogger.PrintStreamLogger(new PrintStream(out))) .processorConfig(new ProcessorConfig()) .project(project) .build(); } + @Test + void constructorShouldLogMicronautApplicationConfigPath() { + // Given + context = context.toBuilder() + .project(project.toBuilder() + .compileClassPathElement(Objects.requireNonNull(getClass().getResource("/utils-test/port-config/properties")).getPath()) + .build()) + .build(); + // When + MicronautHealthCheckEnricher micronautHealthCheckEnricher = new MicronautHealthCheckEnricher(context); + // Then + assertThat(micronautHealthCheckEnricher).isNotNull(); + assertThat(out.toString()) + .contains("jkube-healthcheck-micronaut: Micronaut Application Config loaded from: " + + MicronautHealthCheckEnricherTest.class.getResource("/utils-test/port-config/properties/application.properties")); + } + @Test void createWithNoDeployment() { // When diff --git a/jkube-kit/jkube-kit-micronaut/src/test/java/org/eclipse/jkube/micronaut/generator/MicronautGeneratorTest.java b/jkube-kit/jkube-kit-micronaut/src/test/java/org/eclipse/jkube/micronaut/generator/MicronautGeneratorTest.java index 99da146189..e6a0a67952 100644 --- a/jkube-kit/jkube-kit-micronaut/src/test/java/org/eclipse/jkube/micronaut/generator/MicronautGeneratorTest.java +++ b/jkube-kit/jkube-kit-micronaut/src/test/java/org/eclipse/jkube/micronaut/generator/MicronautGeneratorTest.java @@ -13,10 +13,14 @@ */ package org.eclipse.jkube.micronaut.generator; +import java.io.ByteArrayOutputStream; import java.io.File; +import java.io.PrintStream; +import java.nio.file.Path; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Objects; import java.util.Properties; import org.eclipse.jkube.generator.api.GeneratorContext; @@ -38,21 +42,41 @@ class MicronautGeneratorTest { private GeneratorContext ctx; private MicronautGenerator micronautGenerator; + private ByteArrayOutputStream out; @BeforeEach - void setUp() { + void setUp(@TempDir Path temporaryFolder) { final Properties projectProperties = new Properties(); + out = new ByteArrayOutputStream(); projectProperties.put("jkube.generator.micronaut.mainClass", "com.example.Main"); ctx = GeneratorContext.builder() - .logger(new KitLogger.SilentLogger()) + .logger(new KitLogger.PrintStreamLogger(new PrintStream(out))) .project(JavaProject.builder() .version("1.33.7-SNAPSHOT") .properties(projectProperties) + .outputDirectory(temporaryFolder.resolve("target").toFile()) .build()) .build(); micronautGenerator = new MicronautGenerator(ctx); } + @Test + void constructorShouldLogHelidonApplicationConfigPath() { + // Given + ctx = ctx.toBuilder() + .project(ctx.getProject().toBuilder() + .compileClassPathElement(Objects.requireNonNull(MicronautGeneratorTest.class.getResource("/utils-test/port-config/properties")).getPath()) + .build()) + .build(); + // When + micronautGenerator = new MicronautGenerator(ctx); + // Then + assertThat(micronautGenerator).isNotNull(); + assertThat(out.toString()) + .contains("micronaut: Micronaut Application Config loaded from: " + + MicronautGeneratorTest.class.getResource("/utils-test/port-config/properties/application.properties")); + } + @Test void isApplicableWithNoPlugin() { // When diff --git a/jkube-kit/jkube-kit-quarkus/src/main/java/org/eclipse/jkube/quarkus/enricher/QuarkusHealthCheckEnricher.java b/jkube-kit/jkube-kit-quarkus/src/main/java/org/eclipse/jkube/quarkus/enricher/QuarkusHealthCheckEnricher.java index ee4bfa5191..5e9e7b6c33 100644 --- a/jkube-kit/jkube-kit-quarkus/src/main/java/org/eclipse/jkube/quarkus/enricher/QuarkusHealthCheckEnricher.java +++ b/jkube-kit/jkube-kit-quarkus/src/main/java/org/eclipse/jkube/quarkus/enricher/QuarkusHealthCheckEnricher.java @@ -13,6 +13,7 @@ */ package org.eclipse.jkube.quarkus.enricher; +import java.util.Properties; import java.util.function.Function; import org.eclipse.jkube.kit.common.Configs; @@ -28,6 +29,7 @@ import org.apache.commons.lang3.StringUtils; import static org.eclipse.jkube.kit.common.Configs.asInteger; +import static org.eclipse.jkube.kit.common.util.PropertiesUtil.JKUBE_INTERNAL_APP_CONFIG_FILE_LOCATION; import static org.eclipse.jkube.quarkus.QuarkusUtils.QUARKUS_GROUP_ID; import static org.eclipse.jkube.quarkus.QuarkusUtils.concatPath; import static org.eclipse.jkube.quarkus.QuarkusUtils.isStartupEndpointSupported; @@ -39,9 +41,13 @@ * Enriches Quarkus containers with health checks if the quarkus-smallrye-health is present */ public class QuarkusHealthCheckEnricher extends AbstractHealthCheckEnricher { + private final Properties quarkusApplicationConfiguration; public QuarkusHealthCheckEnricher(JKubeEnricherContext buildContext) { super(buildContext, "jkube-healthcheck-quarkus"); + quarkusApplicationConfiguration = getQuarkusConfiguration(getContext().getProject()); + log.debug("Quarkus Application Config loaded from: %s", + quarkusApplicationConfiguration.get(JKUBE_INTERNAL_APP_CONFIG_FILE_LOCATION)); } @AllArgsConstructor @@ -73,7 +79,7 @@ protected Probe getLivenessProbe() { return discoverQuarkusHealthCheck(asInteger(getConfig(Config.LIVENESS_INITIAL_DELAY, "10")), QuarkusUtils::resolveQuarkusLivenessPath); } - + @Override protected Probe getStartupProbe() { if (isStartupEndpointSupported(getContext().getProject())) { @@ -89,7 +95,7 @@ private Probe discoverQuarkusHealthCheck(int initialDelay, Function configs) { @Override protected String getDefaultWebPort() { - return extractPort(getProject(), getQuarkusConfiguration(getProject()), super.getDefaultWebPort()); + return extractPort(getProject(), quarkusApplicationConfiguration, super.getDefaultWebPort()); } @Override diff --git a/jkube-kit/jkube-kit-quarkus/src/test/java/org/eclipse/jkube/quarkus/QuarkusUtilsTest.java b/jkube-kit/jkube-kit-quarkus/src/test/java/org/eclipse/jkube/quarkus/QuarkusUtilsTest.java index c980e9e6b0..a63d97909a 100644 --- a/jkube-kit/jkube-kit-quarkus/src/test/java/org/eclipse/jkube/quarkus/QuarkusUtilsTest.java +++ b/jkube-kit/jkube-kit-quarkus/src/test/java/org/eclipse/jkube/quarkus/QuarkusUtilsTest.java @@ -109,6 +109,7 @@ void getQuarkusConfiguration_propertiesAndYamlProjectProperties_shouldUseProject final Properties props = getQuarkusConfiguration(javaProject); // Then assertThat(props).containsOnly( + entry("jkube.internal.application-config-file.path", QuarkusUtilsTest.class.getResource("/utils-test/config/properties/application.properties")), entry("quarkus.http.port", "42"), entry("%dev.quarkus.http.port", "8082")); } @@ -124,6 +125,7 @@ void getQuarkusConfiguration_propertiesAndYaml_shouldUseProperties() { final Properties props = getQuarkusConfiguration(javaProject); // Then assertThat(props).containsOnly( + entry("jkube.internal.application-config-file.path", QuarkusUtilsTest.class.getResource("/utils-test/config/properties/application.properties")), entry("quarkus.http.port", "1337"), entry("%dev.quarkus.http.port", "8082")); } @@ -138,6 +140,7 @@ void getQuarkusConfiguration_yamlOnly_shouldUseYaml() { final Properties props = getQuarkusConfiguration(javaProject); // Then assertThat(props).containsOnly( + entry("jkube.internal.application-config-file.path", QuarkusUtilsTest.class.getResource("/utils-test/config/yaml/application.yml")), entry("quarkus.http.port", "31337"), entry("%dev.quarkus.http.port", "13373")); } diff --git a/jkube-kit/jkube-kit-quarkus/src/test/java/org/eclipse/jkube/quarkus/enricher/QuarkusHealthCheckEnricherTest.java b/jkube-kit/jkube-kit-quarkus/src/test/java/org/eclipse/jkube/quarkus/enricher/QuarkusHealthCheckEnricherTest.java index 5fc807023b..2cbea55b4c 100644 --- a/jkube-kit/jkube-kit-quarkus/src/test/java/org/eclipse/jkube/quarkus/enricher/QuarkusHealthCheckEnricherTest.java +++ b/jkube-kit/jkube-kit-quarkus/src/test/java/org/eclipse/jkube/quarkus/enricher/QuarkusHealthCheckEnricherTest.java @@ -33,7 +33,9 @@ import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; +import java.io.ByteArrayOutputStream; import java.io.File; +import java.io.PrintStream; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -48,11 +50,13 @@ class QuarkusHealthCheckEnricherTest { private KubernetesListBuilder klb; private JavaProject javaProject; private JKubeEnricherContext context; + private ByteArrayOutputStream out; @BeforeEach void setUp() { properties = new Properties(); klb = new KubernetesListBuilder(); + out = new ByteArrayOutputStream(); // @formatter:off klb.addToItems(new DeploymentBuilder() .editOrNewSpec() @@ -74,12 +78,29 @@ void setUp() { .dependenciesWithTransitive(new ArrayList<>()) .build(); context = JKubeEnricherContext.builder() - .log(new KitLogger.SilentLogger()) + .log(new KitLogger.PrintStreamLogger(new PrintStream(out))) .project(javaProject) .processorConfig(new ProcessorConfig()) .build(); } + @Test + void constructorShouldLogQuarkusApplicationConfigPath() { + // Given + context = context.toBuilder() + .project(javaProject.toBuilder() + .compileClassPathElement(Objects.requireNonNull(getClass().getResource("/utils-test/config/properties")).getPath()) + .build()) + .build(); + // When + QuarkusHealthCheckEnricher quarkusHealthCheckEnricher = new QuarkusHealthCheckEnricher(context); + // Then + assertThat(quarkusHealthCheckEnricher).isNotNull(); + assertThat(out.toString()) + .contains("jkube-healthcheck-quarkus: Quarkus Application Config loaded from: " + + QuarkusHealthCheckEnricherTest.class.getResource("/utils-test/config/properties/application.properties")); + } + @Test void create_withCustomPath_shouldReturnCustomPath() { // Given diff --git a/jkube-kit/jkube-kit-quarkus/src/test/java/org/eclipse/jkube/quarkus/generator/QuarkusGeneratorTest.java b/jkube-kit/jkube-kit-quarkus/src/test/java/org/eclipse/jkube/quarkus/generator/QuarkusGeneratorTest.java index aad82f905e..19bb1dd4f2 100644 --- a/jkube-kit/jkube-kit-quarkus/src/test/java/org/eclipse/jkube/quarkus/generator/QuarkusGeneratorTest.java +++ b/jkube-kit/jkube-kit-quarkus/src/test/java/org/eclipse/jkube/quarkus/generator/QuarkusGeneratorTest.java @@ -13,14 +13,17 @@ */ package org.eclipse.jkube.quarkus.generator; +import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; +import java.io.PrintStream; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.Objects; import java.util.Properties; import java.util.stream.Stream; @@ -70,6 +73,7 @@ class QuarkusGeneratorTest { private Properties projectProps; private JavaProject project; private GeneratorContext ctx; + private ByteArrayOutputStream out; @BeforeEach void setUp() throws IOException { @@ -77,6 +81,7 @@ void setUp() throws IOException { projectProps = new Properties(); projectProps.put("jkube.generator.name", "quarkus"); targetDir = Files.createDirectory(temporaryFolder.resolve("target")).toFile(); + out = new ByteArrayOutputStream(); project = JavaProject.builder() .version("0.0.1-SNAPSHOT") .baseDirectory(targetDir) @@ -86,13 +91,30 @@ void setUp() throws IOException { .outputDirectory(targetDir) .build(); ctx = GeneratorContext.builder() - .logger(new KitLogger.SilentLogger()) + .logger(new KitLogger.PrintStreamLogger(new PrintStream(out))) .project(project) .config(config) .strategy(JKubeBuildStrategy.s2i) .build(); } + @Test + void constructorShouldLogQuarkusApplicationConfigPath() { + // Given + ctx = ctx.toBuilder() + .project(project.toBuilder() + .compileClassPathElement(Objects.requireNonNull(getClass().getResource("/generator-extract-ports")).getPath()) + .build()) + .build(); + // When + QuarkusGenerator quarkusGenerator = new QuarkusGenerator(ctx); + // Then + assertThat(quarkusGenerator).isNotNull(); + assertThat(out.toString()) + .contains("quarkus: Quarkus Application Config loaded from: " + + QuarkusGeneratorTest.class.getResource("/generator-extract-ports/application.properties")); + } + @Nested @TestInstance(TestInstance.Lifecycle.PER_CLASS) @DisplayName("isApplicable") diff --git a/jkube-kit/jkube-kit-spring-boot/src/main/java/org/eclipse/jkube/springboot/enricher/SpringBootHealthCheckEnricher.java b/jkube-kit/jkube-kit-spring-boot/src/main/java/org/eclipse/jkube/springboot/enricher/SpringBootHealthCheckEnricher.java index 09f0f81dd3..58c357b6d6 100644 --- a/jkube-kit/jkube-kit-spring-boot/src/main/java/org/eclipse/jkube/springboot/enricher/SpringBootHealthCheckEnricher.java +++ b/jkube-kit/jkube-kit-spring-boot/src/main/java/org/eclipse/jkube/springboot/enricher/SpringBootHealthCheckEnricher.java @@ -19,11 +19,16 @@ import lombok.AllArgsConstructor; import lombok.Getter; import org.eclipse.jkube.kit.common.Configs; +import org.eclipse.jkube.kit.common.util.JKubeProjectUtil; import org.eclipse.jkube.kit.common.util.SpringBootConfiguration; +import org.eclipse.jkube.kit.common.util.SpringBootUtil; import org.eclipse.jkube.kit.enricher.api.JKubeEnricherContext; import org.eclipse.jkube.kit.enricher.specific.AbstractHealthCheckEnricher; import org.apache.commons.lang3.StringUtils; +import java.util.Properties; + +import static org.eclipse.jkube.kit.common.util.PropertiesUtil.JKUBE_INTERNAL_APP_CONFIG_FILE_LOCATION; import static org.eclipse.jkube.kit.common.util.SpringBootUtil.hasSpringWebFluxDependency; /** @@ -63,6 +68,11 @@ private enum Config implements Configs.Config { public SpringBootHealthCheckEnricher(JKubeEnricherContext buildContext) { super(buildContext, ENRICHER_NAME); + Properties springBootApplicationConfig = SpringBootUtil.getSpringBootApplicationProperties( + SpringBootUtil.getSpringBootActiveProfile(getContext().getProject()), + JKubeProjectUtil.getClassLoader(getContext().getProject())); + log.debug("Spring Boot Application Config loaded from: %s", + springBootApplicationConfig.get(JKUBE_INTERNAL_APP_CONFIG_FILE_LOCATION)); } @Override diff --git a/jkube-kit/jkube-kit-spring-boot/src/main/java/org/eclipse/jkube/springboot/generator/SpringBootGenerator.java b/jkube-kit/jkube-kit-spring-boot/src/main/java/org/eclipse/jkube/springboot/generator/SpringBootGenerator.java index 967aaaa1b5..952b9ee50e 100644 --- a/jkube-kit/jkube-kit-spring-boot/src/main/java/org/eclipse/jkube/springboot/generator/SpringBootGenerator.java +++ b/jkube-kit/jkube-kit-spring-boot/src/main/java/org/eclipse/jkube/springboot/generator/SpringBootGenerator.java @@ -16,6 +16,7 @@ import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.Properties; import org.eclipse.jkube.generator.api.GeneratorContext; import org.eclipse.jkube.generator.api.GeneratorMode; @@ -32,6 +33,7 @@ import lombok.Getter; import org.apache.commons.lang3.StringUtils; +import static org.eclipse.jkube.kit.common.util.PropertiesUtil.JKUBE_INTERNAL_APP_CONFIG_FILE_LOCATION; import static org.eclipse.jkube.kit.common.util.SpringBootUtil.DEV_TOOLS_REMOTE_SECRET; import static org.eclipse.jkube.kit.common.util.SpringBootUtil.isSpringBootRepackage; import static org.eclipse.jkube.springboot.SpringBootDevtoolsUtils.addDevToolsFilesToFatJar; @@ -58,6 +60,11 @@ public enum Config implements Configs.Config { public SpringBootGenerator(GeneratorContext context) { super(context, "spring-boot"); nestedGenerator = SpringBootNestedGenerator.from(context, getGeneratorConfig(), detectFatJar()); + Properties springBootApplicationConfig = SpringBootUtil.getSpringBootApplicationProperties( + SpringBootUtil.getSpringBootActiveProfile(getContext().getProject()), + JKubeProjectUtil.getClassLoader(getContext().getProject())); + log.debug("Spring Boot Application Config loaded from: %s", + springBootApplicationConfig.get(JKUBE_INTERNAL_APP_CONFIG_FILE_LOCATION)); } @Override diff --git a/jkube-kit/jkube-kit-spring-boot/src/test/java/org/eclipse/jkube/springboot/enricher/AbstractSpringBootHealthCheckEnricherTestSupport.java b/jkube-kit/jkube-kit-spring-boot/src/test/java/org/eclipse/jkube/springboot/enricher/AbstractSpringBootHealthCheckEnricherTestSupport.java index 612c74d037..f51ca945e1 100644 --- a/jkube-kit/jkube-kit-spring-boot/src/test/java/org/eclipse/jkube/springboot/enricher/AbstractSpringBootHealthCheckEnricherTestSupport.java +++ b/jkube-kit/jkube-kit-spring-boot/src/test/java/org/eclipse/jkube/springboot/enricher/AbstractSpringBootHealthCheckEnricherTestSupport.java @@ -13,13 +13,16 @@ */ package org.eclipse.jkube.springboot.enricher; +import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; +import java.io.PrintStream; import java.net.URL; import java.net.URLClassLoader; import java.nio.file.Files; import java.nio.file.Path; import java.util.Collections; +import java.util.Objects; import java.util.Properties; import java.util.TreeMap; @@ -52,6 +55,7 @@ */ public abstract class AbstractSpringBootHealthCheckEnricherTestSupport { private Properties props; + private ByteArrayOutputStream out; protected JKubeEnricherContext context; @@ -60,9 +64,10 @@ public abstract class AbstractSpringBootHealthCheckEnricherTestSupport { @BeforeEach void init(@TempDir Path project) throws IOException { props = new Properties(); + out = new ByteArrayOutputStream(); projectClassLoaders = mock(ProjectClassLoaders.class, RETURNS_DEEP_STUBS); context = spy(JKubeEnricherContext.builder() - .log(new KitLogger.SilentLogger()) + .log(new KitLogger.PrintStreamLogger(new PrintStream(out))) .project(JavaProject.builder() .properties(props) .baseDirectory(project.toFile()) @@ -85,6 +90,23 @@ private boolean isSpringBootOne() { return getSpringBootVersion().substring(0, getSpringBootVersion().indexOf('.')).equals("1"); } + @Test + void constructorShouldLogSpringBootApplicationConfigPath() { + // Given + context = context.toBuilder() + .project(context.getProject().toBuilder() + .compileClassPathElement(Objects.requireNonNull(getClass().getResource("/port-override-application-properties")).getPath()) + .build()) + .build(); + // When + SpringBootHealthCheckEnricher springBootHealthCheckEnricher = new SpringBootHealthCheckEnricher(context); + // Then + assertThat(springBootHealthCheckEnricher).isNotNull(); + assertThat(out.toString()) + .contains("jkube-healthcheck-spring-boot: Spring Boot Application Config loaded from: " + + AbstractSpringBootHealthCheckEnricherTestSupport.class.getResource("/port-override-application-properties/application.properties")); + } + @Test void zeroConfig() { SpringBootHealthCheckEnricher enricher = new SpringBootHealthCheckEnricher(context); diff --git a/jkube-kit/jkube-kit-spring-boot/src/test/java/org/eclipse/jkube/springboot/generator/SpringBootGeneratorTest.java b/jkube-kit/jkube-kit-spring-boot/src/test/java/org/eclipse/jkube/springboot/generator/SpringBootGeneratorTest.java index 89d6a20a4c..a60a198813 100644 --- a/jkube-kit/jkube-kit-spring-boot/src/test/java/org/eclipse/jkube/springboot/generator/SpringBootGeneratorTest.java +++ b/jkube-kit/jkube-kit-spring-boot/src/test/java/org/eclipse/jkube/springboot/generator/SpringBootGeneratorTest.java @@ -13,8 +13,10 @@ */ package org.eclipse.jkube.springboot.generator; +import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; +import java.io.PrintStream; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; @@ -44,11 +46,13 @@ class SpringBootGeneratorTest { private GeneratorContext context; + private ByteArrayOutputStream out; @BeforeEach void setUp(@TempDir Path temporaryFolder) throws IOException { + out = new ByteArrayOutputStream(); context = GeneratorContext.builder() - .logger(new KitLogger.SilentLogger()) + .logger(new KitLogger.PrintStreamLogger(new PrintStream(out))) .project(JavaProject.builder() .outputDirectory(Files.createDirectory(temporaryFolder.resolve("target")).toFile()) .version("1.0.0") @@ -56,6 +60,23 @@ void setUp(@TempDir Path temporaryFolder) throws IOException { .build(); } + @Test + void constructorShouldLogSpringBootApplicationConfigPath() { + // Given + context = context.toBuilder() + .project(context.getProject().toBuilder() + .compileClassPathElement(Objects.requireNonNull(getClass().getResource("/port-override-application-properties")).getPath()) + .build()) + .build(); + // When + SpringBootGenerator springBootGenerator = new SpringBootGenerator(context); + // Then + assertThat(springBootGenerator).isNotNull(); + assertThat(out.toString()) + .contains("spring-boot: Spring Boot Application Config loaded from: " + + SpringBootGeneratorTest.class.getResource("/port-override-application-properties/application.properties")); + } + @Test @DisplayName("isApplicable, when valid ImageConfiguration present, then returns false") void isApplicable_whenImageConfigurationPresent_thenReturnFalse() { @@ -224,7 +245,7 @@ void getExtraJavaOptions_whenColorEnabled_thenAddColorOption() { private void withPlugin(Plugin plugin) { context = context.toBuilder() - .project(JavaProject.builder().plugin(plugin).build()) + .project(context.getProject().toBuilder().plugin(plugin).build()) .build(); } } diff --git a/jkube-kit/jkube-kit-thorntail-v2/src/main/java/org/eclipse/jkube/thorntail/v2/enricher/ThorntailV2HealthCheckEnricher.java b/jkube-kit/jkube-kit-thorntail-v2/src/main/java/org/eclipse/jkube/thorntail/v2/enricher/ThorntailV2HealthCheckEnricher.java index 341ba313ed..4767e25d5b 100644 --- a/jkube-kit/jkube-kit-thorntail-v2/src/main/java/org/eclipse/jkube/thorntail/v2/enricher/ThorntailV2HealthCheckEnricher.java +++ b/jkube-kit/jkube-kit-thorntail-v2/src/main/java/org/eclipse/jkube/thorntail/v2/enricher/ThorntailV2HealthCheckEnricher.java @@ -24,15 +24,21 @@ import java.util.Properties; +import static org.eclipse.jkube.kit.common.util.PropertiesUtil.JKUBE_INTERNAL_APP_CONFIG_FILE_LOCATION; + /** * Enriches thorntail-v2 containers with health checks if the monitoring fraction is present. */ public class ThorntailV2HealthCheckEnricher extends AbstractHealthCheckEnricher { private static final String IO_THORNTAIL = "io.thorntail"; + private final Properties thorntailApplicationConfiguration; public ThorntailV2HealthCheckEnricher(JKubeEnricherContext buildContext) { super(buildContext, "jkube-healthcheck-thorntail-v2"); + thorntailApplicationConfiguration = ThorntailUtil.getThorntailProperties(getContext().getProject()); + log.debug("Thorntail Application Config loaded from: %s", + thorntailApplicationConfiguration.get(JKUBE_INTERNAL_APP_CONFIG_FILE_LOCATION)); } @AllArgsConstructor @@ -91,10 +97,9 @@ protected String getScheme() { } protected int getPort() { - final Properties properties = ThorntailUtil.getThorntailProperties(getContext().getProject()); - properties.putAll(System.getProperties()); - if (properties.containsKey("thorntail.http.port")) { - return Integer.parseInt((String) properties.get("thorntail.http.port")); + thorntailApplicationConfiguration.putAll(System.getProperties()); + if (thorntailApplicationConfiguration.containsKey("thorntail.http.port")) { + return Integer.parseInt((String) thorntailApplicationConfiguration.get("thorntail.http.port")); } return Configs.asInt(getConfig(Config.PORT)); @@ -103,4 +108,4 @@ protected int getPort() { protected String getPath() { return getConfig(Config.PATH); } -} \ No newline at end of file +} diff --git a/jkube-kit/jkube-kit-thorntail-v2/src/main/java/org/eclipse/jkube/thorntail/v2/generator/ThorntailV2Generator.java b/jkube-kit/jkube-kit-thorntail-v2/src/main/java/org/eclipse/jkube/thorntail/v2/generator/ThorntailV2Generator.java index 760b98fbca..9e8ab69937 100644 --- a/jkube-kit/jkube-kit-thorntail-v2/src/main/java/org/eclipse/jkube/thorntail/v2/generator/ThorntailV2Generator.java +++ b/jkube-kit/jkube-kit-thorntail-v2/src/main/java/org/eclipse/jkube/thorntail/v2/generator/ThorntailV2Generator.java @@ -15,16 +15,21 @@ import org.eclipse.jkube.generator.api.GeneratorContext; import org.eclipse.jkube.generator.javaexec.JavaExecGenerator; +import org.eclipse.jkube.kit.common.util.ThorntailUtil; import org.eclipse.jkube.kit.config.image.ImageConfiguration; import org.eclipse.jkube.kit.common.util.JKubeProjectUtil; import java.util.List; import java.util.Map; +import static org.eclipse.jkube.kit.common.util.PropertiesUtil.JKUBE_INTERNAL_APP_CONFIG_FILE_LOCATION; + public class ThorntailV2Generator extends JavaExecGenerator { public ThorntailV2Generator(GeneratorContext context) { super(context, "thorntail-v2", JDK.JDK_11); + log.debug("Thorntail Application Config loaded from %s", + ThorntailUtil.getThorntailProperties(getContext().getProject()).get(JKUBE_INTERNAL_APP_CONFIG_FILE_LOCATION)); } @Override diff --git a/jkube-kit/jkube-kit-thorntail-v2/src/test/java/org/eclipse/jkube/thorntail/v2/enricher/ThorntailV2HealthCheckEnricherTest.java b/jkube-kit/jkube-kit-thorntail-v2/src/test/java/org/eclipse/jkube/thorntail/v2/enricher/ThorntailV2HealthCheckEnricherTest.java index 8bb7ae7d09..b1bf733628 100644 --- a/jkube-kit/jkube-kit-thorntail-v2/src/test/java/org/eclipse/jkube/thorntail/v2/enricher/ThorntailV2HealthCheckEnricherTest.java +++ b/jkube-kit/jkube-kit-thorntail-v2/src/test/java/org/eclipse/jkube/thorntail/v2/enricher/ThorntailV2HealthCheckEnricherTest.java @@ -13,10 +13,13 @@ */ package org.eclipse.jkube.thorntail.v2.enricher; +import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.io.PrintStream; import java.nio.file.Files; import java.nio.file.Path; import java.util.Collections; +import java.util.Objects; import java.util.Properties; import org.eclipse.jkube.kit.common.Dependency; @@ -42,6 +45,7 @@ class ThorntailV2HealthCheckEnricherTest { private JKubeEnricherContext context; private Properties properties; private KubernetesListBuilder klb; + private ByteArrayOutputStream out; @TempDir private Path temporaryFolder; @@ -51,6 +55,7 @@ void setUp() throws IOException { properties = new Properties(); ProcessorConfig processorConfig = new ProcessorConfig(); klb = new KubernetesListBuilder(); + out = new ByteArrayOutputStream(); // @formatter:off klb.addToItems(new DeploymentBuilder() .editOrNewSpec() @@ -77,10 +82,27 @@ void setUp() throws IOException { .outputDirectory(Files.createDirectory(temporaryFolder.resolve("target")).toFile()) .build()) .processorConfig(processorConfig) - .log(new KitLogger.SilentLogger()) + .log(new KitLogger.PrintStreamLogger(new PrintStream(out))) .build(); } + @Test + void constructorShouldLogThorntailApplicationConfigPath() { + // Given + context = context.toBuilder() + .project(context.getProject().toBuilder() + .compileClassPathElement(Objects.requireNonNull(getClass().getResource("/application-config/properties")).getPath()) + .build()) + .build(); + // When + ThorntailV2HealthCheckEnricher thorntailV2HealthCheckEnricher = new ThorntailV2HealthCheckEnricher(context); + // Then + assertThat(thorntailV2HealthCheckEnricher).isNotNull(); + assertThat(out.toString()) + .contains("jkube-healthcheck-thorntail-v2: Thorntail Application Config loaded from: " + + ThorntailV2HealthCheckEnricherTest.class.getResource("/application-config/properties/project-defaults.yml")); + } + @Test void createWithDefaultsInKubernetes() { // When diff --git a/jkube-kit/jkube-kit-thorntail-v2/src/test/java/org/eclipse/jkube/thorntail/v2/generator/ThorntailV2GeneratorIsApplicableTest.java b/jkube-kit/jkube-kit-thorntail-v2/src/test/java/org/eclipse/jkube/thorntail/v2/generator/ThorntailV2GeneratorIsApplicableTest.java index 227b62be75..0e528c24e3 100644 --- a/jkube-kit/jkube-kit-thorntail-v2/src/test/java/org/eclipse/jkube/thorntail/v2/generator/ThorntailV2GeneratorIsApplicableTest.java +++ b/jkube-kit/jkube-kit-thorntail-v2/src/test/java/org/eclipse/jkube/thorntail/v2/generator/ThorntailV2GeneratorIsApplicableTest.java @@ -17,31 +17,35 @@ import org.eclipse.jkube.generator.api.GeneratorContext; import org.eclipse.jkube.kit.common.Dependency; import org.eclipse.jkube.kit.common.JavaProject; +import org.eclipse.jkube.kit.common.KitLogger; import org.eclipse.jkube.kit.common.Plugin; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.io.TempDir; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import org.mockito.Mockito; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.Collections; import java.util.List; import java.util.stream.Stream; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; class ThorntailV2GeneratorIsApplicableTest { - private JavaProject project; private GeneratorContext context; @BeforeEach - void setUp() { - project = mock(JavaProject.class, Mockito.RETURNS_DEEP_STUBS); - context = mock(GeneratorContext.class, Mockito.RETURNS_DEEP_STUBS); - when(context.getProject()).thenReturn(project); + void setUp(@TempDir Path temporaryFolder) throws IOException { + context = GeneratorContext.builder() + .project(JavaProject.builder() + .outputDirectory(Files.createDirectory(temporaryFolder.resolve("target")).toFile()) + .build()) + .logger(new KitLogger.SilentLogger()) + .build(); } public static Stream data() { @@ -65,9 +69,11 @@ public static Stream data() { void isApplicable(String testDescription, List pluginList, List dependencyList, List gradlePluginList, boolean expectedValue) { // Given - when(project.getPlugins()).thenReturn(pluginList); - when(project.getDependencies()).thenReturn(dependencyList); - when(project.getGradlePlugins()).thenReturn(gradlePluginList); + context = context.toBuilder().project(context.getProject().toBuilder() + .plugins(pluginList) + .dependencies(dependencyList) + .gradlePlugins(gradlePluginList) + .build()).build(); // When final boolean result = new ThorntailV2Generator(context).isApplicable(Collections.emptyList()); // Then diff --git a/jkube-kit/jkube-kit-thorntail-v2/src/test/resources/application-config/properties/project-defaults.yml b/jkube-kit/jkube-kit-thorntail-v2/src/test/resources/application-config/properties/project-defaults.yml new file mode 100644 index 0000000000..6ec8b83530 --- /dev/null +++ b/jkube-kit/jkube-kit-thorntail-v2/src/test/resources/application-config/properties/project-defaults.yml @@ -0,0 +1,3 @@ +thorntail: + http: + port: 8081 \ No newline at end of file