From a33dcf034bd051c5098b3fe925dd0f1e911ee005 Mon Sep 17 00:00:00 2001 From: Ben Hale Date: Mon, 11 May 2020 14:24:41 -0700 Subject: [PATCH] Guards Should Use Environment Previously all of the guard behavior was triggered by the contents of environment variables. In a Spring Boot application, looking at the environment isn't the only way to get configuration. This change updates the guards to use the Environment for configuration retrieval. [resolves #30] Signed-off-by: Ben Hale --- pom.xml | 7 -- ...ndingSpecificEnvironmentPostProcessor.java | 6 +- .../boot/BindingsPropertiesProcessor.java | 8 +- .../CassandraBindingsPropertiesProcessor.java | 5 +- .../boot/Db2BindingsPropertiesProcessor.java | 5 +- .../cloud/bindings/boot/Guards.java | 15 +-- .../MongoDbBindingsPropertiesProcessor.java | 5 +- .../MySqlBindingsPropertiesProcessor.java | 5 +- .../OracleBindingsPropertiesProcessor.java | 5 +- ...PostgreSqlBindingsPropertiesProcessor.java | 5 +- .../RedisBindingsPropertiesProcessor.java | 5 +- .../SqlServerBindingsPropertiesProcessor.java | 5 +- ...FlattenedEnvironmentPostProcessorTest.java | 65 +++++------ ...gSpecificEnvironmentPostProcessorTest.java | 105 ++++++++---------- ...sandraBindingsPropertiesProcessorTest.java | 12 +- .../Db2BindingsPropertiesProcessorTest.java | 12 +- .../cloud/bindings/boot/GuardsTest.java | 26 +++-- ...ongoDbBindingsPropertiesProcessorTest.java | 12 +- .../MySqlBindingsPropertiesProcessorTest.java | 12 +- ...OracleBindingsPropertiesProcessorTest.java | 12 +- ...greSqlBindingsPropertiesProcessorTest.java | 12 +- .../RedisBindingsPropertiesProcessorTest.java | 12 +- ...ServerBindingsPropertiesProcessorTest.java | 12 +- 23 files changed, 194 insertions(+), 174 deletions(-) diff --git a/pom.xml b/pom.xml index 1a94f9c..a508d35 100644 --- a/pom.xml +++ b/pom.xml @@ -26,7 +26,6 @@ 1.8 3.0.2 - 0.6.0 2.2.7.RELEASE @@ -65,12 +64,6 @@ provided - - org.junit-pioneer - junit-pioneer - ${junit-pioneer.version} - test - org.mariadb.jdbc mariadb-java-client diff --git a/src/main/java/org/springframework/cloud/bindings/boot/BindingSpecificEnvironmentPostProcessor.java b/src/main/java/org/springframework/cloud/bindings/boot/BindingSpecificEnvironmentPostProcessor.java index 6e57def..def1f88 100644 --- a/src/main/java/org/springframework/cloud/bindings/boot/BindingSpecificEnvironmentPostProcessor.java +++ b/src/main/java/org/springframework/cloud/bindings/boot/BindingSpecificEnvironmentPostProcessor.java @@ -23,7 +23,6 @@ import org.springframework.boot.context.config.ConfigFileApplicationListener; import org.springframework.boot.env.EnvironmentPostProcessor; import org.springframework.cloud.bindings.Bindings; import org.springframework.core.Ordered; -import org.springframework.core.annotation.AnnotationAwareOrderComparator; import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.PropertySource; import org.springframework.core.io.support.SpringFactoriesLoader; @@ -66,7 +65,6 @@ public final class BindingSpecificEnvironmentPostProcessor implements Environmen this.bindings = new Bindings(); this.processors = SpringFactoriesLoader. loadFactories(BindingsPropertiesProcessor.class, getClass().getClassLoader()); - AnnotationAwareOrderComparator.sort(this.processors); } BindingSpecificEnvironmentPostProcessor(Bindings bindings, BindingsPropertiesProcessor... processors) { @@ -76,7 +74,7 @@ public final class BindingSpecificEnvironmentPostProcessor implements Environmen @Override public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) { - if (!isGlobalEnabled()) { + if (!isGlobalEnabled(environment)) { return; } @@ -86,7 +84,7 @@ public final class BindingSpecificEnvironmentPostProcessor implements Environmen } Map properties = new HashMap<>(); - processors.forEach(processor -> processor.process(bindings, properties)); + processors.forEach(processor -> processor.process(environment, bindings, properties)); if (properties.isEmpty()) { log.debug("No properties set from CNB Bindings. Skipping PropertySource creation."); return; diff --git a/src/main/java/org/springframework/cloud/bindings/boot/BindingsPropertiesProcessor.java b/src/main/java/org/springframework/cloud/bindings/boot/BindingsPropertiesProcessor.java index e897e2e..b50e378 100644 --- a/src/main/java/org/springframework/cloud/bindings/boot/BindingsPropertiesProcessor.java +++ b/src/main/java/org/springframework/cloud/bindings/boot/BindingsPropertiesProcessor.java @@ -17,6 +17,7 @@ package org.springframework.cloud.bindings.boot; import org.springframework.cloud.bindings.Bindings; +import org.springframework.core.env.Environment; import java.util.Map; @@ -30,9 +31,10 @@ public interface BindingsPropertiesProcessor { /** * Transform the currently accumulated {@link Bindings}-related properties. * - * @param bindings the {@code Bindings} exposed to the application. - * @param properties the currently accumulated properties. + * @param environment the {@link Environment} that the processor is executing with. + * @param bindings the {@code Bindings} exposed to the application. + * @param properties the currently accumulated properties. */ - void process(Bindings bindings, Map properties); + void process(Environment environment, Bindings bindings, Map properties); } diff --git a/src/main/java/org/springframework/cloud/bindings/boot/CassandraBindingsPropertiesProcessor.java b/src/main/java/org/springframework/cloud/bindings/boot/CassandraBindingsPropertiesProcessor.java index bbfe3d5..b9bcaef 100644 --- a/src/main/java/org/springframework/cloud/bindings/boot/CassandraBindingsPropertiesProcessor.java +++ b/src/main/java/org/springframework/cloud/bindings/boot/CassandraBindingsPropertiesProcessor.java @@ -18,6 +18,7 @@ package org.springframework.cloud.bindings.boot; import org.springframework.cloud.bindings.Binding; import org.springframework.cloud.bindings.Bindings; +import org.springframework.core.env.Environment; import java.util.Map; @@ -35,8 +36,8 @@ public final class CassandraBindingsPropertiesProcessor implements BindingsPrope public static final String KIND = "Cassandra"; @Override - public void process(Bindings bindings, Map properties) { - if (!isKindEnabled(KIND)) { + public void process(Environment environment, Bindings bindings, Map properties) { + if (!isKindEnabled(environment, KIND)) { return; } diff --git a/src/main/java/org/springframework/cloud/bindings/boot/Db2BindingsPropertiesProcessor.java b/src/main/java/org/springframework/cloud/bindings/boot/Db2BindingsPropertiesProcessor.java index b29d5e7..deafc21 100644 --- a/src/main/java/org/springframework/cloud/bindings/boot/Db2BindingsPropertiesProcessor.java +++ b/src/main/java/org/springframework/cloud/bindings/boot/Db2BindingsPropertiesProcessor.java @@ -18,6 +18,7 @@ package org.springframework.cloud.bindings.boot; import org.springframework.cloud.bindings.Binding; import org.springframework.cloud.bindings.Bindings; +import org.springframework.core.env.Environment; import java.util.Map; @@ -36,8 +37,8 @@ public final class Db2BindingsPropertiesProcessor implements BindingsPropertiesP public static final String KIND = "DB2"; @Override - public void process(Bindings bindings, Map properties) { - if (!isKindEnabled(KIND)) { + public void process(Environment environment, Bindings bindings, Map properties) { + if (!isKindEnabled(environment, KIND)) { return; } diff --git a/src/main/java/org/springframework/cloud/bindings/boot/Guards.java b/src/main/java/org/springframework/cloud/bindings/boot/Guards.java index 5718c78..d36a8fd 100644 --- a/src/main/java/org/springframework/cloud/bindings/boot/Guards.java +++ b/src/main/java/org/springframework/cloud/bindings/boot/Guards.java @@ -16,17 +16,18 @@ package org.springframework.cloud.bindings.boot; +import org.springframework.core.env.Environment; + final class Guards { - static boolean isGlobalEnabled() { - String value = System.getProperty("org.springframework.cloud.bindings.boot.enable", "false"); - return Boolean.parseBoolean(value); + static boolean isGlobalEnabled(Environment environment) { + return environment.getProperty("org.springframework.cloud.bindings.boot.enable", Boolean.class, false); } - static boolean isKindEnabled(String kind) { - String property = String.format("org.springframework.cloud.bindings.boot.%s.enable", kind.toLowerCase()); - String value = System.getProperty(property, "true"); - return Boolean.parseBoolean(value); + static boolean isKindEnabled(Environment environment, String kind) { + return environment.getProperty( + String.format("org.springframework.cloud.bindings.boot.%s.enable", kind.toLowerCase()), + Boolean.class, true); } } diff --git a/src/main/java/org/springframework/cloud/bindings/boot/MongoDbBindingsPropertiesProcessor.java b/src/main/java/org/springframework/cloud/bindings/boot/MongoDbBindingsPropertiesProcessor.java index 5105082..f3dd6e7 100644 --- a/src/main/java/org/springframework/cloud/bindings/boot/MongoDbBindingsPropertiesProcessor.java +++ b/src/main/java/org/springframework/cloud/bindings/boot/MongoDbBindingsPropertiesProcessor.java @@ -18,6 +18,7 @@ package org.springframework.cloud.bindings.boot; import org.springframework.cloud.bindings.Binding; import org.springframework.cloud.bindings.Bindings; +import org.springframework.core.env.Environment; import java.util.Map; @@ -34,8 +35,8 @@ public final class MongoDbBindingsPropertiesProcessor implements BindingsPropert public static final String KIND = "MongoDB"; @Override - public void process(Bindings bindings, Map properties) { - if (!isKindEnabled(KIND)) { + public void process(Environment environment, Bindings bindings, Map properties) { + if (!isKindEnabled(environment, KIND)) { return; } diff --git a/src/main/java/org/springframework/cloud/bindings/boot/MySqlBindingsPropertiesProcessor.java b/src/main/java/org/springframework/cloud/bindings/boot/MySqlBindingsPropertiesProcessor.java index 6440d37..9904d4b 100644 --- a/src/main/java/org/springframework/cloud/bindings/boot/MySqlBindingsPropertiesProcessor.java +++ b/src/main/java/org/springframework/cloud/bindings/boot/MySqlBindingsPropertiesProcessor.java @@ -18,6 +18,7 @@ package org.springframework.cloud.bindings.boot; import org.springframework.cloud.bindings.Binding; import org.springframework.cloud.bindings.Bindings; +import org.springframework.core.env.Environment; import java.util.Map; @@ -36,8 +37,8 @@ public final class MySqlBindingsPropertiesProcessor implements BindingsPropertie public static final String KIND = "MySQL"; @Override - public void process(Bindings bindings, Map properties) { - if (!isKindEnabled(KIND)) { + public void process(Environment environment, Bindings bindings, Map properties) { + if (!isKindEnabled(environment, KIND)) { return; } diff --git a/src/main/java/org/springframework/cloud/bindings/boot/OracleBindingsPropertiesProcessor.java b/src/main/java/org/springframework/cloud/bindings/boot/OracleBindingsPropertiesProcessor.java index 813f019..13395aa 100644 --- a/src/main/java/org/springframework/cloud/bindings/boot/OracleBindingsPropertiesProcessor.java +++ b/src/main/java/org/springframework/cloud/bindings/boot/OracleBindingsPropertiesProcessor.java @@ -18,6 +18,7 @@ package org.springframework.cloud.bindings.boot; import org.springframework.cloud.bindings.Binding; import org.springframework.cloud.bindings.Bindings; +import org.springframework.core.env.Environment; import java.util.Map; @@ -36,8 +37,8 @@ public final class OracleBindingsPropertiesProcessor implements BindingsProperti public static final String KIND = "Oracle"; @Override - public void process(Bindings bindings, Map properties) { - if (!isKindEnabled(KIND)) { + public void process(Environment environment, Bindings bindings, Map properties) { + if (!isKindEnabled(environment, KIND)) { return; } diff --git a/src/main/java/org/springframework/cloud/bindings/boot/PostgreSqlBindingsPropertiesProcessor.java b/src/main/java/org/springframework/cloud/bindings/boot/PostgreSqlBindingsPropertiesProcessor.java index b4a8ad6..b5fbdfd 100644 --- a/src/main/java/org/springframework/cloud/bindings/boot/PostgreSqlBindingsPropertiesProcessor.java +++ b/src/main/java/org/springframework/cloud/bindings/boot/PostgreSqlBindingsPropertiesProcessor.java @@ -18,6 +18,7 @@ package org.springframework.cloud.bindings.boot; import org.springframework.cloud.bindings.Binding; import org.springframework.cloud.bindings.Bindings; +import org.springframework.core.env.Environment; import java.util.Map; @@ -36,8 +37,8 @@ public final class PostgreSqlBindingsPropertiesProcessor implements BindingsProp public static final String KIND = "PostgreSQL"; @Override - public void process(Bindings bindings, Map properties) { - if (!isKindEnabled(KIND)) { + public void process(Environment environment, Bindings bindings, Map properties) { + if (!isKindEnabled(environment, KIND)) { return; } diff --git a/src/main/java/org/springframework/cloud/bindings/boot/RedisBindingsPropertiesProcessor.java b/src/main/java/org/springframework/cloud/bindings/boot/RedisBindingsPropertiesProcessor.java index 7ce95c0..7fe94ed 100644 --- a/src/main/java/org/springframework/cloud/bindings/boot/RedisBindingsPropertiesProcessor.java +++ b/src/main/java/org/springframework/cloud/bindings/boot/RedisBindingsPropertiesProcessor.java @@ -18,6 +18,7 @@ package org.springframework.cloud.bindings.boot; import org.springframework.cloud.bindings.Binding; import org.springframework.cloud.bindings.Bindings; +import org.springframework.core.env.Environment; import java.util.Map; @@ -34,8 +35,8 @@ public final class RedisBindingsPropertiesProcessor implements BindingsPropertie public static final String KIND = "Redis"; @Override - public void process(Bindings bindings, Map properties) { - if (!isKindEnabled(KIND)) { + public void process(Environment environment, Bindings bindings, Map properties) { + if (!isKindEnabled(environment, KIND)) { return; } diff --git a/src/main/java/org/springframework/cloud/bindings/boot/SqlServerBindingsPropertiesProcessor.java b/src/main/java/org/springframework/cloud/bindings/boot/SqlServerBindingsPropertiesProcessor.java index aca4a51..43ef069 100644 --- a/src/main/java/org/springframework/cloud/bindings/boot/SqlServerBindingsPropertiesProcessor.java +++ b/src/main/java/org/springframework/cloud/bindings/boot/SqlServerBindingsPropertiesProcessor.java @@ -18,6 +18,7 @@ package org.springframework.cloud.bindings.boot; import org.springframework.cloud.bindings.Binding; import org.springframework.cloud.bindings.Bindings; +import org.springframework.core.env.Environment; import java.util.Map; @@ -36,8 +37,8 @@ public final class SqlServerBindingsPropertiesProcessor implements BindingsPrope public static final String KIND = "SQLServer"; @Override - public void process(Bindings bindings, Map properties) { - if (!isKindEnabled(KIND)) { + public void process(Environment environment, Bindings bindings, Map properties) { + if (!isKindEnabled(environment, KIND)) { return; } diff --git a/src/test/java/org/springframework/cloud/bindings/boot/BindingFlattenedEnvironmentPostProcessorTest.java b/src/test/java/org/springframework/cloud/bindings/boot/BindingFlattenedEnvironmentPostProcessorTest.java index 699bba5..50f4bf3 100644 --- a/src/test/java/org/springframework/cloud/bindings/boot/BindingFlattenedEnvironmentPostProcessorTest.java +++ b/src/test/java/org/springframework/cloud/bindings/boot/BindingFlattenedEnvironmentPostProcessorTest.java @@ -17,10 +17,7 @@ package org.springframework.cloud.bindings.boot; import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; -import org.junitpioneer.jupiter.ClearSystemProperty; -import org.junitpioneer.jupiter.SetSystemProperty; import org.springframework.boot.SpringApplication; import org.springframework.boot.context.config.ConfigFileApplicationListener; import org.springframework.cloud.bindings.Binding; @@ -37,58 +34,52 @@ final class BindingFlattenedEnvironmentPostProcessorTest { private final SpringApplication application = new SpringApplication(); - private final MockEnvironment environment = new MockEnvironment(); + private final MockEnvironment environment = new MockEnvironment() + .withProperty("org.springframework.cloud.bindings.boot.enable", "true"); @Test @DisplayName("is disabled by default") - @ClearSystemProperty(key = "org.springframework.cloud.bindings.boot.enable") void disabledByDefault() { new BindingFlattenedEnvironmentPostProcessor( new Bindings( new Binding("test-name", Paths.get("test-path"), Collections.emptyMap(), Collections.emptyMap()) ) - ).postProcessEnvironment(environment, application); + ).postProcessEnvironment(new MockEnvironment(), application); assertThat(environment.getPropertySources()).hasSize(1); } - @Nested - @DisplayName("when enabled") - @SetSystemProperty(key = "org.springframework.cloud.bindings.boot.enable", value = "true") - final class Enabled { - @Test - @DisplayName("does not create PropertySource if no bindings") - void noBindings() { - new BindingFlattenedEnvironmentPostProcessor(new Bindings()).postProcessEnvironment(environment, application); + @Test + @DisplayName("does not create PropertySource if no bindings") + void noBindings() { + new BindingFlattenedEnvironmentPostProcessor(new Bindings()).postProcessEnvironment(environment, application); - assertThat(environment.getPropertySources()).hasSize(1); - } + assertThat(environment.getPropertySources()).hasSize(1); + } - @Test - @DisplayName("creates PropertySource with properties") - void containsProperties() { - new BindingFlattenedEnvironmentPostProcessor( - new Bindings( - new Binding("test-name", Paths.get("test-path"), - Collections.singletonMap("test-metadata-key", "test-metadata-value"), - Collections.singletonMap("test-secret-key", "test-secret-value")) - ) - ).postProcessEnvironment(environment, application); + @Test + @DisplayName("creates PropertySource with properties") + void containsProperties() { + new BindingFlattenedEnvironmentPostProcessor( + new Bindings( + new Binding("test-name", Paths.get("test-path"), + Collections.singletonMap("test-metadata-key", "test-metadata-value"), + Collections.singletonMap("test-secret-key", "test-secret-value")) + ) + ).postProcessEnvironment(environment, application); - assertThat(environment.getPropertySources()).hasSize(2); - assertThat(environment.getProperty("cnb.bindings.test-name.metadata.test-metadata-key")).isEqualTo("test-metadata-value"); - assertThat(environment.getProperty("cnb.bindings.test-name.secret.test-secret-key")).isEqualTo("test-secret-value"); - } - - @Test - @DisplayName("has order before ConfigFileApplicationListener") - void order() { - assertThat(new BindingFlattenedEnvironmentPostProcessor(new Bindings()).getOrder()) - .isLessThan(ConfigFileApplicationListener.DEFAULT_ORDER); - } + assertThat(environment.getPropertySources()).hasSize(2); + assertThat(environment.getProperty("cnb.bindings.test-name.metadata.test-metadata-key")).isEqualTo("test-metadata-value"); + assertThat(environment.getProperty("cnb.bindings.test-name.secret.test-secret-key")).isEqualTo("test-secret-value"); + } + @Test + @DisplayName("has order before ConfigFileApplicationListener") + void order() { + assertThat(new BindingFlattenedEnvironmentPostProcessor(new Bindings()).getOrder()) + .isLessThan(ConfigFileApplicationListener.DEFAULT_ORDER); } } diff --git a/src/test/java/org/springframework/cloud/bindings/boot/BindingSpecificEnvironmentPostProcessorTest.java b/src/test/java/org/springframework/cloud/bindings/boot/BindingSpecificEnvironmentPostProcessorTest.java index 5ba4d98..b647dd1 100644 --- a/src/test/java/org/springframework/cloud/bindings/boot/BindingSpecificEnvironmentPostProcessorTest.java +++ b/src/test/java/org/springframework/cloud/bindings/boot/BindingSpecificEnvironmentPostProcessorTest.java @@ -17,10 +17,7 @@ package org.springframework.cloud.bindings.boot; import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; -import org.junitpioneer.jupiter.ClearSystemProperty; -import org.junitpioneer.jupiter.SetSystemProperty; import org.springframework.boot.SpringApplication; import org.springframework.boot.context.config.ConfigFileApplicationListener; import org.springframework.cloud.bindings.Binding; @@ -37,77 +34,71 @@ final class BindingSpecificEnvironmentPostProcessorTest { private final SpringApplication application = new SpringApplication(); - private final MockEnvironment environment = new MockEnvironment(); + private final MockEnvironment environment = new MockEnvironment() + .withProperty("org.springframework.cloud.bindings.boot.enable", "true"); @Test @DisplayName("is disabled by default") - @ClearSystemProperty(key = "org.springframework.cloud.bindings.boot.enable") void disabledByDefault() { new BindingSpecificEnvironmentPostProcessor( new Bindings( new Binding("test-name", Paths.get("test-path"), Collections.emptyMap(), Collections.emptyMap()) ), - (environment, properties) -> properties.put("test-key", "test-value") + (environment, bindings, properties) -> properties.put("test-key", "test-value") + ).postProcessEnvironment(new MockEnvironment(), application); + + assertThat(environment.getPropertySources()).hasSize(1); + } + + + @Test + @DisplayName("does not create PropertySource if no bindings") + void noBindings() { + new BindingSpecificEnvironmentPostProcessor(new Bindings()).postProcessEnvironment(environment, application); + + assertThat(environment.getPropertySources()).hasSize(1); + } + + @Test + @DisplayName("does not create PropertySource if no properties") + void noProperties() { + new BindingSpecificEnvironmentPostProcessor( + new Bindings( + new Binding("test-name", Paths.get("test-path"), + Collections.emptyMap(), Collections.emptyMap()) + ) ).postProcessEnvironment(environment, application); assertThat(environment.getPropertySources()).hasSize(1); } - @Nested - @DisplayName("when enabled") - @SetSystemProperty(key = "org.springframework.cloud.bindings.boot.enable", value = "true") - final class Enabled { + @Test + @DisplayName("creates PropertySource with properties") + void containsProperties() { + new BindingSpecificEnvironmentPostProcessor( + new Bindings( + new Binding("test-name", Paths.get("test-path"), + Collections.emptyMap(), Collections.emptyMap()) + ), + (environment, bindings, properties) -> properties.put("test-key", "test-value") + ).postProcessEnvironment(environment, application); - @Test - @DisplayName("does not create PropertySource if no bindings") - void noBindings() { - new BindingSpecificEnvironmentPostProcessor(new Bindings()).postProcessEnvironment(environment, application); + assertThat(environment.getPropertySources()).hasSize(2); + assertThat(environment.getProperty("test-key")).isEqualTo("test-value"); + } - assertThat(environment.getPropertySources()).hasSize(1); - } - - @Test - @DisplayName("does not create PropertySource if no properties") - void noProperties() { - new BindingSpecificEnvironmentPostProcessor( - new Bindings( - new Binding("test-name", Paths.get("test-path"), - Collections.emptyMap(), Collections.emptyMap()) - ) - ).postProcessEnvironment(environment, application); - - assertThat(environment.getPropertySources()).hasSize(1); - } - - @Test - @DisplayName("creates PropertySource with properties") - void containsProperties() { - new BindingSpecificEnvironmentPostProcessor( - new Bindings( - new Binding("test-name", Paths.get("test-path"), - Collections.emptyMap(), Collections.emptyMap()) - ), - (environment, properties) -> properties.put("test-key", "test-value") - ).postProcessEnvironment(environment, application); - - assertThat(environment.getPropertySources()).hasSize(2); - assertThat(environment.getProperty("test-key")).isEqualTo("test-value"); - } - - @Test - @DisplayName("has order before ConfigFileApplicationListener") - void order() { - assertThat(new BindingSpecificEnvironmentPostProcessor(new Bindings()).getOrder()) - .isLessThan(ConfigFileApplicationListener.DEFAULT_ORDER); - } - - @Test - @DisplayName("included implementations are registered") - void includedImplementations() { - assertThat(new BindingSpecificEnvironmentPostProcessor().processors).hasSize(8); - } + @Test + @DisplayName("has order before ConfigFileApplicationListener") + void order() { + assertThat(new BindingSpecificEnvironmentPostProcessor(new Bindings()).getOrder()) + .isLessThan(ConfigFileApplicationListener.DEFAULT_ORDER); + } + @Test + @DisplayName("included implementations are registered") + void includedImplementations() { + assertThat(new BindingSpecificEnvironmentPostProcessor().processors).hasSize(8); } } diff --git a/src/test/java/org/springframework/cloud/bindings/boot/CassandraBindingsPropertiesProcessorTest.java b/src/test/java/org/springframework/cloud/bindings/boot/CassandraBindingsPropertiesProcessorTest.java index 8bd5840..6056039 100644 --- a/src/test/java/org/springframework/cloud/bindings/boot/CassandraBindingsPropertiesProcessorTest.java +++ b/src/test/java/org/springframework/cloud/bindings/boot/CassandraBindingsPropertiesProcessorTest.java @@ -18,10 +18,10 @@ package org.springframework.cloud.bindings.boot; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import org.junitpioneer.jupiter.SetSystemProperty; import org.springframework.cloud.bindings.Binding; import org.springframework.cloud.bindings.Bindings; import org.springframework.cloud.bindings.FluentMap; +import org.springframework.mock.env.MockEnvironment; import java.nio.file.Paths; import java.util.Collections; @@ -48,12 +48,14 @@ final class CassandraBindingsPropertiesProcessorTest { ) ); + private final MockEnvironment environment = new MockEnvironment(); + private final HashMap properties = new HashMap<>(); @Test @DisplayName("contributes properties") void test() { - new CassandraBindingsPropertiesProcessor().process(bindings, properties); + new CassandraBindingsPropertiesProcessor().process(environment, bindings, properties); assertThat(properties) .containsEntry("spring.data.cassandra.cluster-name", "test-cluster-name") .containsEntry("spring.data.cassandra.compression", "test-compression") @@ -67,9 +69,11 @@ final class CassandraBindingsPropertiesProcessorTest { @Test @DisplayName("can be disabled") - @SetSystemProperty(key = "org.springframework.cloud.bindings.boot.cassandra.enable", value = "false") void disabled() { - new CassandraBindingsPropertiesProcessor().process(bindings, properties); + environment.setProperty("org.springframework.cloud.bindings.boot.cassandra.enable", "false"); + + new CassandraBindingsPropertiesProcessor().process(environment, bindings, properties); + assertThat(properties).isEmpty(); } diff --git a/src/test/java/org/springframework/cloud/bindings/boot/Db2BindingsPropertiesProcessorTest.java b/src/test/java/org/springframework/cloud/bindings/boot/Db2BindingsPropertiesProcessorTest.java index a11d610..297d8f5 100644 --- a/src/test/java/org/springframework/cloud/bindings/boot/Db2BindingsPropertiesProcessorTest.java +++ b/src/test/java/org/springframework/cloud/bindings/boot/Db2BindingsPropertiesProcessorTest.java @@ -18,10 +18,10 @@ package org.springframework.cloud.bindings.boot; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import org.junitpioneer.jupiter.SetSystemProperty; import org.springframework.cloud.bindings.Binding; import org.springframework.cloud.bindings.Bindings; import org.springframework.cloud.bindings.FluentMap; +import org.springframework.mock.env.MockEnvironment; import java.nio.file.Paths; import java.util.Collections; @@ -45,12 +45,14 @@ final class Db2BindingsPropertiesProcessorTest { ) ); + private final MockEnvironment environment = new MockEnvironment(); + private final HashMap properties = new HashMap<>(); @Test @DisplayName("contributes properties") void test() { - new Db2BindingsPropertiesProcessor().process(bindings, properties); + new Db2BindingsPropertiesProcessor().process(environment, bindings, properties); assertThat(properties) .containsEntry("spring.datasource.driver-class-name", "com.ibm.db2.jcc.DB2Driver") .containsEntry("spring.datasource.password", "test-password") @@ -60,9 +62,11 @@ final class Db2BindingsPropertiesProcessorTest { @Test @DisplayName("can be disabled") - @SetSystemProperty(key = "org.springframework.cloud.bindings.boot.db2.enable", value = "false") void disabled() { - new Db2BindingsPropertiesProcessor().process(bindings, properties); + environment.setProperty("org.springframework.cloud.bindings.boot.db2.enable", "false"); + + new Db2BindingsPropertiesProcessor().process(environment, bindings, properties); + assertThat(properties).isEmpty(); } diff --git a/src/test/java/org/springframework/cloud/bindings/boot/GuardsTest.java b/src/test/java/org/springframework/cloud/bindings/boot/GuardsTest.java index bbc1a68..b8df380 100644 --- a/src/test/java/org/springframework/cloud/bindings/boot/GuardsTest.java +++ b/src/test/java/org/springframework/cloud/bindings/boot/GuardsTest.java @@ -19,7 +19,7 @@ package org.springframework.cloud.bindings.boot; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; -import org.junitpioneer.jupiter.SetSystemProperty; +import org.springframework.mock.env.MockEnvironment; import static org.assertj.core.api.Assertions.assertThat; import static org.springframework.cloud.bindings.boot.Guards.isGlobalEnabled; @@ -32,24 +32,26 @@ final class GuardsTest { @DisplayName("Global Guard") final class GlobalGuard { + private final MockEnvironment environment = new MockEnvironment(); + @Test @DisplayName("returns false if unset") void unset() { - assertThat(isGlobalEnabled()).isFalse(); + assertThat(isGlobalEnabled(environment)).isFalse(); } @Test @DisplayName("returns the set value of true") - @SetSystemProperty(key = "org.springframework.cloud.bindings.boot.enable", value = "true") void setTrue() { - assertThat(isGlobalEnabled()).isTrue(); + environment.setProperty("org.springframework.cloud.bindings.boot.enable", "true"); + assertThat(isGlobalEnabled(environment)).isTrue(); } @Test @DisplayName("returns the set value of false") - @SetSystemProperty(key = "org.springframework.cloud.bindings.boot.enable", value = "false") void setFalse() { - assertThat(isGlobalEnabled()).isFalse(); + environment.setProperty("org.springframework.cloud.bindings.boot.enable", "false"); + assertThat(isGlobalEnabled(environment)).isFalse(); } } @@ -58,24 +60,26 @@ final class GuardsTest { @DisplayName("Kind Guard") final class KindGuard { + private final MockEnvironment environment = new MockEnvironment(); + @Test @DisplayName("returns true if unset") void unset() { - assertThat(isKindEnabled("Test")).isTrue(); + assertThat(isKindEnabled(environment, "Test")).isTrue(); } @Test @DisplayName("returns the set value of true") - @SetSystemProperty(key = "org.springframework.cloud.bindings.boot.test.enable", value = "true") void setTrue() { - assertThat(isKindEnabled("Test")).isTrue(); + environment.setProperty("org.springframework.cloud.bindings.boot.test.enable", "true"); + assertThat(isKindEnabled(environment, "Test")).isTrue(); } @Test @DisplayName("returns the set value of false") - @SetSystemProperty(key = "org.springframework.cloud.bindings.boot.test.enable", value = "false") void setFalse() { - assertThat(isKindEnabled("Test")).isFalse(); + environment.setProperty("org.springframework.cloud.bindings.boot.test.enable", "false"); + assertThat(isKindEnabled(environment, "Test")).isFalse(); } } diff --git a/src/test/java/org/springframework/cloud/bindings/boot/MongoDbBindingsPropertiesProcessorTest.java b/src/test/java/org/springframework/cloud/bindings/boot/MongoDbBindingsPropertiesProcessorTest.java index f2a7398..ffe3214 100644 --- a/src/test/java/org/springframework/cloud/bindings/boot/MongoDbBindingsPropertiesProcessorTest.java +++ b/src/test/java/org/springframework/cloud/bindings/boot/MongoDbBindingsPropertiesProcessorTest.java @@ -18,10 +18,10 @@ package org.springframework.cloud.bindings.boot; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import org.junitpioneer.jupiter.SetSystemProperty; import org.springframework.cloud.bindings.Binding; import org.springframework.cloud.bindings.Bindings; import org.springframework.cloud.bindings.FluentMap; +import org.springframework.mock.env.MockEnvironment; import java.nio.file.Paths; import java.util.Collections; @@ -41,21 +41,25 @@ final class MongoDbBindingsPropertiesProcessorTest { ) ); + private final MockEnvironment environment = new MockEnvironment(); + private final HashMap properties = new HashMap<>(); @Test @DisplayName("contributes properties") void test() { - new MongoDbBindingsPropertiesProcessor().process(bindings, properties); + new MongoDbBindingsPropertiesProcessor().process(environment, bindings, properties); assertThat(properties) .containsEntry("spring.mongodb.uri", "test-uri"); } @Test @DisplayName("can be disabled") - @SetSystemProperty(key = "org.springframework.cloud.bindings.boot.mongodb.enable", value = "false") void disabled() { - new MongoDbBindingsPropertiesProcessor().process(bindings, properties); + environment.setProperty("org.springframework.cloud.bindings.boot.mongodb.enable", "false"); + + new MongoDbBindingsPropertiesProcessor().process(environment, bindings, properties); + assertThat(properties).isEmpty(); } diff --git a/src/test/java/org/springframework/cloud/bindings/boot/MySqlBindingsPropertiesProcessorTest.java b/src/test/java/org/springframework/cloud/bindings/boot/MySqlBindingsPropertiesProcessorTest.java index 353013d..0549950 100644 --- a/src/test/java/org/springframework/cloud/bindings/boot/MySqlBindingsPropertiesProcessorTest.java +++ b/src/test/java/org/springframework/cloud/bindings/boot/MySqlBindingsPropertiesProcessorTest.java @@ -18,10 +18,10 @@ package org.springframework.cloud.bindings.boot; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import org.junitpioneer.jupiter.SetSystemProperty; import org.springframework.cloud.bindings.Binding; import org.springframework.cloud.bindings.Bindings; import org.springframework.cloud.bindings.FluentMap; +import org.springframework.mock.env.MockEnvironment; import java.nio.file.Paths; import java.util.Collections; @@ -45,12 +45,14 @@ final class MySqlBindingsPropertiesProcessorTest { ) ); + private final MockEnvironment environment = new MockEnvironment(); + private final HashMap properties = new HashMap<>(); @Test @DisplayName("contributes properties") void test() { - new MySqlBindingsPropertiesProcessor().process(bindings, properties); + new MySqlBindingsPropertiesProcessor().process(environment, bindings, properties); assertThat(properties) .containsEntry("spring.datasource.driver-class-name", "org.mariadb.jdbc.Driver") .containsEntry("spring.datasource.password", "test-password") @@ -60,9 +62,11 @@ final class MySqlBindingsPropertiesProcessorTest { @Test @DisplayName("can be disabled") - @SetSystemProperty(key = "org.springframework.cloud.bindings.boot.mysql.enable", value = "false") void disabled() { - new MySqlBindingsPropertiesProcessor().process(bindings, properties); + environment.setProperty("org.springframework.cloud.bindings.boot.mysql.enable", "false"); + + new MySqlBindingsPropertiesProcessor().process(environment, bindings, properties); + assertThat(properties).isEmpty(); } diff --git a/src/test/java/org/springframework/cloud/bindings/boot/OracleBindingsPropertiesProcessorTest.java b/src/test/java/org/springframework/cloud/bindings/boot/OracleBindingsPropertiesProcessorTest.java index d3c46c5..58a8be8 100644 --- a/src/test/java/org/springframework/cloud/bindings/boot/OracleBindingsPropertiesProcessorTest.java +++ b/src/test/java/org/springframework/cloud/bindings/boot/OracleBindingsPropertiesProcessorTest.java @@ -18,10 +18,10 @@ package org.springframework.cloud.bindings.boot; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import org.junitpioneer.jupiter.SetSystemProperty; import org.springframework.cloud.bindings.Binding; import org.springframework.cloud.bindings.Bindings; import org.springframework.cloud.bindings.FluentMap; +import org.springframework.mock.env.MockEnvironment; import java.nio.file.Paths; import java.util.Collections; @@ -45,12 +45,14 @@ final class OracleBindingsPropertiesProcessorTest { ) ); + private final MockEnvironment environment = new MockEnvironment(); + private final HashMap properties = new HashMap<>(); @Test @DisplayName("contributes properties") void test() { - new OracleBindingsPropertiesProcessor().process(bindings, properties); + new OracleBindingsPropertiesProcessor().process(environment, bindings, properties); assertThat(properties) .containsEntry("spring.datasource.driver-class-name", "oracle.jdbc.OracleDriver") .containsEntry("spring.datasource.password", "test-password") @@ -60,9 +62,11 @@ final class OracleBindingsPropertiesProcessorTest { @Test @DisplayName("can be disabled") - @SetSystemProperty(key = "org.springframework.cloud.bindings.boot.oracle.enable", value = "false") void disabled() { - new OracleBindingsPropertiesProcessor().process(bindings, properties); + environment.setProperty("org.springframework.cloud.bindings.boot.oracle.enable", "false"); + + new OracleBindingsPropertiesProcessor().process(environment, bindings, properties); + assertThat(properties).isEmpty(); } diff --git a/src/test/java/org/springframework/cloud/bindings/boot/PostgreSqlBindingsPropertiesProcessorTest.java b/src/test/java/org/springframework/cloud/bindings/boot/PostgreSqlBindingsPropertiesProcessorTest.java index 2638d95..920cbb2 100644 --- a/src/test/java/org/springframework/cloud/bindings/boot/PostgreSqlBindingsPropertiesProcessorTest.java +++ b/src/test/java/org/springframework/cloud/bindings/boot/PostgreSqlBindingsPropertiesProcessorTest.java @@ -18,10 +18,10 @@ package org.springframework.cloud.bindings.boot; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import org.junitpioneer.jupiter.SetSystemProperty; import org.springframework.cloud.bindings.Binding; import org.springframework.cloud.bindings.Bindings; import org.springframework.cloud.bindings.FluentMap; +import org.springframework.mock.env.MockEnvironment; import java.nio.file.Paths; import java.util.Collections; @@ -45,12 +45,14 @@ final class PostgreSqlBindingsPropertiesProcessorTest { ) ); + private final MockEnvironment environment = new MockEnvironment(); + private final HashMap properties = new HashMap<>(); @Test @DisplayName("contributes properties") void test() { - new PostgreSqlBindingsPropertiesProcessor().process(bindings, properties); + new PostgreSqlBindingsPropertiesProcessor().process(environment, bindings, properties); assertThat(properties) .containsEntry("spring.datasource.driver-class-name", "org.postgresql.Driver") .containsEntry("spring.datasource.password", "test-password") @@ -60,9 +62,11 @@ final class PostgreSqlBindingsPropertiesProcessorTest { @Test @DisplayName("can be disabled") - @SetSystemProperty(key = "org.springframework.cloud.bindings.boot.postgresql.enable", value = "false") void disabled() { - new PostgreSqlBindingsPropertiesProcessor().process(bindings, properties); + environment.setProperty("org.springframework.cloud.bindings.boot.postgresql.enable", "false"); + + new PostgreSqlBindingsPropertiesProcessor().process(environment, bindings, properties); + assertThat(properties).isEmpty(); } diff --git a/src/test/java/org/springframework/cloud/bindings/boot/RedisBindingsPropertiesProcessorTest.java b/src/test/java/org/springframework/cloud/bindings/boot/RedisBindingsPropertiesProcessorTest.java index d88bc23..78b9486 100644 --- a/src/test/java/org/springframework/cloud/bindings/boot/RedisBindingsPropertiesProcessorTest.java +++ b/src/test/java/org/springframework/cloud/bindings/boot/RedisBindingsPropertiesProcessorTest.java @@ -18,10 +18,10 @@ package org.springframework.cloud.bindings.boot; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import org.junitpioneer.jupiter.SetSystemProperty; import org.springframework.cloud.bindings.Binding; import org.springframework.cloud.bindings.Bindings; import org.springframework.cloud.bindings.FluentMap; +import org.springframework.mock.env.MockEnvironment; import java.nio.file.Paths; import java.util.Collections; @@ -43,12 +43,14 @@ final class RedisBindingsPropertiesProcessorTest { ) ); + private final MockEnvironment environment = new MockEnvironment(); + private final HashMap properties = new HashMap<>(); @Test @DisplayName("contributes properties") void test() { - new RedisBindingsPropertiesProcessor().process(bindings, properties); + new RedisBindingsPropertiesProcessor().process(environment, bindings, properties); assertThat(properties) .containsEntry("spring.redis.host", "test-host") .containsEntry("spring.redis.password", "test-password") @@ -57,9 +59,11 @@ final class RedisBindingsPropertiesProcessorTest { @Test @DisplayName("can be disabled") - @SetSystemProperty(key = "org.springframework.cloud.bindings.boot.redis.enable", value = "false") void disabled() { - new RedisBindingsPropertiesProcessor().process(bindings, properties); + environment.setProperty("org.springframework.cloud.bindings.boot.redis.enable", "false"); + + new RedisBindingsPropertiesProcessor().process(environment, bindings, properties); + assertThat(properties).isEmpty(); } diff --git a/src/test/java/org/springframework/cloud/bindings/boot/SqlServerBindingsPropertiesProcessorTest.java b/src/test/java/org/springframework/cloud/bindings/boot/SqlServerBindingsPropertiesProcessorTest.java index 05b96d7..41049a7 100644 --- a/src/test/java/org/springframework/cloud/bindings/boot/SqlServerBindingsPropertiesProcessorTest.java +++ b/src/test/java/org/springframework/cloud/bindings/boot/SqlServerBindingsPropertiesProcessorTest.java @@ -18,10 +18,10 @@ package org.springframework.cloud.bindings.boot; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import org.junitpioneer.jupiter.SetSystemProperty; import org.springframework.cloud.bindings.Binding; import org.springframework.cloud.bindings.Bindings; import org.springframework.cloud.bindings.FluentMap; +import org.springframework.mock.env.MockEnvironment; import java.nio.file.Paths; import java.util.Collections; @@ -45,12 +45,14 @@ final class SqlServerBindingsPropertiesProcessorTest { ) ); + private final MockEnvironment environment = new MockEnvironment(); + private final HashMap properties = new HashMap<>(); @Test @DisplayName("contributes properties") void test() { - new SqlServerBindingsPropertiesProcessor().process(bindings, properties); + new SqlServerBindingsPropertiesProcessor().process(environment, bindings, properties); assertThat(properties) .containsEntry("spring.datasource.driver-class-name", "com.microsoft.sqlserver.jdbc.SQLServerDriver") .containsEntry("spring.datasource.password", "test-password") @@ -60,9 +62,11 @@ final class SqlServerBindingsPropertiesProcessorTest { @Test @DisplayName("can be disabled") - @SetSystemProperty(key = "org.springframework.cloud.bindings.boot.sqlserver.enable", value = "false") void disabled() { - new SqlServerBindingsPropertiesProcessor().process(bindings, properties); + environment.setProperty("org.springframework.cloud.bindings.boot.sqlserver.enable", "false"); + + new SqlServerBindingsPropertiesProcessor().process(environment, bindings, properties); + assertThat(properties).isEmpty(); }