JAMES-2608 introduce CassandraMailRepositoryMailDaoAPI to introduce a v2 implementation later
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/7a2e552f Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/7a2e552f Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/7a2e552f Branch: refs/heads/master Commit: 7a2e552f3575ad56def379850c1e38637c320771 Parents: d9118f6 Author: Matthieu Baechler <[email protected]> Authored: Wed Nov 28 18:37:59 2018 +0100 Committer: Raphael Ouazana <[email protected]> Committed: Wed Dec 19 09:24:12 2018 +0100 ---------------------------------------------------------------------- .../cassandra/CassandraMailRepository.java | 4 +- .../CassandraMailRepositoryMailDAO.java | 52 +---- .../CassandraMailRepositoryMailDaoAPI.java | 81 +++++++ .../CassandraMailRepositoryProvider.java | 4 +- .../CassandraMailRepositoryMailDAOTest.java | 212 ++++++++++--------- ...ilRepositoryWithFakeImplementationsTest.java | 33 ++- 6 files changed, 232 insertions(+), 154 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/7a2e552f/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepository.java ---------------------------------------------------------------------- diff --git a/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepository.java b/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepository.java index c62feba..6655798 100644 --- a/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepository.java +++ b/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepository.java @@ -43,11 +43,11 @@ public class CassandraMailRepository implements MailRepository { private final MailRepositoryUrl url; private final CassandraMailRepositoryKeysDAO keysDAO; private final CassandraMailRepositoryCountDAO countDAO; - private final CassandraMailRepositoryMailDAO mailDAO; + private final CassandraMailRepositoryMailDaoAPI mailDAO; private final Store<MimeMessage, MimeMessagePartsId> mimeMessageStore; public CassandraMailRepository(MailRepositoryUrl url, CassandraMailRepositoryKeysDAO keysDAO, - CassandraMailRepositoryCountDAO countDAO, CassandraMailRepositoryMailDAO mailDAO, + CassandraMailRepositoryCountDAO countDAO, CassandraMailRepositoryMailDaoAPI mailDAO, Store<MimeMessage, MimeMessagePartsId> mimeMessageStore) { this.url = url; this.keysDAO = keysDAO; http://git-wip-us.apache.org/repos/asf/james-project/blob/7a2e552f/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryMailDAO.java ---------------------------------------------------------------------- diff --git a/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryMailDAO.java b/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryMailDAO.java index 51bbe30..7c3596b 100644 --- a/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryMailDAO.java +++ b/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryMailDAO.java @@ -55,7 +55,6 @@ import java.util.Collection; import java.util.Date; import java.util.List; import java.util.Map; -import java.util.Objects; import java.util.Optional; import java.util.concurrent.CompletableFuture; @@ -82,10 +81,11 @@ import com.datastax.driver.core.Session; import com.datastax.driver.core.UDTValue; import com.github.fge.lambdas.Throwing; import com.github.steveash.guavate.Guavate; +import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; -public class CassandraMailRepositoryMailDAO { +public class CassandraMailRepositoryMailDAO implements CassandraMailRepositoryMailDaoAPI { private final CassandraAsyncExecutor executor; private final PreparedStatement insertMail; @@ -95,8 +95,9 @@ public class CassandraMailRepositoryMailDAO { private final CassandraTypesProvider cassandraTypesProvider; @Inject - public CassandraMailRepositoryMailDAO(Session session, BlobId.Factory blobIdFactory, - CassandraTypesProvider cassandraTypesProvider) { + @VisibleForTesting + CassandraMailRepositoryMailDAO(Session session, BlobId.Factory blobIdFactory, + CassandraTypesProvider cassandraTypesProvider) { this.executor = new CassandraAsyncExecutor(session); this.insertMail = prepareInsert(session); @@ -139,6 +140,7 @@ public class CassandraMailRepositoryMailDAO { .and(eq(MAIL_KEY, bindMarker(MAIL_KEY)))); } + @Override public CompletableFuture<Void> store(MailRepositoryUrl url, Mail mail, BlobId headerId, BlobId bodyId) throws MessagingException { return executor.executeVoid(insertMail.bind() .setString(REPOSITORY_NAME, url.asString()) @@ -158,12 +160,14 @@ public class CassandraMailRepositoryMailDAO { ); } + @Override public CompletableFuture<Void> remove(MailRepositoryUrl url, MailKey key) { return executor.executeVoid(deleteMail.bind() .setString(REPOSITORY_NAME, url.asString()) .setString(MAIL_KEY, key.asString())); } + @Override public CompletableFuture<Optional<MailDTO>> read(MailRepositoryUrl url, MailKey key) { return executor.executeSingleRow(selectMail.bind() .setString(REPOSITORY_NAME, url.asString()) @@ -277,44 +281,4 @@ public class CassandraMailRepositoryMailDAO { } } - public class MailDTO { - private final MailImpl.Builder mailBuilder; - private final BlobId headerBlobId; - private final BlobId bodyBlobId; - - public MailDTO(MailImpl.Builder mailBuilder, BlobId headerBlobId, BlobId bodyBlobId) { - this.mailBuilder = mailBuilder; - this.headerBlobId = headerBlobId; - this.bodyBlobId = bodyBlobId; - } - - public MailImpl.Builder getMailBuilder() { - return mailBuilder; - } - - public BlobId getHeaderBlobId() { - return headerBlobId; - } - - public BlobId getBodyBlobId() { - return bodyBlobId; - } - - @Override - public final boolean equals(Object o) { - if (o instanceof MailDTO) { - MailDTO mailDTO = (MailDTO) o; - - return Objects.equals(this.mailBuilder.build(), mailDTO.mailBuilder.build()) - && Objects.equals(this.headerBlobId, mailDTO.headerBlobId) - && Objects.equals(this.bodyBlobId, mailDTO.bodyBlobId); - } - return false; - } - - @Override - public final int hashCode() { - return Objects.hash(mailBuilder.build(), headerBlobId, bodyBlobId); - } - } } http://git-wip-us.apache.org/repos/asf/james-project/blob/7a2e552f/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryMailDaoAPI.java ---------------------------------------------------------------------- diff --git a/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryMailDaoAPI.java b/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryMailDaoAPI.java new file mode 100644 index 0000000..435bcf1 --- /dev/null +++ b/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryMailDaoAPI.java @@ -0,0 +1,81 @@ +/**************************************************************** + * 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.mailrepository.cassandra; + +import java.util.Objects; +import java.util.Optional; +import java.util.concurrent.CompletableFuture; + +import javax.mail.MessagingException; + +import org.apache.james.blob.api.BlobId; +import org.apache.james.mailrepository.api.MailKey; +import org.apache.james.mailrepository.api.MailRepositoryUrl; +import org.apache.james.server.core.MailImpl; +import org.apache.mailet.Mail; + +public interface CassandraMailRepositoryMailDaoAPI { + CompletableFuture<Void> store(MailRepositoryUrl url, Mail mail, BlobId headerId, BlobId bodyId) throws MessagingException; + + CompletableFuture<Void> remove(MailRepositoryUrl url, MailKey key); + + CompletableFuture<Optional<MailDTO>> read(MailRepositoryUrl url, MailKey key); + + class MailDTO { + private final MailImpl.Builder mailBuilder; + private final BlobId headerBlobId; + private final BlobId bodyBlobId; + + public MailDTO(MailImpl.Builder mailBuilder, BlobId headerBlobId, BlobId bodyBlobId) { + this.mailBuilder = mailBuilder; + this.headerBlobId = headerBlobId; + this.bodyBlobId = bodyBlobId; + } + + public MailImpl.Builder getMailBuilder() { + return mailBuilder; + } + + public BlobId getHeaderBlobId() { + return headerBlobId; + } + + public BlobId getBodyBlobId() { + return bodyBlobId; + } + + @Override + public final boolean equals(Object o) { + if (o instanceof MailDTO) { + MailDTO mailDTO = (MailDTO) o; + + return Objects.equals(this.mailBuilder.build(), mailDTO.mailBuilder.build()) + && Objects.equals(this.headerBlobId, mailDTO.headerBlobId) + && Objects.equals(this.bodyBlobId, mailDTO.bodyBlobId); + } + return false; + } + + @Override + public final int hashCode() { + return Objects.hash(mailBuilder.build(), headerBlobId, bodyBlobId); + } + } +} http://git-wip-us.apache.org/repos/asf/james-project/blob/7a2e552f/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryProvider.java ---------------------------------------------------------------------- diff --git a/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryProvider.java b/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryProvider.java index d5c1077..410c46b 100644 --- a/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryProvider.java +++ b/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryProvider.java @@ -29,12 +29,12 @@ import org.apache.james.mailrepository.api.MailRepositoryUrl; public class CassandraMailRepositoryProvider implements MailRepositoryProvider { private final CassandraMailRepositoryKeysDAO keysDAO; private final CassandraMailRepositoryCountDAO countDAO; - private final CassandraMailRepositoryMailDAO mailDAO; + private final CassandraMailRepositoryMailDaoAPI mailDAO; private final MimeMessageStore.Factory mimeMessageStoreFactory; @Inject public CassandraMailRepositoryProvider(CassandraMailRepositoryKeysDAO keysDAO, CassandraMailRepositoryCountDAO countDAO, - CassandraMailRepositoryMailDAO mailDAO, MimeMessageStore.Factory mimeMessageStoreFactory) { + CassandraMailRepositoryMailDaoAPI mailDAO, MimeMessageStore.Factory mimeMessageStoreFactory) { this.keysDAO = keysDAO; this.countDAO = countDAO; this.mailDAO = mailDAO; http://git-wip-us.apache.org/repos/asf/james-project/blob/7a2e552f/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryMailDAOTest.java ---------------------------------------------------------------------- diff --git a/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryMailDAOTest.java b/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryMailDAOTest.java index de19dee..582a7ba 100644 --- a/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryMailDAOTest.java +++ b/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryMailDAOTest.java @@ -33,6 +33,7 @@ import org.apache.mailet.PerRecipientHeaders; import org.apache.mailet.base.MailAddressFixture; import org.apache.mailet.base.test.FakeMail; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; @@ -46,109 +47,128 @@ class CassandraMailRepositoryMailDAOTest { @RegisterExtension static CassandraClusterExtension cassandraCluster = new CassandraClusterExtension(CassandraMailRepositoryModule.MODULE); - CassandraMailRepositoryMailDAO testee; - @BeforeEach - void setUp(CassandraCluster cassandra) { - testee = new CassandraMailRepositoryMailDAO(cassandra.getConf(), BLOB_ID_FACTORY, cassandra.getTypesProvider()); - } - - @Test - void readShouldReturnEmptyWhenAbsent() { - assertThat(testee.read(URL, KEY_1).join()) - .isEmpty(); - } - - @Test - void readShouldReturnAllMailMetadata() throws Exception { - BlobId blobIdBody = BLOB_ID_FACTORY.from("blobHeader"); - BlobId blobIdHeader = BLOB_ID_FACTORY.from("blobBody"); - String errorMessage = "error message"; - String state = "state"; - String remoteAddr = "remoteAddr"; - String remoteHost = "remoteHost"; - PerRecipientHeaders.Header header = PerRecipientHeaders.Header.builder().name("headerName").value("headerValue").build(); - String attributeName = "att1"; - ImmutableList<String> attributeValue = ImmutableList.of("value1", "value2"); - - testee.store(URL, - FakeMail.builder() - .name(KEY_1.asString()) - .sender(MailAddressFixture.SENDER) - .recipients(MailAddressFixture.RECIPIENT1, MailAddressFixture.RECIPIENT2) - .errorMessage(errorMessage) - .state(state) - .remoteAddr(remoteAddr) - .remoteHost(remoteHost) - .addHeaderForRecipient(header, MailAddressFixture.RECIPIENT1) - .attribute(attributeName, attributeValue) - .build(), - blobIdHeader, - blobIdBody) - .join(); - - CassandraMailRepositoryMailDAO.MailDTO mailDTO = testee.read(URL, KEY_1).join().get(); - - Mail partialMail = mailDTO.getMailBuilder().build(); - assertSoftly(softly -> { - softly.assertThat(mailDTO.getBodyBlobId()).isEqualTo(blobIdBody); - softly.assertThat(mailDTO.getHeaderBlobId()).isEqualTo(blobIdHeader); - softly.assertThat(partialMail.getName()).isEqualTo(KEY_1.asString()); - softly.assertThat(partialMail.getErrorMessage()).isEqualTo(errorMessage); - softly.assertThat(partialMail.getState()).isEqualTo(state); - softly.assertThat(partialMail.getRemoteAddr()).isEqualTo(remoteAddr); - softly.assertThat(partialMail.getRemoteHost()).isEqualTo(remoteHost); - softly.assertThat(partialMail.getAttributeNames()).containsOnly(attributeName); - softly.assertThat(partialMail.getAttribute(attributeName)).isEqualTo(attributeValue); - softly.assertThat(partialMail.getPerRecipientSpecificHeaders().getRecipientsWithSpecificHeaders()) + abstract class TestSuite { + + abstract CassandraMailRepositoryMailDaoAPI testee(); + + @Test + void readShouldReturnAllMailMetadata() throws Exception { + CassandraMailRepositoryMailDaoAPI testee = testee(); + + BlobId blobIdBody = BLOB_ID_FACTORY.from("blobHeader"); + BlobId blobIdHeader = BLOB_ID_FACTORY.from("blobBody"); + String errorMessage = "error message"; + String state = "state"; + String remoteAddr = "remoteAddr"; + String remoteHost = "remoteHost"; + PerRecipientHeaders.Header header = PerRecipientHeaders.Header.builder().name("headerName").value("headerValue").build(); + String attributeName = "att1"; + ImmutableList<String> attributeValue = ImmutableList.of("value1", "value2"); + + testee.store(URL, + FakeMail.builder() + .name(KEY_1.asString()) + .sender(MailAddressFixture.SENDER) + .recipients(MailAddressFixture.RECIPIENT1, MailAddressFixture.RECIPIENT2) + .errorMessage(errorMessage) + .state(state) + .remoteAddr(remoteAddr) + .remoteHost(remoteHost) + .addHeaderForRecipient(header, MailAddressFixture.RECIPIENT1) + .attribute(attributeName, attributeValue) + .build(), + blobIdHeader, + blobIdBody) + .join(); + + CassandraMailRepositoryMailDAO.MailDTO mailDTO = testee.read(URL, KEY_1).join().get(); + + Mail partialMail = mailDTO.getMailBuilder().build(); + assertSoftly(softly -> { + softly.assertThat(mailDTO.getBodyBlobId()).isEqualTo(blobIdBody); + softly.assertThat(mailDTO.getHeaderBlobId()).isEqualTo(blobIdHeader); + softly.assertThat(partialMail.getName()).isEqualTo(KEY_1.asString()); + softly.assertThat(partialMail.getErrorMessage()).isEqualTo(errorMessage); + softly.assertThat(partialMail.getState()).isEqualTo(state); + softly.assertThat(partialMail.getRemoteAddr()).isEqualTo(remoteAddr); + softly.assertThat(partialMail.getRemoteHost()).isEqualTo(remoteHost); + softly.assertThat(partialMail.getAttributeNames()).containsOnly(attributeName); + softly.assertThat(partialMail.getAttribute(attributeName)).isEqualTo(attributeValue); + softly.assertThat(partialMail.getPerRecipientSpecificHeaders().getRecipientsWithSpecificHeaders()) .containsOnly(MailAddressFixture.RECIPIENT1); - softly.assertThat(partialMail.getPerRecipientSpecificHeaders().getHeadersForRecipient(MailAddressFixture.RECIPIENT1)) + softly.assertThat(partialMail.getPerRecipientSpecificHeaders().getHeadersForRecipient(MailAddressFixture.RECIPIENT1)) .containsOnly(header); - softly.assertThat(partialMail.getMaybeSender().asOptional()).contains(MailAddressFixture.SENDER); - softly.assertThat(partialMail.getRecipients()).containsOnly(MailAddressFixture.RECIPIENT1, MailAddressFixture.RECIPIENT2); - }); + softly.assertThat(partialMail.getMaybeSender().asOptional()).contains(MailAddressFixture.SENDER); + softly.assertThat(partialMail.getRecipients()).containsOnly(MailAddressFixture.RECIPIENT1, MailAddressFixture.RECIPIENT2); + }); + } + + @Test + void storeShouldAcceptMailWithOnlyName() throws Exception { + CassandraMailRepositoryMailDaoAPI testee = testee(); + BlobId blobIdBody = BLOB_ID_FACTORY.from("blobHeader"); + BlobId blobIdHeader = BLOB_ID_FACTORY.from("blobBody"); + + testee.store(URL, + FakeMail.builder() + .name(KEY_1.asString()) + .build(), + blobIdHeader, + blobIdBody) + .join(); + + CassandraMailRepositoryMailDAO.MailDTO mailDTO = testee.read(URL, KEY_1).join().get(); + + Mail partialMail = mailDTO.getMailBuilder().build(); + assertSoftly(softly -> { + softly.assertThat(mailDTO.getBodyBlobId()).isEqualTo(blobIdBody); + softly.assertThat(mailDTO.getHeaderBlobId()).isEqualTo(blobIdHeader); + softly.assertThat(partialMail.getName()).isEqualTo(KEY_1.asString()); + }); + } + + @Test + void removeShouldDeleteMailMetaData() throws Exception { + CassandraMailRepositoryMailDaoAPI testee = testee(); + BlobId blobIdBody = BLOB_ID_FACTORY.from("blobHeader"); + BlobId blobIdHeader = BLOB_ID_FACTORY.from("blobBody"); + + testee.store(URL, + FakeMail.builder() + .name(KEY_1.asString()) + .build(), + blobIdHeader, + blobIdBody) + .join(); + + testee.remove(URL, KEY_1).join(); + + assertThat(testee.read(URL, KEY_1).join()) + .isEmpty(); + } + + + @Test + void readShouldReturnEmptyWhenAbsent() { + assertThat(testee().read(URL, KEY_1).join()) + .isEmpty(); + } } - @Test - void storeShouldAcceptMailWithOnlyName() throws Exception { - BlobId blobIdBody = BLOB_ID_FACTORY.from("blobHeader"); - BlobId blobIdHeader = BLOB_ID_FACTORY.from("blobBody"); - - testee.store(URL, - FakeMail.builder() - .name(KEY_1.asString()) - .build(), - blobIdHeader, - blobIdBody) - .join(); - - CassandraMailRepositoryMailDAO.MailDTO mailDTO = testee.read(URL, KEY_1).join().get(); - - Mail partialMail = mailDTO.getMailBuilder().build(); - assertSoftly(softly -> { - softly.assertThat(mailDTO.getBodyBlobId()).isEqualTo(blobIdBody); - softly.assertThat(mailDTO.getHeaderBlobId()).isEqualTo(blobIdHeader); - softly.assertThat(partialMail.getName()).isEqualTo(KEY_1.asString()); - }); - } - - @Test - void removeShouldDeleteMailMetaData() throws Exception { - BlobId blobIdBody = BLOB_ID_FACTORY.from("blobHeader"); - BlobId blobIdHeader = BLOB_ID_FACTORY.from("blobBody"); + @Nested + class v1 extends TestSuite { - testee.store(URL, - FakeMail.builder() - .name(KEY_1.asString()) - .build(), - blobIdHeader, - blobIdBody) - .join(); + private CassandraMailRepositoryMailDAO testee; - testee.remove(URL, KEY_1).join(); + @BeforeEach + void setUp(CassandraCluster cassandra) { + testee = new CassandraMailRepositoryMailDAO(cassandra.getConf(), BLOB_ID_FACTORY, cassandra.getTypesProvider()); + } - assertThat(testee.read(URL, KEY_1).join()) - .isEmpty(); + @Override + CassandraMailRepositoryMailDaoAPI testee() { + return testee; + } } - } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/james-project/blob/7a2e552f/server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryWithFakeImplementationsTest.java ---------------------------------------------------------------------- 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 ce56641..ca2eb2c 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 @@ -24,15 +24,14 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import java.util.List; +import java.util.Optional; import java.util.concurrent.CompletableFuture; -import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; import org.apache.james.backends.cassandra.CassandraCluster; import org.apache.james.backends.cassandra.CassandraClusterExtension; import org.apache.james.backends.cassandra.components.CassandraModule; -import org.apache.james.backends.cassandra.init.CassandraTypesProvider; import org.apache.james.backends.cassandra.utils.CassandraUtils; import org.apache.james.blob.api.BlobId; import org.apache.james.blob.api.HashBlobId; @@ -82,7 +81,7 @@ class CassandraMailRepositoryWithFakeImplementationsTest { @BeforeEach void setup(CassandraCluster cassandra) { - CassandraMailRepositoryMailDAO mailDAO = new CassandraMailRepositoryMailDAO(cassandra.getConf(), BLOB_ID_FACTORY, cassandra.getTypesProvider()); + CassandraMailRepositoryMailDaoAPI mailDAO = new CassandraMailRepositoryMailDAO(cassandra.getConf(), BLOB_ID_FACTORY, cassandra.getTypesProvider()); keysDAO = new CassandraMailRepositoryKeysDAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION); CassandraMailRepositoryCountDAO countDAO = new CassandraMailRepositoryCountDAO(cassandra.getConf()); @@ -134,7 +133,7 @@ class CassandraMailRepositoryWithFakeImplementationsTest { @BeforeEach void setup(CassandraCluster cassandra) { - FailingMailDAO mailDAO = new FailingMailDAO(cassandra.getConf(), BLOB_ID_FACTORY, cassandra.getTypesProvider()); + FailingMailDAO mailDAO = new FailingMailDAO(); keysDAO = new CassandraMailRepositoryKeysDAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION); CassandraMailRepositoryCountDAO countDAO = new CassandraMailRepositoryCountDAO(cassandra.getConf()); CassandraBlobsDAO blobsDAO = new CassandraBlobsDAO(cassandra.getConf()); @@ -143,18 +142,32 @@ class CassandraMailRepositoryWithFakeImplementationsTest { keysDAO, countDAO, mailDAO, MimeMessageStore.factory(blobsDAO).mimeMessageStore()); } - class FailingMailDAO extends CassandraMailRepositoryMailDAO { + class FailingMailDAO implements CassandraMailRepositoryMailDaoAPI { - public FailingMailDAO(Session session, BlobId.Factory blobIdFactory, CassandraTypesProvider cassandraTypesProvider) { - super(session, blobIdFactory, cassandraTypesProvider); + FailingMailDAO() { } @Override - public CompletableFuture<Void> store(MailRepositoryUrl url, Mail mail, BlobId headerId, BlobId bodyId) throws MessagingException { + public CompletableFuture<Void> store(MailRepositoryUrl url, Mail mail, BlobId headerId, BlobId bodyId) { return CompletableFuture.supplyAsync(() -> { throw new RuntimeException("Expected failure while storing mail parts"); }); } + + @Override + public CompletableFuture<Void> remove(MailRepositoryUrl url, MailKey key) { + return CompletableFuture.supplyAsync(() -> { + throw new RuntimeException("Expected failure while remeving mail parts"); + }); + + } + + @Override + public CompletableFuture<Optional<CassandraMailRepositoryMailDAO.MailDTO>> read(MailRepositoryUrl url, MailKey key) { + return CompletableFuture.supplyAsync(() -> { + throw new RuntimeException("Expected failure while reading mail parts"); + }); + } } @Test @@ -205,7 +218,7 @@ class CassandraMailRepositoryWithFakeImplementationsTest { @BeforeEach void setup(CassandraCluster cassandra) { - CassandraMailRepositoryMailDAO mailDAO = new CassandraMailRepositoryMailDAO(cassandra.getConf(), BLOB_ID_FACTORY, cassandra.getTypesProvider()); + 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()); CassandraBlobsDAO blobsDAO = new CassandraBlobsDAO(cassandra.getConf()); @@ -216,7 +229,7 @@ class CassandraMailRepositoryWithFakeImplementationsTest { class FailingKeysDAO extends CassandraMailRepositoryKeysDAO { - public FailingKeysDAO(Session session, CassandraUtils cassandraUtils) { + FailingKeysDAO(Session session, CassandraUtils cassandraUtils) { super(session, cassandraUtils); } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
