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/30 08:27:14 UTC
[james-project] 02/08: JAMES-3319 Add a test ensuring deduplication
blobStore do not accidentaly delete similar blobs
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 9356dac51a836b13973b1499ffb0194b927186f2
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Jul 28 11:43:21 2020 +0700
JAMES-3319 Add a test ensuring deduplication blobStore do not accidentaly delete similar blobs
---
.../queue/rabbitmq/RabbitMQMailQueueTest.java | 64 +++++++++++++++++++---
1 file changed, 57 insertions(+), 7 deletions(-)
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 2da8199..0ae5ebc 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
@@ -56,6 +56,7 @@ import org.apache.james.blob.cassandra.BlobTables;
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.core.builder.MimeMessageBuilder;
import org.apache.james.eventsourcing.eventstore.cassandra.CassandraEventStoreModule;
import org.apache.james.metrics.api.Gauge;
import org.apache.james.queue.api.MailQueue;
@@ -131,7 +132,9 @@ class RabbitMQMailQueueTest {
metricTestSystem,
RabbitMQMailQueueConfiguration.builder()
.sizeMetricsEnabled(true)
- .build());
+ .build(),
+ CassandraBlobStoreFactory.forTesting(cassandra.getConf())
+ .passthrough());
}
@Override
@@ -766,7 +769,9 @@ class RabbitMQMailQueueTest {
metricTestSystem,
RabbitMQMailQueueConfiguration.builder()
.sizeMetricsEnabled(false)
- .build());
+ .build(),
+ CassandraBlobStoreFactory.forTesting(cassandra.getConf())
+ .passthrough());
}
@Test
@@ -776,11 +781,56 @@ class RabbitMQMailQueueTest {
}
}
- private void setUp(CassandraCluster cassandra,
- MailQueueMetricExtension.MailQueueMetricTestSystem metricTestSystem,
- RabbitMQMailQueueConfiguration configuration) throws Exception {
- BlobStore blobStore = CassandraBlobStoreFactory.forTesting(cassandra.getConf())
- .passthrough();
+ @Nested
+ class DeDuplicationTest {
+ @RegisterExtension
+ MailQueueMetricExtension mailQueueMetricExtension = new MailQueueMetricExtension();
+
+ @BeforeEach
+ void setup(CassandraCluster cassandra, MailQueueMetricExtension.MailQueueMetricTestSystem metricTestSystem) throws Exception {
+ setUp(cassandra,
+ metricTestSystem,
+ RabbitMQMailQueueConfiguration.builder()
+ .sizeMetricsEnabled(true)
+ .build(),
+ CassandraBlobStoreFactory.forTesting(cassandra.getConf())
+ .deduplication());
+ }
+
+ @Test
+ void dequeueShouldStillRetrieveAllBlobsWhenIdenticalContentAndDeduplication() throws Exception {
+ Flux<MailQueue.MailQueueItem> dequeueFlux = Flux.from(mailQueue.deQueue());
+ String identicalContent = "identical content";
+ String identicalSubject = "identical subject";
+
+ mailQueue.enQueue(defaultMail()
+ .name("myMail1")
+ .mimeMessage(MimeMessageBuilder.mimeMessageBuilder()
+ .setSubject(identicalSubject)
+ .setText(identicalContent))
+ .build());
+ mailQueue.enQueue(defaultMail()
+ .name("myMail2")
+ .mimeMessage(MimeMessageBuilder.mimeMessageBuilder()
+ .setSubject(identicalSubject)
+ .setText(identicalContent))
+ .build());
+
+ List<MailQueue.MailQueueItem> items = dequeueFlux.take(2)
+ .concatMap(mailQueueItem -> Mono.fromCallable(() -> {
+ mailQueueItem.done(true);
+ return mailQueueItem;
+ }))
+ .collectList()
+ .block(Duration.ofSeconds(10));
+
+ assertThat(items)
+ .allSatisfy(Throwing.consumer(item -> assertThat(item.getMail().getMessage().getContent())
+ .isEqualTo(identicalContent)));
+ }
+ }
+
+ private void setUp(CassandraCluster cassandra, MailQueueMetricExtension.MailQueueMetricTestSystem metricTestSystem, RabbitMQMailQueueConfiguration configuration, BlobStore blobStore) throws Exception {
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