You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by rc...@apache.org on 2020/07/28 03:20:44 UTC
[james-project] 16/25: JAMES-3319 Tests for CassandraMailRepository
blob deletion
This is an automated email from the ASF dual-hosted git repository.
rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
commit ecbd1c3b5df2fb8fd9f8cb36eadcd1eb5ca419fe
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Fri Jul 24 11:30:05 2020 +0700
JAMES-3319 Tests for CassandraMailRepository blob deletion
Tests are conducted out both on Deduplication & Passthrough BlobStores
---
.../cassandra/mail/CassandraMessageDAOTest.java | 3 +-
.../mailbox/cassandra/mail/utils/GuiceUtils.java | 2 +-
.../blob/cassandra/CassandraBlobStoreFactory.java | 6 +-
.../blob/cassandra/cache/CachedBlobStoreTest.java | 3 +-
.../cassandra/CassandraMailRepositoryTest.java | 100 +++++++++++++++++----
...aMailRepositoryWithFakeImplementationsTest.java | 6 +-
.../RabbitMQMailQueueConfigurationChangeTest.java | 3 +-
.../queue/rabbitmq/RabbitMQMailQueueTest.java | 3 +-
8 files changed, 96 insertions(+), 30 deletions(-)
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOTest.java
index a58595c..7fa6f49 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOTest.java
@@ -86,7 +86,8 @@ class CassandraMessageDAOTest {
void setUp(CassandraCluster cassandra) {
messageIdFactory = new CassandraMessageId.Factory();
messageId = messageIdFactory.generate();
- BlobStore blobStore = CassandraBlobStoreFactory.forTesting(cassandra.getConf());
+ BlobStore blobStore = CassandraBlobStoreFactory.forTesting(cassandra.getConf())
+ .passthrough();
HashBlobId.Factory blobIdFactory = new HashBlobId.Factory();
testee = new CassandraMessageDAO(
cassandra.getConf(),
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/utils/GuiceUtils.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/utils/GuiceUtils.java
index 39e539d..a6d8883 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/utils/GuiceUtils.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/utils/GuiceUtils.java
@@ -59,7 +59,7 @@ public class GuiceUtils {
return Modules.combine(
binder -> binder.bind(MessageId.Factory.class).toInstance(messageIdFactory),
binder -> binder.bind(BlobId.Factory.class).toInstance(new HashBlobId.Factory()),
- binder -> binder.bind(BlobStore.class).toProvider(() -> CassandraBlobStoreFactory.forTesting(session)),
+ binder -> binder.bind(BlobStore.class).toProvider(() -> CassandraBlobStoreFactory.forTesting(session).passthrough()),
binder -> binder.bind(Session.class).toInstance(session),
binder -> binder.bind(CassandraTypesProvider.class).toInstance(typesProvider),
binder -> binder.bind(CassandraConfiguration.class).toInstance(configuration),
diff --git a/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobStoreFactory.java b/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobStoreFactory.java
index f1d0576..5dc2d8f 100644
--- a/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobStoreFactory.java
+++ b/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobStoreFactory.java
@@ -20,7 +20,6 @@
package org.apache.james.blob.cassandra;
import org.apache.james.backends.cassandra.init.configuration.CassandraConfiguration;
-import org.apache.james.blob.api.BlobStore;
import org.apache.james.blob.api.BucketName;
import org.apache.james.blob.api.HashBlobId;
import org.apache.james.server.blob.deduplication.BlobStoreFactory;
@@ -28,14 +27,13 @@ import org.apache.james.server.blob.deduplication.BlobStoreFactory;
import com.datastax.driver.core.Session;
public class CassandraBlobStoreFactory {
- public static BlobStore forTesting(Session session) {
+ public static BlobStoreFactory.RequireStoringStrategy forTesting(Session session) {
HashBlobId.Factory blobIdFactory = new HashBlobId.Factory();
CassandraBucketDAO bucketDAO = new CassandraBucketDAO(blobIdFactory, session);
CassandraDefaultBucketDAO defaultBucketDAO = new CassandraDefaultBucketDAO(session);
CassandraDumbBlobStore dumbBlobStore = new CassandraDumbBlobStore(defaultBucketDAO, bucketDAO, CassandraConfiguration.DEFAULT_CONFIGURATION, BucketName.DEFAULT);
return BlobStoreFactory.builder().dumbBlobStore(dumbBlobStore)
.blobIdFactory(blobIdFactory)
- .defaultBucketName()
- .passthrough();
+ .defaultBucketName();
}
}
diff --git a/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/cache/CachedBlobStoreTest.java b/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/cache/CachedBlobStoreTest.java
index 34ed1be..bf0a405 100644
--- a/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/cache/CachedBlobStoreTest.java
+++ b/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/cache/CachedBlobStoreTest.java
@@ -74,7 +74,8 @@ public class CachedBlobStoreTest implements BlobStoreContract {
@BeforeEach
void setUp(CassandraCluster cassandra) {
- backend = CassandraBlobStoreFactory.forTesting(cassandra.getConf());
+ backend = CassandraBlobStoreFactory.forTesting(cassandra.getConf())
+ .passthrough();
CassandraCacheConfiguration cacheConfig = new CassandraCacheConfiguration.Builder()
.sizeThresholdInBytes(EIGHT_KILOBYTES.length + 1)
.timeOut(Duration.ofSeconds(60))
diff --git a/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryTest.java b/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryTest.java
index 0a3be14..3011e98 100644
--- a/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryTest.java
+++ b/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryTest.java
@@ -19,6 +19,9 @@
package org.apache.james.mailrepository.cassandra;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatCode;
+
import org.apache.james.backends.cassandra.CassandraCluster;
import org.apache.james.backends.cassandra.CassandraClusterExtension;
import org.apache.james.backends.cassandra.components.CassandraModule;
@@ -30,14 +33,16 @@ import org.apache.james.blob.cassandra.CassandraBlobModule;
import org.apache.james.blob.cassandra.CassandraBlobStoreFactory;
import org.apache.james.blob.mail.MimeMessageStore;
import org.apache.james.mailrepository.MailRepositoryContract;
+import org.apache.james.mailrepository.api.MailKey;
import org.apache.james.mailrepository.api.MailRepository;
import org.apache.james.mailrepository.api.MailRepositoryUrl;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
-class CassandraMailRepositoryTest implements MailRepositoryContract {
+class CassandraMailRepositoryTest {
static final MailRepositoryUrl URL = MailRepositoryUrl.from("proto://url");
static final HashBlobId.Factory BLOB_ID_FACTORY = new HashBlobId.Factory();
@@ -50,29 +55,86 @@ class CassandraMailRepositoryTest implements MailRepositoryContract {
CassandraMailRepository cassandraMailRepository;
+ @Nested
+ class PassThroughTest implements MailRepositoryContract {
+ @BeforeEach
+ void setup(CassandraCluster cassandra) {
+ CassandraMailRepositoryMailDAO v1 = new CassandraMailRepositoryMailDAO(cassandra.getConf(), BLOB_ID_FACTORY, cassandra.getTypesProvider());
+ CassandraMailRepositoryMailDaoV2 v2 = new CassandraMailRepositoryMailDaoV2(cassandra.getConf(), BLOB_ID_FACTORY);
+ CassandraMailRepositoryMailDaoAPI mailDAO = new MergingCassandraMailRepositoryMailDao(v1, v2);
+ CassandraMailRepositoryKeysDAO keysDAO = new CassandraMailRepositoryKeysDAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION);
+ CassandraMailRepositoryCountDAO countDAO = new CassandraMailRepositoryCountDAO(cassandra.getConf());
+ BlobStore blobStore = CassandraBlobStoreFactory.forTesting(cassandra.getConf())
+ .passthrough();
- @BeforeEach
- void setup(CassandraCluster cassandra) {
- CassandraMailRepositoryMailDAO v1 = new CassandraMailRepositoryMailDAO(cassandra.getConf(), BLOB_ID_FACTORY, cassandra.getTypesProvider());
- CassandraMailRepositoryMailDaoV2 v2 = new CassandraMailRepositoryMailDaoV2(cassandra.getConf(), BLOB_ID_FACTORY);
- CassandraMailRepositoryMailDaoAPI mailDAO = new MergingCassandraMailRepositoryMailDao(v1, v2);
- CassandraMailRepositoryKeysDAO keysDAO = new CassandraMailRepositoryKeysDAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION);
- CassandraMailRepositoryCountDAO countDAO = new CassandraMailRepositoryCountDAO(cassandra.getConf());
- BlobStore blobStore = CassandraBlobStoreFactory.forTesting(cassandra.getConf());
+ cassandraMailRepository = new CassandraMailRepository(URL,
+ keysDAO, countDAO, mailDAO, MimeMessageStore.factory(blobStore).mimeMessageStore());
+ }
- cassandraMailRepository = new CassandraMailRepository(URL,
- keysDAO, countDAO, mailDAO, MimeMessageStore.factory(blobStore).mimeMessageStore());
- }
+ @Override
+ public MailRepository retrieveRepository() {
+ return cassandraMailRepository;
+ }
+
+ @Test
+ @Disabled("key is unique in Cassandra")
+ @Override
+ public void sizeShouldBeIncrementedByOneWhenDuplicates() {
+ }
+
+ @Disabled("Failing")
+ @Test
+ void removeShouldDeleteStoredBlobs(CassandraCluster cassandra) throws Exception {
+ MailRepository testee = retrieveRepository();
- @Override
- public MailRepository retrieveRepository() {
- return cassandraMailRepository;
+ MailKey key1 = testee.store(createMail(MAIL_1));
+
+ testee.remove(key1);
+
+ assertThat(cassandra.getConf().execute("SELECT * FROM blobs;"))
+ .isEmpty();
+ }
}
- @Test
- @Disabled("key is unique in Cassandra")
- @Override
- public void sizeShouldBeIncrementedByOneWhenDuplicates() {
+ @Nested
+ class DeDuplicationTest implements MailRepositoryContract {
+ @BeforeEach
+ void setup(CassandraCluster cassandra) {
+ CassandraMailRepositoryMailDAO v1 = new CassandraMailRepositoryMailDAO(cassandra.getConf(), BLOB_ID_FACTORY, cassandra.getTypesProvider());
+ CassandraMailRepositoryMailDaoV2 v2 = new CassandraMailRepositoryMailDaoV2(cassandra.getConf(), BLOB_ID_FACTORY);
+ CassandraMailRepositoryMailDaoAPI mailDAO = new MergingCassandraMailRepositoryMailDao(v1, v2);
+ CassandraMailRepositoryKeysDAO keysDAO = new CassandraMailRepositoryKeysDAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION);
+ CassandraMailRepositoryCountDAO countDAO = new CassandraMailRepositoryCountDAO(cassandra.getConf());
+ BlobStore blobStore = CassandraBlobStoreFactory.forTesting(cassandra.getConf())
+ .deduplication();
+
+ cassandraMailRepository = new CassandraMailRepository(URL,
+ keysDAO, countDAO, mailDAO, MimeMessageStore.factory(blobStore).mimeMessageStore());
+ }
+
+ @Override
+ public MailRepository retrieveRepository() {
+ return cassandraMailRepository;
+ }
+
+ @Test
+ @Disabled("key is unique in Cassandra")
+ @Override
+ public void sizeShouldBeIncrementedByOneWhenDuplicates() {
+ }
+
+ @Test
+ void removeShouldNotAffectMailsWithTheSameContent() throws Exception {
+ MailRepository testee = retrieveRepository();
+
+ MailKey key1 = testee.store(createMail(MAIL_1));
+ MailKey key2 = testee.store(createMail(MAIL_2));
+
+ testee.remove(key1);
+
+ assertThatCode(() -> testee.retrieve(key2))
+ .doesNotThrowAnyException();
+ }
}
}
\ No newline at end of file
diff --git a/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryWithFakeImplementationsTest.java b/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryWithFakeImplementationsTest.java
index 648a6e9..60f6ad9 100644
--- a/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryWithFakeImplementationsTest.java
+++ b/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryWithFakeImplementationsTest.java
@@ -128,7 +128,8 @@ class CassandraMailRepositoryWithFakeImplementationsTest {
FailingMailDAO mailDAO = new FailingMailDAO();
keysDAO = new CassandraMailRepositoryKeysDAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION);
CassandraMailRepositoryCountDAO countDAO = new CassandraMailRepositoryCountDAO(cassandra.getConf());
- BlobStore blobStore = CassandraBlobStoreFactory.forTesting(cassandra.getConf());
+ BlobStore blobStore = CassandraBlobStoreFactory.forTesting(cassandra.getConf())
+ .passthrough();
cassandraMailRepository = new CassandraMailRepository(URL,
keysDAO, countDAO, mailDAO, MimeMessageStore.factory(blobStore).mimeMessageStore());
@@ -213,7 +214,8 @@ class CassandraMailRepositoryWithFakeImplementationsTest {
CassandraMailRepositoryMailDaoAPI mailDAO = new CassandraMailRepositoryMailDAO(cassandra.getConf(), BLOB_ID_FACTORY, cassandra.getTypesProvider());
FailingKeysDAO keysDAO = new FailingKeysDAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION);
countDAO = new CassandraMailRepositoryCountDAO(cassandra.getConf());
- BlobStore blobStore = CassandraBlobStoreFactory.forTesting(cassandra.getConf());
+ BlobStore blobStore = CassandraBlobStoreFactory.forTesting(cassandra.getConf())
+ .passthrough();
cassandraMailRepository = new CassandraMailRepository(URL,
keysDAO, countDAO, mailDAO, MimeMessageStore.factory(blobStore).mimeMessageStore());
diff --git a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java
index a863ef8..6831937 100644
--- a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java
+++ b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java
@@ -94,7 +94,8 @@ class RabbitMQMailQueueConfigurationChangeTest {
@BeforeEach
void setup(CassandraCluster cassandra) throws Exception {
- BlobStore blobStore = CassandraBlobStoreFactory.forTesting(cassandra.getConf());
+ BlobStore blobStore = CassandraBlobStoreFactory.forTesting(cassandra.getConf())
+ .passthrough();
mimeMessageStoreFactory = MimeMessageStore.factory(blobStore);
clock = new UpdatableTickingClock(IN_SLICE_1);
mqManagementApi = new RabbitMQMailQueueManagement(rabbitMQExtension.managementAPI());
diff --git a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java
index c6d0691..a8b044d 100644
--- a/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java
+++ b/server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java
@@ -702,7 +702,8 @@ class RabbitMQMailQueueTest {
private void setUp(CassandraCluster cassandra,
MailQueueMetricExtension.MailQueueMetricTestSystem metricTestSystem,
RabbitMQMailQueueConfiguration configuration) throws Exception {
- BlobStore blobStore = CassandraBlobStoreFactory.forTesting(cassandra.getConf());
+ BlobStore blobStore = CassandraBlobStoreFactory.forTesting(cassandra.getConf())
+ .passthrough();
MimeMessageStore.Factory mimeMessageStoreFactory = MimeMessageStore.factory(blobStore);
clock = new UpdatableTickingClock(IN_SLICE_1);
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org