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