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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to