From a6eeafa3876da7e0be93cb74a5337d4c696f24f0 Mon Sep 17 00:00:00 2001 From: Roberto Cortez Date: Wed, 24 Mar 2021 14:54:57 +0000 Subject: [PATCH] Properly populate ConfigRoot instances with named maps. --- .../BuildTimeConfigurationReader.java | 3 ++ .../test/config/ConfigDefaultValuesTest.java | 46 +++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/core/deployment/src/main/java/io/quarkus/deployment/configuration/BuildTimeConfigurationReader.java b/core/deployment/src/main/java/io/quarkus/deployment/configuration/BuildTimeConfigurationReader.java index 48572a88c31c7..06d9d9a2c71f9 100644 --- a/core/deployment/src/main/java/io/quarkus/deployment/configuration/BuildTimeConfigurationReader.java +++ b/core/deployment/src/main/java/io/quarkus/deployment/configuration/BuildTimeConfigurationReader.java @@ -729,6 +729,9 @@ private Set getAllProperties() { for (ConfigSource configSource : config.getConfigSources()) { properties.addAll(configSource.getPropertyNames()); } + for (String propertyName : config.getPropertyNames()) { + properties.add(propertyName); + } return properties; } } diff --git a/extensions/arc/deployment/src/test/java/io/quarkus/arc/test/config/ConfigDefaultValuesTest.java b/extensions/arc/deployment/src/test/java/io/quarkus/arc/test/config/ConfigDefaultValuesTest.java index 5ff2078ff58d5..4a165d58ec16e 100644 --- a/extensions/arc/deployment/src/test/java/io/quarkus/arc/test/config/ConfigDefaultValuesTest.java +++ b/extensions/arc/deployment/src/test/java/io/quarkus/arc/test/config/ConfigDefaultValuesTest.java @@ -1,8 +1,11 @@ package io.quarkus.arc.test.config; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; +import java.util.Map; + import javax.inject.Inject; import org.eclipse.microprofile.config.Config; @@ -13,14 +16,28 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; +import io.quarkus.arc.deployment.ConfigPropertyBuildItem; +import io.quarkus.deployment.annotations.BuildProducer; +import io.quarkus.deployment.annotations.BuildStep; +import io.quarkus.runtime.annotations.ConfigItem; +import io.quarkus.runtime.annotations.ConfigPhase; +import io.quarkus.runtime.annotations.ConfigRoot; import io.quarkus.test.QuarkusUnitTest; public class ConfigDefaultValuesTest { @RegisterExtension static final QuarkusUnitTest TEST = new QuarkusUnitTest() .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class) + .addClass(ConfigDefaultValuesTest.class) + .addClass(MapBuildTimeConfig.class) + .addClass(MapBuildTimeConfigBuildStep.class) + .addAsResource(new StringAsset(MapBuildTimeConfig.class.getName()), "META-INF/quarkus-config-roots.list") + .addAsResource(new StringAsset(MapBuildTimeConfigBuildStep.class.getName()), + "META-INF/quarkus-build-steps.list") .addAsResource(new StringAsset( "config_ordinal=1000\n" + + "quarkus.map-test.names.naruto=uzumaki\n" + + "%test.quarkus.map-test.names.sasuke=uchiha\n" + "my.prop=1234\n" + "%prod.my.prop=1234\n" + "%dev.my.prop=5678\n" + @@ -55,6 +72,17 @@ void profileDefaultValues() { assertEquals("1234", config.getValue("my.prop", String.class)); } + @Inject + MapBuildTimeConfig mapBuildTimeConfig; + + @Test + void buildTimeConfigMap() { + assertFalse(mapBuildTimeConfig.names.isEmpty()); + assertEquals(2, mapBuildTimeConfig.names.size()); + assertEquals("uzumaki", mapBuildTimeConfig.names.get("naruto")); + assertEquals("uchiha", mapBuildTimeConfig.names.get("sasuke")); + } + private ConfigSource getConfigSourceByName(String name) { for (ConfigSource configSource : config.getConfigSources()) { if (configSource.getName().contains(name)) { @@ -63,4 +91,22 @@ private ConfigSource getConfigSourceByName(String name) { } return null; } + + @ConfigRoot(phase = ConfigPhase.BUILD_AND_RUN_TIME_FIXED, name = "map-test") + public static class MapBuildTimeConfig { + /** + * Empty + */ + @ConfigItem + Map names; + } + + public static class MapBuildTimeConfigBuildStep { + @BuildStep + void validate(BuildProducer configProperties, MapBuildTimeConfig mapBuildTimeConfig) { + assertEquals(2, mapBuildTimeConfig.names.size()); + assertEquals("uzumaki", mapBuildTimeConfig.names.get("naruto")); + assertEquals("uchiha", mapBuildTimeConfig.names.get("sasuke")); + } + } }