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 ro...@apache.org on 2018/12/19 08:24:41 UTC
[4/8] james-project git commit: JAMES-2608 introduce
CassandraMailRepositoryMailDaoAPI to introduce a v2 implementation later
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 <ma...@apache.org>
Authored: Wed Nov 28 18:37:59 2018 +0100
Committer: Raphael Ouazana <ra...@linagora.com>
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: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org