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/03/04 08:03:51 UTC
[james-project] 05/09: JAMES-2897 Avoid an interface joining
together the two mailboxDAO
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 9832ab8bf39784918389c886cf645143b89c8837
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Mon Mar 2 10:53:31 2020 +0700
JAMES-2897 Avoid an interface joining together the two mailboxDAO
The older one is not supposed to be written to.
---
.../mail/CassandraMailboxPathDAOImpl.java | 8 +-
.../cassandra/mail/CassandraMailboxPathV2DAO.java | 8 +-
.../mail/CassandraMailboxPathDAOImplTest.java | 110 +++++++++++++++---
.../mail/CassandraMailboxPathDAOTest.java | 128 ---------------------
.../mail/CassandraMailboxPathV2DAOTest.java | 95 ++++++++++++++-
.../mailbox/cassandra/mail/MailboxFixture.java} | 28 ++---
6 files changed, 199 insertions(+), 178 deletions(-)
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathDAOImpl.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathDAOImpl.java
index d9ba8a4..b795777 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathDAOImpl.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathDAOImpl.java
@@ -54,7 +54,7 @@ import com.google.common.annotations.VisibleForTesting;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
-public class CassandraMailboxPathDAOImpl implements CassandraMailboxPathDAO {
+public class CassandraMailboxPathDAOImpl {
private static final int FIRST_CELL = 0;
@@ -135,7 +135,6 @@ public class CassandraMailboxPathDAOImpl implements CassandraMailboxPathDAO {
.switchIfEmpty(ReactorUtils.executeAndEmpty(() -> logGhostMailboxFailure(mailboxPath)));
}
- @Override
public Flux<CassandraIdAndPath> listUserMailboxes(String namespace, Username user) {
return cassandraAsyncExecutor.execute(
selectAllForUser.bind()
@@ -151,12 +150,10 @@ public class CassandraMailboxPathDAOImpl implements CassandraMailboxPathDAO {
* A missed read on an existing mailbox is the cause of the ghost mailbox bug. Here we log missing reads. Successful
* reads and write operations are also added in order to allow audit in order to know if the mailbox existed.
*/
- @Override
public void logGhostMailboxSuccess(CassandraIdAndPath value) {
logReadSuccess(value);
}
- @Override
public void logGhostMailboxFailure(MailboxPath mailboxPath) {
GhostMailbox.logger()
.addField(GhostMailbox.MAILBOX_NAME, mailboxPath)
@@ -187,7 +184,7 @@ public class CassandraMailboxPathDAOImpl implements CassandraMailboxPathDAO {
row.getString(MAILBOX_NAME)));
}
- @Override
+ @VisibleForTesting
public Mono<Boolean> save(MailboxPath mailboxPath, CassandraId mailboxId) {
return cassandraAsyncExecutor.executeReturnApplied(insert.bind()
.setUDTValue(NAMESPACE_AND_USER, mailboxBaseTupleUtil.createMailboxBaseUDT(mailboxPath.getNamespace(), mailboxPath.getUser()))
@@ -195,7 +192,6 @@ public class CassandraMailboxPathDAOImpl implements CassandraMailboxPathDAO {
.setUUID(MAILBOX_ID, mailboxId.asUuid()));
}
- @Override
public Mono<Void> delete(MailboxPath mailboxPath) {
return cassandraAsyncExecutor.executeVoid(delete.bind()
.setUDTValue(NAMESPACE_AND_USER, mailboxBaseTupleUtil.createMailboxBaseUDT(mailboxPath.getNamespace(), mailboxPath.getUser()))
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 7324431..f105013 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
@@ -51,7 +51,7 @@ import com.datastax.driver.core.querybuilder.QueryBuilder;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
-public class CassandraMailboxPathV2DAO implements CassandraMailboxPathDAO {
+public class CassandraMailboxPathV2DAO {
private final CassandraAsyncExecutor cassandraAsyncExecutor;
private final CassandraUtils cassandraUtils;
private final PreparedStatement delete;
@@ -109,7 +109,6 @@ public class CassandraMailboxPathV2DAO implements CassandraMailboxPathDAO {
.from(TABLE_NAME));
}
- @Override
public Mono<CassandraIdAndPath> retrieveId(MailboxPath mailboxPath) {
return cassandraAsyncExecutor.executeSingleRow(
select.bind()
@@ -122,7 +121,6 @@ public class CassandraMailboxPathV2DAO implements CassandraMailboxPathDAO {
.switchIfEmpty(ReactorUtils.executeAndEmpty(() -> logGhostMailboxFailure(mailboxPath)));
}
- @Override
public Flux<CassandraIdAndPath> listUserMailboxes(String namespace, Username user) {
return cassandraAsyncExecutor.execute(
selectUser.bind()
@@ -148,12 +146,10 @@ public class CassandraMailboxPathV2DAO implements CassandraMailboxPathDAO {
* A missed read on an existing mailbox is the cause of the ghost mailbox bug. Here we log missing reads. Successful
* reads and write operations are also added in order to allow audit in order to know if the mailbox existed.
*/
- @Override
public void logGhostMailboxSuccess(CassandraIdAndPath value) {
logReadSuccess(value);
}
- @Override
public void logGhostMailboxFailure(MailboxPath mailboxPath) {
GhostMailbox.logger()
.addField(GhostMailbox.MAILBOX_NAME, mailboxPath)
@@ -183,7 +179,6 @@ public class CassandraMailboxPathV2DAO implements CassandraMailboxPathDAO {
row.getString(MAILBOX_NAME)));
}
- @Override
public Mono<Boolean> save(MailboxPath mailboxPath, CassandraId mailboxId) {
return cassandraAsyncExecutor.executeReturnApplied(insert.bind()
.setString(NAMESPACE, mailboxPath.getNamespace())
@@ -192,7 +187,6 @@ public class CassandraMailboxPathV2DAO implements CassandraMailboxPathDAO {
.setUUID(MAILBOX_ID, mailboxId.asUuid()));
}
- @Override
public Mono<Void> delete(MailboxPath mailboxPath) {
return cassandraAsyncExecutor.executeVoid(delete.bind()
.setString(NAMESPACE, mailboxPath.getNamespace())
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 c310d71..0926921 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
@@ -19,35 +19,117 @@
package org.apache.james.mailbox.cassandra.mail;
+import static org.apache.james.mailbox.cassandra.mail.MailboxFixture.INBOX_ID;
+import static org.apache.james.mailbox.cassandra.mail.MailboxFixture.INBOX_ID_AND_PATH;
+import static org.apache.james.mailbox.cassandra.mail.MailboxFixture.OTHER_USER_MAILBOXPATH;
+import static org.apache.james.mailbox.cassandra.mail.MailboxFixture.OUTBOX_ID;
+import static org.apache.james.mailbox.cassandra.mail.MailboxFixture.USER_INBOX_MAILBOXPATH;
+import static org.apache.james.mailbox.cassandra.mail.MailboxFixture.USER_OUTBOX_MAILBOXPATH;
+import static org.apache.james.mailbox.cassandra.mail.MailboxFixture.otherMailboxId;
import static org.assertj.core.api.Assertions.assertThat;
+import java.util.List;
+
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.versions.CassandraSchemaVersionModule;
+import org.apache.james.mailbox.cassandra.modules.CassandraMailboxModule;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+import nl.jqno.equalsverifier.EqualsVerifier;
+
+class CassandraMailboxPathDAOImplTest {
+ @RegisterExtension
+ static CassandraClusterExtension cassandraCluster = new CassandraClusterExtension(CassandraModule.aggregateModules(
+ CassandraMailboxModule.MODULE, CassandraSchemaVersionModule.MODULE));
-class CassandraMailboxPathDAOImplTest extends CassandraMailboxPathDAOTest<CassandraMailboxPathDAOImpl> {
+ CassandraMailboxPathDAOImpl testee;
- @Override
- CassandraMailboxPathDAOImpl testee(CassandraCluster cassandra) {
- return new CassandraMailboxPathDAOImpl(cassandra.getConf(), cassandra.getTypesProvider());
+ @BeforeEach
+ void setUp(CassandraCluster cassandra) {
+ testee = new CassandraMailboxPathDAOImpl(cassandra.getConf(), cassandra.getTypesProvider());
}
@Test
- void countAllShouldReturnEntryCount() {
+ void cassandraIdAndPathShouldRespectBeanContract() {
+ EqualsVerifier.forClass(CassandraIdAndPath.class).verify();
+ }
+
+ @Test
+ void saveShouldInsertNewEntry() {
+ assertThat(testee.save(USER_INBOX_MAILBOXPATH, INBOX_ID).block()).isTrue();
+
+ assertThat(testee.retrieveId(USER_INBOX_MAILBOXPATH).blockOptional())
+ .contains(INBOX_ID_AND_PATH);
+ }
+
+ @Test
+ void saveOnSecondShouldBeFalse() {
+ assertThat(testee.save(USER_INBOX_MAILBOXPATH, INBOX_ID).block()).isTrue();
+ assertThat(testee.save(USER_INBOX_MAILBOXPATH, INBOX_ID).block()).isFalse();
+ }
+
+ @Test
+ void retrieveIdShouldReturnEmptyWhenEmptyData() {
+ assertThat(testee.retrieveId(USER_INBOX_MAILBOXPATH).blockOptional())
+ .isEmpty();
+ }
+
+ @Test
+ void retrieveIdShouldReturnStoredData() {
+ testee.save(USER_INBOX_MAILBOXPATH, INBOX_ID).block();
+
+ assertThat(testee.retrieveId(USER_INBOX_MAILBOXPATH).blockOptional())
+ .contains(INBOX_ID_AND_PATH);
+ }
+
+ @Test
+ void getUserMailboxesShouldReturnAllMailboxesOfUser() {
testee.save(USER_INBOX_MAILBOXPATH, INBOX_ID).block();
testee.save(USER_OUTBOX_MAILBOXPATH, OUTBOX_ID).block();
testee.save(OTHER_USER_MAILBOXPATH, otherMailboxId).block();
- CassandraMailboxPathDAOImpl daoV1 = (CassandraMailboxPathDAOImpl) testee;
+ List<CassandraIdAndPath> cassandraIds = testee
+ .listUserMailboxes(USER_INBOX_MAILBOXPATH.getNamespace(), USER_INBOX_MAILBOXPATH.getUser())
+ .collectList()
+ .block();
+
+ assertThat(cassandraIds)
+ .hasSize(2)
+ .containsOnly(INBOX_ID_AND_PATH, new CassandraIdAndPath(OUTBOX_ID, USER_OUTBOX_MAILBOXPATH));
+ }
+
+ @Test
+ void deleteShouldNotThrowWhenEmpty() {
+ testee.delete(USER_INBOX_MAILBOXPATH).block();
+ }
+
+ @Test
+ void deleteShouldDeleteTheExistingMailboxId() {
+ testee.save(USER_INBOX_MAILBOXPATH, INBOX_ID).block();
+
+ testee.delete(USER_INBOX_MAILBOXPATH).block();
+
+ assertThat(testee.retrieveId(USER_INBOX_MAILBOXPATH).blockOptional())
+ .isEmpty();
+ }
- assertThat(daoV1.countAll().block())
+ @Test
+ void countAllShouldReturnEntryCount() {
+ testee.save(USER_INBOX_MAILBOXPATH, INBOX_ID).block();
+ testee.save(USER_OUTBOX_MAILBOXPATH, OUTBOX_ID).block();
+ testee.save(OTHER_USER_MAILBOXPATH, otherMailboxId).block();
+
+ assertThat(testee.countAll().block())
.isEqualTo(3);
}
@Test
void countAllShouldReturnZeroByDefault() {
- CassandraMailboxPathDAOImpl daoV1 = (CassandraMailboxPathDAOImpl) testee;
-
- assertThat(daoV1.countAll().block())
+ assertThat(testee.countAll().block())
.isEqualTo(0);
}
@@ -57,9 +139,7 @@ class CassandraMailboxPathDAOImplTest extends CassandraMailboxPathDAOTest<Cassan
testee.save(USER_OUTBOX_MAILBOXPATH, OUTBOX_ID).block();
testee.save(OTHER_USER_MAILBOXPATH, otherMailboxId).block();
- CassandraMailboxPathDAOImpl daoV1 = (CassandraMailboxPathDAOImpl) testee;
-
- assertThat(daoV1.readAll().toIterable())
+ assertThat(testee.readAll().toIterable())
.containsOnly(
new CassandraIdAndPath(INBOX_ID, USER_INBOX_MAILBOXPATH),
new CassandraIdAndPath(OUTBOX_ID, USER_OUTBOX_MAILBOXPATH),
@@ -68,9 +148,7 @@ class CassandraMailboxPathDAOImplTest extends CassandraMailboxPathDAOTest<Cassan
@Test
void readAllShouldReturnEmptyByDefault() {
- CassandraMailboxPathDAOImpl daoV1 = (CassandraMailboxPathDAOImpl) testee;
-
- assertThat(daoV1.readAll().toIterable())
+ assertThat(testee.readAll().toIterable())
.isEmpty();
}
}
\ No newline at end of file
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
deleted file mode 100644
index fc00da1..0000000
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathDAOTest.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/****************************************************************
- * 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.mailbox.cassandra.mail;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-import java.util.List;
-
-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.versions.CassandraSchemaVersionModule;
-import org.apache.james.core.Username;
-import org.apache.james.mailbox.cassandra.ids.CassandraId;
-import org.apache.james.mailbox.cassandra.modules.CassandraMailboxModule;
-import org.apache.james.mailbox.model.MailboxPath;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.RegisterExtension;
-
-import nl.jqno.equalsverifier.EqualsVerifier;
-
-public abstract class CassandraMailboxPathDAOTest<T extends CassandraMailboxPathDAO> {
- private static final Username USER = Username.of("user");
- private static final Username OTHER_USER = Username.of("other");
-
- static final CassandraId INBOX_ID = CassandraId.timeBased();
- static final CassandraId OUTBOX_ID = CassandraId.timeBased();
- static final CassandraId otherMailboxId = CassandraId.timeBased();
- static final MailboxPath USER_INBOX_MAILBOXPATH = MailboxPath.forUser(USER, "INBOX");
- static final MailboxPath USER_OUTBOX_MAILBOXPATH = MailboxPath.forUser(USER, "OUTBOX");
- static final MailboxPath OTHER_USER_MAILBOXPATH = MailboxPath.forUser(OTHER_USER, "INBOX");
- static final CassandraIdAndPath INBOX_ID_AND_PATH = new CassandraIdAndPath(INBOX_ID, USER_INBOX_MAILBOXPATH);
-
- @RegisterExtension
- static CassandraClusterExtension cassandraCluster = new CassandraClusterExtension(CassandraModule.aggregateModules(
- CassandraMailboxModule.MODULE, CassandraSchemaVersionModule.MODULE));
-
- protected T testee;
-
- abstract T testee(CassandraCluster cassandra);
-
- @BeforeEach
- void setUp(CassandraCluster cassandra) {
- testee = testee(cassandra);
- }
-
- @Test
- void cassandraIdAndPathShouldRespectBeanContract() {
- EqualsVerifier.forClass(CassandraIdAndPath.class).verify();
- }
-
- @Test
- void saveShouldInsertNewEntry() {
- assertThat(testee.save(USER_INBOX_MAILBOXPATH, INBOX_ID).block()).isTrue();
-
- assertThat(testee.retrieveId(USER_INBOX_MAILBOXPATH).blockOptional())
- .contains(INBOX_ID_AND_PATH);
- }
-
- @Test
- void saveOnSecondShouldBeFalse() {
- assertThat(testee.save(USER_INBOX_MAILBOXPATH, INBOX_ID).block()).isTrue();
- assertThat(testee.save(USER_INBOX_MAILBOXPATH, INBOX_ID).block()).isFalse();
- }
-
- @Test
- void retrieveIdShouldReturnEmptyWhenEmptyData() {
- assertThat(testee.retrieveId(USER_INBOX_MAILBOXPATH).blockOptional())
- .isEmpty();
- }
-
- @Test
- void retrieveIdShouldReturnStoredData() {
- testee.save(USER_INBOX_MAILBOXPATH, INBOX_ID).block();
-
- assertThat(testee.retrieveId(USER_INBOX_MAILBOXPATH).blockOptional())
- .contains(INBOX_ID_AND_PATH);
- }
-
- @Test
- void getUserMailboxesShouldReturnAllMailboxesOfUser() {
- testee.save(USER_INBOX_MAILBOXPATH, INBOX_ID).block();
- testee.save(USER_OUTBOX_MAILBOXPATH, OUTBOX_ID).block();
- testee.save(OTHER_USER_MAILBOXPATH, otherMailboxId).block();
-
- List<CassandraIdAndPath> cassandraIds = testee
- .listUserMailboxes(USER_INBOX_MAILBOXPATH.getNamespace(), USER_INBOX_MAILBOXPATH.getUser())
- .collectList()
- .block();
-
- assertThat(cassandraIds)
- .hasSize(2)
- .containsOnly(INBOX_ID_AND_PATH, new CassandraIdAndPath(OUTBOX_ID, USER_OUTBOX_MAILBOXPATH));
- }
-
- @Test
- void deleteShouldNotThrowWhenEmpty() {
- testee.delete(USER_INBOX_MAILBOXPATH).block();
- }
-
- @Test
- void deleteShouldDeleteTheExistingMailboxId() {
- testee.save(USER_INBOX_MAILBOXPATH, INBOX_ID).block();
-
- testee.delete(USER_INBOX_MAILBOXPATH).block();
-
- assertThat(testee.retrieveId(USER_INBOX_MAILBOXPATH).blockOptional())
- .isEmpty();
- }
-}
\ No newline at end of file
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 4e6e40f..2cb04d3 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,16 +19,103 @@
package org.apache.james.mailbox.cassandra.mail;
+import static org.apache.james.mailbox.cassandra.mail.MailboxFixture.INBOX_ID;
+import static org.apache.james.mailbox.cassandra.mail.MailboxFixture.INBOX_ID_AND_PATH;
+import static org.apache.james.mailbox.cassandra.mail.MailboxFixture.OTHER_USER_MAILBOXPATH;
+import static org.apache.james.mailbox.cassandra.mail.MailboxFixture.OUTBOX_ID;
+import static org.apache.james.mailbox.cassandra.mail.MailboxFixture.USER_INBOX_MAILBOXPATH;
+import static org.apache.james.mailbox.cassandra.mail.MailboxFixture.USER_OUTBOX_MAILBOXPATH;
+import static org.apache.james.mailbox.cassandra.mail.MailboxFixture.otherMailboxId;
import static org.assertj.core.api.Assertions.assertThat;
+import java.util.List;
+
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.mailbox.cassandra.modules.CassandraMailboxModule;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+import nl.jqno.equalsverifier.EqualsVerifier;
+
+class CassandraMailboxPathV2DAOTest {
+ @RegisterExtension
+ static CassandraClusterExtension cassandraCluster = new CassandraClusterExtension(CassandraModule.aggregateModules(
+ CassandraMailboxModule.MODULE, CassandraSchemaVersionModule.MODULE));
+
+ CassandraMailboxPathV2DAO testee;
+
+ @BeforeEach
+ void setUp(CassandraCluster cassandra) {
+ testee = new CassandraMailboxPathV2DAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION);
+ }
+
+ @Test
+ void cassandraIdAndPathShouldRespectBeanContract() {
+ EqualsVerifier.forClass(CassandraIdAndPath.class).verify();
+ }
+
+ @Test
+ void saveShouldInsertNewEntry() {
+ assertThat(testee.save(USER_INBOX_MAILBOXPATH, INBOX_ID).block()).isTrue();
+
+ assertThat(testee.retrieveId(USER_INBOX_MAILBOXPATH).blockOptional())
+ .contains(INBOX_ID_AND_PATH);
+ }
+
+ @Test
+ void saveOnSecondShouldBeFalse() {
+ assertThat(testee.save(USER_INBOX_MAILBOXPATH, INBOX_ID).block()).isTrue();
+ assertThat(testee.save(USER_INBOX_MAILBOXPATH, INBOX_ID).block()).isFalse();
+ }
+
+ @Test
+ void retrieveIdShouldReturnEmptyWhenEmptyData() {
+ assertThat(testee.retrieveId(USER_INBOX_MAILBOXPATH).blockOptional())
+ .isEmpty();
+ }
+
+ @Test
+ void retrieveIdShouldReturnStoredData() {
+ testee.save(USER_INBOX_MAILBOXPATH, INBOX_ID).block();
+
+ assertThat(testee.retrieveId(USER_INBOX_MAILBOXPATH).blockOptional())
+ .contains(INBOX_ID_AND_PATH);
+ }
+
+ @Test
+ void getUserMailboxesShouldReturnAllMailboxesOfUser() {
+ testee.save(USER_INBOX_MAILBOXPATH, INBOX_ID).block();
+ testee.save(USER_OUTBOX_MAILBOXPATH, OUTBOX_ID).block();
+ testee.save(OTHER_USER_MAILBOXPATH, otherMailboxId).block();
+
+ List<CassandraIdAndPath> cassandraIds = testee
+ .listUserMailboxes(USER_INBOX_MAILBOXPATH.getNamespace(), USER_INBOX_MAILBOXPATH.getUser())
+ .collectList()
+ .block();
+
+ assertThat(cassandraIds)
+ .hasSize(2)
+ .containsOnly(INBOX_ID_AND_PATH, new CassandraIdAndPath(OUTBOX_ID, USER_OUTBOX_MAILBOXPATH));
+ }
-class CassandraMailboxPathV2DAOTest extends CassandraMailboxPathDAOTest<CassandraMailboxPathV2DAO> {
- @Override
- CassandraMailboxPathV2DAO testee(CassandraCluster cassandra) {
- return new CassandraMailboxPathV2DAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION);
+ @Test
+ void deleteShouldNotThrowWhenEmpty() {
+ testee.delete(USER_INBOX_MAILBOXPATH).block();
+ }
+
+ @Test
+ void deleteShouldDeleteTheExistingMailboxId() {
+ testee.save(USER_INBOX_MAILBOXPATH, INBOX_ID).block();
+
+ testee.delete(USER_INBOX_MAILBOXPATH).block();
+
+ assertThat(testee.retrieveId(USER_INBOX_MAILBOXPATH).blockOptional())
+ .isEmpty();
}
@Test
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathDAO.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/MailboxFixture.java
similarity index 68%
rename from mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathDAO.java
rename to mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/MailboxFixture.java
index 72e7d78..b9f29e8 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathDAO.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/MailboxFixture.java
@@ -23,21 +23,15 @@ import org.apache.james.core.Username;
import org.apache.james.mailbox.cassandra.ids.CassandraId;
import org.apache.james.mailbox.model.MailboxPath;
-import reactor.core.publisher.Flux;
-import reactor.core.publisher.Mono;
-
-public interface CassandraMailboxPathDAO {
-
- Mono<CassandraIdAndPath> retrieveId(MailboxPath mailboxPath);
-
- Flux<CassandraIdAndPath> listUserMailboxes(String namespace, Username user);
-
- void logGhostMailboxSuccess(CassandraIdAndPath value);
-
- void logGhostMailboxFailure(MailboxPath mailboxPath);
-
- Mono<Boolean> save(MailboxPath mailboxPath, CassandraId mailboxId);
-
- Mono<Void> delete(MailboxPath mailboxPath);
-
+public interface MailboxFixture {
+ Username USER = Username.of("user");
+ Username OTHER_USER = Username.of("other");
+
+ CassandraId INBOX_ID = CassandraId.timeBased();
+ CassandraId OUTBOX_ID = CassandraId.timeBased();
+ CassandraId otherMailboxId = CassandraId.timeBased();
+ MailboxPath USER_INBOX_MAILBOXPATH = MailboxPath.forUser(USER, "INBOX");
+ MailboxPath USER_OUTBOX_MAILBOXPATH = MailboxPath.forUser(USER, "OUTBOX");
+ MailboxPath OTHER_USER_MAILBOXPATH = MailboxPath.forUser(OTHER_USER, "INBOX");
+ CassandraIdAndPath INBOX_ID_AND_PATH = new CassandraIdAndPath(INBOX_ID, USER_INBOX_MAILBOXPATH);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org