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 <[email protected]> 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: [email protected] For additional commands, e-mail: [email protected]
