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 1be5a9370a96f32f072e0baf12dbe960d0f0ecf9 Author: Benoit Tellier <btell...@linagora.com> AuthorDate: Fri Apr 24 12:05:25 2020 +0700 JAMES-3140 Choosing blob store should be done via configured modules This makes guice modules composition staticaly defined before starting James --- .../CassandraRabbitMQAwsS3SmtpTestRuleFactory.java | 26 ++- .../mpt/smtp/CassandraSmtpTestRuleFactory.java | 4 +- .../ObjectStorageBlobStoreModule.java | 39 ---- .../ObjectStorageDependenciesModule.java | 8 +- .../swift/ObjectStorageBlobStoreModuleTest.java | 14 +- .../org/apache/james/CassandraJamesServerMain.java | 11 +- ...onModule.java => CassandraBlobStoreModule.java} | 2 +- .../apache/james/CassandraLdapJamesServerMain.java | 7 +- .../james/CassandraRabbitMQJamesServerMain.java | 27 ++- .../modules/blobstore/BlobStoreChoosingModule.java | 49 ----- ...figuration.java => BlobStoreConfiguration.java} | 50 +++-- .../modules/blobstore/BlobStoreModulesChooser.java | 114 +++++++++++ .../james/CassandraRabbitMQAwsS3JmapTestRule.java | 6 +- .../james/CassandraRabbitMQJamesServerFixture.java | 3 +- .../james/CassandraRabbitMQSwiftJmapTestRule.java | 7 +- .../james/RabbitMQJamesServerReprocessingTest.java | 5 +- ...RabbitMQJamesServerWithRetryConnectionTest.java | 2 + .../org/apache/james/WithCassandraBlobStore.java | 15 +- .../james/modules/AwsS3BlobStoreExtension.java | 6 +- .../james/modules/SwiftBlobStoreExtension.java | 6 +- .../james/modules/TestAwsS3BlobStoreModule.java | 47 ----- .../james/modules/TestSwiftBlobStoreModule.java | 46 ----- .../blobstore/BlobStoreChoosingModuleTest.java | 211 --------------------- ...onTest.java => BlobStoreConfigurationTest.java} | 108 +++++++++-- .../blobstore/BlobStoreModulesChooserTest.java | 105 ++++++++++ .../CassandraRabbitMQLdapJamesServerMain.java | 21 +- .../CassandraRabbitMQLdapJmapJamesServerTest.java | 18 +- .../java/org/apache/james/JamesServerMain.java | 8 +- .../java/org/apache/james/JPAJamesServerMain.java | 7 +- .../java/org/apache/james/JPAJamesServerMain.java | 7 +- .../org/apache/james/MemoryJamesServerMain.java | 10 +- .../rabbitmq/RabbitMQAwsS3SendMDNMethodTest.java | 3 +- .../RabbitMQAwsS3SpamAssassinContractTest.java | 3 +- .../cucumber/awss3/RabbitMQAwsS3Stepdefs.java | 3 +- .../rabbitmq/ConsistencyTasksIntegrationTest.java | 5 +- .../rabbitmq/FixingGhostMailboxTest.java | 3 +- .../rabbitmq/RabbitMQAuthorizedEndpointsTest.java | 3 +- .../RabbitMQEventDeadLettersIntegrationTest.java | 3 +- ...stViewProjectionHealthCheckIntegrationTest.java | 3 +- .../rabbitmq/RabbitMQForwardIntegrationTest.java | 3 +- .../rabbitmq/RabbitMQJmapExtension.java | 3 +- .../rabbitmq/RabbitMQJwtFilterIntegrationTest.java | 3 +- ...RabbitMQReindexingWithEventDeadLettersTest.java | 3 +- .../RabbitMQWebAdminServerIntegrationTest.java | 3 +- ...dminServerTaskSerializationIntegrationTest.java | 3 +- ...RabbitMQDeletedMessageVaultIntegrationTest.java | 3 +- ...LinshareBlobExportMechanismIntegrationTest.java | 3 +- 47 files changed, 534 insertions(+), 505 deletions(-) diff --git a/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/CassandraRabbitMQAwsS3SmtpTestRuleFactory.java b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/CassandraRabbitMQAwsS3SmtpTestRuleFactory.java index 01c82b4..6ccde46 100644 --- a/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/CassandraRabbitMQAwsS3SmtpTestRuleFactory.java +++ b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/CassandraRabbitMQAwsS3SmtpTestRuleFactory.java @@ -25,11 +25,13 @@ import org.apache.james.GuiceJamesServer; import org.apache.james.backends.cassandra.DockerCassandra; import org.apache.james.backends.cassandra.init.configuration.ClusterConfiguration; import org.apache.james.backends.rabbitmq.DockerRabbitMQSingleton; +import org.apache.james.blob.api.BlobStore; +import org.apache.james.blob.api.MetricableBlobStore; +import org.apache.james.blob.objectstorage.ObjectStorageBlobStore; import org.apache.james.dnsservice.api.DNSService; -import org.apache.james.modules.TestAwsS3BlobStoreModule; import org.apache.james.modules.TestRabbitMQModule; -import org.apache.james.modules.blobstore.BlobStoreChoosingModule; import org.apache.james.modules.mailbox.KeyspacesConfiguration; +import org.apache.james.modules.objectstorage.ObjectStorageDependenciesModule; import org.apache.james.modules.objectstorage.aws.s3.DockerAwsS3TestRule; import org.apache.james.modules.protocols.SmtpGuiceProbe.SmtpServerConnectedType; import org.apache.james.modules.rabbitmq.RabbitMQModule; @@ -40,6 +42,10 @@ import org.apache.james.server.core.configuration.Configuration; import org.apache.james.util.Host; import org.junit.rules.TemporaryFolder; +import com.google.inject.AbstractModule; +import com.google.inject.Module; +import com.google.inject.name.Names; + public final class CassandraRabbitMQAwsS3SmtpTestRuleFactory { public static SmtpTestRule create(SmtpServerConnectedType smtpServerConnectedType, Host cassandraHost, DockerAwsS3TestRule awsS3TestRule) { SmtpTestRule.ServerBuilder createJamesServer = (folder, dnsService) -> createJamesServer(cassandraHost, awsS3TestRule, folder, dnsService); @@ -47,6 +53,16 @@ public final class CassandraRabbitMQAwsS3SmtpTestRuleFactory { return new SmtpTestRule(smtpServerConnectedType, createJamesServer); } + private static Module BLOB_STORE_MODULE = new AbstractModule() { + @Override + protected void configure() { + install(new ObjectStorageDependenciesModule()); + bind(BlobStore.class) + .annotatedWith(Names.named(MetricableBlobStore.BLOB_STORE_IMPLEMENTATION)) + .to(ObjectStorageBlobStore.class); + } + }; + private static GuiceJamesServer createJamesServer(Host cassandraHost, DockerAwsS3TestRule awsS3TestRule, TemporaryFolder folder, DNSService dnsService) throws Exception { Configuration configuration = Configuration.builder() .workingDirectory(folder.newFolder()) @@ -59,12 +75,10 @@ public final class CassandraRabbitMQAwsS3SmtpTestRuleFactory { binder -> binder.bind(MailQueueItemDecoratorFactory.class).to(RawMailQueueItemDecoratorFactory.class), binder -> binder.bind(CamelMailetContainerModule.DefaultProcessorsConfigurationSupplier.class) .toInstance(BaseHierarchicalConfiguration::new)) - .overrideWith( - new RabbitMQModule(), - new BlobStoreChoosingModule()) + .overrideWith(new RabbitMQModule(), BLOB_STORE_MODULE) .overrideWith( new TestRabbitMQModule(DockerRabbitMQSingleton.SINGLETON), - new TestAwsS3BlobStoreModule(awsS3TestRule), + awsS3TestRule.getModule(), binder -> binder.bind(KeyspacesConfiguration.class) .toInstance(KeyspacesConfiguration.builder() .keyspace(DockerCassandra.KEYSPACE) diff --git a/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/CassandraSmtpTestRuleFactory.java b/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/CassandraSmtpTestRuleFactory.java index dfec67e..97b73de 100644 --- a/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/CassandraSmtpTestRuleFactory.java +++ b/mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/CassandraSmtpTestRuleFactory.java @@ -24,7 +24,7 @@ import org.apache.james.GuiceJamesServer; import org.apache.james.backends.cassandra.DockerCassandra; import org.apache.james.backends.cassandra.init.configuration.ClusterConfiguration; import org.apache.james.dnsservice.api.DNSService; -import org.apache.james.modules.mailbox.CassandraBlobStoreDeclarationModule; +import org.apache.james.modules.mailbox.CassandraBlobStoreModule; import org.apache.james.modules.mailbox.KeyspacesConfiguration; import org.apache.james.modules.protocols.SmtpGuiceProbe.SmtpServerConnectedType; import org.apache.james.modules.server.CamelMailetContainerModule; @@ -49,7 +49,7 @@ public final class CassandraSmtpTestRuleFactory { return GuiceJamesServer.forConfiguration(configuration) .combineWith(CassandraJamesServerMain.CASSANDRA_SERVER_CORE_MODULE, - new CassandraBlobStoreDeclarationModule(), + new CassandraBlobStoreModule(), SmtpTestRule.SMTP_PROTOCOL_MODULE, binder -> binder.bind(MailQueueItemDecoratorFactory.class).to(RawMailQueueItemDecoratorFactory.class), binder -> binder.bind(CamelMailetContainerModule.DefaultProcessorsConfigurationSupplier.class) diff --git a/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageBlobStoreModule.java b/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageBlobStoreModule.java deleted file mode 100644 index 5440878..0000000 --- a/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageBlobStoreModule.java +++ /dev/null @@ -1,39 +0,0 @@ -/**************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one * - * or more contributor license agreements. See the NOTICE file * - * distributed with this work for additional information * - * regarding copyright ownership. The ASF licenses this file * - * to you under the Apache License, Version 2.0 (the * - * "License"); you may not use this file except in compliance * - * with the License. You may obtain a copy of the License at * - * * - * http://www.apache.org/licenses/LICENSE-2.0 * - * * - * Unless required by applicable law or agreed to in writing, * - * software distributed under the License is distributed on an * - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * - * KIND, either express or implied. See the License for the * - * specific language governing permissions and limitations * - * under the License. * - ****************************************************************/ - -package org.apache.james.modules.objectstorage; - -import org.apache.james.blob.api.BlobStore; -import org.apache.james.blob.api.MetricableBlobStore; -import org.apache.james.blob.objectstorage.ObjectStorageBlobStore; - -import com.google.inject.AbstractModule; -import com.google.inject.name.Names; - -public class ObjectStorageBlobStoreModule extends AbstractModule { - - @Override - protected void configure() { - install(new ObjectStorageDependenciesModule()); - bind(BlobStore.class) - .annotatedWith(Names.named(MetricableBlobStore.BLOB_STORE_IMPLEMENTATION)) - .to(ObjectStorageBlobStore.class); - } - -} diff --git a/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageDependenciesModule.java b/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageDependenciesModule.java index 7ccbb9a..a56388b 100644 --- a/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageDependenciesModule.java +++ b/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageDependenciesModule.java @@ -28,7 +28,6 @@ import javax.inject.Singleton; import org.apache.commons.configuration2.Configuration; import org.apache.commons.configuration2.ex.ConfigurationException; import org.apache.james.blob.api.BlobId; -import org.apache.james.blob.api.HashBlobId; import org.apache.james.blob.objectstorage.BlobPutter; import org.apache.james.blob.objectstorage.ObjectStorageBlobStore; import org.apache.james.blob.objectstorage.ObjectStorageBlobStoreBuilder; @@ -40,13 +39,12 @@ import org.apache.james.utils.PropertiesProvider; import com.google.inject.AbstractModule; import com.google.inject.Provides; -import com.google.inject.Scopes; public class ObjectStorageDependenciesModule extends AbstractModule { @Override protected void configure() { - bind(BlobId.Factory.class).to(HashBlobId.Factory.class).in(Scopes.SINGLETON); + } @Provides @@ -66,7 +64,7 @@ public class ObjectStorageDependenciesModule extends AbstractModule { ObjectStorageBlobStore blobStore = selectBlobStoreBuilder(configuration) .blobIdFactory(blobIdFactory) .payloadCodec(configuration.getPayloadCodec()) - .blobPutter(putBlob(blobIdFactory, configuration, awsS3ObjectStorageProvider)) + .blobPutter(putBlob(configuration, awsS3ObjectStorageProvider)) .namespace(configuration.getNamespace()) .bucketPrefix(configuration.getBucketPrefix()) .build(); @@ -83,7 +81,7 @@ public class ObjectStorageDependenciesModule extends AbstractModule { throw new IllegalArgumentException("unknown provider " + configuration.getProvider()); } - private Optional<BlobPutter> putBlob(BlobId.Factory blobIdFactory, ObjectStorageBlobConfiguration configuration, Provider<AwsS3ObjectStorage> awsS3ObjectStorageProvider) { + private Optional<BlobPutter> putBlob(ObjectStorageBlobConfiguration configuration, Provider<AwsS3ObjectStorage> awsS3ObjectStorageProvider) { switch (configuration.getProvider()) { case SWIFT: return Optional.empty(); diff --git a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/ObjectStorageBlobStoreModuleTest.java b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/ObjectStorageBlobStoreModuleTest.java index 05a386a..fbd6d63 100644 --- a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/ObjectStorageBlobStoreModuleTest.java +++ b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/ObjectStorageBlobStoreModuleTest.java @@ -26,11 +26,13 @@ import java.util.Optional; import java.util.UUID; import java.util.stream.Stream; +import org.apache.james.blob.api.BlobId; import org.apache.james.blob.api.BlobStore; import org.apache.james.blob.api.BucketName; -import org.apache.james.blob.api.MetricableBlobStore; +import org.apache.james.blob.api.HashBlobId; import org.apache.james.blob.objectstorage.DockerSwift; import org.apache.james.blob.objectstorage.DockerSwiftExtension; +import org.apache.james.blob.objectstorage.ObjectStorageBlobStore; import org.apache.james.blob.objectstorage.swift.Credentials; import org.apache.james.blob.objectstorage.swift.DomainName; import org.apache.james.blob.objectstorage.swift.IdentityV3; @@ -44,7 +46,7 @@ import org.apache.james.blob.objectstorage.swift.TenantName; import org.apache.james.blob.objectstorage.swift.UserHeaderName; import org.apache.james.blob.objectstorage.swift.UserName; import org.apache.james.modules.objectstorage.ObjectStorageBlobConfiguration; -import org.apache.james.modules.objectstorage.ObjectStorageBlobStoreModule; +import org.apache.james.modules.objectstorage.ObjectStorageDependenciesModule; import org.apache.james.modules.objectstorage.ObjectStorageProvider; import org.apache.james.modules.objectstorage.PayloadCodecFactory; import org.junit.jupiter.api.BeforeAll; @@ -57,8 +59,6 @@ import org.junit.jupiter.params.provider.ArgumentsSource; import com.google.inject.Guice; import com.google.inject.Injector; -import com.google.inject.Key; -import com.google.inject.name.Names; import com.google.inject.util.Modules; @ExtendWith(DockerSwiftExtension.class) @@ -132,11 +132,11 @@ class ObjectStorageBlobStoreModuleTest { @ArgumentsSource(BlobStorageBlobConfigurationProvider.class) void shouldSetupBlobStore(ObjectStorageBlobConfiguration configuration) { Injector injector = Guice.createInjector( - Modules - .override(new ObjectStorageBlobStoreModule()) + Modules.override(binder -> binder.bind(BlobId.Factory.class).to(HashBlobId.Factory.class), + new ObjectStorageDependenciesModule()) .with(binder -> binder.bind(ObjectStorageBlobConfiguration.class).toInstance(configuration))); - BlobStore blobStore = injector.getInstance(Key.get(BlobStore.class, Names.named(MetricableBlobStore.BLOB_STORE_IMPLEMENTATION))); + BlobStore blobStore = injector.getInstance(ObjectStorageBlobStore.class); assertThatCode(() -> blobStore.save(blobStore.getDefaultBucketName(), new byte[] {0x00}, LOW_COST)).doesNotThrowAnyException(); } diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java index 440828e..a28abc2 100644 --- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java +++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java @@ -35,8 +35,8 @@ import org.apache.james.modules.data.CassandraSieveRepositoryModule; import org.apache.james.modules.data.CassandraUsersRepositoryModule; import org.apache.james.modules.eventstore.CassandraEventStoreModule; import org.apache.james.modules.mailbox.BlobStoreAPIModule; -import org.apache.james.modules.mailbox.CassandraBlobStoreDeclarationModule; import org.apache.james.modules.mailbox.CassandraBlobStoreDependenciesModule; +import org.apache.james.modules.mailbox.CassandraBlobStoreModule; import org.apache.james.modules.mailbox.CassandraDeletedMessageVaultModule; import org.apache.james.modules.mailbox.CassandraMailboxModule; import org.apache.james.modules.mailbox.CassandraQuotaMailingModule; @@ -73,6 +73,7 @@ import org.apache.james.modules.spamassassin.SpamAssassinListenerModule; import org.apache.james.modules.vault.DeletedMessageVaultRoutesModule; import org.apache.james.modules.webadmin.CassandraRoutesModule; import org.apache.james.modules.webadmin.InconsistencySolvingRoutesModule; +import org.apache.james.server.core.configuration.Configuration; import com.google.common.collect.ImmutableSet; import com.google.inject.Module; @@ -155,14 +156,18 @@ public class CassandraJamesServerMain implements JamesServerMain { new DKIMMailetModule()); public static Module ALL_BUT_JMX_CASSANDRA_MODULE = Modules.combine( - new CassandraBlobStoreDeclarationModule(), + new CassandraBlobStoreModule(), REQUIRE_TASK_MANAGER_MODULE, new TaskManagerModule(), CASSANDRA_EVENT_STORE_JSON_SERIALIZATION_DEFAULT_MODULE ); public static void main(String[] args) throws Exception { - JamesServerMain.main(ALL_BUT_JMX_CASSANDRA_MODULE, new JMXServerModule()); + Configuration configuration = Configuration.builder() + .useWorkingDirectoryEnvProperty() + .build(); + + JamesServerMain.main(configuration, ALL_BUT_JMX_CASSANDRA_MODULE, new JMXServerModule()); } } diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraBlobStoreDeclarationModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraBlobStoreModule.java similarity index 95% rename from server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraBlobStoreDeclarationModule.java rename to server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraBlobStoreModule.java index e885e15..b4b3dca 100644 --- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraBlobStoreDeclarationModule.java +++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraBlobStoreModule.java @@ -26,7 +26,7 @@ import org.apache.james.blob.cassandra.CassandraBlobStore; import com.google.inject.AbstractModule; import com.google.inject.name.Names; -public class CassandraBlobStoreDeclarationModule extends AbstractModule { +public class CassandraBlobStoreModule extends AbstractModule { @Override protected void configure() { bind(BlobStore.class) diff --git a/server/container/guice/cassandra-ldap-guice/src/main/java/org/apache/james/CassandraLdapJamesServerMain.java b/server/container/guice/cassandra-ldap-guice/src/main/java/org/apache/james/CassandraLdapJamesServerMain.java index cf02e66..345c725 100644 --- a/server/container/guice/cassandra-ldap-guice/src/main/java/org/apache/james/CassandraLdapJamesServerMain.java +++ b/server/container/guice/cassandra-ldap-guice/src/main/java/org/apache/james/CassandraLdapJamesServerMain.java @@ -23,6 +23,7 @@ import static org.apache.james.CassandraJamesServerMain.ALL_BUT_JMX_CASSANDRA_MO import org.apache.james.data.LdapUsersRepositoryModule; import org.apache.james.modules.server.JMXServerModule; +import org.apache.james.server.core.configuration.Configuration; import com.google.inject.Module; import com.google.inject.util.Modules; @@ -33,7 +34,11 @@ public class CassandraLdapJamesServerMain implements JamesServerMain { .with(new LdapUsersRepositoryModule()); public static void main(String[] args) throws Exception { - JamesServerMain.main(MODULES, new JMXServerModule()); + Configuration configuration = Configuration.builder() + .useWorkingDirectoryEnvProperty() + .build(); + + JamesServerMain.main(configuration, MODULES, new JMXServerModule()); } } diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/CassandraRabbitMQJamesServerMain.java b/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/CassandraRabbitMQJamesServerMain.java index bd5a425..d78ebaa 100644 --- a/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/CassandraRabbitMQJamesServerMain.java +++ b/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/CassandraRabbitMQJamesServerMain.java @@ -23,21 +23,40 @@ import static org.apache.james.CassandraJamesServerMain.REQUIRE_TASK_MANAGER_MOD import org.apache.james.modules.DistributedTaskManagerModule; import org.apache.james.modules.TaskSerializationModule; -import org.apache.james.modules.blobstore.BlobStoreChoosingModule; +import org.apache.james.modules.blobstore.BlobStoreConfiguration; +import org.apache.james.modules.blobstore.BlobStoreModulesChooser; import org.apache.james.modules.event.RabbitMQEventBusModule; import org.apache.james.modules.rabbitmq.RabbitMQModule; import org.apache.james.modules.server.JMXServerModule; +import org.apache.james.server.core.configuration.Configuration; +import com.google.common.collect.ImmutableList; import com.google.inject.Module; import com.google.inject.util.Modules; public class CassandraRabbitMQJamesServerMain implements JamesServerMain { - public static final Module MODULES = + protected static final Module MODULES = Modules .override(Modules.combine(REQUIRE_TASK_MANAGER_MODULE, new DistributedTaskManagerModule())) - .with(new RabbitMQModule(), new BlobStoreChoosingModule(), new RabbitMQEventBusModule(), new TaskSerializationModule()); + .with(new RabbitMQModule(), new RabbitMQEventBusModule(), new TaskSerializationModule()); public static void main(String[] args) throws Exception { - JamesServerMain.main(MODULES, new JMXServerModule()); + Configuration configuration = Configuration.builder() + .useWorkingDirectoryEnvProperty() + .build(); + + BlobStoreConfiguration blobStoreConfiguration = BlobStoreConfiguration.parse(configuration); + + Module baseModule = modules(blobStoreConfiguration); + + JamesServerMain.main(configuration, + baseModule, new JMXServerModule()); + } + + public static Module modules(BlobStoreConfiguration blobStoreConfiguration) { + return Modules.combine(ImmutableList.<Module>builder() + .add(MODULES) + .addAll(BlobStoreModulesChooser.chooseModules(blobStoreConfiguration)) + .build()); } } diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/blobstore/BlobStoreChoosingModule.java b/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/blobstore/BlobStoreChoosingModule.java index 4e79e50..5b30d21 100644 --- a/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/blobstore/BlobStoreChoosingModule.java +++ b/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/blobstore/BlobStoreChoosingModule.java @@ -21,24 +21,16 @@ package org.apache.james.modules.blobstore; import java.io.FileNotFoundException; -import javax.inject.Named; -import javax.inject.Provider; import javax.inject.Singleton; import org.apache.commons.configuration2.Configuration; import org.apache.commons.configuration2.ex.ConfigurationException; import org.apache.james.backends.cassandra.components.CassandraModule; -import org.apache.james.blob.api.BlobStore; -import org.apache.james.blob.api.MetricableBlobStore; import org.apache.james.blob.cassandra.CassandraBlobModule; -import org.apache.james.blob.cassandra.CassandraBlobStore; -import org.apache.james.blob.objectstorage.ObjectStorageBlobStore; import org.apache.james.blob.union.HybridBlobStore; import org.apache.james.modules.mailbox.ConfigurationComponent; import org.apache.james.modules.objectstorage.ObjectStorageDependenciesModule; import org.apache.james.utils.PropertiesProvider; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import com.google.common.annotations.VisibleForTesting; import com.google.inject.AbstractModule; @@ -46,8 +38,6 @@ import com.google.inject.Provides; import com.google.inject.multibindings.Multibinder; public class BlobStoreChoosingModule extends AbstractModule { - private static final Logger LOGGER = LoggerFactory.getLogger(BlobStoreChoosingModule.class); - @Override protected void configure() { install(new ObjectStorageDependenciesModule()); @@ -56,45 +46,6 @@ public class BlobStoreChoosingModule extends AbstractModule { cassandraDataDefinitions.addBinding().toInstance(CassandraBlobModule.MODULE); } - @VisibleForTesting - @Provides - @Singleton - BlobStoreChoosingConfiguration provideChoosingConfiguration(PropertiesProvider propertiesProvider) throws ConfigurationException { - try { - Configuration configuration = propertiesProvider.getConfigurations(ConfigurationComponent.NAMES); - return BlobStoreChoosingConfiguration.from(configuration); - } catch (FileNotFoundException e) { - LOGGER.warn("Could not find " + ConfigurationComponent.NAME + " configuration file, using cassandra blobstore as the default"); - return BlobStoreChoosingConfiguration.cassandra(); - } - } - - @VisibleForTesting - @Provides - @Named(MetricableBlobStore.BLOB_STORE_IMPLEMENTATION) - @Singleton - BlobStore provideBlobStore(BlobStoreChoosingConfiguration choosingConfiguration, - Provider<CassandraBlobStore> cassandraBlobStoreProvider, - Provider<ObjectStorageBlobStore> objectStorageBlobStoreProvider, - HybridBlobStore.Configuration hybridBlobStoreConfiguration) { - - switch (choosingConfiguration.getImplementation()) { - case OBJECTSTORAGE: - return objectStorageBlobStoreProvider.get(); - case CASSANDRA: - return cassandraBlobStoreProvider.get(); - case HYBRID: - return HybridBlobStore.builder() - .lowCost(objectStorageBlobStoreProvider.get()) - .highPerformance(cassandraBlobStoreProvider.get()) - .configuration(hybridBlobStoreConfiguration) - .build(); - default: - throw new RuntimeException(String.format("can not get the right blobstore provider with configuration %s", - choosingConfiguration.toString())); - } - } - @Provides @Singleton @VisibleForTesting diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/blobstore/BlobStoreChoosingConfiguration.java b/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/blobstore/BlobStoreConfiguration.java similarity index 63% rename from server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/blobstore/BlobStoreChoosingConfiguration.java rename to server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/blobstore/BlobStoreConfiguration.java index 84bc7fb..c7f2325 100644 --- a/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/blobstore/BlobStoreChoosingConfiguration.java +++ b/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/blobstore/BlobStoreConfiguration.java @@ -19,17 +19,25 @@ package org.apache.james.modules.blobstore; +import java.io.FileNotFoundException; import java.util.Objects; import java.util.Optional; import java.util.stream.Collectors; import java.util.stream.Stream; import org.apache.commons.configuration2.Configuration; +import org.apache.commons.configuration2.ex.ConfigurationException; import org.apache.commons.lang3.StringUtils; +import org.apache.james.modules.mailbox.ConfigurationComponent; +import org.apache.james.server.core.filesystem.FileSystemImpl; +import org.apache.james.utils.PropertiesProvider; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.google.common.base.MoreObjects; -public class BlobStoreChoosingConfiguration { +public class BlobStoreConfiguration { + private static final Logger LOGGER = LoggerFactory.getLogger(BlobStoreConfiguration.class); public enum BlobStoreImplName { CASSANDRA("cassandra"), @@ -63,7 +71,23 @@ public class BlobStoreChoosingConfiguration { static final String BLOBSTORE_IMPLEMENTATION_PROPERTY = "implementation"; - static BlobStoreChoosingConfiguration from(Configuration configuration) { + public static BlobStoreConfiguration parse(org.apache.james.server.core.configuration.Configuration configuration) throws ConfigurationException { + PropertiesProvider propertiesProvider = new PropertiesProvider(new FileSystemImpl(configuration.directories()), configuration); + + return parse(propertiesProvider); + } + + public static BlobStoreConfiguration parse(PropertiesProvider propertiesProvider) throws ConfigurationException { + try { + Configuration configuration = propertiesProvider.getConfigurations(ConfigurationComponent.NAMES); + return BlobStoreConfiguration.from(configuration); + } catch (FileNotFoundException e) { + LOGGER.warn("Could not find " + ConfigurationComponent.NAME + " configuration file, using cassandra blobstore as the default"); + return BlobStoreConfiguration.cassandra(); + } + } + + static BlobStoreConfiguration from(Configuration configuration) { BlobStoreImplName blobStoreImplName = Optional.ofNullable(configuration.getString(BLOBSTORE_IMPLEMENTATION_PROPERTY)) .filter(StringUtils::isNotBlank) .map(StringUtils::trim) @@ -71,25 +95,25 @@ public class BlobStoreChoosingConfiguration { .orElseThrow(() -> new IllegalStateException(String.format("%s property is missing please use one of " + "supported values in: %s", BLOBSTORE_IMPLEMENTATION_PROPERTY, BlobStoreImplName.supportedImplNames()))); - return new BlobStoreChoosingConfiguration(blobStoreImplName); + return new BlobStoreConfiguration(blobStoreImplName); } - public static BlobStoreChoosingConfiguration cassandra() { - return new BlobStoreChoosingConfiguration(BlobStoreImplName.CASSANDRA); + public static BlobStoreConfiguration cassandra() { + return new BlobStoreConfiguration(BlobStoreImplName.CASSANDRA); } - public static BlobStoreChoosingConfiguration objectStorage() { - return new BlobStoreChoosingConfiguration(BlobStoreImplName.OBJECTSTORAGE); + public static BlobStoreConfiguration objectStorage() { + return new BlobStoreConfiguration(BlobStoreImplName.OBJECTSTORAGE); } - public static BlobStoreChoosingConfiguration hybrid() { - return new BlobStoreChoosingConfiguration(BlobStoreImplName.HYBRID); + public static BlobStoreConfiguration hybrid() { + return new BlobStoreConfiguration(BlobStoreImplName.HYBRID); } private final BlobStoreImplName implementation; - BlobStoreChoosingConfiguration(BlobStoreImplName implementation) { - this.implementation = implementation; + BlobStoreConfiguration(BlobStoreImplName implementation) { + this.implementation = implementation; } BlobStoreImplName getImplementation() { @@ -98,8 +122,8 @@ public class BlobStoreChoosingConfiguration { @Override public final boolean equals(Object o) { - if (o instanceof BlobStoreChoosingConfiguration) { - BlobStoreChoosingConfiguration that = (BlobStoreChoosingConfiguration) o; + if (o instanceof BlobStoreConfiguration) { + BlobStoreConfiguration that = (BlobStoreConfiguration) o; return Objects.equals(this.implementation, that.implementation); } diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/blobstore/BlobStoreModulesChooser.java b/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/blobstore/BlobStoreModulesChooser.java new file mode 100644 index 0000000..f1cc709 --- /dev/null +++ b/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/blobstore/BlobStoreModulesChooser.java @@ -0,0 +1,114 @@ +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you under the Apache License, Version 2.0 (the * + * "License"); you may not use this file except in compliance * + * with the License. You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, * + * software distributed under the License is distributed on an * + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * + * KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations * + * under the License. * + ****************************************************************/ + +package org.apache.james.modules.blobstore; + +import java.io.FileNotFoundException; +import java.util.List; + +import javax.inject.Named; +import javax.inject.Singleton; + +import org.apache.commons.configuration2.Configuration; +import org.apache.commons.configuration2.ex.ConfigurationException; +import org.apache.james.blob.api.BlobStore; +import org.apache.james.blob.api.MetricableBlobStore; +import org.apache.james.blob.cassandra.CassandraBlobStore; +import org.apache.james.blob.objectstorage.ObjectStorageBlobStore; +import org.apache.james.blob.union.HybridBlobStore; +import org.apache.james.modules.mailbox.CassandraBlobStoreDependenciesModule; +import org.apache.james.modules.mailbox.ConfigurationComponent; +import org.apache.james.modules.objectstorage.ObjectStorageDependenciesModule; +import org.apache.james.utils.PropertiesProvider; + +import com.google.common.annotations.VisibleForTesting; +import com.google.common.collect.ImmutableList; +import com.google.inject.AbstractModule; +import com.google.inject.Module; +import com.google.inject.Provides; +import com.google.inject.name.Names; + +public class BlobStoreModulesChooser { + static class CassandraDeclarationModule extends AbstractModule { + @Override + protected void configure() { + install(new CassandraBlobStoreDependenciesModule()); + bind(BlobStore.class) + .annotatedWith(Names.named(MetricableBlobStore.BLOB_STORE_IMPLEMENTATION)) + .to(CassandraBlobStore.class); + } + } + + static class ObjectStorageDeclarationModule extends AbstractModule { + @Override + protected void configure() { + install(new ObjectStorageDependenciesModule()); + bind(BlobStore.class) + .annotatedWith(Names.named(MetricableBlobStore.BLOB_STORE_IMPLEMENTATION)) + .to(ObjectStorageBlobStore.class); + } + } + + static class HybridDeclarationModule extends AbstractModule { + @Override + protected void configure() { + install(new ObjectStorageDependenciesModule()); + install(new CassandraBlobStoreDependenciesModule()); + } + + @Provides + @Singleton + @VisibleForTesting + HybridBlobStore.Configuration providesHybridBlobStoreConfiguration(PropertiesProvider propertiesProvider) { + try { + Configuration configuration = propertiesProvider.getConfigurations(ConfigurationComponent.NAMES); + return HybridBlobStore.Configuration.from(configuration); + } catch (FileNotFoundException | ConfigurationException e) { + return HybridBlobStore.Configuration.DEFAULT; + } + } + + @Provides + @Named(MetricableBlobStore.BLOB_STORE_IMPLEMENTATION) + @Singleton + BlobStore providesHybridBlobStore(HybridBlobStore.Configuration hybridBlobStoreConfiguration, + CassandraBlobStore cassandraBlobStore, + ObjectStorageBlobStore objectStorageBlobStore) { + return HybridBlobStore.builder() + .lowCost(objectStorageBlobStore) + .highPerformance(cassandraBlobStore) + .configuration(hybridBlobStoreConfiguration) + .build(); + } + } + + @VisibleForTesting + public static List<Module> chooseModules(BlobStoreConfiguration choosingConfiguration) { + switch (choosingConfiguration.getImplementation()) { + case CASSANDRA: + return ImmutableList.of(new CassandraDeclarationModule()); + case OBJECTSTORAGE: + return ImmutableList.of(new ObjectStorageDeclarationModule()); + case HYBRID: + return ImmutableList.of(new HybridDeclarationModule()); + default: + throw new RuntimeException("Unsuported blobStore implementation " + choosingConfiguration.getImplementation()); + } + } +} diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQAwsS3JmapTestRule.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQAwsS3JmapTestRule.java index 249f05b..59318aa 100644 --- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQAwsS3JmapTestRule.java +++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQAwsS3JmapTestRule.java @@ -27,7 +27,7 @@ import org.apache.james.mailbox.store.search.PDFTextExtractor; import org.apache.james.modules.TestDockerESMetricReporterModule; import org.apache.james.modules.TestJMAPServerModule; import org.apache.james.modules.TestRabbitMQModule; -import org.apache.james.modules.blobstore.BlobStoreChoosingConfiguration; +import org.apache.james.modules.blobstore.BlobStoreConfiguration; import org.apache.james.modules.objectstorage.aws.s3.DockerAwsS3TestRule; import org.apache.james.server.core.configuration.Configuration; import org.apache.james.webadmin.WebAdminConfiguration; @@ -68,11 +68,9 @@ public class CassandraRabbitMQAwsS3JmapTestRule implements TestRule { .build(); return GuiceJamesServer.forConfiguration(configuration) - .combineWith(CassandraRabbitMQJamesServerMain.MODULES) + .combineWith(CassandraRabbitMQJamesServerMain.modules(BlobStoreConfiguration.objectStorage())) .overrideWith(binder -> binder.bind(TextExtractor.class).to(PDFTextExtractor.class)) .overrideWith(new TestRabbitMQModule(DockerRabbitMQSingleton.SINGLETON)) - .overrideWith(binder -> binder.bind(BlobStoreChoosingConfiguration.class) - .toInstance(BlobStoreChoosingConfiguration.objectStorage())) .overrideWith(new TestJMAPServerModule()) .overrideWith(new TestDockerESMetricReporterModule(dockerElasticSearchRule.getDockerEs().getHttpHost())) .overrideWith(guiceModuleTestRule.getModule()) diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQJamesServerFixture.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQJamesServerFixture.java index 4984f55..24cd328 100644 --- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQJamesServerFixture.java +++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQJamesServerFixture.java @@ -22,13 +22,14 @@ package org.apache.james; import org.apache.james.jmap.draft.JmapJamesServerContract; import org.apache.james.modules.RabbitMQExtension; import org.apache.james.modules.TestJMAPServerModule; +import org.apache.james.modules.blobstore.BlobStoreConfiguration; public class CassandraRabbitMQJamesServerFixture { private static final JamesServerBuilder.ServerProvider CONFIGURATION_BUILDER = configuration -> GuiceJamesServer .forConfiguration(configuration) - .combineWith(CassandraRabbitMQJamesServerMain.MODULES) + .combineWith(CassandraRabbitMQJamesServerMain.modules(BlobStoreConfiguration.objectStorage())) .overrideWith(new TestJMAPServerModule()) .overrideWith(JmapJamesServerContract.DOMAIN_LIST_CONFIGURATION_MODULE); diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQSwiftJmapTestRule.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQSwiftJmapTestRule.java index 8a0de82..75cde2b 100644 --- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQSwiftJmapTestRule.java +++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQSwiftJmapTestRule.java @@ -27,7 +27,8 @@ import org.apache.james.mailbox.store.search.PDFTextExtractor; import org.apache.james.modules.TestDockerESMetricReporterModule; import org.apache.james.modules.TestJMAPServerModule; import org.apache.james.modules.TestRabbitMQModule; -import org.apache.james.modules.TestSwiftBlobStoreModule; +import org.apache.james.modules.blobstore.BlobStoreConfiguration; +import org.apache.james.modules.objectstorage.swift.DockerSwiftTestRule; import org.apache.james.server.core.configuration.Configuration; import org.junit.rules.TemporaryFolder; import org.junit.rules.TestRule; @@ -66,10 +67,10 @@ public class CassandraRabbitMQSwiftJmapTestRule implements TestRule { .build(); return GuiceJamesServer.forConfiguration(configuration) - .combineWith(CassandraRabbitMQJamesServerMain.MODULES) + .combineWith(CassandraRabbitMQJamesServerMain.modules(BlobStoreConfiguration.objectStorage())) .overrideWith(binder -> binder.bind(TextExtractor.class).to(PDFTextExtractor.class)) .overrideWith(new TestRabbitMQModule(DockerRabbitMQSingleton.SINGLETON)) - .overrideWith(new TestSwiftBlobStoreModule()) + .overrideWith(new DockerSwiftTestRule().getModule()) .overrideWith(new TestJMAPServerModule()) .overrideWith(new TestDockerESMetricReporterModule(dockerElasticSearchRule.getDockerEs().getHttpHost())) .overrideWith(guiceModuleTestRule.getModule()) diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/RabbitMQJamesServerReprocessingTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/RabbitMQJamesServerReprocessingTest.java index f5aa48f..dc992fd 100644 --- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/RabbitMQJamesServerReprocessingTest.java +++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/RabbitMQJamesServerReprocessingTest.java @@ -24,9 +24,10 @@ import static org.assertj.core.api.Assertions.assertThat; import org.apache.james.jmap.draft.JmapJamesServerContract; import org.apache.james.mailrepository.api.MailRepositoryUrl; +import org.apache.james.modules.AwsS3BlobStoreExtension; import org.apache.james.modules.RabbitMQExtension; import org.apache.james.modules.TestJMAPServerModule; -import org.apache.james.modules.blobstore.BlobStoreChoosingModule; +import org.apache.james.modules.blobstore.BlobStoreConfiguration; import org.apache.james.modules.protocols.SmtpGuiceProbe; import org.apache.james.utils.MailRepositoryProbeImpl; import org.apache.james.utils.SMTPMessageSender; @@ -54,9 +55,9 @@ class RabbitMQJamesServerReprocessingTest { @RegisterExtension JamesServerExtension jamesServerExtension = CassandraRabbitMQJamesServerFixture .baseExtensionBuilder(rabbitMQExtension) + .extension(new AwsS3BlobStoreExtension()) .server(configuration -> GuiceJamesServer .forConfiguration(configuration) - .combineWith(CassandraRabbitMQJamesServerMain.MODULES) .overrideWith(new TestJMAPServerModule()) .overrideWith(binder -> binder.bind(WebAdminConfiguration.class).toInstance(WebAdminConfiguration.TEST_CONFIGURATION)) .overrideWith(JmapJamesServerContract.DOMAIN_LIST_CONFIGURATION_MODULE)) diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/RabbitMQJamesServerWithRetryConnectionTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/RabbitMQJamesServerWithRetryConnectionTest.java index e44138e..da1a615 100644 --- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/RabbitMQJamesServerWithRetryConnectionTest.java +++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/RabbitMQJamesServerWithRetryConnectionTest.java @@ -27,6 +27,7 @@ import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ThreadFactory; import java.util.concurrent.TimeUnit; +import org.apache.james.modules.AwsS3BlobStoreExtension; import org.apache.james.modules.RabbitMQExtension; import org.apache.james.util.concurrent.NamedThreadFactory; import org.junit.jupiter.api.AfterEach; @@ -43,6 +44,7 @@ class RabbitMQJamesServerWithRetryConnectionTest { @RegisterExtension JamesServerExtension jamesServerExtension = CassandraRabbitMQJamesServerFixture .baseExtensionBuilder(rabbitMQExtension) + .extension(new AwsS3BlobStoreExtension()) .disableAutoStart() .build(); diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraBlobStore.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraBlobStore.java index 808c47e..0d996be 100644 --- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraBlobStore.java +++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCassandraBlobStore.java @@ -19,6 +19,10 @@ package org.apache.james; +import org.apache.james.jmap.draft.JmapJamesServerContract; +import org.apache.james.modules.RabbitMQExtension; +import org.apache.james.modules.TestJMAPServerModule; +import org.apache.james.modules.blobstore.BlobStoreConfiguration; import org.junit.jupiter.api.extension.AfterAllCallback; import org.junit.jupiter.api.extension.AfterEachCallback; import org.junit.jupiter.api.extension.BeforeAllCallback; @@ -33,7 +37,16 @@ public class WithCassandraBlobStore implements BeforeAllCallback, AfterAllCallba private final JamesServerExtension jamesServerExtension; WithCassandraBlobStore() { - jamesServerExtension = CassandraRabbitMQJamesServerFixture.baseExtensionBuilder().build(); + jamesServerExtension = new JamesServerBuilder() + .extension(new DockerElasticSearchExtension()) + .extension(new CassandraExtension()) + .extension(new RabbitMQExtension()) + .server(configuration -> GuiceJamesServer + .forConfiguration(configuration) + .combineWith(CassandraRabbitMQJamesServerMain.modules(BlobStoreConfiguration.cassandra())) + .overrideWith(TestJMAPServerModule.limitToTenMessages()) + .overrideWith(JmapJamesServerContract.DOMAIN_LIST_CONFIGURATION_MODULE)) + .build(); } @Override diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/AwsS3BlobStoreExtension.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/AwsS3BlobStoreExtension.java index 6d6ffaf..4b09ce6 100644 --- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/AwsS3BlobStoreExtension.java +++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/AwsS3BlobStoreExtension.java @@ -21,13 +21,11 @@ package org.apache.james.modules; import org.apache.james.GuiceModuleTestExtension; import org.apache.james.blob.objectstorage.DockerAwsS3Singleton; -import org.apache.james.modules.blobstore.BlobStoreChoosingConfiguration; import org.apache.james.modules.objectstorage.PayloadCodecFactory; import org.apache.james.modules.objectstorage.aws.s3.DockerAwsS3TestRule; import org.junit.jupiter.api.extension.ExtensionContext; import com.google.inject.Module; -import com.google.inject.util.Modules; public class AwsS3BlobStoreExtension implements GuiceModuleTestExtension { @@ -52,8 +50,6 @@ public class AwsS3BlobStoreExtension implements GuiceModuleTestExtension { @Override public Module getModule() { - return Modules.override(awsS3TestRule.getModule()) - .with(binder -> binder.bind(BlobStoreChoosingConfiguration.class) - .toInstance(BlobStoreChoosingConfiguration.objectStorage())); + return awsS3TestRule.getModule(); } } diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/SwiftBlobStoreExtension.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/SwiftBlobStoreExtension.java index 2aee3f8..3d5fec1 100644 --- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/SwiftBlobStoreExtension.java +++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/SwiftBlobStoreExtension.java @@ -20,13 +20,11 @@ package org.apache.james.modules; import org.apache.james.GuiceModuleTestExtension; -import org.apache.james.modules.blobstore.BlobStoreChoosingConfiguration; import org.apache.james.modules.objectstorage.PayloadCodecFactory; import org.apache.james.modules.objectstorage.swift.DockerSwiftTestRule; import org.junit.jupiter.api.extension.ExtensionContext; import com.google.inject.Module; -import com.google.inject.util.Modules; public class SwiftBlobStoreExtension implements GuiceModuleTestExtension { @@ -52,8 +50,6 @@ public class SwiftBlobStoreExtension implements GuiceModuleTestExtension { @Override public Module getModule() { - return Modules.override(swiftRule.getModule()) - .with(binder -> binder.bind(BlobStoreChoosingConfiguration.class) - .toInstance(BlobStoreChoosingConfiguration.objectStorage())); + return swiftRule.getModule(); } } diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/TestAwsS3BlobStoreModule.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/TestAwsS3BlobStoreModule.java deleted file mode 100644 index ea9ae97..0000000 --- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/TestAwsS3BlobStoreModule.java +++ /dev/null @@ -1,47 +0,0 @@ -/**************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one * - * or more contributor license agreements. See the NOTICE file * - * distributed with this work for additional information * - * regarding copyright ownership. The ASF licenses this file * - * to you under the Apache License, Version 2.0 (the * - * "License"); you may not use this file except in compliance * - * with the License. You may obtain a copy of the License at * - * * - * http://www.apache.org/licenses/LICENSE-2.0 * - * * - * Unless required by applicable law or agreed to in writing, * - * software distributed under the License is distributed on an * - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * - * KIND, either express or implied. See the License for the * - * specific language governing permissions and limitations * - * under the License. * - ****************************************************************/ - -package org.apache.james.modules; - -import org.apache.james.modules.blobstore.BlobStoreChoosingConfiguration; -import org.apache.james.modules.objectstorage.aws.s3.DockerAwsS3TestRule; - -import com.google.inject.AbstractModule; -import com.google.inject.Module; -import com.google.inject.util.Modules; - -public class TestAwsS3BlobStoreModule extends AbstractModule { - - private final DockerAwsS3TestRule dockerAwsS3TestRule; - - public TestAwsS3BlobStoreModule(DockerAwsS3TestRule awsS3TestRule) { - this.dockerAwsS3TestRule = awsS3TestRule; - } - - @Override - protected void configure() { - Module testAwsS3BlobStoreModule = Modules - .override(dockerAwsS3TestRule.getModule()) - .with(binder -> binder.bind(BlobStoreChoosingConfiguration.class) - .toInstance(BlobStoreChoosingConfiguration.objectStorage())); - - install(testAwsS3BlobStoreModule); - } -} - diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/TestSwiftBlobStoreModule.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/TestSwiftBlobStoreModule.java deleted file mode 100644 index 4638109..0000000 --- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/TestSwiftBlobStoreModule.java +++ /dev/null @@ -1,46 +0,0 @@ -/**************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one * - * or more contributor license agreements. See the NOTICE file * - * distributed with this work for additional information * - * regarding copyright ownership. The ASF licenses this file * - * to you under the Apache License, Version 2.0 (the * - * "License"); you may not use this file except in compliance * - * with the License. You may obtain a copy of the License at * - * * - * http://www.apache.org/licenses/LICENSE-2.0 * - * * - * Unless required by applicable law or agreed to in writing, * - * software distributed under the License is distributed on an * - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * - * KIND, either express or implied. See the License for the * - * specific language governing permissions and limitations * - * under the License. * - ****************************************************************/ - -package org.apache.james.modules; - -import org.apache.james.modules.blobstore.BlobStoreChoosingConfiguration; -import org.apache.james.modules.objectstorage.swift.DockerSwiftTestRule; - -import com.google.inject.AbstractModule; -import com.google.inject.Module; -import com.google.inject.util.Modules; - -public class TestSwiftBlobStoreModule extends AbstractModule { - - private final DockerSwiftTestRule dockerSwiftTestRule; - - public TestSwiftBlobStoreModule() { - this.dockerSwiftTestRule = new DockerSwiftTestRule(); - } - - @Override - protected void configure() { - Module testSwiftBlobStoreModule = Modules - .override(dockerSwiftTestRule.getModule()) - .with(binder -> binder.bind(BlobStoreChoosingConfiguration.class) - .toInstance(BlobStoreChoosingConfiguration.objectStorage())); - - install(testSwiftBlobStoreModule); - } -} diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/BlobStoreChoosingModuleTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/BlobStoreChoosingModuleTest.java deleted file mode 100644 index 810cf50..0000000 --- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/BlobStoreChoosingModuleTest.java +++ /dev/null @@ -1,211 +0,0 @@ -/**************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one * - * or more contributor license agreements. See the NOTICE file * - * distributed with this work for additional information * - * regarding copyright ownership. The ASF licenses this file * - * to you under the Apache License, Version 2.0 (the * - * "License"); you may not use this file except in compliance * - * with the License. You may obtain a copy of the License at * - * * - * http://www.apache.org/licenses/LICENSE-2.0 * - * * - * Unless required by applicable law or agreed to in writing, * - * software distributed under the License is distributed on an * - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * - * KIND, either express or implied. See the License for the * - * specific language governing permissions and limitations * - * under the License. * - ****************************************************************/ - -package org.apache.james.modules.blobstore; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.mockito.Mockito.mock; - -import org.apache.commons.configuration2.PropertiesConfiguration; -import org.apache.james.FakePropertiesProvider; -import org.apache.james.blob.cassandra.CassandraBlobStore; -import org.apache.james.blob.objectstorage.ObjectStorageBlobStore; -import org.apache.james.blob.union.HybridBlobStore; -import org.apache.james.modules.blobstore.BlobStoreChoosingConfiguration.BlobStoreImplName; -import org.apache.james.modules.mailbox.ConfigurationComponent; -import org.junit.jupiter.api.Test; - -import com.google.inject.Provider; - -class BlobStoreChoosingModuleTest { - - private static CassandraBlobStore CASSANDRA_BLOBSTORE = mock(CassandraBlobStore.class); - private static Provider<CassandraBlobStore> CASSANDRA_BLOBSTORE_PROVIDER = () -> CASSANDRA_BLOBSTORE; - private static ObjectStorageBlobStore OBJECT_STORAGE_BLOBSTORE = mock(ObjectStorageBlobStore.class); - private static Provider<ObjectStorageBlobStore> OBJECT_STORAGE_BLOBSTORE_PROVIDER = () -> OBJECT_STORAGE_BLOBSTORE; - - @Test - void provideChoosingConfigurationShouldThrowWhenMissingPropertyField() { - BlobStoreChoosingModule module = new BlobStoreChoosingModule(); - PropertiesConfiguration configuration = new PropertiesConfiguration(); - configuration.addProperty("implementation", ""); - FakePropertiesProvider propertyProvider = FakePropertiesProvider.builder() - .register(ConfigurationComponent.NAME, configuration) - .build(); - - assertThatThrownBy(() -> module.provideChoosingConfiguration(propertyProvider)) - .isInstanceOf(IllegalStateException.class); - } - - @Test - void provideChoosingConfigurationShouldThrowWhenEmptyPropertyField() throws Exception { - BlobStoreChoosingModule module = new BlobStoreChoosingModule(); - PropertiesConfiguration configuration = new PropertiesConfiguration(); - configuration.addProperty("implementation", ""); - FakePropertiesProvider propertyProvider = FakePropertiesProvider.builder() - .register(ConfigurationComponent.NAME, configuration) - .build(); - - assertThatThrownBy(() -> module.provideChoosingConfiguration(propertyProvider)) - .isInstanceOf(IllegalStateException.class); - } - - @Test - void provideChoosingConfigurationShouldThrowWhenPropertyFieldIsNotInSupportedList() throws Exception { - BlobStoreChoosingModule module = new BlobStoreChoosingModule(); - PropertiesConfiguration configuration = new PropertiesConfiguration(); - configuration.addProperty("implementation", "gabouzomeuh"); - FakePropertiesProvider propertyProvider = FakePropertiesProvider.builder() - .register(ConfigurationComponent.NAME, configuration) - .build(); - - assertThatThrownBy(() -> module.provideChoosingConfiguration(propertyProvider)) - .isInstanceOf(IllegalArgumentException.class); - } - - @Test - void provideChoosingConfigurationShouldReturnCassandraWhenNoFile() throws Exception { - BlobStoreChoosingModule module = new BlobStoreChoosingModule(); - FakePropertiesProvider propertyProvider = FakePropertiesProvider.builder() - .register("other_configuration_file", new PropertiesConfiguration()) - .build(); - - assertThat(module.provideChoosingConfiguration(propertyProvider)) - .isEqualTo(BlobStoreChoosingConfiguration.cassandra()); - } - - @Test - void provideChoosingConfigurationShouldReturnObjectStorageFactoryWhenConfigurationImplIsObjectStorage() throws Exception { - BlobStoreChoosingModule module = new BlobStoreChoosingModule(); - PropertiesConfiguration configuration = new PropertiesConfiguration(); - configuration.addProperty("implementation", BlobStoreImplName.OBJECTSTORAGE.getName()); - FakePropertiesProvider propertyProvider = FakePropertiesProvider.builder() - .register(ConfigurationComponent.NAME, configuration) - .build(); - - assertThat(module.provideChoosingConfiguration(propertyProvider)) - .isEqualTo(BlobStoreChoosingConfiguration.objectStorage()); - } - - @Test - void provideChoosingConfigurationShouldReturnHybridConfigurationWhenConfigurationImplIsHybrid() throws Exception { - BlobStoreChoosingModule module = new BlobStoreChoosingModule(); - PropertiesConfiguration configuration = new PropertiesConfiguration(); - configuration.addProperty("implementation", BlobStoreImplName.HYBRID.getName()); - FakePropertiesProvider propertyProvider = FakePropertiesProvider.builder() - .register(ConfigurationComponent.NAME, configuration) - .build(); - - assertThat(module.provideChoosingConfiguration(propertyProvider)) - .isEqualTo(BlobStoreChoosingConfiguration.hybrid()); - } - - @Test - void provideChoosingConfigurationShouldReturnCassandraFactoryWhenConfigurationImplIsCassandra() throws Exception { - BlobStoreChoosingModule module = new BlobStoreChoosingModule(); - PropertiesConfiguration configuration = new PropertiesConfiguration(); - configuration.addProperty("implementation", BlobStoreImplName.CASSANDRA.getName()); - FakePropertiesProvider propertyProvider = FakePropertiesProvider.builder() - .register(ConfigurationComponent.NAME, configuration) - .build(); - - assertThat(module.provideChoosingConfiguration(propertyProvider)) - .isEqualTo(BlobStoreChoosingConfiguration.cassandra()); - } - - @Test - void providesHybridBlobStoreConfigurationShouldThrowWhenNegative() { - BlobStoreChoosingModule module = new BlobStoreChoosingModule(); - PropertiesConfiguration configuration = new PropertiesConfiguration(); - configuration.addProperty("hybrid.size.threshold", -1); - FakePropertiesProvider propertyProvider = FakePropertiesProvider.builder() - .register(ConfigurationComponent.NAME, configuration) - .build(); - - assertThatThrownBy(() -> module.providesHybridBlobStoreConfiguration(propertyProvider)) - .isInstanceOf(IllegalArgumentException.class); - } - - @Test - void providesHybridBlobStoreConfigurationShouldNotThrowWhenZero() { - BlobStoreChoosingModule module = new BlobStoreChoosingModule(); - PropertiesConfiguration configuration = new PropertiesConfiguration(); - configuration.addProperty("hybrid.size.threshold", 0); - FakePropertiesProvider propertyProvider = FakePropertiesProvider.builder() - .register(ConfigurationComponent.NAME, configuration) - .build(); - - assertThat(module.providesHybridBlobStoreConfiguration(propertyProvider)) - .isEqualTo(new HybridBlobStore.Configuration(0)); - } - - @Test - void providesHybridBlobStoreConfigurationShouldReturnConfiguration() { - BlobStoreChoosingModule module = new BlobStoreChoosingModule(); - PropertiesConfiguration configuration = new PropertiesConfiguration(); - configuration.addProperty("hybrid.size.threshold", 36); - FakePropertiesProvider propertyProvider = FakePropertiesProvider.builder() - .register(ConfigurationComponent.NAME, configuration) - .build(); - - assertThat(module.providesHybridBlobStoreConfiguration(propertyProvider)) - .isEqualTo(new HybridBlobStore.Configuration(36)); - } - - @Test - void providesHybridBlobStoreConfigurationShouldReturnConfigurationWhenLegacyFile() { - BlobStoreChoosingModule module = new BlobStoreChoosingModule(); - PropertiesConfiguration configuration = new PropertiesConfiguration(); - configuration.addProperty("hybrid.size.threshold", 36); - FakePropertiesProvider propertyProvider = FakePropertiesProvider.builder() - .register(ConfigurationComponent.LEGACY, configuration) - .build(); - - assertThat(module.providesHybridBlobStoreConfiguration(propertyProvider)) - .isEqualTo(new HybridBlobStore.Configuration(36)); - } - - @Test - void provideBlobStoreShouldReturnCassandraBlobStoreWhenCassandraConfigured() { - BlobStoreChoosingModule module = new BlobStoreChoosingModule(); - - assertThat(module.provideBlobStore(BlobStoreChoosingConfiguration.cassandra(), - CASSANDRA_BLOBSTORE_PROVIDER, OBJECT_STORAGE_BLOBSTORE_PROVIDER, HybridBlobStore.Configuration.DEFAULT)) - .isEqualTo(CASSANDRA_BLOBSTORE); - } - - @Test - void provideBlobStoreShouldReturnObjectStoreBlobStoreWhenObjectStoreConfigured() { - BlobStoreChoosingModule module = new BlobStoreChoosingModule(); - - assertThat(module.provideBlobStore(BlobStoreChoosingConfiguration.cassandra(), - CASSANDRA_BLOBSTORE_PROVIDER, OBJECT_STORAGE_BLOBSTORE_PROVIDER, HybridBlobStore.Configuration.DEFAULT)) - .isEqualTo(CASSANDRA_BLOBSTORE); - } - - @Test - void provideBlobStoreShouldReturnHybridBlobStoreWhenHybridConfigured() { - BlobStoreChoosingModule module = new BlobStoreChoosingModule(); - - assertThat(module.provideBlobStore(BlobStoreChoosingConfiguration.hybrid(), - CASSANDRA_BLOBSTORE_PROVIDER, OBJECT_STORAGE_BLOBSTORE_PROVIDER, HybridBlobStore.Configuration.DEFAULT)) - .isInstanceOf(HybridBlobStore.class); - } -} \ No newline at end of file diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/BlobStoreChoosingConfigurationTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/BlobStoreConfigurationTest.java similarity index 52% rename from server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/BlobStoreChoosingConfigurationTest.java rename to server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/BlobStoreConfigurationTest.java index 2ef718d..0d65d03 100644 --- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/BlobStoreChoosingConfigurationTest.java +++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/BlobStoreConfigurationTest.java @@ -19,15 +19,18 @@ package org.apache.james.modules.blobstore; +import static org.apache.james.modules.blobstore.BlobStoreConfiguration.parse; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import org.apache.commons.configuration2.PropertiesConfiguration; +import org.apache.james.FakePropertiesProvider; +import org.apache.james.modules.mailbox.ConfigurationComponent; import org.junit.jupiter.api.Test; import nl.jqno.equalsverifier.EqualsVerifier; -class BlobStoreChoosingConfigurationTest { +class BlobStoreConfigurationTest { private static final String OBJECT_STORAGE = "objectstorage"; private static final String CASSANDRA = "cassandra"; @@ -35,15 +38,98 @@ class BlobStoreChoosingConfigurationTest { @Test void shouldMatchBeanContract() { - EqualsVerifier.forClass(BlobStoreChoosingConfiguration.class) + EqualsVerifier.forClass(BlobStoreConfiguration.class) .verify(); } @Test + void provideChoosingConfigurationShouldThrowWhenMissingPropertyField() { + PropertiesConfiguration configuration = new PropertiesConfiguration(); + configuration.addProperty("implementation", ""); + FakePropertiesProvider propertyProvider = FakePropertiesProvider.builder() + .register(ConfigurationComponent.NAME, configuration) + .build(); + + assertThatThrownBy(() -> parse(propertyProvider)) + .isInstanceOf(IllegalStateException.class); + } + + @Test + void provideChoosingConfigurationShouldThrowWhenEmptyPropertyField() { + PropertiesConfiguration configuration = new PropertiesConfiguration(); + configuration.addProperty("implementation", ""); + FakePropertiesProvider propertyProvider = FakePropertiesProvider.builder() + .register(ConfigurationComponent.NAME, configuration) + .build(); + + assertThatThrownBy(() -> parse(propertyProvider)) + .isInstanceOf(IllegalStateException.class); + } + + @Test + void provideChoosingConfigurationShouldThrowWhenPropertyFieldIsNotInSupportedList() { + PropertiesConfiguration configuration = new PropertiesConfiguration(); + configuration.addProperty("implementation", "gabouzomeuh"); + FakePropertiesProvider propertyProvider = FakePropertiesProvider.builder() + .register(ConfigurationComponent.NAME, configuration) + .build(); + + assertThatThrownBy(() -> parse(propertyProvider)) + .isInstanceOf(IllegalArgumentException.class); + } + + @Test + void provideChoosingConfigurationShouldReturnCassandraWhenNoFile() throws Exception { + FakePropertiesProvider propertyProvider = FakePropertiesProvider.builder() + .register("other_configuration_file", new PropertiesConfiguration()) + .build(); + + assertThat(parse(propertyProvider)) + .isEqualTo(BlobStoreConfiguration.cassandra()); + } + + @Test + void provideChoosingConfigurationShouldReturnObjectStorageFactoryWhenConfigurationImplIsObjectStorage() throws Exception { + PropertiesConfiguration configuration = new PropertiesConfiguration(); + configuration.addProperty("implementation", BlobStoreConfiguration.BlobStoreImplName.OBJECTSTORAGE.getName()); + FakePropertiesProvider propertyProvider = FakePropertiesProvider.builder() + .register(ConfigurationComponent.NAME, configuration) + .build(); + + assertThat(parse(propertyProvider)) + .isEqualTo(BlobStoreConfiguration.objectStorage()); + } + + @Test + void provideChoosingConfigurationShouldReturnHybridConfigurationWhenConfigurationImplIsHybrid() throws Exception { + PropertiesConfiguration configuration = new PropertiesConfiguration(); + configuration.addProperty("implementation", BlobStoreConfiguration.BlobStoreImplName.HYBRID.getName()); + FakePropertiesProvider propertyProvider = FakePropertiesProvider.builder() + .register(ConfigurationComponent.NAME, configuration) + .build(); + + assertThat(parse(propertyProvider)) + .isEqualTo(BlobStoreConfiguration.hybrid()); + } + + @Test + void provideChoosingConfigurationShouldReturnCassandraFactoryWhenConfigurationImplIsCassandra() throws Exception { + PropertiesConfiguration configuration = new PropertiesConfiguration(); + configuration.addProperty("implementation", BlobStoreConfiguration.BlobStoreImplName.CASSANDRA.getName()); + FakePropertiesProvider propertyProvider = FakePropertiesProvider.builder() + .register(ConfigurationComponent.NAME, configuration) + .build(); + + assertThat(parse(propertyProvider)) + .isEqualTo(BlobStoreConfiguration.cassandra()); + } + + + @Test void fromShouldThrowWhenBlobStoreImplIsMissing() { PropertiesConfiguration configuration = new PropertiesConfiguration(); - assertThatThrownBy(() -> BlobStoreChoosingConfiguration.from(configuration)) + assertThatThrownBy(() -> BlobStoreConfiguration.from(configuration)) .isInstanceOf(IllegalStateException.class) .hasMessage("implementation property is missing please use one of supported values in: cassandra, objectstorage, hybrid"); } @@ -53,7 +139,7 @@ class BlobStoreChoosingConfigurationTest { PropertiesConfiguration configuration = new PropertiesConfiguration(); configuration.addProperty("implementation", null); - assertThatThrownBy(() -> BlobStoreChoosingConfiguration.from(configuration)) + assertThatThrownBy(() -> BlobStoreConfiguration.from(configuration)) .isInstanceOf(IllegalStateException.class) .hasMessage("implementation property is missing please use one of supported values in: cassandra, objectstorage, hybrid"); } @@ -63,7 +149,7 @@ class BlobStoreChoosingConfigurationTest { PropertiesConfiguration configuration = new PropertiesConfiguration(); configuration.addProperty("implementation", ""); - assertThatThrownBy(() -> BlobStoreChoosingConfiguration.from(configuration)) + assertThatThrownBy(() -> BlobStoreConfiguration.from(configuration)) .isInstanceOf(IllegalStateException.class) .hasMessage("implementation property is missing please use one of supported values in: cassandra, objectstorage, hybrid"); } @@ -73,7 +159,7 @@ class BlobStoreChoosingConfigurationTest { PropertiesConfiguration configuration = new PropertiesConfiguration(); configuration.addProperty("implementation", "un_supported"); - assertThatThrownBy(() -> BlobStoreChoosingConfiguration.from(configuration)) + assertThatThrownBy(() -> BlobStoreConfiguration.from(configuration)) .isInstanceOf(IllegalArgumentException.class) .hasMessage("un_supported is not a valid name of BlobStores, please use one of supported values in: cassandra, objectstorage, hybrid"); } @@ -84,7 +170,7 @@ class BlobStoreChoosingConfigurationTest { configuration.addProperty("implementation", CASSANDRA); assertThat( - BlobStoreChoosingConfiguration.from(configuration) + BlobStoreConfiguration.from(configuration) .getImplementation() .getName()) .isEqualTo(CASSANDRA); @@ -96,7 +182,7 @@ class BlobStoreChoosingConfigurationTest { configuration.addProperty("implementation", HYBRID); assertThat( - BlobStoreChoosingConfiguration.from(configuration) + BlobStoreConfiguration.from(configuration) .getImplementation() .getName()) .isEqualTo(HYBRID); @@ -108,7 +194,7 @@ class BlobStoreChoosingConfigurationTest { configuration.addProperty("implementation", OBJECT_STORAGE); assertThat( - BlobStoreChoosingConfiguration.from(configuration) + BlobStoreConfiguration.from(configuration) .getImplementation() .getName()) .isEqualTo(OBJECT_STORAGE); @@ -120,7 +206,7 @@ class BlobStoreChoosingConfigurationTest { configuration.addProperty("implementation", "OBjecTStorAGE"); assertThat( - BlobStoreChoosingConfiguration.from(configuration) + BlobStoreConfiguration.from(configuration) .getImplementation() .getName()) .isEqualTo(OBJECT_STORAGE); @@ -132,7 +218,7 @@ class BlobStoreChoosingConfigurationTest { configuration.addProperty("implementation", " cassandra "); assertThat( - BlobStoreChoosingConfiguration.from(configuration) + BlobStoreConfiguration.from(configuration) .getImplementation() .getName()) .isEqualTo(CASSANDRA); diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/BlobStoreModulesChooserTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/BlobStoreModulesChooserTest.java new file mode 100644 index 0000000..d736aa8 --- /dev/null +++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/BlobStoreModulesChooserTest.java @@ -0,0 +1,105 @@ +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you under the Apache License, Version 2.0 (the * + * "License"); you may not use this file except in compliance * + * with the License. You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, * + * software distributed under the License is distributed on an * + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * + * KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations * + * under the License. * + ****************************************************************/ + +package org.apache.james.modules.blobstore; + +import static org.apache.james.modules.blobstore.BlobStoreModulesChooser.HybridDeclarationModule; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import org.apache.commons.configuration2.PropertiesConfiguration; +import org.apache.james.FakePropertiesProvider; +import org.apache.james.blob.union.HybridBlobStore; +import org.apache.james.modules.mailbox.ConfigurationComponent; +import org.junit.jupiter.api.Test; + +class BlobStoreModulesChooserTest { + @Test + void providesHybridBlobStoreConfigurationShouldThrowWhenNegative() { + HybridDeclarationModule module = new HybridDeclarationModule(); + PropertiesConfiguration configuration = new PropertiesConfiguration(); + configuration.addProperty("hybrid.size.threshold", -1); + FakePropertiesProvider propertyProvider = FakePropertiesProvider.builder() + .register(ConfigurationComponent.NAME, configuration) + .build(); + + assertThatThrownBy(() -> module.providesHybridBlobStoreConfiguration(propertyProvider)) + .isInstanceOf(IllegalArgumentException.class); + } + + @Test + void providesHybridBlobStoreConfigurationShouldNotThrowWhenZero() { + HybridDeclarationModule module = new HybridDeclarationModule(); + PropertiesConfiguration configuration = new PropertiesConfiguration(); + configuration.addProperty("hybrid.size.threshold", 0); + FakePropertiesProvider propertyProvider = FakePropertiesProvider.builder() + .register(ConfigurationComponent.NAME, configuration) + .build(); + + assertThat(module.providesHybridBlobStoreConfiguration(propertyProvider)) + .isEqualTo(new HybridBlobStore.Configuration(0)); + } + + @Test + void providesHybridBlobStoreConfigurationShouldReturnConfiguration() { + HybridDeclarationModule module = new HybridDeclarationModule(); + PropertiesConfiguration configuration = new PropertiesConfiguration(); + configuration.addProperty("hybrid.size.threshold", 36); + FakePropertiesProvider propertyProvider = FakePropertiesProvider.builder() + .register(ConfigurationComponent.NAME, configuration) + .build(); + + assertThat(module.providesHybridBlobStoreConfiguration(propertyProvider)) + .isEqualTo(new HybridBlobStore.Configuration(36)); + } + + @Test + void providesHybridBlobStoreConfigurationShouldReturnConfigurationWhenLegacyFile() { + HybridDeclarationModule module = new HybridDeclarationModule(); + PropertiesConfiguration configuration = new PropertiesConfiguration(); + configuration.addProperty("hybrid.size.threshold", 36); + FakePropertiesProvider propertyProvider = FakePropertiesProvider.builder() + .register(ConfigurationComponent.LEGACY, configuration) + .build(); + + assertThat(module.providesHybridBlobStoreConfiguration(propertyProvider)) + .isEqualTo(new HybridBlobStore.Configuration(36)); + } + + @Test + void provideBlobStoreShouldReturnObjectStoreBlobStoreWhenObjectStoreConfigured() { + assertThat(BlobStoreModulesChooser.chooseModules(BlobStoreConfiguration.objectStorage())) + .first() + .isInstanceOf(BlobStoreModulesChooser.ObjectStorageDeclarationModule.class); + } + + @Test + void provideBlobStoreShouldReturnCassandraBlobStoreWhenCassandraConfigured() { + assertThat(BlobStoreModulesChooser.chooseModules(BlobStoreConfiguration.cassandra())) + .first() + .isInstanceOf(BlobStoreModulesChooser.CassandraDeclarationModule.class); + } + + @Test + void provideBlobStoreShouldReturnHybridBlobStoreWhenHybridConfigured() { + assertThat(BlobStoreModulesChooser.chooseModules(BlobStoreConfiguration.hybrid())) + .first() + .isInstanceOf(BlobStoreModulesChooser.HybridDeclarationModule.class); + } +} \ No newline at end of file diff --git a/server/container/guice/cassandra-rabbitmq-ldap-guice/src/main/java/org/apache/james/CassandraRabbitMQLdapJamesServerMain.java b/server/container/guice/cassandra-rabbitmq-ldap-guice/src/main/java/org/apache/james/CassandraRabbitMQLdapJamesServerMain.java index 0988842..212d639 100644 --- a/server/container/guice/cassandra-rabbitmq-ldap-guice/src/main/java/org/apache/james/CassandraRabbitMQLdapJamesServerMain.java +++ b/server/container/guice/cassandra-rabbitmq-ldap-guice/src/main/java/org/apache/james/CassandraRabbitMQLdapJamesServerMain.java @@ -20,8 +20,12 @@ package org.apache.james; import org.apache.james.data.LdapUsersRepositoryModule; +import org.apache.james.modules.blobstore.BlobStoreConfiguration; +import org.apache.james.modules.blobstore.BlobStoreModulesChooser; import org.apache.james.modules.server.JMXServerModule; +import org.apache.james.server.core.configuration.Configuration; +import com.google.common.collect.ImmutableList; import com.google.inject.Module; import com.google.inject.util.Modules; @@ -31,6 +35,21 @@ public class CassandraRabbitMQLdapJamesServerMain implements JamesServerMain { .with(new LdapUsersRepositoryModule()); public static void main(String[] args) throws Exception { - JamesServerMain.main(MODULES, new JMXServerModule()); + Configuration configuration = Configuration.builder() + .useWorkingDirectoryEnvProperty() + .build(); + + BlobStoreConfiguration blobStoreConfiguration = BlobStoreConfiguration.parse(configuration); + + Module baseModule = baseModule(blobStoreConfiguration); + JamesServerMain.main(configuration, + baseModule, new JMXServerModule()); + } + + public static Module baseModule(BlobStoreConfiguration blobStoreConfiguration) { + return Modules.combine(ImmutableList.<Module>builder() + .add(MODULES) + .addAll(BlobStoreModulesChooser.chooseModules(blobStoreConfiguration)) + .build()); } } 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 307795e..df6cc67 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 @@ -32,7 +32,7 @@ import org.apache.james.modules.AwsS3BlobStoreExtension; import org.apache.james.modules.RabbitMQExtension; import org.apache.james.modules.SwiftBlobStoreExtension; import org.apache.james.modules.TestJMAPServerModule; -import org.apache.james.modules.blobstore.BlobStoreChoosingConfiguration; +import org.apache.james.modules.blobstore.BlobStoreConfiguration; import org.apache.james.modules.protocols.ImapGuiceProbe; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -57,10 +57,8 @@ class CassandraRabbitMQLdapJmapJamesServerTest { @TestInstance(TestInstance.Lifecycle.PER_CLASS) class WithSwift implements ContractSuite { @RegisterExtension - JamesServerExtension testExtension = baseJamesServerExtensionBuilder() + JamesServerExtension testExtension = baseJamesServerExtensionBuilder(BlobStoreConfiguration.objectStorage()) .extension(new SwiftBlobStoreExtension()) - .overrideServerModule(binder -> binder.bind(BlobStoreChoosingConfiguration.class) - .toInstance(BlobStoreChoosingConfiguration.objectStorage())) .build(); } @@ -68,10 +66,8 @@ class CassandraRabbitMQLdapJmapJamesServerTest { @TestInstance(TestInstance.Lifecycle.PER_CLASS) class WithAwsS3 implements ContractSuite { @RegisterExtension - JamesServerExtension testExtension = baseJamesServerExtensionBuilder() + JamesServerExtension testExtension = baseJamesServerExtensionBuilder(BlobStoreConfiguration.objectStorage()) .extension(new AwsS3BlobStoreExtension()) - .overrideServerModule(binder -> binder.bind(BlobStoreChoosingConfiguration.class) - .toInstance(BlobStoreChoosingConfiguration.objectStorage())) .build(); } @@ -79,20 +75,18 @@ class CassandraRabbitMQLdapJmapJamesServerTest { @TestInstance(TestInstance.Lifecycle.PER_CLASS) class WithoutSwiftOrAwsS3 implements ContractSuite { @RegisterExtension - JamesServerExtension testExtension = baseJamesServerExtensionBuilder() - .overrideServerModule(binder -> binder.bind(BlobStoreChoosingConfiguration.class) - .toInstance(BlobStoreChoosingConfiguration.cassandra())) + JamesServerExtension testExtension = baseJamesServerExtensionBuilder(BlobStoreConfiguration.cassandra()) .build(); } - JamesServerBuilder baseJamesServerExtensionBuilder() { + JamesServerBuilder baseJamesServerExtensionBuilder(BlobStoreConfiguration blobStoreConfiguration) { return new JamesServerBuilder() .extension(new DockerElasticSearchExtension()) .extension(new CassandraExtension()) .extension(new RabbitMQExtension()) .extension(new LdapTestExtension()) .server(configuration -> GuiceJamesServer.forConfiguration(configuration) - .combineWith(CassandraRabbitMQLdapJamesServerMain.MODULES) + .combineWith(CassandraRabbitMQLdapJamesServerMain.baseModule(blobStoreConfiguration)) .overrideWith(new TestJMAPServerModule()) .overrideWith(JmapJamesServerContract.DOMAIN_LIST_CONFIGURATION_MODULE)); } diff --git a/server/container/guice/guice-common/src/main/java/org/apache/james/JamesServerMain.java b/server/container/guice/guice-common/src/main/java/org/apache/james/JamesServerMain.java index 357b380..c9d3ffb 100644 --- a/server/container/guice/guice-common/src/main/java/org/apache/james/JamesServerMain.java +++ b/server/container/guice/guice-common/src/main/java/org/apache/james/JamesServerMain.java @@ -24,15 +24,11 @@ import org.apache.james.server.core.configuration.Configuration; import com.google.inject.Module; public interface JamesServerMain { - static void main(Module... modules) throws Exception { - Configuration configuration = Configuration.builder() - .useWorkingDirectoryEnvProperty() - .build(); - + static void main(Configuration configuration, Module... modules) throws Exception { GuiceJamesServer server = GuiceJamesServer.forConfiguration(configuration) .combineWith(modules); server.start(); - + Runtime.getRuntime().addShutdownHook(new Thread(server::stop)); } } diff --git a/server/container/guice/jpa-guice/src/main/java/org/apache/james/JPAJamesServerMain.java b/server/container/guice/jpa-guice/src/main/java/org/apache/james/JPAJamesServerMain.java index 19ba467..f497a41 100644 --- a/server/container/guice/jpa-guice/src/main/java/org/apache/james/JPAJamesServerMain.java +++ b/server/container/guice/jpa-guice/src/main/java/org/apache/james/JPAJamesServerMain.java @@ -49,6 +49,7 @@ import org.apache.james.modules.server.SwaggerRoutesModule; import org.apache.james.modules.server.TaskManagerModule; import org.apache.james.modules.server.WebAdminServerModule; import org.apache.james.modules.spamassassin.SpamAssassinListenerModule; +import org.apache.james.server.core.configuration.Configuration; import com.google.inject.Module; import com.google.inject.util.Modules; @@ -94,7 +95,11 @@ public class JPAJamesServerMain implements JamesServerMain { public static final Module JPA_MODULE_AGGREGATE = Modules.combine(JPA_SERVER_MODULE, PROTOCOLS); public static void main(String[] args) throws Exception { - JamesServerMain.main(JPA_MODULE_AGGREGATE, new JMXServerModule()); + Configuration configuration = Configuration.builder() + .useWorkingDirectoryEnvProperty() + .build(); + + JamesServerMain.main(configuration, JPA_MODULE_AGGREGATE, new JMXServerModule()); } } diff --git a/server/container/guice/jpa-smtp-common/src/main/java/org/apache/james/JPAJamesServerMain.java b/server/container/guice/jpa-smtp-common/src/main/java/org/apache/james/JPAJamesServerMain.java index d6b137f..ea629b2 100644 --- a/server/container/guice/jpa-smtp-common/src/main/java/org/apache/james/JPAJamesServerMain.java +++ b/server/container/guice/jpa-smtp-common/src/main/java/org/apache/james/JPAJamesServerMain.java @@ -34,6 +34,7 @@ import org.apache.james.modules.server.NoJwtModule; import org.apache.james.modules.server.RawPostDequeueDecoratorModule; import org.apache.james.modules.server.TaskManagerModule; import org.apache.james.modules.server.WebAdminServerModule; +import org.apache.james.server.core.configuration.Configuration; import com.google.inject.Module; import com.google.inject.util.Modules; @@ -59,7 +60,11 @@ public class JPAJamesServerMain implements JamesServerMain { new ElasticSearchMetricReporterModule()); public static void main(String[] args) throws Exception { - JamesServerMain.main(JPA_SERVER_MODULE, PROTOCOLS, new DKIMMailetModule()); + Configuration configuration = Configuration.builder() + .useWorkingDirectoryEnvProperty() + .build(); + + JamesServerMain.main(configuration, JPA_SERVER_MODULE, PROTOCOLS, new DKIMMailetModule()); } } diff --git a/server/container/guice/memory-guice/src/main/java/org/apache/james/MemoryJamesServerMain.java b/server/container/guice/memory-guice/src/main/java/org/apache/james/MemoryJamesServerMain.java index 9a19fae..05c6649 100644 --- a/server/container/guice/memory-guice/src/main/java/org/apache/james/MemoryJamesServerMain.java +++ b/server/container/guice/memory-guice/src/main/java/org/apache/james/MemoryJamesServerMain.java @@ -56,6 +56,7 @@ import org.apache.james.modules.server.WebAdminServerModule; import org.apache.james.modules.spamassassin.SpamAssassinListenerModule; import org.apache.james.modules.vault.DeletedMessageVaultModule; import org.apache.james.modules.vault.DeletedMessageVaultRoutesModule; +import org.apache.james.server.core.configuration.Configuration; import org.apache.james.webadmin.WebAdminConfiguration; import org.apache.james.webadmin.authentication.AuthenticationFilter; import org.apache.james.webadmin.authentication.NoAuthenticationFilter; @@ -133,7 +134,14 @@ public class MemoryJamesServerMain implements JamesServerMain { new DKIMMailetModule()); public static void main(String[] args) throws Exception { - JamesServerMain.main(IN_MEMORY_SERVER_AGGREGATE_MODULE, new FakeSearchMailboxModule(), new JMXServerModule()); + Configuration configuration = Configuration.builder() + .useWorkingDirectoryEnvProperty() + .build(); + + JamesServerMain.main(configuration, + IN_MEMORY_SERVER_AGGREGATE_MODULE, + new FakeSearchMailboxModule(), + new JMXServerModule()); } } diff --git a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SendMDNMethodTest.java b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SendMDNMethodTest.java index f0a5270..e9e07d9 100644 --- a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SendMDNMethodTest.java +++ b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SendMDNMethodTest.java @@ -33,6 +33,7 @@ import org.apache.james.mailbox.store.search.PDFTextExtractor; import org.apache.james.modules.AwsS3BlobStoreExtension; import org.apache.james.modules.RabbitMQExtension; import org.apache.james.modules.TestJMAPServerModule; +import org.apache.james.modules.blobstore.BlobStoreConfiguration; import org.junit.jupiter.api.extension.RegisterExtension; public class RabbitMQAwsS3SendMDNMethodTest extends SendMDNMethodTest { @@ -44,7 +45,7 @@ public class RabbitMQAwsS3SendMDNMethodTest extends SendMDNMethodTest { .extension(new AwsS3BlobStoreExtension()) .extension(new RabbitMQExtension()) .server(configuration -> GuiceJamesServer.forConfiguration(configuration) - .combineWith(CassandraRabbitMQJamesServerMain.MODULES) + .combineWith(CassandraRabbitMQJamesServerMain.modules(BlobStoreConfiguration.objectStorage())) .overrideWith(binder -> binder.bind(TextExtractor.class).to(PDFTextExtractor.class)) .overrideWith(new TestJMAPServerModule())) .build(); diff --git a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SpamAssassinContractTest.java b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SpamAssassinContractTest.java index dad433b..9add76d 100644 --- a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SpamAssassinContractTest.java +++ b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SpamAssassinContractTest.java @@ -31,6 +31,7 @@ import org.apache.james.mailbox.store.search.PDFTextExtractor; import org.apache.james.modules.AwsS3BlobStoreExtension; import org.apache.james.modules.RabbitMQExtension; import org.apache.james.modules.TestJMAPServerModule; +import org.apache.james.modules.blobstore.BlobStoreConfiguration; import org.junit.jupiter.api.extension.RegisterExtension; class RabbitMQAwsS3SpamAssassinContractTest implements SpamAssassinContract { @@ -44,7 +45,7 @@ class RabbitMQAwsS3SpamAssassinContractTest implements SpamAssassinContract { .extension(new AwsS3BlobStoreExtension()) .extension(spamAssassinExtension) .server(configuration -> GuiceJamesServer.forConfiguration(configuration) - .combineWith(CassandraRabbitMQJamesServerMain.MODULES) + .combineWith(CassandraRabbitMQJamesServerMain.modules(BlobStoreConfiguration.objectStorage())) .overrideWith(binder -> binder.bind(TextExtractor.class).to(PDFTextExtractor.class)) .overrideWith(new TestJMAPServerModule())) .build(); diff --git a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/awss3/RabbitMQAwsS3Stepdefs.java b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/awss3/RabbitMQAwsS3Stepdefs.java index 972dea2..e26ced9 100644 --- a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/awss3/RabbitMQAwsS3Stepdefs.java +++ b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/awss3/RabbitMQAwsS3Stepdefs.java @@ -39,6 +39,7 @@ import org.apache.james.modules.DockerRabbitMQRule; import org.apache.james.modules.TestDockerESMetricReporterModule; import org.apache.james.modules.TestJMAPServerModule; import org.apache.james.modules.TestRabbitMQModule; +import org.apache.james.modules.blobstore.BlobStoreConfiguration; import org.apache.james.modules.objectstorage.aws.s3.DockerAwsS3TestRule; import org.apache.james.server.CassandraTruncateTableTask; import org.apache.james.server.core.configuration.Configuration; @@ -83,7 +84,7 @@ public class RabbitMQAwsS3Stepdefs { .build(); mainStepdefs.jmapServer = GuiceJamesServer.forConfiguration(configuration) - .combineWith(CassandraRabbitMQJamesServerMain.MODULES) + .combineWith(CassandraRabbitMQJamesServerMain.modules(BlobStoreConfiguration.objectStorage())) .overrideWith(new TestJMAPServerModule()) .overrideWith(new TestDockerESMetricReporterModule(elasticSearch.getDockerEs().getHttpHost())) .overrideWith(new TestRabbitMQModule(rabbitMQServer.dockerRabbitMQ())) diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/ConsistencyTasksIntegrationTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/ConsistencyTasksIntegrationTest.java index e37753b..c7f6bf6 100644 --- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/ConsistencyTasksIntegrationTest.java +++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/ConsistencyTasksIntegrationTest.java @@ -56,14 +56,15 @@ import org.apache.james.mailrepository.api.MailRepositoryUrl; import org.apache.james.modules.AwsS3BlobStoreExtension; import org.apache.james.modules.QuotaProbesImpl; import org.apache.james.modules.RabbitMQExtension; +import org.apache.james.modules.blobstore.BlobStoreConfiguration; import org.apache.james.modules.protocols.ImapGuiceProbe; import org.apache.james.modules.protocols.SmtpGuiceProbe; import org.apache.james.probe.DataProbe; import org.apache.james.utils.DataProbeImpl; import org.apache.james.utils.GuiceProbe; -import org.apache.james.utils.TestIMAPClient; import org.apache.james.utils.MailRepositoryProbeImpl; import org.apache.james.utils.SMTPMessageSender; +import org.apache.james.utils.TestIMAPClient; import org.apache.james.utils.WebAdminGuiceProbe; import org.apache.james.webadmin.WebAdminUtils; import org.apache.james.webadmin.integration.WebadminIntegrationTestModule; @@ -127,7 +128,7 @@ class ConsistencyTasksIntegrationTest { .extension(new AwsS3BlobStoreExtension()) .extension(new RabbitMQExtension()) .server(configuration -> GuiceJamesServer.forConfiguration(configuration) - .combineWith(CassandraRabbitMQJamesServerMain.MODULES) + .combineWith(CassandraRabbitMQJamesServerMain.modules(BlobStoreConfiguration.objectStorage())) .overrideWith(new WebadminIntegrationTestModule()) // Enforce a single eventBus retry. Required as Current Quotas are handled by the eventBus. .overrideWith(binder -> binder.bind(RetryBackoffConfiguration.class) diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/FixingGhostMailboxTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/FixingGhostMailboxTest.java index 6a81213..2f4beb1 100644 --- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/FixingGhostMailboxTest.java +++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/FixingGhostMailboxTest.java @@ -70,6 +70,7 @@ import org.apache.james.modules.AwsS3BlobStoreExtension; import org.apache.james.modules.MailboxProbeImpl; import org.apache.james.modules.RabbitMQExtension; import org.apache.james.modules.TestJMAPServerModule; +import org.apache.james.modules.blobstore.BlobStoreConfiguration; import org.apache.james.server.CassandraProbe; import org.apache.james.task.TaskManager; import org.apache.james.util.Port; @@ -114,7 +115,7 @@ class FixingGhostMailboxTest { .extension(new AwsS3BlobStoreExtension()) .extension(new RabbitMQExtension()) .server(configuration -> GuiceJamesServer.forConfiguration(configuration) - .combineWith(CassandraRabbitMQJamesServerMain.MODULES) + .combineWith(CassandraRabbitMQJamesServerMain.modules(BlobStoreConfiguration.objectStorage())) .overrideWith(new TestJMAPServerModule()) .overrideWith(new WebadminIntegrationTestModule())) .build(); diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQAuthorizedEndpointsTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQAuthorizedEndpointsTest.java index d054d55..db84cb2 100644 --- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQAuthorizedEndpointsTest.java +++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQAuthorizedEndpointsTest.java @@ -28,6 +28,7 @@ import org.apache.james.JamesServerExtension; import org.apache.james.junit.categories.BasicFeature; import org.apache.james.modules.AwsS3BlobStoreExtension; import org.apache.james.modules.RabbitMQExtension; +import org.apache.james.modules.blobstore.BlobStoreConfiguration; import org.apache.james.webadmin.integration.AuthorizedEndpointsTest; import org.apache.james.webadmin.integration.UnauthorizedModule; import org.apache.james.webadmin.integration.WebadminIntegrationTestModule; @@ -44,7 +45,7 @@ class RabbitMQAuthorizedEndpointsTest extends AuthorizedEndpointsTest { .extension(new AwsS3BlobStoreExtension()) .extension(new RabbitMQExtension()) .server(configuration -> GuiceJamesServer.forConfiguration(configuration) - .combineWith(CassandraRabbitMQJamesServerMain.MODULES) + .combineWith(CassandraRabbitMQJamesServerMain.modules(BlobStoreConfiguration.objectStorage())) .overrideWith(new UnauthorizedModule()) .overrideWith(new WebadminIntegrationTestModule())) .build(); diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQEventDeadLettersIntegrationTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQEventDeadLettersIntegrationTest.java index 671be90..16aeca7 100644 --- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQEventDeadLettersIntegrationTest.java +++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQEventDeadLettersIntegrationTest.java @@ -57,6 +57,7 @@ import org.apache.james.mailbox.model.MailboxPath; import org.apache.james.modules.AwsS3BlobStoreExtension; import org.apache.james.modules.MailboxProbeImpl; import org.apache.james.modules.RabbitMQExtension; +import org.apache.james.modules.blobstore.BlobStoreConfiguration; import org.apache.james.probe.DataProbe; import org.apache.james.utils.DataProbeImpl; import org.apache.james.utils.WebAdminGuiceProbe; @@ -205,7 +206,7 @@ class RabbitMQEventDeadLettersIntegrationTest { .extension(RABBIT_MQ_EXTENSION) .extension(new RetryEventsListenerExtension()) .server(configuration -> GuiceJamesServer.forConfiguration(configuration) - .combineWith(CassandraRabbitMQJamesServerMain.MODULES) + .combineWith(CassandraRabbitMQJamesServerMain.modules(BlobStoreConfiguration.objectStorage())) .overrideWith(new WebadminIntegrationTestModule()) .overrideWith(binder -> binder.bind(RetryBackoffConfiguration.class) .toInstance(RetryBackoffConfiguration.builder() diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQFastViewProjectionHealthCheckIntegrationTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQFastViewProjectionHealthCheckIntegrationTest.java index 918eea9..4010e06 100644 --- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQFastViewProjectionHealthCheckIntegrationTest.java +++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQFastViewProjectionHealthCheckIntegrationTest.java @@ -28,6 +28,7 @@ import org.apache.james.JamesServerExtension; import org.apache.james.modules.AwsS3BlobStoreExtension; import org.apache.james.modules.RabbitMQExtension; import org.apache.james.modules.TestJMAPServerModule; +import org.apache.james.modules.blobstore.BlobStoreConfiguration; import org.apache.james.webadmin.integration.FastViewProjectionHealthCheckIntegrationContract; import org.apache.james.webadmin.integration.WebadminIntegrationTestModule; import org.junit.jupiter.api.extension.RegisterExtension; @@ -41,7 +42,7 @@ class RabbitMQFastViewProjectionHealthCheckIntegrationTest extends FastViewProje .extension(new AwsS3BlobStoreExtension()) .extension(new RabbitMQExtension()) .server(configuration -> GuiceJamesServer.forConfiguration(configuration) - .combineWith(CassandraRabbitMQJamesServerMain.MODULES) + .combineWith(CassandraRabbitMQJamesServerMain.modules(BlobStoreConfiguration.objectStorage())) .overrideWith(new TestJMAPServerModule()) .overrideWith(new WebadminIntegrationTestModule())) .build(); diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQForwardIntegrationTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQForwardIntegrationTest.java index 1e1217a..dfa93ad 100644 --- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQForwardIntegrationTest.java +++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQForwardIntegrationTest.java @@ -28,6 +28,7 @@ import org.apache.james.JamesServerExtension; import org.apache.james.modules.AwsS3BlobStoreExtension; import org.apache.james.modules.RabbitMQExtension; import org.apache.james.modules.TestJMAPServerModule; +import org.apache.james.modules.blobstore.BlobStoreConfiguration; import org.apache.james.webadmin.integration.ForwardIntegrationTest; import org.apache.james.webadmin.integration.WebadminIntegrationTestModule; import org.junit.jupiter.api.extension.RegisterExtension; @@ -41,7 +42,7 @@ class RabbitMQForwardIntegrationTest extends ForwardIntegrationTest { .extension(new AwsS3BlobStoreExtension()) .extension(new RabbitMQExtension()) .server(configuration -> GuiceJamesServer.forConfiguration(configuration) - .combineWith(CassandraRabbitMQJamesServerMain.MODULES) + .combineWith(CassandraRabbitMQJamesServerMain.modules(BlobStoreConfiguration.objectStorage())) .overrideWith(new TestJMAPServerModule()) .overrideWith(new WebadminIntegrationTestModule())) .build(); diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQJmapExtension.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQJmapExtension.java index a6d8467..57ac262 100644 --- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQJmapExtension.java +++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQJmapExtension.java @@ -33,6 +33,7 @@ import org.apache.james.mailbox.extractor.TextExtractor; import org.apache.james.mailbox.store.search.PDFTextExtractor; import org.apache.james.modules.TestDockerESMetricReporterModule; import org.apache.james.modules.TestRabbitMQModule; +import org.apache.james.modules.blobstore.BlobStoreConfiguration; import org.apache.james.modules.objectstorage.aws.s3.DockerAwsS3TestRule; import org.apache.james.server.core.configuration.Configuration; import org.apache.james.util.FunctionalUtils; @@ -153,7 +154,7 @@ public class RabbitMQJmapExtension implements BeforeAllCallback, AfterAllCallbac .build(); return GuiceJamesServer.forConfiguration(configuration) - .combineWith(CassandraRabbitMQJamesServerMain.MODULES) + .combineWith(CassandraRabbitMQJamesServerMain.modules(BlobStoreConfiguration.objectStorage())) .overrideWith(binder -> binder.bind(TextExtractor.class).to(PDFTextExtractor.class)) .overrideWith(new TestDockerESMetricReporterModule(elasticSearchRule.getDockerEs().getHttpHost())) .overrideWith(cassandra.getModule()) diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQJwtFilterIntegrationTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQJwtFilterIntegrationTest.java index d59f99b..62a3267 100644 --- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQJwtFilterIntegrationTest.java +++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQJwtFilterIntegrationTest.java @@ -28,6 +28,7 @@ import org.apache.james.JamesServerExtension; import org.apache.james.jwt.JwtConfiguration; import org.apache.james.modules.AwsS3BlobStoreExtension; import org.apache.james.modules.RabbitMQExtension; +import org.apache.james.modules.blobstore.BlobStoreConfiguration; import org.apache.james.webadmin.authentication.AuthenticationFilter; import org.apache.james.webadmin.authentication.JwtFilter; import org.apache.james.webadmin.integration.JwtFilterIntegrationTest; @@ -43,7 +44,7 @@ class RabbitMQJwtFilterIntegrationTest extends JwtFilterIntegrationTest { .extension(new AwsS3BlobStoreExtension()) .extension(new RabbitMQExtension()) .server(configuration -> GuiceJamesServer.forConfiguration(configuration) - .combineWith(CassandraRabbitMQJamesServerMain.MODULES) + .combineWith(CassandraRabbitMQJamesServerMain.modules(BlobStoreConfiguration.objectStorage())) .overrideWith(binder -> binder.bind(AuthenticationFilter.class).to(JwtFilter.class)) .overrideWith(binder -> binder.bind(JwtConfiguration.class).toInstance(jwtConfiguration())) .overrideWith(new WebadminIntegrationTestModule())) diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQReindexingWithEventDeadLettersTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQReindexingWithEventDeadLettersTest.java index 2dbf39a..0693461 100644 --- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQReindexingWithEventDeadLettersTest.java +++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQReindexingWithEventDeadLettersTest.java @@ -46,6 +46,7 @@ import org.apache.james.junit.categories.BasicFeature; import org.apache.james.modules.AwsS3BlobStoreExtension; import org.apache.james.modules.RabbitMQExtension; import org.apache.james.modules.TestJMAPServerModule; +import org.apache.james.modules.blobstore.BlobStoreConfiguration; import org.apache.james.modules.objectstorage.PayloadCodecFactory; import org.apache.james.util.Port; import org.apache.james.utils.DataProbeImpl; @@ -81,7 +82,7 @@ class RabbitMQReindexingWithEventDeadLettersTest { private static final JamesServerBuilder.ServerProvider CONFIGURATION_BUILDER = configuration -> GuiceJamesServer .forConfiguration(configuration) - .combineWith(CassandraRabbitMQJamesServerMain.MODULES) + .combineWith(CassandraRabbitMQJamesServerMain.modules(BlobStoreConfiguration.objectStorage())) .overrideWith(new TestJMAPServerModule()) .overrideWith(JmapJamesServerContract.DOMAIN_LIST_CONFIGURATION_MODULE) .overrideWith(new WebadminIntegrationTestModule()); diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerIntegrationTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerIntegrationTest.java index c107aa6..69578e6 100644 --- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerIntegrationTest.java +++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerIntegrationTest.java @@ -39,6 +39,7 @@ import org.apache.james.backends.cassandra.versions.CassandraSchemaVersionManage import org.apache.james.junit.categories.BasicFeature; import org.apache.james.modules.AwsS3BlobStoreExtension; import org.apache.james.modules.RabbitMQExtension; +import org.apache.james.modules.blobstore.BlobStoreConfiguration; import org.apache.james.webadmin.integration.WebAdminServerIntegrationTest; import org.apache.james.webadmin.integration.WebadminIntegrationTestModule; import org.apache.james.webadmin.routes.AliasRoutes; @@ -64,7 +65,7 @@ class RabbitMQWebAdminServerIntegrationTest extends WebAdminServerIntegrationTes .extension(new AwsS3BlobStoreExtension()) .extension(new RabbitMQExtension()) .server(configuration -> GuiceJamesServer.forConfiguration(configuration) - .combineWith(CassandraRabbitMQJamesServerMain.MODULES) + .combineWith(CassandraRabbitMQJamesServerMain.modules(BlobStoreConfiguration.objectStorage())) .overrideWith(new WebadminIntegrationTestModule())) .build(); diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationTest.java index 124c4dd..bfbf653f 100644 --- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationTest.java +++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationTest.java @@ -68,6 +68,7 @@ import org.apache.james.modules.AwsS3BlobStoreExtension; import org.apache.james.modules.EventDeadLettersProbe; import org.apache.james.modules.MailboxProbeImpl; import org.apache.james.modules.RabbitMQExtension; +import org.apache.james.modules.blobstore.BlobStoreConfiguration; import org.apache.james.probe.DataProbe; import org.apache.james.task.TaskManager; import org.apache.james.utils.DataProbeImpl; @@ -102,7 +103,7 @@ class RabbitMQWebAdminServerTaskSerializationIntegrationTest { .extension(new AwsS3BlobStoreExtension()) .extension(new RabbitMQExtension()) .server(configuration -> GuiceJamesServer.forConfiguration(configuration) - .combineWith(CassandraRabbitMQJamesServerMain.MODULES) + .combineWith(CassandraRabbitMQJamesServerMain.modules(BlobStoreConfiguration.objectStorage())) .overrideWith(new WebadminIntegrationTestModule())) .build(); diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/vault/RabbitMQDeletedMessageVaultIntegrationTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/vault/RabbitMQDeletedMessageVaultIntegrationTest.java index 7315009..e0f3d67 100644 --- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/vault/RabbitMQDeletedMessageVaultIntegrationTest.java +++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/vault/RabbitMQDeletedMessageVaultIntegrationTest.java @@ -28,6 +28,7 @@ import org.apache.james.JamesServerExtension; import org.apache.james.modules.AwsS3BlobStoreExtension; import org.apache.james.modules.RabbitMQExtension; import org.apache.james.modules.TestJMAPServerModule; +import org.apache.james.modules.blobstore.BlobStoreConfiguration; import org.apache.james.modules.vault.TestDeleteMessageVaultPreDeletionHookModule; import org.apache.james.webadmin.integration.WebadminIntegrationTestModule; import org.apache.james.webadmin.integration.vault.DeletedMessageVaultIntegrationTest; @@ -45,7 +46,7 @@ class RabbitMQDeletedMessageVaultIntegrationTest extends DeletedMessageVaultInte .extension(new RabbitMQExtension()) .extension(new ClockExtension()) .server(configuration -> GuiceJamesServer.forConfiguration(configuration) - .combineWith(CassandraRabbitMQJamesServerMain.MODULES) + .combineWith(CassandraRabbitMQJamesServerMain.modules(BlobStoreConfiguration.objectStorage())) .overrideWith(new TestJMAPServerModule()) .overrideWith(new TestDeleteMessageVaultPreDeletionHookModule()) .overrideWith(new WebadminIntegrationTestModule())) diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/vault/RabbitMQLinshareBlobExportMechanismIntegrationTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/vault/RabbitMQLinshareBlobExportMechanismIntegrationTest.java index 4ef4f8b..179d642 100644 --- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/vault/RabbitMQLinshareBlobExportMechanismIntegrationTest.java +++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/vault/RabbitMQLinshareBlobExportMechanismIntegrationTest.java @@ -33,6 +33,7 @@ import org.apache.james.modules.LinshareGuiceExtension; import org.apache.james.modules.RabbitMQExtension; import org.apache.james.modules.TestJMAPServerModule; import org.apache.james.modules.TestRabbitMQModule; +import org.apache.james.modules.blobstore.BlobStoreConfiguration; import org.apache.james.modules.vault.TestDeleteMessageVaultPreDeletionHookModule; import org.apache.james.webadmin.integration.WebadminIntegrationTestModule; import org.apache.james.webadmin.integration.vault.LinshareBlobExportMechanismIntegrationTest; @@ -47,7 +48,7 @@ class RabbitMQLinshareBlobExportMechanismIntegrationTest extends LinshareBlobExp .extension(new AwsS3BlobStoreExtension()) .extension(new LinshareGuiceExtension()) .server(configuration -> GuiceJamesServer.forConfiguration(configuration) - .combineWith(CassandraRabbitMQJamesServerMain.MODULES) + .combineWith(CassandraRabbitMQJamesServerMain.modules(BlobStoreConfiguration.objectStorage())) .overrideWith(binder -> binder.bind(TextExtractor.class).to(PDFTextExtractor.class)) .overrideWith(new TestJMAPServerModule()) .overrideWith(new TestRabbitMQModule(DockerRabbitMQSingleton.SINGLETON)) --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org