You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2019/06/17 11:04:41 UTC

[james-project] 09/09: JAMES-2146 Allow JamesServerBuilder to override guice modules

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 860f7266a377da4c4944cc8a1cf786e3467432e2
Author: Tran Tien Duc <dt...@linagora.com>
AuthorDate: Fri Jun 7 10:41:09 2019 +0700

    JAMES-2146 Allow JamesServerBuilder to override guice modules
---
 .../org/apache/james/CassandraNodeConfTest.java    | 52 +++++++++-------------
 .../CassandraRabbitMQLdapJmapJamesServerTest.java  | 29 ++++++------
 .../java/org/apache/james/JamesServerBuilder.java  | 10 ++++-
 .../james/GuiceJamesServerStartUpCheckTest.java    | 51 ++++++++-------------
 .../org/apache/james/GuiceJamesServerTest.java     | 29 ++++++------
 .../apache/james/GuiceLifecycleHeathCheckTest.java | 28 ++++++------
 .../apache/james/MemoryJmapJamesServerTest.java    | 50 +++++++++------------
 .../james/jmap/JMAPConfigurationStartUpCheck.java  | 15 ++++++-
 .../james/jmap/crypto/SecurityKeyLoader.java       |  3 ++
 .../james/jmap/crypto/SecurityKeyLoaderTest.java   | 22 ++++++++-
 10 files changed, 145 insertions(+), 144 deletions(-)

diff --git a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraNodeConfTest.java b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraNodeConfTest.java
index 2444764..53aedfb 100644
--- a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraNodeConfTest.java
+++ b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/CassandraNodeConfTest.java
@@ -44,6 +44,16 @@ class CassandraNodeConfTest {
     private static final int CASSANDRA_PORT = 9042;
     private static final int LIMIT_TO_10_MESSAGES = 10;
 
+    private static JamesServerBuilder extensionBuilder() {
+        return new JamesServerBuilder()
+            .extension(new DockerElasticSearchExtension())
+            .extension(new CassandraExtension())
+            .server(configuration -> GuiceJamesServer.forConfiguration(configuration)
+                .combineWith(ALL_BUT_JMX_CASSANDRA_MODULE)
+                .overrideWith(new TestJMAPServerModule(LIMIT_TO_10_MESSAGES)))
+            .disableAutoStart();
+    }
+
     private static String getDockerHostIp() {
         DockerClientFactory clientFactory = DockerClientFactory.instance();
         clientFactory.client();
@@ -65,15 +75,7 @@ class CassandraNodeConfTest {
     @Nested
     class NormalBehaviour {
         @RegisterExtension
-        JamesServerExtension testExtension = new JamesServerBuilder()
-            .extension(new DockerElasticSearchExtension())
-            .extension(new CassandraExtension())
-            .server(configuration -> GuiceJamesServer.forConfiguration(configuration)
-                .combineWith(ALL_BUT_JMX_CASSANDRA_MODULE)
-                .overrideWith(binder -> binder.bind(TextExtractor.class).to(PDFTextExtractor.class))
-                .overrideWith(new TestJMAPServerModule(LIMIT_TO_10_MESSAGES)))
-            .disableAutoStart()
-            .build();
+        JamesServerExtension testExtension = extensionBuilder().build();
 
         @Test
         void serverShouldStartServiceWhenNodeIsReachable(GuiceJamesServer server) throws Exception {
@@ -88,18 +90,11 @@ class CassandraNodeConfTest {
         private final DockerCassandraRule cassandra = new DockerCassandraRule();
 
         @RegisterExtension
-        JamesServerExtension testExtension = new JamesServerBuilder()
-            .extension(new DockerElasticSearchExtension())
-            .extension(new CassandraExtension(cassandra))
-            .server(configuration -> GuiceJamesServer.forConfiguration(configuration)
-                .combineWith(ALL_BUT_JMX_CASSANDRA_MODULE)
-                .overrideWith(binder -> binder.bind(TextExtractor.class).to(PDFTextExtractor.class))
-                .overrideWith(new TestJMAPServerModule(LIMIT_TO_10_MESSAGES))
-                .overrideWith(binder -> binder.bind(ClusterConfiguration.class)
-                    .toInstance(clusterWithHosts(
-                        Host.from(unreachableNode, 9042),
-                        cassandra.getHost()))))
-            .disableAutoStart()
+        JamesServerExtension testExtension = extensionBuilder()
+            .overrideServerModule(binder -> binder.bind(ClusterConfiguration.class)
+                .toInstance(clusterWithHosts(
+                    Host.from(unreachableNode, 9042),
+                    cassandra.getHost())))
             .build();
 
         @Test
@@ -113,17 +108,10 @@ class CassandraNodeConfTest {
         private final DockerCassandraRule cassandra = new DockerCassandraRule();
 
         @RegisterExtension
-        JamesServerExtension testExtension = new JamesServerBuilder()
-            .extension(new DockerElasticSearchExtension())
-            .extension(new CassandraExtension(cassandra))
-            .server(configuration -> GuiceJamesServer.forConfiguration(configuration)
-                .combineWith(ALL_BUT_JMX_CASSANDRA_MODULE)
-                .overrideWith(binder -> binder.bind(TextExtractor.class).to(PDFTextExtractor.class))
-                .overrideWith(new TestJMAPServerModule(LIMIT_TO_10_MESSAGES))
-                .overrideWith(binder -> binder.bind(ClusterConfiguration.class)
-                    .toInstance(clusterWithHosts(
-                        Host.from(getDockerHostIp(), cassandra.getMappedPort(CASSANDRA_PORT))))))
-            .disableAutoStart()
+        JamesServerExtension testExtension =  extensionBuilder()
+            .overrideServerModule(binder -> binder.bind(ClusterConfiguration.class)
+                .toInstance(clusterWithHosts(
+                    Host.from(getDockerHostIp(), cassandra.getMappedPort(CASSANDRA_PORT)))))
             .build();
 
         @Test
diff --git a/server/container/guice/cassandra-rabbitmq-ldap-guice/src/test/java/org/apache/james/CassandraRabbitMQLdapJmapJamesServerTest.java b/server/container/guice/cassandra-rabbitmq-ldap-guice/src/test/java/org/apache/james/CassandraRabbitMQLdapJmapJamesServerTest.java
index 1867638..0e4edaa 100644
--- a/server/container/guice/cassandra-rabbitmq-ldap-guice/src/test/java/org/apache/james/CassandraRabbitMQLdapJmapJamesServerTest.java
+++ b/server/container/guice/cassandra-rabbitmq-ldap-guice/src/test/java/org/apache/james/CassandraRabbitMQLdapJmapJamesServerTest.java
@@ -33,7 +33,6 @@ import org.apache.james.modules.SwiftBlobStoreExtension;
 import org.apache.james.modules.TestJMAPServerModule;
 import org.apache.james.modules.blobstore.BlobStoreChoosingConfiguration;
 import org.apache.james.modules.protocols.ImapGuiceProbe;
-import org.apache.james.server.core.configuration.Configuration;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.TestInstance;
@@ -61,7 +60,8 @@ class CassandraRabbitMQLdapJmapJamesServerTest {
         @RegisterExtension
         JamesServerExtension testExtension = baseJamesServerExtensionBuilder()
             .extension(new SwiftBlobStoreExtension())
-            .server(configuration -> buildGuiceServer(configuration, BlobStoreChoosingConfiguration.objectStorage()))
+            .overrideServerModule(binder -> binder.bind(BlobStoreChoosingConfiguration.class)
+                .toInstance(BlobStoreChoosingConfiguration.objectStorage()))
             .build();
     }
 
@@ -70,9 +70,10 @@ class CassandraRabbitMQLdapJmapJamesServerTest {
     class WithAwsS3 implements ContractSuite {
         @RegisterExtension
         JamesServerExtension testExtension = baseJamesServerExtensionBuilder()
-                .extension(new AwsS3BlobStoreExtension())
-                .server(configuration -> buildGuiceServer(configuration, BlobStoreChoosingConfiguration.objectStorage()))
-                .build();
+            .extension(new AwsS3BlobStoreExtension())
+            .overrideServerModule(binder -> binder.bind(BlobStoreChoosingConfiguration.class)
+                .toInstance(BlobStoreChoosingConfiguration.objectStorage()))
+            .build();
     }
 
     @Nested
@@ -80,7 +81,8 @@ class CassandraRabbitMQLdapJmapJamesServerTest {
     class WithoutSwiftOrAwsS3 implements ContractSuite {
         @RegisterExtension
         JamesServerExtension testExtension = baseJamesServerExtensionBuilder()
-            .server(configuration -> buildGuiceServer(configuration, BlobStoreChoosingConfiguration.cassandra()))
+            .overrideServerModule(binder -> binder.bind(BlobStoreChoosingConfiguration.class)
+                .toInstance(BlobStoreChoosingConfiguration.cassandra()))
             .build();
     }
 
@@ -89,15 +91,10 @@ class CassandraRabbitMQLdapJmapJamesServerTest {
             .extension(new DockerElasticSearchExtension())
             .extension(new CassandraExtension())
             .extension(new RabbitMQExtension())
-            .extension(new LdapTestExtension());
-    }
-
-    GuiceJamesServer buildGuiceServer(Configuration configuration, BlobStoreChoosingConfiguration choosingConfiguration) {
-        return GuiceJamesServer.forConfiguration(configuration)
-            .combineWith(CassandraRabbitMQLdapJamesServerMain.MODULES)
-            .overrideWith(binder -> binder.bind(BlobStoreChoosingConfiguration.class)
-                .toInstance(choosingConfiguration))
-            .overrideWith(new TestJMAPServerModule(LIMIT_TO_10_MESSAGES))
-            .overrideWith(JmapJamesServerContract.DOMAIN_LIST_CONFIGURATION_MODULE);
+            .extension(new LdapTestExtension())
+            .server(configuration -> GuiceJamesServer.forConfiguration(configuration)
+                .combineWith(CassandraRabbitMQLdapJamesServerMain.MODULES)
+                .overrideWith(new TestJMAPServerModule(LIMIT_TO_10_MESSAGES))
+                .overrideWith(JmapJamesServerContract.DOMAIN_LIST_CONFIGURATION_MODULE));
     }
 }
diff --git a/server/container/guice/guice-common/src/test/java/org/apache/james/JamesServerBuilder.java b/server/container/guice/guice-common/src/test/java/org/apache/james/JamesServerBuilder.java
index 8f38e5b..dfed2b0 100644
--- a/server/container/guice/guice-common/src/test/java/org/apache/james/JamesServerBuilder.java
+++ b/server/container/guice/guice-common/src/test/java/org/apache/james/JamesServerBuilder.java
@@ -45,6 +45,7 @@ public class JamesServerBuilder {
 
     private final ImmutableList.Builder<GuiceModuleTestExtension> extensions;
     private final TemporaryFolderRegistrableExtension folderRegistrableExtension;
+    private final ImmutableList.Builder<Module> overrideModules;
     private ServerProvider server;
     private Optional<ConfigurationProvider> configuration;
     private Optional<Boolean> autoStart;
@@ -54,6 +55,7 @@ public class JamesServerBuilder {
         extensions = ImmutableList.builder();
         folderRegistrableExtension = new TemporaryFolderRegistrableExtension();
         autoStart = Optional.empty();
+        overrideModules = ImmutableList.builder();
     }
 
     public JamesServerBuilder extensions(GuiceModuleTestExtension... extensions) {
@@ -75,6 +77,11 @@ public class JamesServerBuilder {
         return this;
     }
 
+    public JamesServerBuilder overrideServerModule(Module module) {
+        this.overrideModules.add(module);
+        return this;
+    }
+
     public JamesServerBuilder disableAutoStart() {
         this.autoStart = Optional.of(false);
         return this;
@@ -115,7 +122,8 @@ public class JamesServerBuilder {
         return server
             .buildServer(configurationProvider.buildConfiguration(file))
             .overrideWith(modules)
-            .overrideWith((binder -> binder.bind(CleanupTasksPerformer.class).asEagerSingleton()));
+            .overrideWith((binder -> binder.bind(CleanupTasksPerformer.class).asEagerSingleton()))
+            .overrideWith(overrideModules.build());
     }
 
 }
diff --git a/server/container/guice/memory-guice/src/test/java/org/apache/james/GuiceJamesServerStartUpCheckTest.java b/server/container/guice/memory-guice/src/test/java/org/apache/james/GuiceJamesServerStartUpCheckTest.java
index 1301a25..ad40b24 100644
--- a/server/container/guice/memory-guice/src/test/java/org/apache/james/GuiceJamesServerStartUpCheckTest.java
+++ b/server/container/guice/memory-guice/src/test/java/org/apache/james/GuiceJamesServerStartUpCheckTest.java
@@ -115,19 +115,21 @@ class GuiceJamesServerStartUpCheckTest {
         }
     }
 
+    private static JamesServerBuilder extensionBuilder() {
+        return new JamesServerBuilder()
+            .server(configuration -> GuiceJamesServer.forConfiguration(configuration)
+                .combineWith(MemoryJamesServerMain.IN_MEMORY_SERVER_AGGREGATE_MODULE)
+                .overrideWith(new TestJMAPServerModule(LIMIT_TO_10_MESSAGES)))
+            .disableAutoStart();
+    }
+
     @Nested
     class WithStartUpCheckDoesntRequireGuiceComponents implements StartUpCheckSuccessContract {
 
         @RegisterExtension
-        JamesServerExtension jamesServerExtension = new JamesServerBuilder()
-            .server(configuration -> GuiceJamesServer.forConfiguration(configuration)
-                .combineWith(MemoryJamesServerMain.IN_MEMORY_SERVER_AGGREGATE_MODULE)
-                .overrideWith(new TestJMAPServerModule(LIMIT_TO_10_MESSAGES))
-                .overrideWith(binder -> binder.bind(TextExtractor.class).to(PDFTextExtractor.class))
-                .overrideWith(binder -> Multibinder
-                    .newSetBinder(binder, StartUpCheck.class)
-                    .addBinding().to(NoopStartUpCheck.class)))
-            .disableAutoStart()
+        JamesServerExtension jamesServerExtension = extensionBuilder()
+            .overrideServerModule(binder -> Multibinder.newSetBinder(binder, StartUpCheck.class)
+                .addBinding().to(NoopStartUpCheck.class))
             .build();
     }
 
@@ -135,15 +137,9 @@ class GuiceJamesServerStartUpCheckTest {
     class WithStartUpCheckRequireGuiceComponents implements StartUpCheckSuccessContract {
 
         @RegisterExtension
-        JamesServerExtension jamesServerExtension = new JamesServerBuilder()
-            .server(configuration -> GuiceJamesServer.forConfiguration(configuration)
-                .combineWith(MemoryJamesServerMain.IN_MEMORY_SERVER_AGGREGATE_MODULE)
-                .overrideWith(new TestJMAPServerModule(LIMIT_TO_10_MESSAGES))
-                .overrideWith(binder -> binder.bind(TextExtractor.class).to(PDFTextExtractor.class))
-                .overrideWith(binder -> Multibinder
-                    .newSetBinder(binder, StartUpCheck.class)
-                    .addBinding().to(TestBlobExportMechanismStartUpCheck.class)))
-            .disableAutoStart()
+        JamesServerExtension jamesServerExtension = extensionBuilder()
+            .overrideServerModule(binder -> Multibinder.newSetBinder(binder, StartUpCheck.class)
+                .addBinding().to(TestBlobExportMechanismStartUpCheck.class))
             .build();
     }
 
@@ -151,32 +147,21 @@ class GuiceJamesServerStartUpCheckTest {
     class WithNoStartUpCheck implements StartUpCheckSuccessContract {
 
         @RegisterExtension
-        JamesServerExtension jamesServerExtension = new JamesServerBuilder()
-            .server(configuration -> GuiceJamesServer.forConfiguration(configuration)
-                .combineWith(MemoryJamesServerMain.IN_MEMORY_SERVER_AGGREGATE_MODULE)
-                .overrideWith(new TestJMAPServerModule(LIMIT_TO_10_MESSAGES))
-                .overrideWith(binder -> binder.bind(TextExtractor.class).to(PDFTextExtractor.class)))
-            .disableAutoStart()
-            .build();
+        JamesServerExtension jamesServerExtension = extensionBuilder().build();
     }
 
     @Nested
     class StartUpCheckFails {
 
         @RegisterExtension
-        JamesServerExtension jamesServerExtension = new JamesServerBuilder()
-            .server(configuration -> GuiceJamesServer.forConfiguration(configuration)
-                .combineWith(MemoryJamesServerMain.IN_MEMORY_SERVER_AGGREGATE_MODULE)
-                .overrideWith(new TestJMAPServerModule(LIMIT_TO_10_MESSAGES))
-                .overrideWith(binder -> binder.bind(TextExtractor.class).to(PDFTextExtractor.class))
-                .overrideWith(binder -> {
+        JamesServerExtension jamesServerExtension = extensionBuilder()
+            .overrideServerModule(binder -> {
                     Multibinder<StartUpCheck> setBinder = Multibinder
                         .newSetBinder(binder, StartUpCheck.class);
 
                     setBinder.addBinding().to(NoopStartUpCheck.class);
                     setBinder.addBinding().to(FailingStartUpCheck.class);
-                }))
-            .disableAutoStart()
+                })
             .build();
 
         @Test
diff --git a/server/container/guice/memory-guice/src/test/java/org/apache/james/GuiceJamesServerTest.java b/server/container/guice/memory-guice/src/test/java/org/apache/james/GuiceJamesServerTest.java
index 7c9831a..6e49658 100644
--- a/server/container/guice/memory-guice/src/test/java/org/apache/james/GuiceJamesServerTest.java
+++ b/server/container/guice/memory-guice/src/test/java/org/apache/james/GuiceJamesServerTest.java
@@ -24,16 +24,18 @@ class GuiceJamesServerTest {
 
     private static final int LIMIT_TO_10_MESSAGES = 10;
 
+    private static JamesServerBuilder extensionBuilder() {
+        return new JamesServerBuilder()
+            .server(configuration -> GuiceJamesServer.forConfiguration(configuration)
+                .combineWith(MemoryJamesServerMain.IN_MEMORY_SERVER_AGGREGATE_MODULE)
+                .overrideWith(new TestJMAPServerModule(LIMIT_TO_10_MESSAGES)))
+            .disableAutoStart();
+    }
+
     @Nested
     class NormalBehaviour {
         @RegisterExtension
-        JamesServerExtension jamesServerExtension = new JamesServerBuilder()
-            .server(configuration -> GuiceJamesServer.forConfiguration(configuration)
-                .combineWith(MemoryJamesServerMain.IN_MEMORY_SERVER_AGGREGATE_MODULE)
-                .overrideWith(new TestJMAPServerModule(LIMIT_TO_10_MESSAGES))
-                .overrideWith(binder -> binder.bind(TextExtractor.class).to(PDFTextExtractor.class)))
-            .disableAutoStart()
-            .build();
+        JamesServerExtension jamesServerExtension = extensionBuilder().build();
 
         @Test
         void serverShouldBeStartedAfterCallingStart(GuiceJamesServer server) throws Exception {
@@ -72,15 +74,10 @@ class GuiceJamesServerTest {
         };
 
         @RegisterExtension
-        JamesServerExtension jamesServerExtension = new JamesServerBuilder()
-            .server(configuration -> GuiceJamesServer.forConfiguration(configuration)
-                .combineWith(MemoryJamesServerMain.IN_MEMORY_SERVER_AGGREGATE_MODULE)
-                .overrideWith(new TestJMAPServerModule(LIMIT_TO_10_MESSAGES))
-                .overrideWith(binder -> binder.bind(TextExtractor.class).to(PDFTextExtractor.class))
-                .overrideWith(binder -> Multibinder.newSetBinder(binder, ConfigurationPerformer.class)
-                    .addBinding()
-                    .toInstance(throwingConfigurationPerformer)))
-            .disableAutoStart()
+        JamesServerExtension jamesServerExtension = extensionBuilder()
+            .overrideServerModule(binder -> Multibinder.newSetBinder(binder, ConfigurationPerformer.class)
+                .addBinding()
+                .toInstance(throwingConfigurationPerformer))
             .build();
 
         @Test
diff --git a/server/container/guice/memory-guice/src/test/java/org/apache/james/GuiceLifecycleHeathCheckTest.java b/server/container/guice/memory-guice/src/test/java/org/apache/james/GuiceLifecycleHeathCheckTest.java
index aeff8dd..7e3878c 100644
--- a/server/container/guice/memory-guice/src/test/java/org/apache/james/GuiceLifecycleHeathCheckTest.java
+++ b/server/container/guice/memory-guice/src/test/java/org/apache/james/GuiceLifecycleHeathCheckTest.java
@@ -50,6 +50,15 @@ import reactor.core.scheduler.Schedulers;
 class GuiceLifecycleHeathCheckTest {
     private static final int LIMIT_TO_10_MESSAGES = 10;
 
+    private static JamesServerBuilder extensionBuilder() {
+        return new JamesServerBuilder()
+            .server(configuration -> GuiceJamesServer.forConfiguration(configuration)
+                .combineWith(MemoryJamesServerMain.IN_MEMORY_SERVER_AGGREGATE_MODULE)
+                .overrideWith(new TestJMAPServerModule(LIMIT_TO_10_MESSAGES))
+                .overrideWith(binder -> binder.bind(WebAdminConfiguration.class)
+                    .toInstance(WebAdminConfiguration.TEST_CONFIGURATION)));
+    }
+
     private static void configureRequestSpecification(GuiceJamesServer server) {
         WebAdminGuiceProbe webAdminGuiceProbe = server.getProbe(WebAdminGuiceProbe.class);
 
@@ -64,13 +73,7 @@ class GuiceLifecycleHeathCheckTest {
     @Nested
     class Healthy {
         @RegisterExtension
-        JamesServerExtension jamesServerExtension = new JamesServerBuilder()
-            .server(configuration -> GuiceJamesServer.forConfiguration(configuration)
-                .combineWith(MemoryJamesServerMain.IN_MEMORY_SERVER_AGGREGATE_MODULE)
-                .overrideWith(new TestJMAPServerModule(LIMIT_TO_10_MESSAGES))
-                .overrideWith(binder -> binder.bind(TextExtractor.class).to(PDFTextExtractor.class))
-                .overrideWith(binder -> binder.bind(WebAdminConfiguration.class).toInstance(WebAdminConfiguration.TEST_CONFIGURATION)))
-            .build();
+        JamesServerExtension jamesServerExtension = extensionBuilder().build();
 
         @Test
         void startedJamesServerShouldBeHealthy(GuiceJamesServer server) {
@@ -108,14 +111,9 @@ class GuiceLifecycleHeathCheckTest {
         CountDownLatch latch = new CountDownLatch(1);
 
         @RegisterExtension
-        JamesServerExtension jamesServerExtension = new JamesServerBuilder()
-            .server(configuration -> GuiceJamesServer.forConfiguration(configuration)
-                .combineWith(MemoryJamesServerMain.IN_MEMORY_SERVER_AGGREGATE_MODULE)
-                .overrideWith(new TestJMAPServerModule(LIMIT_TO_10_MESSAGES))
-                .overrideWith(binder -> binder.bind(TextExtractor.class).to(PDFTextExtractor.class))
-                .overrideWith(binder -> binder.bind(WebAdminConfiguration.class).toInstance(WebAdminConfiguration.TEST_CONFIGURATION))
-                .overrideWith(binder -> binder.bind(CountDownLatch.class).toInstance(latch))
-                .overrideWith(binder -> binder.bind(DestroyedBeforeWebAdmin.class).asEagerSingleton()))
+        JamesServerExtension jamesServerExtension = extensionBuilder()
+            .overrideServerModule(binder -> binder.bind(CountDownLatch.class).toInstance(latch))
+            .overrideServerModule(binder -> binder.bind(DestroyedBeforeWebAdmin.class).asEagerSingleton())
             .build();
 
         @Test
diff --git a/server/container/guice/memory-guice/src/test/java/org/apache/james/MemoryJmapJamesServerTest.java b/server/container/guice/memory-guice/src/test/java/org/apache/james/MemoryJmapJamesServerTest.java
index 2b0469a..26eae94 100644
--- a/server/container/guice/memory-guice/src/test/java/org/apache/james/MemoryJmapJamesServerTest.java
+++ b/server/container/guice/memory-guice/src/test/java/org/apache/james/MemoryJmapJamesServerTest.java
@@ -34,16 +34,18 @@ class MemoryJmapJamesServerTest {
 
     private static final int LIMIT_TO_10_MESSAGES = 10;
 
-    @Nested
-    class JmapJamesServerTest implements JmapJamesServerContract {
-
-        @RegisterExtension
-        JamesServerExtension jamesServerExtension = new JamesServerBuilder()
+    private static JamesServerBuilder extensionBuilder() {
+        return new JamesServerBuilder()
             .server(configuration -> GuiceJamesServer.forConfiguration(configuration)
                 .combineWith(MemoryJamesServerMain.IN_MEMORY_SERVER_AGGREGATE_MODULE)
                 .overrideWith(new TestJMAPServerModule(LIMIT_TO_10_MESSAGES))
-                .overrideWith(DOMAIN_LIST_CONFIGURATION_MODULE))
-            .build();
+                .overrideWith(DOMAIN_LIST_CONFIGURATION_MODULE));
+    }
+
+    @Nested
+    class JmapJamesServerTest implements JmapJamesServerContract {
+        @RegisterExtension
+        JamesServerExtension jamesServerExtension = extensionBuilder().build();
     }
 
     @Nested
@@ -53,18 +55,14 @@ class MemoryJmapJamesServerTest {
         class BadAliasKeyStore {
 
             @RegisterExtension
-            JamesServerExtension jamesServerExtension = new JamesServerBuilder()
-                .server(configuration -> GuiceJamesServer.forConfiguration(configuration)
-                    .combineWith(MemoryJamesServerMain.IN_MEMORY_SERVER_AGGREGATE_MODULE)
-                    .overrideWith(new TestJMAPServerModule(LIMIT_TO_10_MESSAGES))
-                    .overrideWith(DOMAIN_LIST_CONFIGURATION_MODULE)
-                    .overrideWith(binder -> binder.bind(JMAPConfiguration.class)
-                        .toInstance(TestJMAPServerModule
-                            .jmapConfigurationBuilder()
-                            .keystore("badAliasKeystore")
-                            .secret("password")
-                            .build())))
+            JamesServerExtension jamesServerExtension = extensionBuilder()
                 .disableAutoStart()
+                .overrideServerModule(binder -> binder.bind(JMAPConfiguration.class)
+                    .toInstance(TestJMAPServerModule
+                        .jmapConfigurationBuilder()
+                        .keystore("badAliasKeystore")
+                        .secret("password")
+                        .build()))
                 .build();
 
             @Test
@@ -82,17 +80,13 @@ class MemoryJmapJamesServerTest {
         class BadSecretKeyStore {
 
             @RegisterExtension
-            JamesServerExtension jamesServerExtension = new JamesServerBuilder()
-                .server(configuration -> GuiceJamesServer.forConfiguration(configuration)
-                    .combineWith(MemoryJamesServerMain.IN_MEMORY_SERVER_AGGREGATE_MODULE)
-                    .overrideWith(new TestJMAPServerModule(LIMIT_TO_10_MESSAGES))
-                    .overrideWith(DOMAIN_LIST_CONFIGURATION_MODULE)
-                    .overrideWith(binder -> binder.bind(JMAPConfiguration.class)
-                        .toInstance(TestJMAPServerModule
-                            .jmapConfigurationBuilder()
-                            .secret("WrongSecret")
-                            .build())))
+            JamesServerExtension jamesServerExtension = extensionBuilder()
                 .disableAutoStart()
+                .overrideServerModule(binder -> binder.bind(JMAPConfiguration.class)
+                    .toInstance(TestJMAPServerModule
+                        .jmapConfigurationBuilder()
+                        .secret("WrongSecret")
+                        .build()))
                 .build();
 
             @Test
diff --git a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPConfigurationStartUpCheck.java b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPConfigurationStartUpCheck.java
index 158d4fc..765b723 100644
--- a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPConfigurationStartUpCheck.java
+++ b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPConfigurationStartUpCheck.java
@@ -32,14 +32,27 @@ public class JMAPConfigurationStartUpCheck implements StartUpCheck {
     public static final String CHECK_NAME = "JMAPConfigurationStartUpCheck";
 
     private final SecurityKeyLoader securityKeyLoader;
+    private final JMAPConfiguration jmapConfiguration;
 
     @Inject
-    JMAPConfigurationStartUpCheck(SecurityKeyLoader securityKeyLoader) {
+    JMAPConfigurationStartUpCheck(SecurityKeyLoader securityKeyLoader, JMAPConfiguration jmapConfiguration) {
         this.securityKeyLoader = securityKeyLoader;
+        this.jmapConfiguration = jmapConfiguration;
     }
 
     @Override
     public CheckResult check() {
+        if (jmapConfiguration.isEnabled()) {
+            return checkSecurityKey();
+        }
+
+        return CheckResult.builder()
+            .checkName(checkName())
+            .resultType(ResultType.GOOD)
+            .build();
+    }
+
+    private CheckResult checkSecurityKey() {
         try {
             securityKeyLoader.load();
             return CheckResult.builder()
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/crypto/SecurityKeyLoader.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/crypto/SecurityKeyLoader.java
index 0bb359c..4ec4ab6 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/crypto/SecurityKeyLoader.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/crypto/SecurityKeyLoader.java
@@ -34,6 +34,7 @@ import org.apache.james.filesystem.api.FileSystem;
 import org.apache.james.jmap.JMAPConfiguration;
 
 import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Preconditions;
 
 public class SecurityKeyLoader {
 
@@ -51,6 +52,8 @@ public class SecurityKeyLoader {
     }
 
     public AsymmetricKeys load() throws Exception {
+        Preconditions.checkState(jmapConfiguration.isEnabled(), "JMAP is not enabled");
+
         KeyStore keystore = KeyStore.getInstance(JKS);
         InputStream fis = fileSystem.getResource(jmapConfiguration.getKeystore());
         char[] secret = jmapConfiguration.getSecret().toCharArray();
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/crypto/SecurityKeyLoaderTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/crypto/SecurityKeyLoaderTest.java
index 8c5675a..8eccdaa 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/crypto/SecurityKeyLoaderTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/crypto/SecurityKeyLoaderTest.java
@@ -36,6 +36,24 @@ import org.junit.jupiter.params.provider.ValueSource;
 class SecurityKeyLoaderTest {
 
     @Test
+    void loadShouldThrowWhenJMAPIsNotEnabled() throws Exception {
+        JMAPConfiguration jmapConfiguration = JMAPConfiguration.builder()
+            .disable()
+            .jwtPublicKeyPem(Optional.of(JWT_PUBLIC_KEY))
+            .keystore("keystore")
+            .secret("james72laBalle")
+            .build();
+
+        SecurityKeyLoader loader = new SecurityKeyLoader(
+            FileSystemFixture.CLASSPATH_FILE_SYSTEM,
+            jmapConfiguration);
+
+        assertThatThrownBy(loader::load)
+            .isInstanceOf(RuntimeException.class)
+            .hasMessage("JMAP is not enabled");
+    }
+
+    @Test
     void loadShouldThrowWhenWrongKeystore() throws Exception {
         JMAPConfiguration jmapConfiguration = JMAPConfiguration.builder()
             .enable()
@@ -72,7 +90,7 @@ class SecurityKeyLoaderTest {
     }
 
     @Test
-    void loadShouldReturnSecurityKeysWhenCorrectPassword() throws Exception {
+    void loadShouldReturnAsymmetricKeysWhenCorrectPassword() throws Exception {
         JMAPConfiguration jmapConfiguration = JMAPConfiguration.builder()
             .enable()
             .jwtPublicKeyPem(Optional.of(JWT_PUBLIC_KEY))
@@ -93,7 +111,7 @@ class SecurityKeyLoaderTest {
         "keystoreJava7",
         "keystoreJava11",
     })
-    void loadShouldReturnSecurityKeysWhenUsingKeyStoreGeneratedByDifferentJavaVersions(
+    void loadShouldReturnAsymmetricKeysWhenUsingKeyStoreGeneratedByDifferentJavaVersions(
         String keyStoreInDifferentVersion) throws Exception {
 
         JMAPConfiguration jmapConfiguration = JMAPConfiguration.builder()


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org