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 bt...@apache.org on 2020/02/27 03:32:10 UTC
[james-project] 03/08: JAMES-3058 Add
CassandraMailboxPathV2DAO::listAll
This is an automated email from the ASF dual-hosted git repository.
btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
commit ff3bfac67c14ea96fddc844ab52f928a89bf626a
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Thu Feb 13 13:17:50 2020 +0700
JAMES-3058 Add CassandraMailboxPathV2DAO::listAll
This will be required for iterating DAO entries while looking for
inconsistencies
---
.../cassandra/mail/CassandraMailboxPathV2DAO.java | 19 ++++++++--
.../mail/CassandraMailboxPathDAOImplTest.java | 4 +--
.../mail/CassandraMailboxPathDAOTest.java | 6 ++--
.../mail/CassandraMailboxPathV2DAOTest.java | 41 ++++++++++++++++++++--
4 files changed, 61 insertions(+), 9 deletions(-)
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathV2DAO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathV2DAO.java
index 38a0448..8b4c05d 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathV2DAO.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathV2DAO.java
@@ -58,6 +58,7 @@ public class CassandraMailboxPathV2DAO implements CassandraMailboxPathDAO {
private final PreparedStatement delete;
private final PreparedStatement insert;
private final PreparedStatement select;
+ private final PreparedStatement selectUser;
private final PreparedStatement selectAll;
@Inject
@@ -67,6 +68,7 @@ public class CassandraMailboxPathV2DAO implements CassandraMailboxPathDAO {
this.insert = prepareInsert(session);
this.delete = prepareDelete(session);
this.select = prepareSelect(session);
+ this.selectUser = prepareSelectUser(session);
this.selectAll = prepareSelectAll(session);
}
@@ -96,13 +98,18 @@ public class CassandraMailboxPathV2DAO implements CassandraMailboxPathDAO {
.and(eq(MAILBOX_NAME, bindMarker(MAILBOX_NAME))));
}
- private PreparedStatement prepareSelectAll(Session session) {
+ private PreparedStatement prepareSelectUser(Session session) {
return session.prepare(select(FIELDS)
.from(TABLE_NAME)
.where(eq(NAMESPACE, bindMarker(NAMESPACE)))
.and(eq(USER, bindMarker(USER))));
}
+ private PreparedStatement prepareSelectAll(Session session) {
+ return session.prepare(select(FIELDS)
+ .from(TABLE_NAME));
+ }
+
@Override
public Mono<CassandraIdAndPath> retrieveId(MailboxPath mailboxPath) {
return cassandraAsyncExecutor.executeSingleRow(
@@ -118,7 +125,7 @@ public class CassandraMailboxPathV2DAO implements CassandraMailboxPathDAO {
@Override
public Flux<CassandraIdAndPath> listUserMailboxes(String namespace, Username user) {
return cassandraAsyncExecutor.execute(
- selectAll.bind()
+ selectUser.bind()
.setString(NAMESPACE, namespace)
.setString(USER, sanitizeUser(user)))
.flatMapMany(resultSet -> cassandraUtils.convertToFlux(resultSet)
@@ -126,6 +133,14 @@ public class CassandraMailboxPathV2DAO implements CassandraMailboxPathDAO {
.map(FunctionalUtils.toFunction(this::logReadSuccess)));
}
+ public Flux<CassandraIdAndPath> listAll() {
+ return cassandraAsyncExecutor.execute(
+ selectAll.bind())
+ .flatMapMany(resultSet -> cassandraUtils.convertToFlux(resultSet)
+ .map(this::fromRowToCassandraIdAndPath)
+ .map(FunctionalUtils.toFunction(this::logReadSuccess)));
+ }
+
/**
* See https://issues.apache.org/jira/browse/MAILBOX-322 to read about the Ghost mailbox bug.
*
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathDAOImplTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathDAOImplTest.java
index 3a40381..c310d71 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathDAOImplTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathDAOImplTest.java
@@ -24,10 +24,10 @@ import static org.assertj.core.api.Assertions.assertThat;
import org.apache.james.backends.cassandra.CassandraCluster;
import org.junit.jupiter.api.Test;
-class CassandraMailboxPathDAOImplTest extends CassandraMailboxPathDAOTest {
+class CassandraMailboxPathDAOImplTest extends CassandraMailboxPathDAOTest<CassandraMailboxPathDAOImpl> {
@Override
- CassandraMailboxPathDAO testee(CassandraCluster cassandra) {
+ CassandraMailboxPathDAOImpl testee(CassandraCluster cassandra) {
return new CassandraMailboxPathDAOImpl(cassandra.getConf(), cassandra.getTypesProvider());
}
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathDAOTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathDAOTest.java
index 62c4026..fc00da1 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathDAOTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathDAOTest.java
@@ -37,7 +37,7 @@ import org.junit.jupiter.api.extension.RegisterExtension;
import nl.jqno.equalsverifier.EqualsVerifier;
-public abstract class CassandraMailboxPathDAOTest {
+public abstract class CassandraMailboxPathDAOTest<T extends CassandraMailboxPathDAO> {
private static final Username USER = Username.of("user");
private static final Username OTHER_USER = Username.of("other");
@@ -53,9 +53,9 @@ public abstract class CassandraMailboxPathDAOTest {
static CassandraClusterExtension cassandraCluster = new CassandraClusterExtension(CassandraModule.aggregateModules(
CassandraMailboxModule.MODULE, CassandraSchemaVersionModule.MODULE));
- protected CassandraMailboxPathDAO testee;
+ protected T testee;
- abstract CassandraMailboxPathDAO testee(CassandraCluster cassandra);
+ abstract T testee(CassandraCluster cassandra);
@BeforeEach
void setUp(CassandraCluster cassandra) {
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathV2DAOTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathV2DAOTest.java
index 1bfcffc..4e6e40f 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathV2DAOTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathV2DAOTest.java
@@ -19,12 +19,49 @@
package org.apache.james.mailbox.cassandra.mail;
+import static org.assertj.core.api.Assertions.assertThat;
+
import org.apache.james.backends.cassandra.CassandraCluster;
import org.apache.james.backends.cassandra.utils.CassandraUtils;
+import org.junit.jupiter.api.Test;
-class CassandraMailboxPathV2DAOTest extends CassandraMailboxPathDAOTest {
+class CassandraMailboxPathV2DAOTest extends CassandraMailboxPathDAOTest<CassandraMailboxPathV2DAO> {
@Override
- CassandraMailboxPathDAO testee(CassandraCluster cassandra) {
+ CassandraMailboxPathV2DAO testee(CassandraCluster cassandra) {
return new CassandraMailboxPathV2DAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION);
}
+
+ @Test
+ void listAllShouldBeEmptyByDefault() {
+ assertThat(testee.listAll().collectList().block()).isEmpty();
+ }
+
+ @Test
+ void listAllShouldContainAddedEntry() {
+ testee.save(USER_INBOX_MAILBOXPATH, INBOX_ID).block();
+
+ assertThat(testee.listAll().collectList().block())
+ .containsExactlyInAnyOrder(INBOX_ID_AND_PATH);
+ }
+
+ @Test
+ void listAllShouldNotContainDeletedEntry() {
+ testee.save(USER_INBOX_MAILBOXPATH, INBOX_ID).block();
+
+ testee.delete(USER_INBOX_MAILBOXPATH).block();
+
+ assertThat(testee.listAll().collectList().block())
+ .isEmpty();
+ }
+
+ @Test
+ void listAllShouldContainAddedEntries() {
+ testee.save(USER_INBOX_MAILBOXPATH, INBOX_ID).block();
+ testee.save(OTHER_USER_MAILBOXPATH, otherMailboxId).block();
+
+ assertThat(testee.listAll().collectList().block())
+ .containsExactlyInAnyOrder(
+ INBOX_ID_AND_PATH,
+ new CassandraIdAndPath(otherMailboxId, OTHER_USER_MAILBOXPATH));
+ }
}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org