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]
