This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 9889ba2523db2ceaffcf93f1486ad0172d492125 Author: Benoit Tellier <[email protected]> AuthorDate: Fri May 28 15:46:45 2021 +0700 JAMES-2886 Test and fix ExtensionConfiguration loading --- .../apache/james/utils/ExtensionConfiguration.java | 18 +++++---- .../james/utils/ExtensionConfigurationTest.java | 47 ++++++++++++++++++++++ .../src/test/resources/extensions-empty.properties | 1 + .../src/test/resources/extensions-none.properties | 0 .../src/test/resources/extensions-one.properties | 1 + .../src/test/resources/extensions-two.properties | 1 + 6 files changed, 60 insertions(+), 8 deletions(-) diff --git a/server/container/guice/guice-utils/src/main/java/org/apache/james/utils/ExtensionConfiguration.java b/server/container/guice/guice-utils/src/main/java/org/apache/james/utils/ExtensionConfiguration.java index bc0fe8f..0034d85 100644 --- a/server/container/guice/guice-utils/src/main/java/org/apache/james/utils/ExtensionConfiguration.java +++ b/server/container/guice/guice-utils/src/main/java/org/apache/james/utils/ExtensionConfiguration.java @@ -19,26 +19,28 @@ package org.apache.james.utils; -import java.util.Arrays; import java.util.List; -import java.util.Optional; import org.apache.commons.configuration2.Configuration; import com.github.steveash.guavate.Guavate; +import com.google.common.base.Splitter; import com.google.common.collect.ImmutableList; public class ExtensionConfiguration { public static final ExtensionConfiguration DEFAULT = new ExtensionConfiguration(ImmutableList.of()); + private static final Splitter SPLITTER = Splitter.on(",") + .omitEmptyStrings() + .trimResults(); public static ExtensionConfiguration from(Configuration configuration) { - List<String> list = Optional.ofNullable(configuration.getStringArray("guice.extension.module")) - .map(Arrays::asList) - .orElse(ImmutableList.of()); + String rawString = configuration.getString("guice.extension.module", ""); - return new ExtensionConfiguration(list.stream() - .map(ClassName::new) - .collect(Guavate.toImmutableList())); + return new ExtensionConfiguration( + SPLITTER.splitToList(rawString) + .stream() + .map(ClassName::new) + .collect(Guavate.toImmutableList())); } private final List<ClassName> additionalGuiceModulesForExtensions; diff --git a/server/container/guice/guice-utils/src/test/java/org/apache/james/utils/ExtensionConfigurationTest.java b/server/container/guice/guice-utils/src/test/java/org/apache/james/utils/ExtensionConfigurationTest.java index 515380d..dc4830d 100644 --- a/server/container/guice/guice-utils/src/test/java/org/apache/james/utils/ExtensionConfigurationTest.java +++ b/server/container/guice/guice-utils/src/test/java/org/apache/james/utils/ExtensionConfigurationTest.java @@ -19,6 +19,53 @@ package org.apache.james.utils; +import static org.assertj.core.api.Assertions.assertThat; + +import org.apache.commons.configuration2.FileBasedConfiguration; +import org.apache.commons.configuration2.PropertiesConfiguration; +import org.apache.commons.configuration2.builder.FileBasedConfigurationBuilder; +import org.apache.commons.configuration2.builder.fluent.Parameters; +import org.junit.jupiter.api.Test; + public class ExtensionConfigurationTest { + @Test + void shouldReturnEmptyWhenNoField() throws Exception { + FileBasedConfiguration configuration = getConfiguration("extensions-none.properties"); + + assertThat(ExtensionConfiguration.from(configuration).getAdditionalGuiceModulesForExtensions()) + .isEmpty(); + } + + @Test + void shouldReturnEmptyWhenEmptyField() throws Exception { + FileBasedConfiguration configuration = getConfiguration("extensions-empty.properties"); + + assertThat(ExtensionConfiguration.from(configuration).getAdditionalGuiceModulesForExtensions()) + .isEmpty(); + } + + @Test + void shouldReturnOneRoutes() throws Exception { + FileBasedConfiguration configuration = getConfiguration("extensions-one.properties"); + + assertThat(ExtensionConfiguration.from(configuration).getAdditionalGuiceModulesForExtensions()) + .containsOnly(new ClassName("org.apache.custom.extensions.CustomExtension")); + } + + @Test + void shouldReturnSeveralRoutes() throws Exception { + FileBasedConfiguration configuration = getConfiguration("extensions-two.properties"); + + assertThat(ExtensionConfiguration.from(configuration).getAdditionalGuiceModulesForExtensions()) + .containsOnly(new ClassName("org.apache.custom.extensions.CustomExtension"), + new ClassName("org.apache.custom.extension.AnotherCustomExtension")); + } + private FileBasedConfiguration getConfiguration(String name) throws org.apache.commons.configuration2.ex.ConfigurationException { + FileBasedConfigurationBuilder<FileBasedConfiguration> builder = new FileBasedConfigurationBuilder<FileBasedConfiguration>(PropertiesConfiguration.class) + .configure(new Parameters() + .fileBased() + .setURL(ClassLoader.getSystemResource(name))); + return builder.getConfiguration(); + } } \ No newline at end of file diff --git a/server/container/guice/guice-utils/src/test/resources/extensions-empty.properties b/server/container/guice/guice-utils/src/test/resources/extensions-empty.properties new file mode 100644 index 0000000..e5a585a --- /dev/null +++ b/server/container/guice/guice-utils/src/test/resources/extensions-empty.properties @@ -0,0 +1 @@ +guice.extension.module= \ No newline at end of file diff --git a/server/container/guice/guice-utils/src/test/resources/extensions-none.properties b/server/container/guice/guice-utils/src/test/resources/extensions-none.properties new file mode 100644 index 0000000..e69de29 diff --git a/server/container/guice/guice-utils/src/test/resources/extensions-one.properties b/server/container/guice/guice-utils/src/test/resources/extensions-one.properties new file mode 100644 index 0000000..43d7954 --- /dev/null +++ b/server/container/guice/guice-utils/src/test/resources/extensions-one.properties @@ -0,0 +1 @@ +guice.extension.module=org.apache.custom.extensions.CustomExtension \ No newline at end of file diff --git a/server/container/guice/guice-utils/src/test/resources/extensions-two.properties b/server/container/guice/guice-utils/src/test/resources/extensions-two.properties new file mode 100644 index 0000000..a5e0f6d --- /dev/null +++ b/server/container/guice/guice-utils/src/test/resources/extensions-two.properties @@ -0,0 +1 @@ +guice.extension.module=org.apache.custom.extensions.CustomExtension,org.apache.custom.extension.AnotherCustomExtension \ No newline at end of file --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
