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/28 03:20:48 UTC
[james-project] 20/25: JAMES-3319 Rely on Cassandra instrumentation
for CassandraMailRepository failure tests
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 948f29a396b55ab773467f7f7aa7ce439fdf4985
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Fri Jul 24 11:55:09 2020 +0700
JAMES-3319 Rely on Cassandra instrumentation for CassandraMailRepository failure tests
---
...aMailRepositoryWithFakeImplementationsTest.java | 155 +++++++--------------
1 file changed, 50 insertions(+), 105 deletions(-)
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 2f0873a..027f1e9 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,14 +24,11 @@ import static org.apache.james.backends.cassandra.Scenario.Builder.fail;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
-import java.util.Optional;
-
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.utils.CassandraUtils;
import org.apache.james.backends.cassandra.versions.CassandraSchemaVersionModule;
-import org.apache.james.blob.api.BlobId;
import org.apache.james.blob.api.BlobStore;
import org.apache.james.blob.api.HashBlobId;
import org.apache.james.blob.cassandra.BlobTables;
@@ -39,19 +36,14 @@ 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.mailrepository.api.MailKey;
import org.apache.james.mailrepository.api.MailRepositoryUrl;
import org.apache.james.server.core.MailImpl;
-import org.apache.mailet.Mail;
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;
import com.datastax.driver.core.ResultSet;
-import com.datastax.driver.core.Session;
-
-import reactor.core.publisher.Mono;
class CassandraMailRepositoryWithFakeImplementationsTest {
@RegisterExtension
@@ -64,23 +56,25 @@ class CassandraMailRepositoryWithFakeImplementationsTest {
private static final MailRepositoryUrl URL = MailRepositoryUrl.from("proto://url");
private static final HashBlobId.Factory BLOB_ID_FACTORY = new HashBlobId.Factory();
+
+ CassandraMailRepository cassandraMailRepository;
+ CassandraMailRepositoryCountDAO countDAO;
+ CassandraMailRepositoryKeysDAO keysDAO;
+
+ @BeforeEach
+ void setup(CassandraCluster cassandra) {
+ CassandraMailRepositoryMailDaoAPI mailDAO = new CassandraMailRepositoryMailDAO(cassandra.getConf(), BLOB_ID_FACTORY, cassandra.getTypesProvider());
+ keysDAO = new CassandraMailRepositoryKeysDAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION);
+ countDAO = new CassandraMailRepositoryCountDAO(cassandra.getConf());
+ BlobStore blobStore = CassandraBlobStoreFactory.forTesting(cassandra.getConf())
+ .passthrough();
+
+ cassandraMailRepository = new CassandraMailRepository(URL,
+ keysDAO, countDAO, mailDAO, MimeMessageStore.factory(blobStore).mimeMessageStore());
+ }
+
@Nested
class FailingStoreTest {
- CassandraMailRepository cassandraMailRepository;
- CassandraMailRepositoryKeysDAO keysDAO;
-
- @BeforeEach
- void setup(CassandraCluster cassandra) {
- 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());
- BlobStore blobStore = CassandraBlobStoreFactory.forTesting(cassandra.getConf())
- .deduplication();
-
- cassandraMailRepository = new CassandraMailRepository(URL,
- keysDAO, countDAO, mailDAO, MimeMessageStore.factory(blobStore).mimeMessageStore());
- }
-
@Test
void keysShouldNotBeStoredWhenStoringMimeMessageHasFailed(CassandraCluster cassandra) throws Exception {
cassandra.getConf()
@@ -101,8 +95,7 @@ class CassandraMailRepositoryWithFakeImplementationsTest {
.build();
assertThatThrownBy(() -> cassandraMailRepository.store(mail))
- .isInstanceOf(RuntimeException.class)
- .hasMessage("Injected failure");
+ .isInstanceOf(RuntimeException.class);
assertThat(keysDAO.list(URL).collectList().block()).isEmpty();
}
@@ -110,47 +103,13 @@ class CassandraMailRepositoryWithFakeImplementationsTest {
@Nested
class FailingMailDaoTest {
- CassandraMailRepository cassandraMailRepository;
- CassandraMailRepositoryKeysDAO keysDAO;
-
- @BeforeEach
- void setup(CassandraCluster cassandra) {
- FailingMailDAO mailDAO = new FailingMailDAO();
- keysDAO = new CassandraMailRepositoryKeysDAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION);
- CassandraMailRepositoryCountDAO countDAO = new CassandraMailRepositoryCountDAO(cassandra.getConf());
- BlobStore blobStore = CassandraBlobStoreFactory.forTesting(cassandra.getConf())
- .passthrough();
-
- cassandraMailRepository = new CassandraMailRepository(URL,
- keysDAO, countDAO, mailDAO, MimeMessageStore.factory(blobStore).mimeMessageStore());
- }
-
- class FailingMailDAO implements CassandraMailRepositoryMailDaoAPI {
-
- FailingMailDAO() {
- }
-
- @Override
- public Mono<Void> store(MailRepositoryUrl url, Mail mail, BlobId headerId, BlobId bodyId) {
- return Mono.error(new RuntimeException("Expected failure while storing mail parts"));
- }
-
- @Override
- public Mono<Void> remove(MailRepositoryUrl url, MailKey key) {
- return Mono.fromCallable(() -> {
- throw new RuntimeException("Expected failure while removing mail parts");
- });
-
- }
-
- @Override
- public Mono<Optional<CassandraMailRepositoryMailDAO.MailDTO>> read(MailRepositoryUrl url, MailKey key) {
- return Mono.error(new RuntimeException("Expected failure while reading mail parts"));
- }
- }
-
@Test
- void keysShouldNotBeStoredWhenStoringMailPartsHasFailed() throws Exception {
+ void keysShouldNotBeStoredWhenStoringMailPartsHasFailed(CassandraCluster cassandra) throws Exception {
+ cassandra.getConf()
+ .registerScenario(fail()
+ .forever()
+ .whenQueryStartsWith("INSERT INTO mailRepositoryContent"));
+
MailImpl mail = MailImpl.builder()
.name("mymail")
.sender("sender@localhost")
@@ -164,14 +123,18 @@ class CassandraMailRepositoryWithFakeImplementationsTest {
.build();
assertThatThrownBy(() -> cassandraMailRepository.store(mail))
- .isInstanceOf(RuntimeException.class)
- .hasMessage("Expected failure while storing mail parts");
+ .isInstanceOf(RuntimeException.class);
assertThat(keysDAO.list(URL).collectList().block()).isEmpty();
}
@Test
void mimeMessageShouldBeStoredWhenStoringMailPartsHasFailed(CassandraCluster cassandra) throws Exception {
+ cassandra.getConf()
+ .registerScenario(fail()
+ .forever()
+ .whenQueryStartsWith("INSERT INTO mailRepositoryContent"));
+
MailImpl mail = MailImpl.builder()
.name("mymail")
.sender("sender@localhost")
@@ -185,8 +148,7 @@ class CassandraMailRepositoryWithFakeImplementationsTest {
.build();
assertThatThrownBy(() -> cassandraMailRepository.store(mail))
- .isInstanceOf(RuntimeException.class)
- .hasMessage("Expected failure while storing mail parts");
+ .isInstanceOf(RuntimeException.class);
ResultSet resultSet = cassandra.getConf().execute(select()
.from(BlobTables.DefaultBucketBlobTable.TABLE_NAME));
@@ -196,37 +158,13 @@ class CassandraMailRepositoryWithFakeImplementationsTest {
@Nested
class FailingKeysDaoTest {
- CassandraMailRepository cassandraMailRepository;
- CassandraMailRepositoryCountDAO countDAO;
-
- @BeforeEach
- void setup(CassandraCluster cassandra) {
- 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());
- BlobStore blobStore = CassandraBlobStoreFactory.forTesting(cassandra.getConf())
- .passthrough();
-
- cassandraMailRepository = new CassandraMailRepository(URL,
- keysDAO, countDAO, mailDAO, MimeMessageStore.factory(blobStore).mimeMessageStore());
- }
-
- class FailingKeysDAO extends CassandraMailRepositoryKeysDAO {
-
- FailingKeysDAO(Session session, CassandraUtils cassandraUtils) {
- super(session, cassandraUtils);
- }
-
- @Override
- public Mono<Boolean> store(MailRepositoryUrl url, MailKey key) {
- return Mono.fromCallable(() -> {
- throw new RuntimeException("Expected failure while storing keys");
- });
- }
- }
-
@Test
- void sizeShouldNotBeIncreasedWhenStoringKeysHasFailed() throws Exception {
+ void sizeShouldNotBeIncreasedWhenStoringKeysHasFailed(CassandraCluster cassandra) throws Exception {
+ cassandra.getConf()
+ .registerScenario(fail()
+ .forever()
+ .whenQueryStartsWith("INSERT INTO mailRepositoryKeys (name,mailKey)"));
+
MailImpl mail = MailImpl.builder()
.name("mymail")
.sender("sender@localhost")
@@ -240,14 +178,18 @@ class CassandraMailRepositoryWithFakeImplementationsTest {
.build();
assertThatThrownBy(() -> cassandraMailRepository.store(mail))
- .isInstanceOf(RuntimeException.class)
- .hasMessage("Expected failure while storing keys");
+ .isInstanceOf(RuntimeException.class);
assertThat(countDAO.getCount(URL).block()).isEqualTo(0);
}
@Test
void mimeMessageShouldBeStoredWhenStoringKeysHasFailed(CassandraCluster cassandra) throws Exception {
+ cassandra.getConf()
+ .registerScenario(fail()
+ .forever()
+ .whenQueryStartsWith("INSERT INTO mailRepositoryKeys (name,mailKey)"));
+
MailImpl mail = MailImpl.builder()
.name("mymail")
.sender("sender@localhost")
@@ -261,8 +203,7 @@ class CassandraMailRepositoryWithFakeImplementationsTest {
.build();
assertThatThrownBy(() -> cassandraMailRepository.store(mail))
- .isInstanceOf(RuntimeException.class)
- .hasMessage("Expected failure while storing keys");
+ .isInstanceOf(RuntimeException.class);
ResultSet resultSet = cassandra.getConf().execute(select()
.from(BlobTables.DefaultBucketBlobTable.TABLE_NAME));
@@ -271,6 +212,11 @@ class CassandraMailRepositoryWithFakeImplementationsTest {
@Test
void mailPartsShouldBeStoredWhenStoringKeysHasFailed(CassandraCluster cassandra) throws Exception {
+ cassandra.getConf()
+ .registerScenario(fail()
+ .forever()
+ .whenQueryStartsWith("INSERT INTO mailRepositoryKeys (name,mailKey)"));
+
MailImpl mail = MailImpl.builder()
.name("mymail")
.sender("sender@localhost")
@@ -284,8 +230,7 @@ class CassandraMailRepositoryWithFakeImplementationsTest {
.build();
assertThatThrownBy(() -> cassandraMailRepository.store(mail))
- .isInstanceOf(RuntimeException.class)
- .hasMessage("Expected failure while storing keys");
+ .isInstanceOf(RuntimeException.class);
ResultSet resultSet = cassandra.getConf().execute(select()
.from(MailRepositoryTable.CONTENT_TABLE_NAME));
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org