You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2021/05/31 01:52:13 UTC

[james-project] 02/02: JAMES-2886 Test and fix ExtensionConfiguration loading

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 <bt...@linagora.com>
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: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org