Browse Source

Throw or warn for invalid config properties with list syntax

Fixes gh-25309
pull/25507/head
Madhura Bhave 5 years ago
parent
commit
00a358b4d3
  1. 5
      spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/config/InvalidConfigDataPropertyException.java
  2. 7
      spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataEnvironmentPostProcessorIntegrationTests.java
  3. 10
      spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/InvalidConfigDataPropertyExceptionTests.java
  4. 4
      spring-boot-project/spring-boot/src/test/resources/application-include-profiles-list-in-profile-specific-file-test.yml

5
spring-boot-project/spring-boot/src/main/java/org/springframework/boot/context/config/InvalidConfigDataPropertyException.java

@ -43,6 +43,8 @@ public class InvalidConfigDataPropertyException extends ConfigDataException { @@ -43,6 +43,8 @@ public class InvalidConfigDataPropertyException extends ConfigDataException {
Map<ConfigurationPropertyName, ConfigurationPropertyName> warnings = new LinkedHashMap<>();
warnings.put(ConfigurationPropertyName.of("spring.profiles"),
ConfigurationPropertyName.of("spring.config.activate.on-profile"));
warnings.put(ConfigurationPropertyName.of("spring.profiles[0]"),
ConfigurationPropertyName.of("spring.config.activate.on-profile"));
WARNINGS = Collections.unmodifiableMap(warnings);
}
@ -50,8 +52,11 @@ public class InvalidConfigDataPropertyException extends ConfigDataException { @@ -50,8 +52,11 @@ public class InvalidConfigDataPropertyException extends ConfigDataException {
static {
Set<ConfigurationPropertyName> errors = new LinkedHashSet<>();
errors.add(Profiles.INCLUDE_PROFILES);
errors.add(Profiles.INCLUDE_PROFILES.append("[0]"));
errors.add(ConfigurationPropertyName.of(AbstractEnvironment.ACTIVE_PROFILES_PROPERTY_NAME));
errors.add(ConfigurationPropertyName.of(AbstractEnvironment.ACTIVE_PROFILES_PROPERTY_NAME + "[0]"));
errors.add(ConfigurationPropertyName.of(AbstractEnvironment.DEFAULT_PROFILES_PROPERTY_NAME));
errors.add(ConfigurationPropertyName.of(AbstractEnvironment.DEFAULT_PROFILES_PROPERTY_NAME + "[0]"));
PROFILE_SPECIFIC_ERRORS = Collections.unmodifiableSet(errors);
}

7
spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/ConfigDataEnvironmentPostProcessorIntegrationTests.java

@ -642,9 +642,10 @@ class ConfigDataEnvironmentPostProcessorIntegrationTests { @@ -642,9 +642,10 @@ class ConfigDataEnvironmentPostProcessorIntegrationTests {
}
@Test
void runWhenHasIncludedProfilesWithProfileSpecificFileThrowsException() {
assertThatExceptionOfType(InvalidConfigDataPropertyException.class).isThrownBy(() -> this.application
.run("--spring.config.name=application-include-profiles-in-profile-specific-file"));
void runWhenHasIncludedProfilesWithListSyntaxWithProfileSpecificDocumentThrowsException() {
assertThatExceptionOfType(InvalidConfigDataPropertyException.class).isThrownBy(() -> this.application.run(
"--spring.config.name=application-include-profiles-list-in-profile-specific-file",
"--spring.profiles.active=test"));
}
@Test

10
spring-boot-project/spring-boot/src/test/java/org/springframework/boot/context/config/InvalidConfigDataPropertyExceptionTests.java

@ -169,6 +169,16 @@ class InvalidConfigDataPropertyExceptionTests { @@ -169,6 +169,16 @@ class InvalidConfigDataPropertyExceptionTests {
+ "'spring.config.activate.on-profile' [origin: \"spring.profiles\" from property source \"mockProperties\"]");
}
@Test
void throwOrWarnWhenHasWarningPropertyWithListSyntaxLogsWarning() {
MockPropertySource propertySource = new MockPropertySource();
propertySource.setProperty("spring.profiles[0]", "a");
ConfigDataEnvironmentContributor contributor = ConfigDataEnvironmentContributor.ofExisting(propertySource);
InvalidConfigDataPropertyException.throwOrWarn(this.logger, contributor);
verify(this.logger).warn("Property 'spring.profiles[0]' is invalid and should be replaced with "
+ "'spring.config.activate.on-profile' [origin: \"spring.profiles[0]\" from property source \"mockProperties\"]");
}
private static class TestConfigDataResource extends ConfigDataResource {
@Override

4
spring-boot-project/spring-boot/src/test/resources/application-include-profiles-list-in-profile-specific-file-test.yml

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
spring:
profiles:
include:
- p
Loading…
Cancel
Save