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 c097fd121d3aeceb28549a2fdcd7756504d6a4df Author: Matthieu Baechler <[email protected]> AuthorDate: Mon Feb 10 14:33:32 2020 +0100 JAMES-3028 replace jcloud with S3-only implementation --- .../mail/CassandraMailboxMapperAclTest.java | 4 +- .../smtp/cassandra-rabbitmq-object-storage/pom.xml | 18 +-- .../CassandraRabbitMQAwsS3SmtpTestRuleFactory.java | 7 +- pom.xml | 16 +- server/blob/blob-s3/pom.xml | 2 +- .../james/blob/objectstorage/aws/DockerAwsS3.java | 8 +- .../objectstorage/aws/DockerAwsS3Container.java | 4 +- ...{DockerAwsS3.java => DockerAwsS3Singleton.java} | 14 +- .../blob/objectstorage/aws/S3BlobStoreTest.java | 2 +- .../objectstorage/aws/S3DumbBlobStoreTest.java | 2 +- server/blob/pom.xml | 1 - .../guice/blob-s3-guice}/pom.xml | 60 +++---- .../modules/objectstorage/S3BlobConfiguration.java | 179 +++++++++++++++++++++ .../modules/objectstorage/S3BlobStoreModule.java | 76 +++++++++ .../aws/s3/AwsS3ConfigurationReader.java} | 43 ++--- .../aws/s3/AwsS3ConfigurationReaderTest.java | 77 +++++++++ .../objectstorage/aws/s3/DockerAwsS3TestRule.java | 93 +++++++++++ .../guice/cassandra-rabbitmq-guice/pom.xml | 27 +--- .../modules/blobstore/BlobStoreChoosingModule.java | 2 - .../modules/blobstore/BlobStoreConfiguration.java | 10 +- .../modules/blobstore/BlobStoreModulesChooser.java | 15 +- .../james/modules/blobstore/NoopDumbBlobStore.java | 83 ---------- .../james/CassandraRabbitMQAwsS3JmapTestRule.java | 5 +- .../james/CassandraRabbitMQJamesServerFixture.java | 2 +- .../org/apache/james/WithCacheImmutableTest.java | 2 +- .../james/WithDefaultAwsS3ImmutableTest.java | 15 -- .../james/WithDefaultSwiftImmutableTest.java | 47 ------ .../apache/james/WithDefaultSwiftMutableTest.java | 31 ---- .../james/WithEncryptedAwsS3ImmutableTest.java | 48 ------ .../james/WithEncryptedAwsS3MutableTest.java | 32 ---- .../james/WithEncryptedSwiftImmutableTest.java | 49 ------ .../james/WithEncryptedSwiftMutableTest.java | 32 ---- .../james/WithScanningSearchImmutableTest.java | 2 +- .../james/modules/AwsS3BlobStoreExtension.java | 8 +- .../BlobStoreCacheModulesChooserTest.java | 4 +- .../blobstore/BlobStoreConfigurationTest.java | 39 ++--- .../blobstore/BlobStoreModulesChooserTest.java | 2 +- ...eStrategyValidationEventSourcingSystemTest.java | 17 +- .../guice/cassandra-rabbitmq-ldap-guice/pom.xml | 18 +-- .../CassandraRabbitMQLdapJmapJamesServerTest.java | 23 +-- server/container/guice/pom.xml | 2 +- .../pom.xml | 22 +-- .../pom.xml | 18 +-- .../rabbitmq/RabbitMQAwsS3SendMDNMethodTest.java | 2 +- .../RabbitMQAwsS3SpamAssassinContractTest.java | 2 +- .../cucumber/awss3/CucumberAwsS3Singleton.java | 2 - .../cucumber/awss3/RabbitMQAwsS3Stepdefs.java | 8 +- .../pom.xml | 4 +- .../distributed/DistributedAuthenticationTest.java | 2 +- .../distributed/DistributedEchoMethodTest.java | 2 +- .../distributed/DistributedEmailGetMethodTest.java | 2 +- .../DistributedEmailQueryMethodTest.java | 2 +- .../DistributedMailboxGetMethodTest.java | 2 +- .../DistributedMailboxSetMethodTest.java | 2 +- .../distributed/DistributedProvisioningTest.java | 2 +- .../distributed/DistributedSessionRouteTest.java | 4 +- .../DistributedVacationResponseGetMethodTest.java | 2 +- .../DistributedVacationResponseSetMethodTest.java | 2 +- .../distributed-webadmin-integration-test/pom.xml | 4 +- .../rabbitmq/ConsistencyTasksIntegrationTest.java | 4 +- .../rabbitmq/FixingGhostMailboxTest.java | 2 +- .../rabbitmq/RabbitMQAuthorizedEndpointsTest.java | 4 +- .../RabbitMQEventDeadLettersIntegrationTest.java | 2 +- ...stViewProjectionHealthCheckIntegrationTest.java | 2 +- .../rabbitmq/RabbitMQForwardIntegrationTest.java | 2 +- .../rabbitmq/RabbitMQJwtFilterIntegrationTest.java | 2 +- ...RabbitMQReindexingWithEventDeadLettersTest.java | 5 +- .../RabbitMQUnauthorizedEndpointsTest.java | 2 +- .../RabbitMQWebAdminServerIntegrationTest.java | 4 +- ...dminServerTaskSerializationIntegrationTest.java | 2 +- ...RabbitMQDeletedMessageVaultIntegrationTest.java | 2 +- ...LinshareBlobExportMechanismIntegrationTest.java | 2 +- 72 files changed, 603 insertions(+), 637 deletions(-) diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperAclTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperAclTest.java index 3e7fd66..119b715 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperAclTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperAclTest.java @@ -22,6 +22,7 @@ package org.apache.james.mailbox.cassandra.mail; import org.apache.james.backends.cassandra.CassandraClusterExtension; import org.apache.james.backends.cassandra.components.CassandraModule; import org.apache.james.backends.cassandra.versions.CassandraSchemaVersionModule; +import org.apache.james.blob.cassandra.CassandraBlobModule; import org.apache.james.mailbox.cassandra.mail.utils.GuiceUtils; import org.apache.james.mailbox.cassandra.modules.CassandraAclModule; import org.apache.james.mailbox.cassandra.modules.CassandraMailboxModule; @@ -34,7 +35,8 @@ class CassandraMailboxMapperAclTest extends MailboxMapperACLTest { private static final CassandraModule MODULES = CassandraModule.aggregateModules( CassandraSchemaVersionModule.MODULE, CassandraAclModule.MODULE, - CassandraMailboxModule.MODULE); + CassandraMailboxModule.MODULE, + CassandraBlobModule.MODULE); @RegisterExtension static CassandraClusterExtension cassandraCluster = new CassandraClusterExtension(MODULES); diff --git a/mpt/impl/smtp/cassandra-rabbitmq-object-storage/pom.xml b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/pom.xml index d4ce24f..1207199 100644 --- a/mpt/impl/smtp/cassandra-rabbitmq-object-storage/pom.xml +++ b/mpt/impl/smtp/cassandra-rabbitmq-object-storage/pom.xml @@ -49,29 +49,15 @@ </dependency> <dependency> <groupId>${james.groupId}</groupId> - <artifactId>blob-objectstorage</artifactId> + <artifactId>blob-s3</artifactId> <type>test-jar</type> <scope>test</scope> - <!-- JCloud switch relies on incompatible guice 3.3.0 for multibindings --> - <exclusions> - <exclusion> - <groupId>com.google.inject.extensions</groupId> - <artifactId>guice-multibindings</artifactId> - </exclusion> - </exclusions> </dependency> <dependency> <groupId>${james.groupId}</groupId> - <artifactId>blob-objectstorage-guice</artifactId> + <artifactId>blob-s3-guice</artifactId> <type>test-jar</type> <scope>test</scope> - <!-- JCloud switch relies on incompatible guice 3.3.0 for multibindings --> - <exclusions> - <exclusion> - <groupId>com.google.inject.extensions</groupId> - <artifactId>guice-multibindings</artifactId> - </exclusion> - </exclusions> </dependency> <dependency> <groupId>${james.groupId}</groupId> 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 6ccde46..d97bbd7 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 @@ -26,12 +26,12 @@ 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.BucketName; import org.apache.james.blob.api.MetricableBlobStore; -import org.apache.james.blob.objectstorage.ObjectStorageBlobStore; +import org.apache.james.blob.objectstorage.aws.S3BlobStore; import org.apache.james.dnsservice.api.DNSService; import org.apache.james.modules.TestRabbitMQModule; 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; @@ -56,10 +56,9 @@ public final class CassandraRabbitMQAwsS3SmtpTestRuleFactory { 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); + .to(S3BlobStore.class); } }; diff --git a/pom.xml b/pom.xml index 4d148b9..d237cd3 100644 --- a/pom.xml +++ b/pom.xml @@ -1165,34 +1165,34 @@ </dependency> <dependency> <groupId>${james.groupId}</groupId> - <artifactId>blob-memory-guice</artifactId> + <artifactId>blob-memory</artifactId> <version>${project.version}</version> + <type>test-jar</type> </dependency> <dependency> <groupId>${james.groupId}</groupId> - <artifactId>blob-objectstorage</artifactId> + <artifactId>blob-memory-guice</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>${james.groupId}</groupId> - <artifactId>blob-objectstorage</artifactId> + <artifactId>blob-s3</artifactId> <version>${project.version}</version> - <type>test-jar</type> </dependency> <dependency> <groupId>${james.groupId}</groupId> - <artifactId>blob-objectstorage-guice</artifactId> + <artifactId>blob-s3</artifactId> <version>${project.version}</version> + <type>test-jar</type> </dependency> <dependency> <groupId>${james.groupId}</groupId> - <artifactId>blob-objectstorage-guice</artifactId> + <artifactId>blob-s3-guice</artifactId> <version>${project.version}</version> - <type>test-jar</type> </dependency> <dependency> <groupId>${james.groupId}</groupId> - <artifactId>blob-memory</artifactId> + <artifactId>blob-s3-guice</artifactId> <version>${project.version}</version> <type>test-jar</type> </dependency> diff --git a/server/blob/blob-s3/pom.xml b/server/blob/blob-s3/pom.xml index 6c9dc6d..0d49b94 100644 --- a/server/blob/blob-s3/pom.xml +++ b/server/blob/blob-s3/pom.xml @@ -27,7 +27,7 @@ <parent> <artifactId>james-server-blob</artifactId> <groupId>org.apache.james</groupId> - <version>3.5.0-SNAPSHOT</version> + <version>3.6.0-SNAPSHOT</version> <relativePath>../pom.xml</relativePath> </parent> diff --git a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/DockerAwsS3.java b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/DockerAwsS3.java index 98202df..8ed3b39 100644 --- a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/DockerAwsS3.java +++ b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/DockerAwsS3.java @@ -23,9 +23,15 @@ import java.net.URI; public class DockerAwsS3 { private final URI awsS3Endpoint; + private final Region region; - public DockerAwsS3(URI awsS3Endpoint) { + public DockerAwsS3(URI awsS3Endpoint, Region region) { this.awsS3Endpoint = awsS3Endpoint; + this.region = region; + } + + public Region region() { + return region; } public URI awsS3Endpoint() { diff --git a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/DockerAwsS3Container.java b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/DockerAwsS3Container.java index ff566d2..5e2d690 100644 --- a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/DockerAwsS3Container.java +++ b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/DockerAwsS3Container.java @@ -27,12 +27,12 @@ import org.testcontainers.containers.wait.strategy.Wait; public class DockerAwsS3Container { - public static final Region REGION = Region.of(software.amazon.awssdk.regions.Region.EU_WEST_1.id()); private static final String AWS_S3_DOCKER_IMAGE = "zenko/cloudserver:8.2.3"; private static final int AWS_S3_PORT = 8000; private static final int ONE_TIME = 1; + public static final Region REGION = Region.of(software.amazon.awssdk.regions.Region.EU_WEST_1.id()); public static final String ACCESS_KEY_ID = "newAccessKey"; public static final String SECRET_ACCESS_KEY = "newSecretKey"; @@ -53,7 +53,7 @@ public class DockerAwsS3Container { public void start() { awsS3Container.start(); - dockerAwsS3 = new DockerAwsS3(URI.create("http://" + getHost().asString() + "/")); + dockerAwsS3 = new DockerAwsS3(URI.create("http://" + getHost().asString() + "/"), REGION); } public void stop() { diff --git a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/DockerAwsS3.java b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/DockerAwsS3Singleton.java similarity index 83% copy from server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/DockerAwsS3.java copy to server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/DockerAwsS3Singleton.java index 98202df..c5b9975 100644 --- a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/DockerAwsS3.java +++ b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/DockerAwsS3Singleton.java @@ -19,17 +19,13 @@ package org.apache.james.blob.objectstorage.aws; -import java.net.URI; +public class DockerAwsS3Singleton { -public class DockerAwsS3 { - private final URI awsS3Endpoint; + public static final DockerAwsS3Container singleton = new DockerAwsS3Container(); - public DockerAwsS3(URI awsS3Endpoint) { - this.awsS3Endpoint = awsS3Endpoint; + static { + singleton.start(); } - public URI awsS3Endpoint() { - return awsS3Endpoint; - } + // Cleanup will be performed by test namespace resource reaper } - diff --git a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3BlobStoreTest.java b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3BlobStoreTest.java index aea81d4..25f4464 100644 --- a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3BlobStoreTest.java +++ b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3BlobStoreTest.java @@ -43,7 +43,7 @@ class S3BlobStoreTest implements BlobStoreContract { .secretKey(DockerAwsS3Container.SECRET_ACCESS_KEY) .build(); - s3DumbBlobStore = new S3DumbBlobStore(configuration, DockerAwsS3Container.REGION); + s3DumbBlobStore = new S3DumbBlobStore(configuration, dockerAwsS3.dockerAwsS3().region()); testee = new S3BlobStore(s3DumbBlobStore, new HashBlobId.Factory(), BucketName.DEFAULT); } diff --git a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3DumbBlobStoreTest.java b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3DumbBlobStoreTest.java index 93ea6af..49bd95e 100644 --- a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3DumbBlobStoreTest.java +++ b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3DumbBlobStoreTest.java @@ -38,7 +38,7 @@ public class S3DumbBlobStoreTest implements DumbBlobStoreContract { .secretKey(DockerAwsS3Container.SECRET_ACCESS_KEY) .build(); - testee = new S3DumbBlobStore(configuration, DockerAwsS3Container.REGION); + testee = new S3DumbBlobStore(configuration, dockerAwsS3.dockerAwsS3().region()); } @AfterEach diff --git a/server/blob/pom.xml b/server/blob/pom.xml index d10760c..8a51689 100644 --- a/server/blob/pom.xml +++ b/server/blob/pom.xml @@ -41,7 +41,6 @@ <module>blob-export-file</module> <module>blob-gc</module> <module>blob-memory</module> - <module>blob-objectstorage</module> <module>blob-s3</module> <module>mail-store</module> diff --git a/server/blob/blob-s3/pom.xml b/server/container/guice/blob-s3-guice/pom.xml similarity index 61% copy from server/blob/blob-s3/pom.xml copy to server/container/guice/blob-s3-guice/pom.xml index 6c9dc6d..7d064f4 100644 --- a/server/blob/blob-s3/pom.xml +++ b/server/container/guice/blob-s3-guice/pom.xml @@ -18,78 +18,62 @@ under the License. --> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> - <modelVersion>4.0.0</modelVersion> - <properties> - <s3-sdk.version>2.10.41</s3-sdk.version> - </properties> + <modelVersion>4.0.0</modelVersion> <parent> - <artifactId>james-server-blob</artifactId> <groupId>org.apache.james</groupId> - <version>3.5.0-SNAPSHOT</version> + <artifactId>james-server-guice</artifactId> + <version>3.6.0-SNAPSHOT</version> <relativePath>../pom.xml</relativePath> </parent> - <artifactId>blob-s3</artifactId> + <artifactId>blob-s3-guice</artifactId> <packaging>jar</packaging> - <name>Apache James :: Server :: Blob :: S3</name> + <name>Apache James :: Server :: Blob S3 - guice injection</name> + <description>An advanced email server - S3 based Blob Store bindings</description> <dependencies> <dependency> <groupId>${james.groupId}</groupId> - <artifactId>blob-api</artifactId> + <artifactId>blob-api-guice</artifactId> + </dependency> + <dependency> + <groupId>${james.groupId}</groupId> + <artifactId>blob-s3</artifactId> </dependency> <dependency> <groupId>${james.groupId}</groupId> - <artifactId>blob-api</artifactId> + <artifactId>blob-s3</artifactId> + <version>${project.version}</version> <type>test-jar</type> <scope>test</scope> </dependency> <dependency> <groupId>${james.groupId}</groupId> - <artifactId>james-core</artifactId> + <artifactId>james-server-guice-common</artifactId> + <type>test-jar</type> + <scope>test</scope> </dependency> <dependency> <groupId>${james.groupId}</groupId> - <artifactId>james-server-util</artifactId> + <artifactId>james-server-guice-configuration</artifactId> </dependency> <dependency> <groupId>${james.groupId}</groupId> - <artifactId>testing-base</artifactId> + <artifactId>james-server-testing</artifactId> <scope>test</scope> </dependency> <dependency> - <groupId>commons-io</groupId> - <artifactId>commons-io</artifactId> - </dependency> - <dependency> - <groupId>javax.annotation</groupId> - <artifactId>javax.annotation-api</artifactId> - </dependency> - <dependency> - <groupId>io.projectreactor.addons</groupId> - <artifactId>reactor-extra</artifactId> - </dependency> - <dependency> - <groupId>org.slf4j</groupId> - <artifactId>slf4j-api</artifactId> + <groupId>${james.groupId}</groupId> + <artifactId>testing-base</artifactId> + <scope>test</scope> </dependency> <dependency> <groupId>org.testcontainers</groupId> <artifactId>testcontainers</artifactId> <scope>test</scope> </dependency> - <dependency> - <groupId>software.amazon.awssdk</groupId> - <artifactId>netty-nio-client</artifactId> - <version>${s3-sdk.version}</version> - </dependency> - <dependency> - <groupId>software.amazon.awssdk</groupId> - <artifactId>s3</artifactId> - <version>${s3-sdk.version}</version> - </dependency> </dependencies> -</project> +</project> \ No newline at end of file diff --git a/server/container/guice/blob-s3-guice/src/main/java/org/apache/james/modules/objectstorage/S3BlobConfiguration.java b/server/container/guice/blob-s3-guice/src/main/java/org/apache/james/modules/objectstorage/S3BlobConfiguration.java new file mode 100644 index 0000000..7410276 --- /dev/null +++ b/server/container/guice/blob-s3-guice/src/main/java/org/apache/james/modules/objectstorage/S3BlobConfiguration.java @@ -0,0 +1,179 @@ +/**************************************************************** + * 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 java.util.Objects; +import java.util.Optional; + +import org.apache.commons.configuration2.Configuration; +import org.apache.commons.configuration2.ex.ConfigurationException; +import org.apache.james.blob.api.BucketName; +import org.apache.james.blob.objectstorage.aws.AwsS3AuthConfiguration; +import org.apache.james.blob.objectstorage.aws.Region; +import org.apache.james.modules.objectstorage.aws.s3.AwsS3ConfigurationReader; + +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.MoreObjects; + +public class S3BlobConfiguration { + + private static final String OBJECTSTORAGE_NAMESPACE = "objectstorage.namespace"; + private static final String OBJECTSTORAGE_BUCKET_PREFIX = "objectstorage.bucketPrefix"; + private static final String OBJECTSTORAGE_S3_REGION = "objectstorage.s3.region"; + + static final String DEFAULT_BUCKET_PREFIX = ""; + + public static S3BlobConfiguration from(Configuration configuration) throws ConfigurationException { + Optional<String> namespace = Optional.ofNullable(configuration.getString(OBJECTSTORAGE_NAMESPACE, null)); + Optional<String> bucketPrefix = Optional.ofNullable(configuration.getString(OBJECTSTORAGE_BUCKET_PREFIX, null)); + Region region = Optional.ofNullable(configuration.getString(OBJECTSTORAGE_S3_REGION, null)) + .map(Region::of) + .orElseThrow(() -> new ConfigurationException("require a region (" + OBJECTSTORAGE_S3_REGION + " key)")); + + return builder() + .authConfiguration(authConfiguration(configuration)) + .region(region) + .defaultBucketName(namespace.map(BucketName::of)) + .bucketPrefix(bucketPrefix) + .build(); + } + + private static AwsS3AuthConfiguration authConfiguration(Configuration configuration) throws ConfigurationException { + return AwsS3ConfigurationReader.from(configuration); + } + + public static Builder.RequireAuthConfiguration builder() { + return authConfiguration -> region -> new Builder.ReadyToBuild(authConfiguration, region); + } + + public interface Builder { + + @FunctionalInterface + interface RequireAuthConfiguration { + RequireRegion authConfiguration(AwsS3AuthConfiguration authConfiguration); + } + + @FunctionalInterface + interface RequireRegion { + ReadyToBuild region(Region region); + } + + class ReadyToBuild { + + private final AwsS3AuthConfiguration specificAuthConfiguration; + + private Optional<BucketName> defaultBucketName; + private Optional<String> bucketPrefix; + private Region region; + + public ReadyToBuild(AwsS3AuthConfiguration specificAuthConfiguration, Region region) { + this.specificAuthConfiguration = specificAuthConfiguration; + this.region = region; + this.defaultBucketName = Optional.empty(); + this.bucketPrefix = Optional.empty(); + } + + public ReadyToBuild defaultBucketName(Optional<BucketName> defaultBucketName) { + this.defaultBucketName = defaultBucketName; + return this; + } + + public ReadyToBuild defaultBucketName(BucketName defaultBucketName) { + this.defaultBucketName = Optional.of(defaultBucketName); + return this; + } + + public ReadyToBuild bucketPrefix(Optional<String> bucketPrefix) { + this.bucketPrefix = bucketPrefix; + return this; + } + + public ReadyToBuild bucketPrefix(String bucketPrefix) { + this.bucketPrefix = Optional.ofNullable(bucketPrefix); + return this; + } + + public S3BlobConfiguration build() { + return new S3BlobConfiguration(bucketPrefix, defaultBucketName, region, specificAuthConfiguration); + } + } + + } + + private final Region region; + private final AwsS3AuthConfiguration specificAuthConfiguration; + private final Optional<BucketName> namespace; + private final Optional<String> bucketPrefix; + + @VisibleForTesting + S3BlobConfiguration(Optional<String> bucketPrefix, + Optional<BucketName> namespace, + Region region, + AwsS3AuthConfiguration specificAuthConfiguration) { + this.bucketPrefix = bucketPrefix; + this.namespace = namespace; + this.region = region; + this.specificAuthConfiguration = specificAuthConfiguration; + } + + public Optional<BucketName> getNamespace() { + return namespace; + } + + public AwsS3AuthConfiguration getSpecificAuthConfiguration() { + return specificAuthConfiguration; + } + + public Optional<String> getBucketPrefix() { + return bucketPrefix; + } + + public Region getRegion() { + return region; + } + + @Override + public final boolean equals(Object o) { + if (o instanceof S3BlobConfiguration) { + S3BlobConfiguration that = (S3BlobConfiguration) o; + + return Objects.equals(this.namespace, that.namespace) + && Objects.equals(this.bucketPrefix, that.bucketPrefix) + && Objects.equals(this.region, that.region) + && Objects.equals(this.specificAuthConfiguration, that.specificAuthConfiguration); + } + return false; + } + + @Override + public final int hashCode() { + return Objects.hash(namespace, bucketPrefix, specificAuthConfiguration); + } + + @Override + public String toString() { + return MoreObjects.toStringHelper(this) + .add("namespace", namespace) + .add("bucketPrefix", bucketPrefix) + .add("region", region) + .add("specificAuthConfiguration", specificAuthConfiguration) + .toString(); + } +} diff --git a/server/container/guice/blob-s3-guice/src/main/java/org/apache/james/modules/objectstorage/S3BlobStoreModule.java b/server/container/guice/blob-s3-guice/src/main/java/org/apache/james/modules/objectstorage/S3BlobStoreModule.java new file mode 100644 index 0000000..fe000e1 --- /dev/null +++ b/server/container/guice/blob-s3-guice/src/main/java/org/apache/james/modules/objectstorage/S3BlobStoreModule.java @@ -0,0 +1,76 @@ +/**************************************************************** + * 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 java.io.FileNotFoundException; + +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.BucketName; +import org.apache.james.blob.api.HashBlobId; +import org.apache.james.blob.objectstorage.aws.AwsS3AuthConfiguration; +import org.apache.james.blob.objectstorage.aws.Region; +import org.apache.james.modules.mailbox.ConfigurationComponent; +import org.apache.james.utils.PropertiesProvider; + +import com.google.inject.AbstractModule; +import com.google.inject.Provides; +import com.google.inject.Scopes; + +public class S3BlobStoreModule extends AbstractModule { + + @Override + protected void configure() { + bind(BlobId.Factory.class).to(HashBlobId.Factory.class).in(Scopes.SINGLETON); + } + + @Provides + @Singleton + private S3BlobConfiguration getObjectStorageConfiguration(PropertiesProvider propertiesProvider) throws ConfigurationException { + try { + Configuration configuration = propertiesProvider.getConfigurations(ConfigurationComponent.NAMES); + return S3BlobConfiguration.from(configuration); + } catch (FileNotFoundException e) { + throw new ConfigurationException(ConfigurationComponent.NAME + " configuration was not found"); + } + } + + @Provides + @Singleton + private AwsS3AuthConfiguration awsS3AuthConfiguration(S3BlobConfiguration s3BlobConfiguration) { + return s3BlobConfiguration.getSpecificAuthConfiguration(); + } + + @Provides + @Singleton + private BucketName defaultBucket(S3BlobConfiguration s3BlobConfiguration) { + return s3BlobConfiguration.getNamespace().orElse(BucketName.DEFAULT); + } + + @Provides + @Singleton + private Region region(S3BlobConfiguration s3BlobConfiguration) { + return s3BlobConfiguration.getRegion(); + } + +} diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/SwiftBlobStoreExtension.java b/server/container/guice/blob-s3-guice/src/main/java/org/apache/james/modules/objectstorage/aws/s3/AwsS3ConfigurationReader.java similarity index 54% rename from server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/SwiftBlobStoreExtension.java rename to server/container/guice/blob-s3-guice/src/main/java/org/apache/james/modules/objectstorage/aws/s3/AwsS3ConfigurationReader.java index 3d5fec1..387e922 100644 --- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/SwiftBlobStoreExtension.java +++ b/server/container/guice/blob-s3-guice/src/main/java/org/apache/james/modules/objectstorage/aws/s3/AwsS3ConfigurationReader.java @@ -17,39 +17,24 @@ * under the License. * ****************************************************************/ -package org.apache.james.modules; +package org.apache.james.modules.objectstorage.aws.s3; -import org.apache.james.GuiceModuleTestExtension; -import org.apache.james.modules.objectstorage.PayloadCodecFactory; -import org.apache.james.modules.objectstorage.swift.DockerSwiftTestRule; -import org.junit.jupiter.api.extension.ExtensionContext; +import org.apache.commons.configuration2.Configuration; +import org.apache.james.blob.objectstorage.aws.AwsS3AuthConfiguration; -import com.google.inject.Module; +public class AwsS3ConfigurationReader { -public class SwiftBlobStoreExtension implements GuiceModuleTestExtension { + static final String OBJECTSTORAGE_ENDPOINT = "objectstorage.s3.endPoint"; + static final String OBJECTSTORAGE_ACCESKEYID = "objectstorage.s3.accessKeyId"; + static final String OBJECTSTORAGE_SECRETKEY = "objectstorage.s3.secretKey"; - private final DockerSwiftTestRule swiftRule; + public static AwsS3AuthConfiguration from(Configuration configuration) { - public SwiftBlobStoreExtension() { - this.swiftRule = new DockerSwiftTestRule(); - } - - public SwiftBlobStoreExtension(PayloadCodecFactory payloadCodecFactory) { - this.swiftRule = new DockerSwiftTestRule(payloadCodecFactory); - } - - @Override - public void beforeAll(ExtensionContext extensionContext) { - swiftRule.start(); - } - - @Override - public void afterAll(ExtensionContext extensionContext) { - swiftRule.stop(); - } - - @Override - public Module getModule() { - return swiftRule.getModule(); + return AwsS3AuthConfiguration.builder() + .endpoint(configuration.getString(OBJECTSTORAGE_ENDPOINT)) + .accessKeyId(configuration.getString(OBJECTSTORAGE_ACCESKEYID)) + .secretKey(configuration.getString(OBJECTSTORAGE_SECRETKEY)) + .build(); } } + diff --git a/server/container/guice/blob-s3-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/AwsS3ConfigurationReaderTest.java b/server/container/guice/blob-s3-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/AwsS3ConfigurationReaderTest.java new file mode 100644 index 0000000..c1225d7 --- /dev/null +++ b/server/container/guice/blob-s3-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/AwsS3ConfigurationReaderTest.java @@ -0,0 +1,77 @@ +/**************************************************************** + * 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.aws.s3; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import org.apache.commons.configuration2.Configuration; +import org.apache.commons.configuration2.PropertiesConfiguration; +import org.apache.james.blob.objectstorage.aws.AwsS3AuthConfiguration; +import org.junit.jupiter.api.Test; + +class AwsS3ConfigurationReaderTest { + + @Test + void fromShouldThrowWhenEndpointIsNull() { + Configuration configuration = new PropertiesConfiguration(); + assertThatThrownBy(() -> AwsS3ConfigurationReader.from(configuration)) + .isInstanceOf(NullPointerException.class) + .hasMessage("'endpoint' is mandatory"); + } + + @Test + void fromShouldThrowWhenAccessKeyIdIsNull() { + Configuration configuration = new PropertiesConfiguration(); + configuration.addProperty(AwsS3ConfigurationReader.OBJECTSTORAGE_ENDPOINT, "myEndpoint"); + assertThatThrownBy(() -> AwsS3ConfigurationReader.from(configuration)) + .isInstanceOf(NullPointerException.class) + .hasMessage("'accessKeyId' is mandatory"); + } + + @Test + void fromShouldThrowWhenSecretKeyIsNull() { + Configuration configuration = new PropertiesConfiguration(); + configuration.addProperty(AwsS3ConfigurationReader.OBJECTSTORAGE_ENDPOINT, "myEndpoint"); + configuration.addProperty(AwsS3ConfigurationReader.OBJECTSTORAGE_ACCESKEYID, "myAccessKeyId"); + assertThatThrownBy(() -> AwsS3ConfigurationReader.from(configuration)) + .isInstanceOf(NullPointerException.class) + .hasMessage("'secretKey' is mandatory"); + } + + @Test + void fromShouldWork() { + Configuration configuration = new PropertiesConfiguration(); + String endpoint = "myEndpoint"; + configuration.addProperty(AwsS3ConfigurationReader.OBJECTSTORAGE_ENDPOINT, endpoint); + String accessKeyId = "myAccessKeyId"; + configuration.addProperty(AwsS3ConfigurationReader.OBJECTSTORAGE_ACCESKEYID, accessKeyId); + String secretKey = "mySecretKey"; + configuration.addProperty(AwsS3ConfigurationReader.OBJECTSTORAGE_SECRETKEY, secretKey); + + AwsS3AuthConfiguration expected = AwsS3AuthConfiguration.builder() + .endpoint(endpoint) + .accessKeyId(accessKeyId) + .secretKey(secretKey) + .build(); + AwsS3AuthConfiguration authConfiguration = AwsS3ConfigurationReader.from(configuration); + assertThat(authConfiguration).isEqualTo(expected); + } +} \ No newline at end of file diff --git a/server/container/guice/blob-s3-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/DockerAwsS3TestRule.java b/server/container/guice/blob-s3-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/DockerAwsS3TestRule.java new file mode 100644 index 0000000..f156cf6 --- /dev/null +++ b/server/container/guice/blob-s3-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/DockerAwsS3TestRule.java @@ -0,0 +1,93 @@ +/**************************************************************** + * 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.aws.s3; + +import java.util.UUID; + +import org.apache.james.GuiceModuleTestRule; +import org.apache.james.blob.api.BucketName; +import org.apache.james.blob.objectstorage.aws.AwsS3AuthConfiguration; +import org.apache.james.blob.objectstorage.aws.DockerAwsS3Container; +import org.apache.james.blob.objectstorage.aws.DockerAwsS3Singleton; +import org.apache.james.blob.objectstorage.aws.Region; +import org.apache.james.modules.objectstorage.S3BlobConfiguration; +import org.junit.runner.Description; +import org.junit.runners.model.Statement; + +import com.google.inject.Module; + +public class DockerAwsS3TestRule implements GuiceModuleTestRule { + + public DockerAwsS3TestRule() { + } + + @Override + public Statement apply(Statement base, Description description) { + return new Statement() { + @Override + public void evaluate() throws Throwable { + ensureAwsS3started(); + base.evaluate(); + } + }; + } + + private void ensureAwsS3started() { + DockerAwsS3Singleton.singleton.dockerAwsS3(); + } + + @Override + public void await() { + } + + @Override + public Module getModule() { + BucketName defaultBucketName = BucketName.of(UUID.randomUUID().toString()); + AwsS3AuthConfiguration authConfiguration = AwsS3AuthConfiguration.builder() + .endpoint(DockerAwsS3Singleton.singleton.getEndpoint()) + .accessKeyId(DockerAwsS3Container.ACCESS_KEY_ID) + .secretKey(DockerAwsS3Container.SECRET_ACCESS_KEY) + .build(); + + Region region = DockerAwsS3Container.REGION; + S3BlobConfiguration configuration = S3BlobConfiguration.builder() + .authConfiguration(authConfiguration) + .region(region) + .defaultBucketName(defaultBucketName) + .bucketPrefix(UUID.randomUUID().toString()) + .build(); + + return binder -> { + binder.bind(BucketName.class).toInstance(defaultBucketName); + binder.bind(Region.class).toInstance(region); + binder.bind(AwsS3AuthConfiguration.class).toInstance(authConfiguration); + binder.bind(S3BlobConfiguration.class).toInstance(configuration); + }; + } + + public void start() { + ensureAwsS3started(); + } + + public void stop() { + //nothing to stop + } +} + diff --git a/server/container/guice/cassandra-rabbitmq-guice/pom.xml b/server/container/guice/cassandra-rabbitmq-guice/pom.xml index 3fc2aa9..e2d503a 100644 --- a/server/container/guice/cassandra-rabbitmq-guice/pom.xml +++ b/server/container/guice/cassandra-rabbitmq-guice/pom.xml @@ -85,40 +85,19 @@ </dependency> <dependency> <groupId>${james.groupId}</groupId> - <artifactId>blob-objectstorage</artifactId> + <artifactId>blob-s3</artifactId> <type>test-jar</type> <scope>test</scope> - <!-- JCloud switch relies on incompatible guice 3.3.0 for multibindings --> - <exclusions> - <exclusion> - <groupId>com.google.inject.extensions</groupId> - <artifactId>guice-multibindings</artifactId> - </exclusion> - </exclusions> </dependency> <dependency> <groupId>${james.groupId}</groupId> - <artifactId>blob-objectstorage-guice</artifactId> - <!-- JCloud switch relies on incompatible guice 3.3.0 for multibindings --> - <exclusions> - <exclusion> - <groupId>com.google.inject.extensions</groupId> - <artifactId>guice-multibindings</artifactId> - </exclusion> - </exclusions> + <artifactId>blob-s3-guice</artifactId> </dependency> <dependency> <groupId>${james.groupId}</groupId> - <artifactId>blob-objectstorage-guice</artifactId> + <artifactId>blob-s3-guice</artifactId> <type>test-jar</type> <scope>test</scope> - <!-- JCloud switch relies on incompatible guice 3.3.0 for multibindings --> - <exclusions> - <exclusion> - <groupId>com.google.inject.extensions</groupId> - <artifactId>guice-multibindings</artifactId> - </exclusion> - </exclusions> </dependency> <dependency> <groupId>${james.groupId}</groupId> 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 99e9ea2..27c3231 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,7 +21,6 @@ package org.apache.james.modules.blobstore; import org.apache.james.backends.cassandra.components.CassandraModule; import org.apache.james.blob.cassandra.CassandraBlobModule; -import org.apache.james.modules.objectstorage.ObjectStorageDependenciesModule; import com.google.inject.AbstractModule; import com.google.inject.multibindings.Multibinder; @@ -29,7 +28,6 @@ import com.google.inject.multibindings.Multibinder; public class BlobStoreChoosingModule extends AbstractModule { @Override protected void configure() { - install(new ObjectStorageDependenciesModule()); Multibinder<CassandraModule> cassandraDataDefinitions = Multibinder.newSetBinder(binder(), CassandraModule.class); cassandraDataDefinitions.addBinding().toInstance(CassandraBlobModule.MODULE); diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/blobstore/BlobStoreConfiguration.java b/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/blobstore/BlobStoreConfiguration.java index be9a220..215c4f9 100644 --- a/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/blobstore/BlobStoreConfiguration.java +++ b/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/blobstore/BlobStoreConfiguration.java @@ -51,8 +51,8 @@ public class BlobStoreConfiguration { return implementation(BlobStoreImplName.CASSANDRA); } - default RequireCache objectStorage() { - return implementation(BlobStoreImplName.OBJECTSTORAGE); + default RequireCache s3() { + return implementation(BlobStoreImplName.S3); } } @@ -88,7 +88,7 @@ public class BlobStoreConfiguration { public enum BlobStoreImplName { CASSANDRA("cassandra"), - OBJECTSTORAGE("objectstorage"); + S3("s3"); static String supportedImplNames() { return Stream.of(BlobStoreImplName.values()) @@ -170,6 +170,10 @@ public class BlobStoreConfiguration { .disableCache(); } + public static RequireCache s3() { + return builder().s3(); + } + private final BlobStoreImplName implementation; private final boolean cacheEnabled; private final StorageStrategy storageStrategy; 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 index b37e0ab..770cffa 100644 --- 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 @@ -25,7 +25,8 @@ import org.apache.james.blob.api.BlobStore; import org.apache.james.blob.api.DumbBlobStore; import org.apache.james.blob.cassandra.CassandraDumbBlobStore; import org.apache.james.blob.cassandra.cache.CachedBlobStore; -import org.apache.james.blob.objectstorage.ObjectStorageBlobStore; +import org.apache.james.blob.objectstorage.aws.S3BlobStore; +import org.apache.james.blob.objectstorage.aws.S3DumbBlobStore; import org.apache.james.eventsourcing.Event; import org.apache.james.eventsourcing.eventstore.cassandra.dto.EventDTO; import org.apache.james.eventsourcing.eventstore.cassandra.dto.EventDTOModule; @@ -33,7 +34,7 @@ import org.apache.james.lifecycle.api.StartUpCheck; import org.apache.james.modules.blobstore.validation.EventsourcingStorageStrategy; import org.apache.james.modules.blobstore.validation.StorageStrategyModule; import org.apache.james.modules.mailbox.CassandraBlobStoreDependenciesModule; -import org.apache.james.modules.objectstorage.ObjectStorageDependenciesModule; +import org.apache.james.modules.objectstorage.S3BlobStoreModule; import org.apache.james.server.blob.deduplication.DeDuplicationBlobStore; import org.apache.james.server.blob.deduplication.PassThroughBlobStore; import org.apache.james.server.blob.deduplication.StorageStrategy; @@ -60,11 +61,13 @@ public class BlobStoreModulesChooser { static class ObjectStorageDumdBlobStoreDeclarationModule extends AbstractModule { @Override protected void configure() { - install(new ObjectStorageDependenciesModule()); - bind(DumbBlobStore.class).to(NoopDumbBlobStore.class); + install(new S3BlobStoreModule()); + + bind(DumbBlobStore.class).to(S3DumbBlobStore.class); + bind(BlobStore.class) .annotatedWith(Names.named(CachedBlobStore.BACKEND)) - .to(ObjectStorageBlobStore.class); + .to(S3BlobStore.class); } } @@ -107,7 +110,7 @@ public class BlobStoreModulesChooser { switch (implementation) { case CASSANDRA: return new CassandraDumbBlobStoreDeclarationModule(); - case OBJECTSTORAGE: + case S3: return new ObjectStorageDumdBlobStoreDeclarationModule(); default: throw new RuntimeException("Unsupported blobStore implementation " + implementation); diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/blobstore/NoopDumbBlobStore.java b/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/blobstore/NoopDumbBlobStore.java deleted file mode 100644 index 9ebc084..0000000 --- a/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/blobstore/NoopDumbBlobStore.java +++ /dev/null @@ -1,83 +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 java.io.InputStream; - -import javax.inject.Inject; - -import org.apache.commons.lang3.NotImplementedException; -import org.apache.james.blob.api.BlobId; -import org.apache.james.blob.api.BucketName; -import org.apache.james.blob.api.DumbBlobStore; -import org.apache.james.blob.api.ObjectNotFoundException; -import org.apache.james.blob.api.ObjectStoreIOException; -import org.apache.james.blob.objectstorage.ObjectStorageBlobStore; -import org.reactivestreams.Publisher; - -import com.google.common.io.ByteSource; - - -/** - * This class is a workaround while waiting for a real DumbBlobStore to be extracted from ObjectStorageBlobStore - */ -public class NoopDumbBlobStore implements DumbBlobStore { - private final ObjectStorageBlobStore objectStorageBlobStore; - - @Inject - public NoopDumbBlobStore(ObjectStorageBlobStore objectStorageBlobStore) { - this.objectStorageBlobStore = objectStorageBlobStore; - } - - @Override - public InputStream read(BucketName bucketName, BlobId blobId) throws ObjectStoreIOException, ObjectNotFoundException { - throw new NotImplementedException("Not implemented"); - } - - @Override - public Publisher<byte[]> readBytes(BucketName bucketName, BlobId blobId) { - throw new NotImplementedException("Not implemented"); - } - - @Override - public Publisher<Void> save(BucketName bucketName, BlobId blobId, byte[] data) { - throw new NotImplementedException("Not implemented"); - } - - @Override - public Publisher<Void> save(BucketName bucketName, BlobId blobId, InputStream inputStream) { - throw new NotImplementedException("Not implemented"); - } - - @Override - public Publisher<Void> save(BucketName bucketName, BlobId blobId, ByteSource content) { - throw new NotImplementedException("Not implemented"); - } - - @Override - public Publisher<Void> delete(BucketName bucketName, BlobId blobId) { - return objectStorageBlobStore.deleteEffectively(bucketName, blobId); - } - - @Override - public Publisher<Void> deleteBucket(BucketName bucketName) { - throw new NotImplementedException("Not implemented"); - } -} 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 9986b37..6b86dbf 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 @@ -41,7 +41,7 @@ public class CassandraRabbitMQAwsS3JmapTestRule implements TestRule { private final TemporaryFolder temporaryFolder; public static CassandraRabbitMQAwsS3JmapTestRule defaultTestRule() { - return new CassandraRabbitMQAwsS3JmapTestRule(new DockerAwsS3TestRule()); + return new CassandraRabbitMQAwsS3JmapTestRule(); } private final GuiceModuleTestRule guiceModuleTestRule; @@ -63,7 +63,7 @@ public class CassandraRabbitMQAwsS3JmapTestRule implements TestRule { .workingDirectory(temporaryFolder.newFolder()) .configurationFromClasspath() .blobStore(BlobStoreConfiguration.builder() - .objectStorage() + .s3() .disableCache() .deduplication()) .searchConfiguration(SearchConfiguration.elasticSearch()) @@ -71,6 +71,7 @@ public class CassandraRabbitMQAwsS3JmapTestRule implements TestRule { return CassandraRabbitMQJamesServerMain.createServer(configuration) .overrideWith(new TestRabbitMQModule(DockerRabbitMQSingleton.SINGLETON)) + .overrideWith(new DockerAwsS3TestRule().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/CassandraRabbitMQJamesServerFixture.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/CassandraRabbitMQJamesServerFixture.java index 2027540..1219646 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 @@ -34,7 +34,7 @@ public class CassandraRabbitMQJamesServerFixture { .workingDirectory(tmpDir) .configurationFromClasspath() .blobStore(BlobStoreConfiguration.builder() - .objectStorage() + .s3() .disableCache() .deduplication()) .searchConfiguration(SearchConfiguration.elasticSearch()) diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCacheImmutableTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCacheImmutableTest.java index 889b46e..194367c 100644 --- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCacheImmutableTest.java +++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithCacheImmutableTest.java @@ -39,7 +39,7 @@ class WithCacheImmutableTest implements JmapJamesServerContract, JamesServerCont .workingDirectory(tmpDir) .configurationFromClasspath() .blobStore(BlobStoreConfiguration.builder() - .objectStorage() + .s3() .enableCache() .deduplication()) .searchConfiguration(SearchConfiguration.elasticSearch()) diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultAwsS3ImmutableTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultAwsS3ImmutableTest.java index 0a6db6f..3c272fa 100644 --- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultAwsS3ImmutableTest.java +++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultAwsS3ImmutableTest.java @@ -19,14 +19,8 @@ package org.apache.james; -import static org.assertj.core.api.Assertions.assertThat; - -import org.apache.james.blob.objectstorage.DefaultPayloadCodec; -import org.apache.james.blob.objectstorage.PayloadCodec; import org.apache.james.jmap.draft.JmapJamesServerContract; import org.apache.james.modules.AwsS3BlobStoreExtension; -import org.apache.james.modules.objectstorage.aws.s3.DockerAwsS3TestRule; -import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; public class WithDefaultAwsS3ImmutableTest implements JmapJamesServerContract, JamesServerContract { @@ -35,13 +29,4 @@ public class WithDefaultAwsS3ImmutableTest implements JmapJamesServerContract, J .extension(new AwsS3BlobStoreExtension()) .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS) .build(); - - @Test - void defaultPayloadShouldBeByDefault(GuiceJamesServer jamesServer) { - PayloadCodec payloadCodec = jamesServer.getProbe(DockerAwsS3TestRule.TestAwsS3BlobStoreProbe.class) - .getAwsS3PayloadCodec(); - - assertThat(payloadCodec) - .isInstanceOf(DefaultPayloadCodec.class); - } } diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultSwiftImmutableTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultSwiftImmutableTest.java deleted file mode 100644 index 8d651f4..0000000 --- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultSwiftImmutableTest.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; - -import static org.assertj.core.api.Assertions.assertThat; - -import org.apache.james.blob.objectstorage.DefaultPayloadCodec; -import org.apache.james.blob.objectstorage.PayloadCodec; -import org.apache.james.jmap.draft.JmapJamesServerContract; -import org.apache.james.modules.SwiftBlobStoreExtension; -import org.apache.james.modules.objectstorage.swift.DockerSwiftTestRule; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; - -public class WithDefaultSwiftImmutableTest implements JmapJamesServerContract, JamesServerContract { - @RegisterExtension - static JamesServerExtension jamesServerExtension = CassandraRabbitMQJamesServerFixture.baseExtensionBuilder() - .extension(new SwiftBlobStoreExtension()) - .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS) - .build(); - - @Test - void defaultPayloadShouldBeByDefault(GuiceJamesServer jamesServer) { - PayloadCodec payloadCodec = jamesServer.getProbe(DockerSwiftTestRule.TestSwiftBlobStoreProbe.class) - .getSwiftPayloadCodec(); - - assertThat(payloadCodec) - .isInstanceOf(DefaultPayloadCodec.class); - } -} diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultSwiftMutableTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultSwiftMutableTest.java deleted file mode 100644 index fe4ae75..0000000 --- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithDefaultSwiftMutableTest.java +++ /dev/null @@ -1,31 +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; - -import org.apache.james.modules.SwiftBlobStoreExtension; -import org.junit.jupiter.api.extension.RegisterExtension; - -public class WithDefaultSwiftMutableTest implements MailsShouldBeWellReceived { - @RegisterExtension - static JamesServerExtension jamesServerExtension = CassandraRabbitMQJamesServerFixture.baseExtensionBuilder() - .extension(new SwiftBlobStoreExtension()) - .lifeCycle(JamesServerExtension.Lifecycle.PER_TEST) - .build(); -} diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedAwsS3ImmutableTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedAwsS3ImmutableTest.java deleted file mode 100644 index d733079..0000000 --- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedAwsS3ImmutableTest.java +++ /dev/null @@ -1,48 +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; - -import static org.assertj.core.api.Assertions.assertThat; - -import org.apache.james.blob.objectstorage.AESPayloadCodec; -import org.apache.james.blob.objectstorage.PayloadCodec; -import org.apache.james.jmap.draft.JmapJamesServerContract; -import org.apache.james.modules.AwsS3BlobStoreExtension; -import org.apache.james.modules.objectstorage.PayloadCodecFactory; -import org.apache.james.modules.objectstorage.aws.s3.DockerAwsS3TestRule; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; - -public class WithEncryptedAwsS3ImmutableTest implements JmapJamesServerContract, JamesServerContract { - @RegisterExtension - static JamesServerExtension jamesServerExtension = CassandraRabbitMQJamesServerFixture.baseExtensionBuilder() - .extension(new AwsS3BlobStoreExtension(PayloadCodecFactory.AES256)) - .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS) - .build(); - - @Test - void encryptedPayloadShouldBeConfiguredWhenProvidingEncryptedPayloadConfiguration(GuiceJamesServer jamesServer) { - PayloadCodec payloadCodec = jamesServer.getProbe(DockerAwsS3TestRule.TestAwsS3BlobStoreProbe.class) - .getAwsS3PayloadCodec(); - - assertThat(payloadCodec) - .isInstanceOf(AESPayloadCodec.class); - } -} diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedAwsS3MutableTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedAwsS3MutableTest.java deleted file mode 100644 index 361e575..0000000 --- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedAwsS3MutableTest.java +++ /dev/null @@ -1,32 +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; - -import org.apache.james.modules.AwsS3BlobStoreExtension; -import org.apache.james.modules.objectstorage.PayloadCodecFactory; -import org.junit.jupiter.api.extension.RegisterExtension; - -public class WithEncryptedAwsS3MutableTest implements MailsShouldBeWellReceived { - @RegisterExtension - static JamesServerExtension jamesServerExtension = CassandraRabbitMQJamesServerFixture.baseExtensionBuilder() - .extension(new AwsS3BlobStoreExtension(PayloadCodecFactory.AES256)) - .lifeCycle(JamesServerExtension.Lifecycle.PER_TEST) - .build(); -} diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedSwiftImmutableTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedSwiftImmutableTest.java deleted file mode 100644 index f0cf7ac..0000000 --- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedSwiftImmutableTest.java +++ /dev/null @@ -1,49 +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; - -import static org.assertj.core.api.Assertions.assertThat; - -import org.apache.james.blob.objectstorage.AESPayloadCodec; -import org.apache.james.blob.objectstorage.PayloadCodec; -import org.apache.james.jmap.draft.JmapJamesServerContract; -import org.apache.james.modules.SwiftBlobStoreExtension; -import org.apache.james.modules.objectstorage.PayloadCodecFactory; -import org.apache.james.modules.objectstorage.swift.DockerSwiftTestRule; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.RegisterExtension; - -public class WithEncryptedSwiftImmutableTest implements JmapJamesServerContract, JamesServerContract { - @RegisterExtension - static JamesServerExtension jamesServerExtension = CassandraRabbitMQJamesServerFixture.baseExtensionBuilder() - .extension(new SwiftBlobStoreExtension(PayloadCodecFactory.AES256)) - .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS) - .build(); - - @Test - void encryptedPayloadShouldBeConfiguredWhenProvidingEncryptedPayloadConfiguration(GuiceJamesServer jamesServer) { - PayloadCodec payloadCodec = jamesServer.getProbe(DockerSwiftTestRule.TestSwiftBlobStoreProbe.class) - .getSwiftPayloadCodec(); - - assertThat(payloadCodec) - .isInstanceOf(AESPayloadCodec.class); - } - -} diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedSwiftMutableTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedSwiftMutableTest.java deleted file mode 100644 index 7f45b8e..0000000 --- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithEncryptedSwiftMutableTest.java +++ /dev/null @@ -1,32 +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; - -import org.apache.james.modules.SwiftBlobStoreExtension; -import org.apache.james.modules.objectstorage.PayloadCodecFactory; -import org.junit.jupiter.api.extension.RegisterExtension; - -public class WithEncryptedSwiftMutableTest implements MailsShouldBeWellReceived { - @RegisterExtension - static JamesServerExtension jamesServerExtension = CassandraRabbitMQJamesServerFixture.baseExtensionBuilder() - .extension(new SwiftBlobStoreExtension(PayloadCodecFactory.AES256)) - .lifeCycle(JamesServerExtension.Lifecycle.PER_TEST) - .build(); -} diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithScanningSearchImmutableTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithScanningSearchImmutableTest.java index 45896b2..cddaa97 100644 --- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithScanningSearchImmutableTest.java +++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/WithScanningSearchImmutableTest.java @@ -33,7 +33,7 @@ class WithScanningSearchImmutableTest implements JmapJamesServerContract, JamesS .workingDirectory(tmpDir) .configurationFromClasspath() .blobStore(BlobStoreConfiguration.builder() - .objectStorage() + .s3() .disableCache() .deduplication()) .searchConfiguration(SearchConfiguration.scanning()) 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 4b09ce6..3d7ebf5 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 @@ -20,12 +20,12 @@ package org.apache.james.modules; import org.apache.james.GuiceModuleTestExtension; -import org.apache.james.blob.objectstorage.DockerAwsS3Singleton; -import org.apache.james.modules.objectstorage.PayloadCodecFactory; +import org.apache.james.blob.objectstorage.aws.DockerAwsS3Singleton; 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 { @@ -35,10 +35,6 @@ public class AwsS3BlobStoreExtension implements GuiceModuleTestExtension { this.awsS3TestRule = new DockerAwsS3TestRule(); } - public AwsS3BlobStoreExtension(PayloadCodecFactory payloadCodecFactory) { - this.awsS3TestRule = new DockerAwsS3TestRule(payloadCodecFactory); - } - @Override public void beforeAll(ExtensionContext extensionContext) { ensureAwsS3started(); diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/BlobStoreCacheModulesChooserTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/BlobStoreCacheModulesChooserTest.java index 03fc807..2452d41 100644 --- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/BlobStoreCacheModulesChooserTest.java +++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/BlobStoreCacheModulesChooserTest.java @@ -28,7 +28,7 @@ class BlobStoreCacheModulesChooserTest { @Test void chooseModulesShouldReturnCacheDisabledModuleWhenCacheDisabled() { assertThat(BlobStoreCacheModulesChooser.chooseModules(BlobStoreConfiguration.builder() - .objectStorage() + .s3() .disableCache() .deduplication())) .hasSize(1) @@ -39,7 +39,7 @@ class BlobStoreCacheModulesChooserTest { @Test void chooseModulesShouldReturnCacheEnabledAndCassandraCacheModulesWhenCacheEnabled() { assertThat(BlobStoreCacheModulesChooser.chooseModules(BlobStoreConfiguration.builder() - .objectStorage() + .s3() .enableCache() .deduplication())) .hasSize(2) diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/BlobStoreConfigurationTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/BlobStoreConfigurationTest.java index 731d6a7..2625a3c 100644 --- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/BlobStoreConfigurationTest.java +++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/BlobStoreConfigurationTest.java @@ -33,7 +33,7 @@ import nl.jqno.equalsverifier.EqualsVerifier; class BlobStoreConfigurationTest { - private static final String OBJECT_STORAGE = "objectstorage"; + private static final String S3 = "s3"; private static final String CASSANDRA = "cassandra"; @Test @@ -92,9 +92,9 @@ class BlobStoreConfigurationTest { } @Test - void provideChoosingConfigurationShouldReturnObjectStorageFactoryWhenConfigurationImplIsObjectStorage() throws Exception { + void provideChoosingConfigurationShouldReturnObjectStorageFactoryWhenConfigurationImplIsS3() throws Exception { PropertiesConfiguration configuration = new PropertiesConfiguration(); - configuration.addProperty("implementation", BlobStoreConfiguration.BlobStoreImplName.OBJECTSTORAGE.getName()); + configuration.addProperty("implementation", BlobStoreConfiguration.BlobStoreImplName.S3.getName()); configuration.addProperty("deduplication.enable", "true"); FakePropertiesProvider propertyProvider = FakePropertiesProvider.builder() .register(ConfigurationComponent.NAME, configuration) @@ -102,7 +102,7 @@ class BlobStoreConfigurationTest { assertThat(parse(propertyProvider)) .isEqualTo(BlobStoreConfiguration.builder() - .objectStorage() + .s3() .disableCache() .deduplication()); } @@ -129,7 +129,7 @@ class BlobStoreConfigurationTest { assertThatThrownBy(() -> BlobStoreConfiguration.from(configuration)) .isInstanceOf(IllegalStateException.class) - .hasMessage("implementation property is missing please use one of supported values in: cassandra, objectstorage"); + .hasMessage("implementation property is missing please use one of supported values in: cassandra, s3"); } @Test @@ -139,7 +139,7 @@ class BlobStoreConfigurationTest { assertThatThrownBy(() -> BlobStoreConfiguration.from(configuration)) .isInstanceOf(IllegalStateException.class) - .hasMessage("implementation property is missing please use one of supported values in: cassandra, objectstorage"); + .hasMessage("implementation property is missing please use one of supported values in: cassandra, s3"); } @Test @@ -149,7 +149,7 @@ class BlobStoreConfigurationTest { assertThatThrownBy(() -> BlobStoreConfiguration.from(configuration)) .isInstanceOf(IllegalStateException.class) - .hasMessage("implementation property is missing please use one of supported values in: cassandra, objectstorage"); + .hasMessage("implementation property is missing please use one of supported values in: cassandra, s3"); } @Test @@ -159,7 +159,7 @@ class BlobStoreConfigurationTest { 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"); + .hasMessage("un_supported is not a valid name of BlobStores, please use one of supported values in: cassandra, s3"); } @Test @@ -176,28 +176,29 @@ class BlobStoreConfigurationTest { } @Test - void fromShouldReturnConfigurationWhenBlobStoreImplIsObjectStorage() { + void fromShouldReturnConfigurationWhenBlobStoreImplIsS3() { PropertiesConfiguration configuration = new PropertiesConfiguration(); - configuration.addProperty("implementation", OBJECT_STORAGE); + configuration.addProperty("implementation", S3); configuration.addProperty("deduplication.enable", "true"); + assertThat( BlobStoreConfiguration.from(configuration) .getImplementation() .getName()) - .isEqualTo(OBJECT_STORAGE); + .isEqualTo(S3); } @Test void fromShouldReturnConfigurationWhenBlobStoreImplIsSupportedAndCaseInsensitive() { PropertiesConfiguration configuration = new PropertiesConfiguration(); - configuration.addProperty("implementation", "OBjecTStorAGE"); + configuration.addProperty("implementation", "CAssAnDrA"); configuration.addProperty("deduplication.enable", "true"); assertThat( BlobStoreConfiguration.from(configuration) .getImplementation() .getName()) - .isEqualTo(OBJECT_STORAGE); + .isEqualTo(CASSANDRA); } @Test @@ -216,7 +217,7 @@ class BlobStoreConfigurationTest { @Test void cacheEnabledShouldBeTrueWhenSpecified() { PropertiesConfiguration configuration = new PropertiesConfiguration(); - configuration.addProperty("implementation", BlobStoreConfiguration.BlobStoreImplName.OBJECTSTORAGE.getName()); + configuration.addProperty("implementation", BlobStoreConfiguration.BlobStoreImplName.S3.getName()); configuration.addProperty("cache.enable", true); configuration.addProperty("deduplication.enable", "true"); @@ -227,7 +228,7 @@ class BlobStoreConfigurationTest { @Test void cacheEnabledShouldBeFalseWhenSpecified() { PropertiesConfiguration configuration = new PropertiesConfiguration(); - configuration.addProperty("implementation", BlobStoreConfiguration.BlobStoreImplName.OBJECTSTORAGE.getName()); + configuration.addProperty("implementation", BlobStoreConfiguration.BlobStoreImplName.S3.getName()); configuration.addProperty("cache.enable", false); configuration.addProperty("deduplication.enable", "true"); @@ -238,7 +239,7 @@ class BlobStoreConfigurationTest { @Test void cacheEnabledShouldDefaultToFalse() { PropertiesConfiguration configuration = new PropertiesConfiguration(); - configuration.addProperty("implementation", BlobStoreConfiguration.BlobStoreImplName.OBJECTSTORAGE.getName()); + configuration.addProperty("implementation", BlobStoreConfiguration.BlobStoreImplName.S3.getName()); configuration.addProperty("deduplication.enable", "true"); assertThat(BlobStoreConfiguration.from(configuration).cacheEnabled()) @@ -248,7 +249,7 @@ class BlobStoreConfigurationTest { @Test void storageStrategyShouldBePassthroughWhenDeduplicationDisabled() { PropertiesConfiguration configuration = new PropertiesConfiguration(); - configuration.addProperty("implementation", BlobStoreConfiguration.BlobStoreImplName.OBJECTSTORAGE.getName()); + configuration.addProperty("implementation", BlobStoreConfiguration.BlobStoreImplName.S3.getName()); configuration.addProperty("deduplication.enable", "false"); assertThat(BlobStoreConfiguration.from(configuration).storageStrategy()) @@ -258,7 +259,7 @@ class BlobStoreConfigurationTest { @Test void storageStrategyShouldBeDeduplicationWhenDeduplicationEnabled() { PropertiesConfiguration configuration = new PropertiesConfiguration(); - configuration.addProperty("implementation", BlobStoreConfiguration.BlobStoreImplName.OBJECTSTORAGE.getName()); + configuration.addProperty("implementation", BlobStoreConfiguration.BlobStoreImplName.S3.getName()); configuration.addProperty("deduplication.enable", "true"); assertThat(BlobStoreConfiguration.from(configuration).storageStrategy()) @@ -268,7 +269,7 @@ class BlobStoreConfigurationTest { @Test void buildingConfigurationShouldThrowWhenDeduplicationPropertieIsOmitted() { PropertiesConfiguration configuration = new PropertiesConfiguration(); - configuration.addProperty("implementation", BlobStoreConfiguration.BlobStoreImplName.OBJECTSTORAGE.getName()); + configuration.addProperty("implementation", BlobStoreConfiguration.BlobStoreImplName.S3.getName()); assertThatThrownBy(() -> BlobStoreConfiguration.from(configuration)).isInstanceOf(IllegalStateException.class) .hasMessage("deduplication.enable property is missing please use one of the supported values in: true, false\n" + 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 index 65735b5..ad21dd9 100644 --- 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 @@ -28,7 +28,7 @@ class BlobStoreModulesChooserTest { @Test void provideBlobStoreShouldReturnObjectStoreBlobStoreWhenObjectStoreConfigured() { assertThat(BlobStoreModulesChooser.chooseModules(BlobStoreConfiguration.builder() - .objectStorage() + .s3() .disableCache() .deduplication())) .first() diff --git a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/validation/StorageStrategyValidationEventSourcingSystemTest.java b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/validation/StorageStrategyValidationEventSourcingSystemTest.java index 04a4753..ed64f5e 100644 --- a/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/validation/StorageStrategyValidationEventSourcingSystemTest.java +++ b/server/container/guice/cassandra-rabbitmq-guice/src/test/java/org/apache/james/modules/blobstore/validation/StorageStrategyValidationEventSourcingSystemTest.java @@ -25,6 +25,7 @@ import org.apache.james.eventsourcing.eventstore.History; import org.apache.james.eventsourcing.eventstore.memory.InMemoryEventStore; import org.apache.james.lifecycle.api.StartUpCheck; import org.apache.james.modules.blobstore.BlobStoreConfiguration; +import org.apache.james.modules.blobstore.BlobStoreConfiguration.BlobStoreImplName; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -42,7 +43,7 @@ public class StorageStrategyValidationEventSourcingSystemTest { @Test void startingForTheFirstTimeShouldSucceedWhenPassThrough() { - StartUpCheck.CheckResult checkResult = testee.validate(BlobStoreConfiguration.builder().implementation(BlobStoreConfiguration.BlobStoreImplName.OBJECTSTORAGE) + StartUpCheck.CheckResult checkResult = testee.validate(BlobStoreConfiguration.builder().implementation(BlobStoreImplName.S3) .disableCache() .passthrough()); @@ -51,7 +52,7 @@ public class StorageStrategyValidationEventSourcingSystemTest { @Test void startingForTheFirstTimeShouldSucceedWhenDeduplication() { - StartUpCheck.CheckResult checkResult = testee.validate(BlobStoreConfiguration.builder().implementation(BlobStoreConfiguration.BlobStoreImplName.OBJECTSTORAGE) + StartUpCheck.CheckResult checkResult = testee.validate(BlobStoreConfiguration.builder().implementation(BlobStoreImplName.S3) .disableCache() .deduplication()); @@ -60,11 +61,11 @@ public class StorageStrategyValidationEventSourcingSystemTest { @Test void startingShouldSucceedWhenTurningOnDeduplication() { - testee.validate(BlobStoreConfiguration.builder().implementation(BlobStoreConfiguration.BlobStoreImplName.OBJECTSTORAGE) + testee.validate(BlobStoreConfiguration.builder().implementation(BlobStoreImplName.S3) .disableCache() .passthrough()); - StartUpCheck.CheckResult checkResult = testee.validate(BlobStoreConfiguration.builder().implementation(BlobStoreConfiguration.BlobStoreImplName.OBJECTSTORAGE) + StartUpCheck.CheckResult checkResult = testee.validate(BlobStoreConfiguration.builder().implementation(BlobStoreImplName.S3) .disableCache() .deduplication()); @@ -73,11 +74,11 @@ public class StorageStrategyValidationEventSourcingSystemTest { @Test void startingShouldFailWhenTurningOffDeduplication() { - testee.validate(BlobStoreConfiguration.builder().implementation(BlobStoreConfiguration.BlobStoreImplName.OBJECTSTORAGE) + testee.validate(BlobStoreConfiguration.builder().implementation(BlobStoreImplName.S3) .disableCache() .deduplication()); - StartUpCheck.CheckResult checkResult = testee.validate(BlobStoreConfiguration.builder().implementation(BlobStoreConfiguration.BlobStoreImplName.OBJECTSTORAGE) + StartUpCheck.CheckResult checkResult = testee.validate(BlobStoreConfiguration.builder().implementation(BlobStoreImplName.S3) .disableCache() .passthrough()); @@ -86,10 +87,10 @@ public class StorageStrategyValidationEventSourcingSystemTest { @Test void validatingSeveralTimeTheSameStrategyShouldNotAddEventsToTheHistory() { - testee.validate(BlobStoreConfiguration.builder().implementation(BlobStoreConfiguration.BlobStoreImplName.OBJECTSTORAGE) + testee.validate(BlobStoreConfiguration.builder().implementation(BlobStoreImplName.S3) .disableCache() .deduplication()); - testee.validate(BlobStoreConfiguration.builder().implementation(BlobStoreConfiguration.BlobStoreImplName.OBJECTSTORAGE) + testee.validate(BlobStoreConfiguration.builder().implementation(BlobStoreImplName.S3) .disableCache() .deduplication()); diff --git a/server/container/guice/cassandra-rabbitmq-ldap-guice/pom.xml b/server/container/guice/cassandra-rabbitmq-ldap-guice/pom.xml index 9767973..588ae50 100644 --- a/server/container/guice/cassandra-rabbitmq-ldap-guice/pom.xml +++ b/server/container/guice/cassandra-rabbitmq-ldap-guice/pom.xml @@ -51,29 +51,15 @@ </dependency> <dependency> <groupId>${james.groupId}</groupId> - <artifactId>blob-objectstorage</artifactId> + <artifactId>blob-s3</artifactId> <type>test-jar</type> <scope>test</scope> - <!-- JCloud switch relies on incompatible guice 3.3.0 for multibindings --> - <exclusions> - <exclusion> - <groupId>com.google.inject.extensions</groupId> - <artifactId>guice-multibindings</artifactId> - </exclusion> - </exclusions> </dependency> <dependency> <groupId>${james.groupId}</groupId> - <artifactId>blob-objectstorage-guice</artifactId> + <artifactId>blob-s3-guice</artifactId> <type>test-jar</type> <scope>test</scope> - <!-- JCloud switch relies on incompatible guice 3.3.0 for multibindings --> - <exclusions> - <exclusion> - <groupId>com.google.inject.extensions</groupId> - <artifactId>guice-multibindings</artifactId> - </exclusion> - </exclusions> </dependency> <dependency> <groupId>${james.groupId}</groupId> 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 be9e201..997de9e 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 @@ -30,7 +30,6 @@ import org.apache.commons.net.imap.IMAPClient; import org.apache.james.jmap.draft.JmapJamesServerContract; 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.BlobStoreConfiguration; import org.apache.james.modules.protocols.ImapGuiceProbe; @@ -55,25 +54,11 @@ class CassandraRabbitMQLdapJmapJamesServerTest { @Nested @TestInstance(TestInstance.Lifecycle.PER_CLASS) - class WithSwift implements ContractSuite { - @RegisterExtension - JamesServerExtension testExtension = baseJamesServerExtensionBuilder(BlobStoreConfiguration.builder() - .objectStorage() - .disableCache() - .deduplication()) - .extension(new SwiftBlobStoreExtension()) - .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS) - .build(); - } - - @Nested - @TestInstance(TestInstance.Lifecycle.PER_CLASS) class WithAwsS3 implements ContractSuite { @RegisterExtension - JamesServerExtension testExtension = baseJamesServerExtensionBuilder(BlobStoreConfiguration.builder() - .objectStorage() - .disableCache() - .deduplication()) + JamesServerExtension testExtension = baseJamesServerExtensionBuilder(BlobStoreConfiguration.s3() + .disableCache() + .passthrough()) .extension(new AwsS3BlobStoreExtension()) .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS) .build(); @@ -81,7 +66,7 @@ class CassandraRabbitMQLdapJmapJamesServerTest { @Nested @TestInstance(TestInstance.Lifecycle.PER_CLASS) - class WithoutSwiftOrAwsS3 implements ContractSuite { + class WithCassandra implements ContractSuite { @RegisterExtension JamesServerExtension testExtension = baseJamesServerExtensionBuilder(BlobStoreConfiguration.builder() .cassandra() diff --git a/server/container/guice/pom.xml b/server/container/guice/pom.xml index cbae105..1e37151 100644 --- a/server/container/guice/pom.xml +++ b/server/container/guice/pom.xml @@ -37,7 +37,7 @@ <module>blob-api-guice</module> <module>blob-export-guice</module> <module>blob-memory-guice</module> - <module>blob-objectstorage-guice</module> + <module>blob-s3-guice</module> <module>cassandra-guice</module> <module>cassandra-ldap-guice</module> <module>cassandra-rabbitmq-guice</module> diff --git a/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/pom.xml b/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/pom.xml index 5b3bfc1..ccb1b97 100644 --- a/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/pom.xml +++ b/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/pom.xml @@ -88,34 +88,20 @@ </dependency> <dependency> <groupId>${james.groupId}</groupId> - <artifactId>blob-objectstorage-guice</artifactId> + <artifactId>blob-s3</artifactId> + <type>test-jar</type> <scope>test</scope> </dependency> <dependency> <groupId>${james.groupId}</groupId> - <artifactId>blob-objectstorage</artifactId> - <type>test-jar</type> + <artifactId>blob-s3-guice</artifactId> <scope>test</scope> - <!-- JCloud switch relies on incompatible guice 3.3.0 for multibindings --> - <exclusions> - <exclusion> - <groupId>com.google.inject.extensions</groupId> - <artifactId>guice-multibindings</artifactId> - </exclusion> - </exclusions> </dependency> <dependency> <groupId>${james.groupId}</groupId> - <artifactId>blob-objectstorage-guice</artifactId> + <artifactId>blob-s3-guice</artifactId> <type>test-jar</type> <scope>test</scope> - <!-- JCloud switch relies on incompatible guice 3.3.0 for multibindings --> - <exclusions> - <exclusion> - <groupId>com.google.inject.extensions</groupId> - <artifactId>guice-multibindings</artifactId> - </exclusion> - </exclusions> </dependency> <dependency> <groupId>${james.groupId}</groupId> diff --git a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/pom.xml b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/pom.xml index 3098f81..682a117 100644 --- a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/pom.xml +++ b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/pom.xml @@ -53,29 +53,15 @@ </dependency> <dependency> <groupId>${james.groupId}</groupId> - <artifactId>blob-objectstorage</artifactId> + <artifactId>blob-s3</artifactId> <type>test-jar</type> <scope>test</scope> - <!-- JCloud switch relies on incompatible guice 3.3.0 for multibindings --> - <exclusions> - <exclusion> - <groupId>com.google.inject.extensions</groupId> - <artifactId>guice-multibindings</artifactId> - </exclusion> - </exclusions> </dependency> <dependency> <groupId>${james.groupId}</groupId> - <artifactId>blob-objectstorage-guice</artifactId> + <artifactId>blob-s3-guice</artifactId> <type>test-jar</type> <scope>test</scope> - <!-- JCloud switch relies on incompatible guice 3.3.0 for multibindings --> - <exclusions> - <exclusion> - <groupId>com.google.inject.extensions</groupId> - <artifactId>guice-multibindings</artifactId> - </exclusion> - </exclusions> </dependency> <dependency> <groupId>${james.groupId}</groupId> 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 cecf617..512cc61 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 @@ -43,7 +43,7 @@ public class RabbitMQAwsS3SendMDNMethodTest extends SendMDNMethodTest { .workingDirectory(tmpDir) .configurationFromClasspath() .blobStore(BlobStoreConfiguration.builder() - .objectStorage() + .s3() .disableCache() .deduplication()) .searchConfiguration(SearchConfiguration.elasticSearch()) 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 97a9793..e68eb91 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 @@ -42,7 +42,7 @@ class RabbitMQAwsS3SpamAssassinContractTest implements SpamAssassinContract { .workingDirectory(tmpDir) .configurationFromClasspath() .blobStore(BlobStoreConfiguration.builder() - .objectStorage() + .s3() .disableCache() .deduplication()) .searchConfiguration(SearchConfiguration.elasticSearch()) diff --git a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/awss3/CucumberAwsS3Singleton.java b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/awss3/CucumberAwsS3Singleton.java index 0ea2135..e581eca 100644 --- a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/awss3/CucumberAwsS3Singleton.java +++ b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/awss3/CucumberAwsS3Singleton.java @@ -18,12 +18,10 @@ ****************************************************************/ package org.apache.james.jmap.rabbitmq.cucumber.awss3; -import org.apache.james.modules.objectstorage.PayloadCodecFactory; import org.apache.james.modules.objectstorage.aws.s3.DockerAwsS3TestRule; public class CucumberAwsS3Singleton { public static DockerAwsS3TestRule awsS3Server = new DockerAwsS3TestRule(); - public static DockerAwsS3TestRule encryptedAwsS3Server = new DockerAwsS3TestRule(PayloadCodecFactory.AES256); } 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 e588f66..c549a76 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 @@ -57,7 +57,7 @@ public class RabbitMQAwsS3Stepdefs { private final DockerCassandraRule cassandraServer = CucumberCassandraSingleton.cassandraServer; private final DockerElasticSearchRule elasticSearch = CucumberElasticSearchSingleton.elasticSearch; private final DockerRabbitMQRule rabbitMQServer = CucumberRabbitMQSingleton.rabbitMQServer; - private final DockerAwsS3TestRule swiftServer = CucumberAwsS3Singleton.awsS3Server; + private final DockerAwsS3TestRule awsS3Server = CucumberAwsS3Singleton.awsS3Server; @Inject private RabbitMQAwsS3Stepdefs(MainStepdefs mainStepdefs, ImapStepdefs imapStepdefs) { @@ -69,7 +69,7 @@ public class RabbitMQAwsS3Stepdefs { public void init() throws Exception { cassandraServer.start(); rabbitMQServer.start(); - swiftServer.start(); + awsS3Server.start(); elasticSearch.start(); temporaryFolder.create(); @@ -78,7 +78,7 @@ public class RabbitMQAwsS3Stepdefs { .workingDirectory(temporaryFolder.newFolder()) .configurationFromClasspath() .blobStore(BlobStoreConfiguration.builder() - .objectStorage() + .s3() .disableCache() .deduplication()) .searchConfiguration(SearchConfiguration.elasticSearch()) @@ -88,7 +88,7 @@ public class RabbitMQAwsS3Stepdefs { .overrideWith(new TestJMAPServerModule()) .overrideWith(new TestDockerESMetricReporterModule(elasticSearch.getDockerEs().getHttpHost())) .overrideWith(new TestRabbitMQModule(rabbitMQServer.dockerRabbitMQ())) - .overrideWith(swiftServer.getModule()) + .overrideWith(awsS3Server.getModule()) .overrideWith(elasticSearch.getModule()) .overrideWith(cassandraServer.getModule()) .overrideWith(binder -> Multibinder.newSetBinder(binder, CleanupTasksPerformer.CleanupTask.class).addBinding().to(CassandraTruncateTableTask.class)) diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/pom.xml b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/pom.xml index 0e79ba2..c1092ac 100644 --- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/pom.xml +++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/pom.xml @@ -52,7 +52,7 @@ </dependency> <dependency> <groupId>${james.groupId}</groupId> - <artifactId>blob-objectstorage</artifactId> + <artifactId>blob-s3</artifactId> <type>test-jar</type> <scope>test</scope> <!-- JCloud switch relies on incompatible guice 3.3.0 for multibindings --> @@ -65,7 +65,7 @@ </dependency> <dependency> <groupId>${james.groupId}</groupId> - <artifactId>blob-objectstorage-guice</artifactId> + <artifactId>blob-s3-guice</artifactId> <type>test-jar</type> <scope>test</scope> <!-- JCloud switch relies on incompatible guice 3.3.0 for multibindings --> diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedAuthenticationTest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedAuthenticationTest.java index 91e8dda..7d9767e 100644 --- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedAuthenticationTest.java +++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedAuthenticationTest.java @@ -40,7 +40,7 @@ class DistributedAuthenticationTest implements AuthenticationContract { .workingDirectory(tmpDir) .configurationFromClasspath() .blobStore(BlobStoreConfiguration.builder() - .objectStorage() + .s3() .disableCache() .deduplication()) .searchConfiguration(SearchConfiguration.elasticSearch()) diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEchoMethodTest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEchoMethodTest.java index 79ff634..80f0194 100644 --- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEchoMethodTest.java +++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEchoMethodTest.java @@ -41,7 +41,7 @@ public class DistributedEchoMethodTest implements EchoMethodContract { .workingDirectory(tmpDir) .configurationFromClasspath() .blobStore(BlobStoreConfiguration.builder() - .objectStorage() + .s3() .disableCache() .deduplication()) .searchConfiguration(SearchConfiguration.elasticSearch()) diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailGetMethodTest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailGetMethodTest.java index d6797a5..01af00e 100644 --- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailGetMethodTest.java +++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailGetMethodTest.java @@ -45,7 +45,7 @@ public class DistributedEmailGetMethodTest implements EmailGetMethodContract { .workingDirectory(tmpDir) .configurationFromClasspath() .blobStore(BlobStoreConfiguration.builder() - .objectStorage() + .s3() .disableCache() .deduplication()) .build()) diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailQueryMethodTest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailQueryMethodTest.java index 71ce9f4..9f6c24f 100644 --- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailQueryMethodTest.java +++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailQueryMethodTest.java @@ -41,7 +41,7 @@ public class DistributedEmailQueryMethodTest implements EmailQueryMethodContract .workingDirectory(tmpDir) .configurationFromClasspath() .blobStore(BlobStoreConfiguration.builder() - .objectStorage() + .s3() .disableCache() .deduplication()) .build()) diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxGetMethodTest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxGetMethodTest.java index 2ccd522..5de500d 100644 --- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxGetMethodTest.java +++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxGetMethodTest.java @@ -43,7 +43,7 @@ public class DistributedMailboxGetMethodTest implements MailboxGetMethodContract .workingDirectory(tmpDir) .configurationFromClasspath() .blobStore(BlobStoreConfiguration.builder() - .objectStorage() + .s3() .disableCache() .deduplication()) .build()) diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxSetMethodTest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxSetMethodTest.java index 44d55ac..da6dbde 100644 --- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxSetMethodTest.java +++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxSetMethodTest.java @@ -43,7 +43,7 @@ public class DistributedMailboxSetMethodTest implements MailboxSetMethodContract .workingDirectory(tmpDir) .configurationFromClasspath() .blobStore(BlobStoreConfiguration.builder() - .objectStorage() + .s3() .disableCache() .deduplication()) .build()) diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedProvisioningTest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedProvisioningTest.java index f86bad6..b278584 100644 --- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedProvisioningTest.java +++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedProvisioningTest.java @@ -39,7 +39,7 @@ public class DistributedProvisioningTest implements ProvisioningContract { .workingDirectory(tmpDir) .configurationFromClasspath() .blobStore(BlobStoreConfiguration.builder() - .objectStorage() + .s3() .disableCache() .deduplication()) .build()) diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedSessionRouteTest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedSessionRouteTest.java index 70d6410..ae801b8 100644 --- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedSessionRouteTest.java +++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedSessionRouteTest.java @@ -39,9 +39,7 @@ public class DistributedSessionRouteTest implements SessionRoutesContract { CassandraRabbitMQJamesConfiguration.builder() .workingDirectory(tmpDir) .configurationFromClasspath() - .blobStore(BlobStoreConfiguration - .builder() - .objectStorage() + .blobStore(BlobStoreConfiguration.s3() .disableCache() .passthrough()) .searchConfiguration(SearchConfiguration.elasticSearch()) diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedVacationResponseGetMethodTest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedVacationResponseGetMethodTest.java index 0219a41..b318e97 100644 --- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedVacationResponseGetMethodTest.java +++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedVacationResponseGetMethodTest.java @@ -39,7 +39,7 @@ public class DistributedVacationResponseGetMethodTest implements VacationRespons .workingDirectory(tmpDir) .configurationFromClasspath() .blobStore(BlobStoreConfiguration.builder() - .objectStorage() + .s3() .disableCache() .deduplication()) .build()) diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedVacationResponseSetMethodTest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedVacationResponseSetMethodTest.java index f6e314f..57a746a 100644 --- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedVacationResponseSetMethodTest.java +++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedVacationResponseSetMethodTest.java @@ -39,7 +39,7 @@ public class DistributedVacationResponseSetMethodTest implements VacationRespons .workingDirectory(tmpDir) .configurationFromClasspath() .blobStore(BlobStoreConfiguration.builder() - .objectStorage() + .s3() .disableCache() .deduplication()) .build()) diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/pom.xml b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/pom.xml index 6904304..8d603f2 100644 --- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/pom.xml +++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/pom.xml @@ -53,13 +53,13 @@ </dependency> <dependency> <groupId>${james.groupId}</groupId> - <artifactId>blob-objectstorage</artifactId> + <artifactId>blob-s3</artifactId> <type>test-jar</type> <scope>test</scope> </dependency> <dependency> <groupId>${james.groupId}</groupId> - <artifactId>blob-objectstorage-guice</artifactId> + <artifactId>blob-s3-guice</artifactId> <type>test-jar</type> <scope>test</scope> </dependency> 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 bdcfa96..e197c56 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 @@ -129,7 +129,7 @@ class ConsistencyTasksIntegrationTest { .workingDirectory(tmpDir) .configurationFromClasspath() .blobStore(BlobStoreConfiguration.builder() - .objectStorage() + .s3() .disableCache() .deduplication()) .searchConfiguration(SearchConfiguration.elasticSearch()) @@ -542,4 +542,4 @@ class ConsistencyTasksIntegrationTest { assertThat(testIMAPClient.readFirstMessage()).contains(MESSAGE); } -} \ No newline at end of file +} 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 603e008..f370286 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 @@ -117,7 +117,7 @@ class FixingGhostMailboxTest { .workingDirectory(tmpDir) .configurationFromClasspath() .blobStore(BlobStoreConfiguration.builder() - .objectStorage() + .s3() .disableCache() .deduplication()) .searchConfiguration(SearchConfiguration.elasticSearch()) 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 0ce6b26..31f367f 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 @@ -45,7 +45,7 @@ class RabbitMQAuthorizedEndpointsTest extends AuthorizedEndpointsTest { .workingDirectory(tmpDir) .configurationFromClasspath() .blobStore(BlobStoreConfiguration.builder() - .objectStorage() + .s3() .disableCache() .deduplication()) .searchConfiguration(SearchConfiguration.elasticSearch()) @@ -59,4 +59,4 @@ class RabbitMQAuthorizedEndpointsTest extends AuthorizedEndpointsTest { .overrideWith(new WebadminIntegrationTestModule())) .lifeCycle(JamesServerExtension.Lifecycle.PER_CLASS) .build(); -} \ No newline at end of file +} 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 a58794b..840f226 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 @@ -207,7 +207,7 @@ class RabbitMQEventDeadLettersIntegrationTest { .workingDirectory(tmpDir) .configurationFromClasspath() .blobStore(BlobStoreConfiguration.builder() - .objectStorage() + .s3() .disableCache() .deduplication()) .searchConfiguration(SearchConfiguration.elasticSearch()) 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 3ecfa00..187e89c 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 @@ -41,7 +41,7 @@ class RabbitMQFastViewProjectionHealthCheckIntegrationTest extends FastViewProje .workingDirectory(tmpDir) .configurationFromClasspath() .blobStore(BlobStoreConfiguration.builder() - .objectStorage() + .s3() .disableCache() .deduplication()) .searchConfiguration(SearchConfiguration.elasticSearch()) 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 cdf1848..dbeaae4 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 @@ -41,7 +41,7 @@ class RabbitMQForwardIntegrationTest extends ForwardIntegrationTest { .workingDirectory(tmpDir) .configurationFromClasspath() .blobStore(BlobStoreConfiguration.builder() - .objectStorage() + .s3() .disableCache() .deduplication()) .searchConfiguration(SearchConfiguration.elasticSearch()) 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 1a96a6a..a96b4a3 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 @@ -43,7 +43,7 @@ class RabbitMQJwtFilterIntegrationTest extends JwtFilterIntegrationTest { .workingDirectory(tmpDir) .configurationFromClasspath() .blobStore(BlobStoreConfiguration.builder() - .objectStorage() + .s3() .disableCache() .deduplication()) .searchConfiguration(SearchConfiguration.elasticSearch()) 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 8bbb952..11ed8a6 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 @@ -49,7 +49,6 @@ 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; import org.apache.james.utils.WebAdminGuiceProbe; @@ -88,7 +87,7 @@ class RabbitMQReindexingWithEventDeadLettersTest { .workingDirectory(tmpDir) .configurationFromClasspath() .blobStore(BlobStoreConfiguration.builder() - .objectStorage() + .s3() .disableCache() .deduplication()) .searchConfiguration(SearchConfiguration.elasticSearch()) @@ -96,7 +95,7 @@ class RabbitMQReindexingWithEventDeadLettersTest { .extension(dockerElasticSearch) .extension(new CassandraExtension()) .extension(new RabbitMQExtension()) - .extension(new AwsS3BlobStoreExtension(PayloadCodecFactory.AES256)) + .extension(new AwsS3BlobStoreExtension()) .server(configuration -> CassandraRabbitMQJamesServerMain.createServer(configuration) .overrideWith(new TestJMAPServerModule()) .overrideWith(new WebadminIntegrationTestModule()) diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQUnauthorizedEndpointsTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQUnauthorizedEndpointsTest.java index 29cf1d1..45c8fc5 100644 --- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQUnauthorizedEndpointsTest.java +++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQUnauthorizedEndpointsTest.java @@ -71,7 +71,7 @@ class RabbitMQUnauthorizedEndpointsTest extends UnauthorizedEndpointsTest { .workingDirectory(tmpDir) .configurationFromClasspath() .blobStore(BlobStoreConfiguration.builder() - .objectStorage() + .s3() .disableCache() .deduplication()) .searchConfiguration(SearchConfiguration.elasticSearch()) 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 5f8a1fa..f410212 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 @@ -65,7 +65,7 @@ class RabbitMQWebAdminServerIntegrationTest extends WebAdminServerIntegrationTes .workingDirectory(tmpDir) .configurationFromClasspath() .blobStore(BlobStoreConfiguration.builder() - .objectStorage() + .s3() .disableCache() .deduplication()) .searchConfiguration(SearchConfiguration.elasticSearch()) @@ -251,4 +251,4 @@ class RabbitMQWebAdminServerIntegrationTest extends WebAdminServerIntegrationTes .body(containsString("\"tags\":[\"Cassandra Mappings Operations\"]")) .body(containsString("{\"name\":\"MessageIdReIndexing\"}")); } -} \ No newline at end of file +} 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 6ef4410..84b1c7e 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 @@ -104,7 +104,7 @@ class RabbitMQWebAdminServerTaskSerializationIntegrationTest { .workingDirectory(tmpDir) .configurationFromClasspath() .blobStore(BlobStoreConfiguration.builder() - .objectStorage() + .s3() .disableCache() .deduplication()) .searchConfiguration(SearchConfiguration.elasticSearch()) 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 df878ac..82a3123 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 @@ -50,7 +50,7 @@ class RabbitMQDeletedMessageVaultIntegrationTest extends DeletedMessageVaultInte .workingDirectory(tmpDir) .configurationFromClasspath() .blobStore(BlobStoreConfiguration.builder() - .objectStorage() + .s3() .disableCache() .deduplication()) .searchConfiguration(SearchConfiguration.elasticSearch()) 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 bdd5521..1a7f13f 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 @@ -45,7 +45,7 @@ class RabbitMQLinshareBlobExportMechanismIntegrationTest extends LinshareBlobExp .workingDirectory(tmpDir) .configurationFromClasspath() .blobStore(BlobStoreConfiguration.builder() - .objectStorage() + .s3() .disableCache() .deduplication()) .searchConfiguration(SearchConfiguration.elasticSearch()) --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
