You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by rc...@apache.org on 2021/01/05 04:55:49 UTC
[james-project] 10/24: JAMES-3407 Disable read repairs on outdated
schema verison
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 be946ffc69823fa98d8fcd4d6f7c678c0d15bcf4
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Dec 29 18:01:25 2020 +0700
JAMES-3407 Disable read repairs on outdated schema verison
Here is a flacky test output:
```
[ERROR] CassandraMailboxMapperTest$ConsistencyTest.createAfterPreviousDeleteOnFailedCreateShouldCreateAMailbox:617 Multiple Failures (1 failure)
Expected size:<1> but was:<2> in:
<[Mailbox{id=88fcc460-49bf-11eb-84d0-b78591c28a40, namespace=#private, user=Username{localPart=user, domainPart=Optional.empty}, name=name},
Mailbox{id=9a2095a0-49bf-11eb-84d0-b78591c28a40, namespace=#private, user=Username{localPart=user, domainPart=Optional.empty}, name=INBOX}]>
at CassandraMailboxMapperTest$ConsistencyTest.lambda$createAfterPreviousDeleteOnFailedCreateShouldCreateAMailbox$34(CassandraMailboxMapperTest$ConsistencyTest.java:628)
```
What is stricking is that createAfterPreviousDeleteOnFailedCreateShouldCreateAMailbox
do not rely on "name" mailbox, which do not appear in the test.
Likely an asynchronous read repair being triggered, that violates
test encapsulation...
---
.../cassandra/mail/CassandraMailboxMapperTest.java | 599 +++++++++++----------
1 file changed, 312 insertions(+), 287 deletions(-)
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperTest.java
index 7e9fb00..d2f060b 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperTest.java
@@ -69,6 +69,7 @@ import com.github.fge.lambdas.Throwing;
import com.github.fge.lambdas.runnable.ThrowingRunnable;
import reactor.core.publisher.Mono;
+import reactor.core.scheduler.Schedulers;
class CassandraMailboxMapperTest {
private static final UidValidity UID_VALIDITY = UidValidity.of(52);
@@ -112,9 +113,14 @@ class CassandraMailboxMapperTest {
versionDAO.truncateVersion()
.then(versionDAO.updateVersion(new SchemaVersion(7)))
.block();
+ setUpTestee(CassandraConfiguration.DEFAULT_CONFIGURATION);
+ }
+
+ private void setUpTestee(CassandraConfiguration cassandraConfiguration) {
+ CassandraCluster cassandra = cassandraCluster.getCassandraCluster();
CassandraSchemaVersionManager versionManager = new CassandraSchemaVersionManager(versionDAO);
- CassandraACLDAOV1 aclDAOV1 = new CassandraACLDAOV1(cassandra.getConf(), CassandraConfiguration.DEFAULT_CONFIGURATION, CassandraConsistenciesConfiguration.DEFAULT);
+ CassandraACLDAOV1 aclDAOV1 = new CassandraACLDAOV1(cassandra.getConf(), cassandraConfiguration, CassandraConsistenciesConfiguration.DEFAULT);
CassandraACLDAOV2 aclDAOv2 = new CassandraACLDAOV2(cassandra.getConf());
JsonEventSerializer jsonEventSerializer = JsonEventSerializer
.forModules(ACLModule.ACL_UPDATE)
@@ -133,7 +139,7 @@ class CassandraMailboxMapperTest {
usersRightDAO,
aclMapper,
versionManager,
- CassandraConfiguration.DEFAULT_CONFIGURATION);
+ cassandraConfiguration);
}
@Nested
@@ -273,6 +279,14 @@ class CassandraMailboxMapperTest {
@Nested
class ReadRepairs {
+ @BeforeEach
+ void setVersion() {
+ // Read repairs should not be performed with an outdated data representation
+ versionDAO.truncateVersion()
+ .then(versionDAO.updateVersion(new SchemaVersion(8)))
+ .block();
+ }
+
@Test
void findMailboxByIdShouldEventuallyFixInconsistencyWhenMailboxIsNotInPath() {
mailboxDAO.save(MAILBOX)
@@ -770,335 +784,346 @@ class CassandraMailboxMapperTest {
return new MailboxPath(fromMailboxPath, StringUtils.repeat("b", 65537));
}
- @Test
- void deleteShouldDeleteMailboxAndMailboxPathFromV1Table() {
- mailboxDAO.save(MAILBOX)
- .block();
- mailboxPathDAO.save(MAILBOX_PATH, MAILBOX_ID)
- .block();
-
- testee.delete(MAILBOX).block();
-
- assertThat(testee.findMailboxByPath(MAILBOX_PATH).blockOptional())
- .isEmpty();
- }
-
- @Test
- void deleteShouldDeleteMailboxAndMailboxPathFromV2Table() {
- mailboxDAO.save(MAILBOX)
- .block();
- mailboxPathV2DAO.save(MAILBOX_PATH, MAILBOX_ID)
- .block();
-
- testee.delete(MAILBOX).block();
-
- assertThat(testee.findMailboxByPath(MAILBOX_PATH).blockOptional())
- .isEmpty();
- }
-
- @Test
- void deleteShouldDeleteMailboxAndMailboxPathFromV3Table() {
- mailboxDAO.save(MAILBOX)
- .block();
- mailboxPathV3DAO.save(MAILBOX)
- .block();
-
- testee.delete(MAILBOX).block();
-
- assertThat(testee.findMailboxByPath(MAILBOX_PATH).blockOptional())
- .isEmpty();
- }
-
- @Test
- void deleteShouldDeleteMailboxAndMailboxPathFromAllTables() {
- mailboxDAO.save(MAILBOX)
- .block();
- mailboxPathDAO.save(MAILBOX_PATH, MAILBOX_ID)
- .block();
- mailboxPathV2DAO.save(MAILBOX_PATH, MAILBOX_ID)
- .block();
- mailboxPathV3DAO.save(MAILBOX)
- .block();
-
- testee.delete(MAILBOX).block();
-
- assertThat(testee.findMailboxByPath(MAILBOX_PATH).blockOptional())
- .isEmpty();
- }
-
- @Test
- void findMailboxByPathShouldReturnMailboxWhenExistsInV1Table() {
- mailboxDAO.save(MAILBOX)
- .block();
- mailboxPathDAO.save(MAILBOX_PATH, MAILBOX_ID)
- .block();
-
- Mailbox mailbox = testee.findMailboxByPath(MAILBOX_PATH).block();
+ @Nested
+ class ReadFallbackToPreviousTables {
+ @BeforeEach
+ void setUp() {
+ // Read repairs are not supported accross schema versions...
+ setUpTestee(CassandraConfiguration.builder()
+ .mailboxReadRepair(0f)
+ .build());
+ }
- assertThat(mailbox.generateAssociatedPath()).isEqualTo(MAILBOX_PATH);
- }
+ @Test
+ void deleteShouldDeleteMailboxAndMailboxPathFromV1Table() {
+ mailboxDAO.save(MAILBOX)
+ .block();
+ mailboxPathDAO.save(MAILBOX_PATH, MAILBOX_ID)
+ .block();
- @Test
- void findMailboxByPathShouldReturnMailboxWhenExistsInV2Table() {
- mailboxDAO.save(MAILBOX)
- .block();
- mailboxPathV2DAO.save(MAILBOX_PATH, MAILBOX_ID)
- .block();
+ testee.delete(MAILBOX).block();
- Mailbox mailbox = testee.findMailboxByPath(MAILBOX_PATH).block();
+ assertThat(testee.findMailboxByPath(MAILBOX_PATH).blockOptional())
+ .isEmpty();
+ }
- assertThat(mailbox.generateAssociatedPath()).isEqualTo(MAILBOX_PATH);
- }
+ @Test
+ void deleteShouldDeleteMailboxAndMailboxPathFromV2Table() {
+ mailboxDAO.save(MAILBOX)
+ .block();
+ mailboxPathV2DAO.save(MAILBOX_PATH, MAILBOX_ID)
+ .block();
- @Test
- void findMailboxByPathShouldReturnMailboxWhenExistsInV3Table() {
- mailboxDAO.save(MAILBOX)
- .block();
- mailboxPathV3DAO.save(MAILBOX)
- .block();
+ testee.delete(MAILBOX).block();
- Mailbox mailbox = testee.findMailboxByPath(MAILBOX_PATH).block();
+ assertThat(testee.findMailboxByPath(MAILBOX_PATH).blockOptional())
+ .isEmpty();
+ }
- assertThat(mailbox.generateAssociatedPath()).isEqualTo(MAILBOX_PATH);
- }
+ @Test
+ void deleteShouldDeleteMailboxAndMailboxPathFromV3Table() {
+ mailboxDAO.save(MAILBOX)
+ .block();
+ mailboxPathV3DAO.save(MAILBOX)
+ .block();
- @Test
- void findMailboxByPathShouldReturnMailboxWhenExistsInAllTables() {
- mailboxDAO.save(MAILBOX)
- .block();
- mailboxPathDAO.save(MAILBOX_PATH, MAILBOX_ID)
- .block();
- mailboxPathV2DAO.save(MAILBOX_PATH, MAILBOX_ID)
- .block();
- mailboxPathV3DAO.save(MAILBOX)
- .block();
+ testee.delete(MAILBOX).block();
- Mailbox mailbox = testee.findMailboxByPath(MAILBOX_PATH).block();
+ assertThat(testee.findMailboxByPath(MAILBOX_PATH).blockOptional())
+ .isEmpty();
+ }
- assertThat(mailbox.generateAssociatedPath()).isEqualTo(MAILBOX_PATH);
- }
+ @Test
+ void deleteShouldDeleteMailboxAndMailboxPathFromAllTables() {
+ mailboxDAO.save(MAILBOX)
+ .block();
+ mailboxPathDAO.save(MAILBOX_PATH, MAILBOX_ID)
+ .block();
+ mailboxPathV2DAO.save(MAILBOX_PATH, MAILBOX_ID)
+ .block();
+ mailboxPathV3DAO.save(MAILBOX)
+ .block();
+
+ testee.delete(MAILBOX).block();
+
+ assertThat(testee.findMailboxByPath(MAILBOX_PATH).blockOptional())
+ .isEmpty();
+ }
- @Test
- void deleteShouldRemoveMailboxWhenInAllTables() {
- mailboxDAO.save(MAILBOX)
- .block();
- mailboxPathDAO.save(MAILBOX_PATH, MAILBOX_ID)
- .block();
- mailboxPathV2DAO.save(MAILBOX_PATH, MAILBOX_ID)
- .block();
- mailboxPathV3DAO.save(MAILBOX)
- .block();
+ @Test
+ void findMailboxByPathShouldReturnMailboxWhenExistsInV1Table() {
+ mailboxDAO.save(MAILBOX)
+ .block();
+ mailboxPathDAO.save(MAILBOX_PATH, MAILBOX_ID)
+ .block();
- testee.delete(MAILBOX).block();
+ Mailbox mailbox = testee.findMailboxByPath(MAILBOX_PATH).block();
- assertThat(testee.findMailboxByPath(MAILBOX_PATH).blockOptional())
- .isEmpty();
- }
+ assertThat(mailbox.generateAssociatedPath()).isEqualTo(MAILBOX_PATH);
+ }
- @Test
- void deleteShouldRemoveMailboxWhenInV1Tables() {
- mailboxDAO.save(MAILBOX)
- .block();
- mailboxPathDAO.save(MAILBOX_PATH, MAILBOX_ID)
- .block();
+ @Test
+ void findMailboxByPathShouldReturnMailboxWhenExistsInV2Table() {
+ mailboxDAO.save(MAILBOX)
+ .block();
+ mailboxPathV2DAO.save(MAILBOX_PATH, MAILBOX_ID)
+ .block();
- testee.delete(MAILBOX).block();
+ Mailbox mailbox = testee.findMailboxByPath(MAILBOX_PATH).block();
- assertThat(testee.findMailboxByPath(MAILBOX_PATH).blockOptional())
- .isEmpty();
- }
+ assertThat(mailbox.generateAssociatedPath()).isEqualTo(MAILBOX_PATH);
+ }
- @Test
- void deleteShouldRemoveMailboxWhenInV2Table() {
- mailboxDAO.save(MAILBOX)
- .block();
- mailboxPathV2DAO.save(MAILBOX_PATH, MAILBOX_ID)
- .block();
+ @Test
+ void findMailboxByPathShouldReturnMailboxWhenExistsInV3Table() {
+ mailboxDAO.save(MAILBOX)
+ .block();
+ mailboxPathV3DAO.save(MAILBOX)
+ .block();
- testee.delete(MAILBOX).block();
+ Mailbox mailbox = testee.findMailboxByPath(MAILBOX_PATH).block();
- assertThat(testee.findMailboxByPath(MAILBOX_PATH).blockOptional())
- .isEmpty();
- }
+ assertThat(mailbox.generateAssociatedPath()).isEqualTo(MAILBOX_PATH);
+ }
- @Test
- void findMailboxByPathShouldThrowWhenDoesntExistInBothTables() {
- mailboxDAO.save(MAILBOX)
- .block();
+ @Test
+ void findMailboxByPathShouldReturnMailboxWhenExistsInAllTables() {
+ mailboxDAO.save(MAILBOX)
+ .block();
+ mailboxPathDAO.save(MAILBOX_PATH, MAILBOX_ID)
+ .block();
+ mailboxPathV2DAO.save(MAILBOX_PATH, MAILBOX_ID)
+ .block();
+ mailboxPathV3DAO.save(MAILBOX)
+ .block();
+
+ Mailbox mailbox = testee.findMailboxByPath(MAILBOX_PATH).block();
+
+ assertThat(mailbox.generateAssociatedPath()).isEqualTo(MAILBOX_PATH);
+ }
- assertThat(testee.findMailboxByPath(MAILBOX_PATH).blockOptional())
- .isEmpty();
- }
+ @Test
+ void deleteShouldRemoveMailboxWhenInAllTables() {
+ mailboxDAO.save(MAILBOX)
+ .block();
+ mailboxPathDAO.save(MAILBOX_PATH, MAILBOX_ID)
+ .block();
+ mailboxPathV2DAO.save(MAILBOX_PATH, MAILBOX_ID)
+ .block();
+ mailboxPathV3DAO.save(MAILBOX)
+ .block();
+
+ testee.delete(MAILBOX).block();
+
+ assertThat(testee.findMailboxByPath(MAILBOX_PATH).blockOptional())
+ .isEmpty();
+ }
- @Test
- void findMailboxWithPathLikeShouldReturnMailboxesWhenExistsInV1Table() {
- mailboxDAO.save(MAILBOX)
- .block();
- mailboxPathDAO.save(MAILBOX_PATH, MAILBOX_ID)
- .block();
+ @Test
+ void deleteShouldRemoveMailboxWhenInV1Tables() {
+ mailboxDAO.save(MAILBOX)
+ .block();
+ mailboxPathDAO.save(MAILBOX_PATH, MAILBOX_ID)
+ .block();
- List<Mailbox> mailboxes = testee.findMailboxWithPathLike(MailboxQuery.builder()
- .privateNamespace()
- .username(USER)
- .expression(Wildcard.INSTANCE)
- .build()
- .asUserBound())
- .collectList().block();
+ testee.delete(MAILBOX).block();
- assertThat(mailboxes).containsOnly(MAILBOX);
- }
+ assertThat(testee.findMailboxByPath(MAILBOX_PATH).blockOptional())
+ .isEmpty();
+ }
- @Test
- void findMailboxWithPathLikeShouldReturnMailboxesWhenExistsInBothTables() {
- mailboxDAO.save(MAILBOX)
- .block();
- mailboxPathDAO.save(MAILBOX_PATH, MAILBOX_ID)
- .block();
- mailboxPathV2DAO.save(MAILBOX_PATH, MAILBOX_ID)
- .block();
+ @Test
+ void deleteShouldRemoveMailboxWhenInV2Table() {
+ mailboxDAO.save(MAILBOX)
+ .block();
+ mailboxPathV2DAO.save(MAILBOX_PATH, MAILBOX_ID)
+ .block();
- List<Mailbox> mailboxes = testee.findMailboxWithPathLike(MailboxQuery.builder()
- .privateNamespace()
- .username(USER)
- .expression(Wildcard.INSTANCE)
- .build()
- .asUserBound())
- .collectList().block();
+ testee.delete(MAILBOX).block();
- assertThat(mailboxes).containsOnly(MAILBOX);
- }
+ assertThat(testee.findMailboxByPath(MAILBOX_PATH).blockOptional())
+ .isEmpty();
+ }
- @Test
- void findMailboxWithPathLikeShouldReturnMailboxesWhenExistsInV2Table() {
- mailboxDAO.save(MAILBOX)
- .block();
- mailboxPathV2DAO.save(MAILBOX_PATH, MAILBOX_ID)
- .block();
+ @Test
+ void findMailboxByPathShouldThrowWhenDoesntExistInBothTables() {
+ mailboxDAO.save(MAILBOX)
+ .block();
- List<Mailbox> mailboxes = testee.findMailboxWithPathLike(MailboxQuery.builder()
- .privateNamespace()
- .username(USER)
- .expression(Wildcard.INSTANCE)
- .build()
- .asUserBound())
- .collectList().block();
+ assertThat(testee.findMailboxByPath(MAILBOX_PATH).blockOptional())
+ .isEmpty();
+ }
- assertThat(mailboxes).containsOnly(MAILBOX);
- }
+ @Test
+ void findMailboxWithPathLikeShouldReturnMailboxesWhenExistsInV1Table() {
+ mailboxDAO.save(MAILBOX)
+ .block();
+ mailboxPathDAO.save(MAILBOX_PATH, MAILBOX_ID)
+ .block();
- @Test
- void findMailboxWithPathLikeShouldReturnMailboxesWhenExistsInV3Table() {
- mailboxDAO.save(MAILBOX)
- .block();
- mailboxPathV3DAO.save(MAILBOX)
- .block();
+ List<Mailbox> mailboxes = testee.findMailboxWithPathLike(MailboxQuery.builder()
+ .privateNamespace()
+ .username(USER)
+ .expression(Wildcard.INSTANCE)
+ .build()
+ .asUserBound())
+ .collectList().block();
- List<Mailbox> mailboxes = testee.findMailboxWithPathLike(MailboxQuery.builder()
- .privateNamespace()
- .username(USER)
- .expression(Wildcard.INSTANCE)
- .build()
- .asUserBound())
- .collectList()
- .block();
+ assertThat(mailboxes).containsOnly(MAILBOX);
+ }
- assertThat(mailboxes).containsOnly(MAILBOX);
- }
+ @Test
+ void findMailboxWithPathLikeShouldReturnMailboxesWhenExistsInBothTables() {
+ mailboxDAO.save(MAILBOX)
+ .block();
+ mailboxPathDAO.save(MAILBOX_PATH, MAILBOX_ID)
+ .block();
+ mailboxPathV2DAO.save(MAILBOX_PATH, MAILBOX_ID)
+ .block();
+
+ List<Mailbox> mailboxes = testee.findMailboxWithPathLike(MailboxQuery.builder()
+ .privateNamespace()
+ .username(USER)
+ .expression(Wildcard.INSTANCE)
+ .build()
+ .asUserBound())
+ .collectList().block();
- @Test
- void hasChildrenShouldReturnChildWhenExistsInV1Table() {
- mailboxDAO.save(MAILBOX)
- .block();
- mailboxPathDAO.save(MAILBOX_PATH, MAILBOX_ID)
- .block();
- CassandraId childMailboxId = CassandraId.timeBased();
- MailboxPath childMailboxPath = MailboxPath.forUser(USER, "name.child");
- Mailbox childMailbox = new Mailbox(childMailboxPath, UID_VALIDITY, childMailboxId);
- mailboxDAO.save(childMailbox)
- .block();
- mailboxPathDAO.save(childMailboxPath, childMailboxId)
- .block();
-
- boolean hasChildren = testee.hasChildren(MAILBOX, '.').block();
+ assertThat(mailboxes).containsOnly(MAILBOX);
+ }
- assertThat(hasChildren).isTrue();
- }
+ @Test
+ void findMailboxWithPathLikeShouldReturnMailboxesWhenExistsInV2Table() {
+ mailboxDAO.save(MAILBOX)
+ .block();
+ mailboxPathV2DAO.save(MAILBOX_PATH, MAILBOX_ID)
+ .block();
- @Test
- void hasChildrenShouldReturnChildWhenExistsInBothTables() {
- mailboxDAO.save(MAILBOX)
- .block();
- mailboxPathDAO.save(MAILBOX_PATH, MAILBOX_ID)
- .block();
- mailboxPathV2DAO.save(MAILBOX_PATH, MAILBOX_ID)
- .block();
- CassandraId childMailboxId = CassandraId.timeBased();
- MailboxPath childMailboxPath = MailboxPath.forUser(USER, "name.child");
- Mailbox childMailbox = new Mailbox(childMailboxPath, UID_VALIDITY, childMailboxId);
- mailboxDAO.save(childMailbox)
- .block();
- mailboxPathDAO.save(childMailboxPath, childMailboxId)
- .block();
+ List<Mailbox> mailboxes = testee.findMailboxWithPathLike(MailboxQuery.builder()
+ .privateNamespace()
+ .username(USER)
+ .expression(Wildcard.INSTANCE)
+ .build()
+ .asUserBound())
+ .collectList().block();
- boolean hasChildren = testee.hasChildren(MAILBOX, '.').block();
+ assertThat(mailboxes).containsOnly(MAILBOX);
+ }
- assertThat(hasChildren).isTrue();
- }
+ @Test
+ void findMailboxWithPathLikeShouldReturnMailboxesWhenExistsInV3Table() {
+ mailboxDAO.save(MAILBOX)
+ .block();
+ mailboxPathV3DAO.save(MAILBOX)
+ .block();
- @Test
- void hasChildrenShouldReturnChildWhenExistsInV2Table() {
- mailboxDAO.save(MAILBOX)
- .block();
- mailboxPathV2DAO.save(MAILBOX_PATH, MAILBOX_ID)
- .block();
- CassandraId childMailboxId = CassandraId.timeBased();
- MailboxPath childMailboxPath = MailboxPath.forUser(USER, "name.child");
- Mailbox childMailbox = new Mailbox(childMailboxPath, UID_VALIDITY, childMailboxId);
- mailboxDAO.save(childMailbox)
- .block();
- mailboxPathV2DAO.save(childMailboxPath, childMailboxId)
- .block();
-
- boolean hasChildren = testee.hasChildren(MAILBOX, '.').block();
-
- assertThat(hasChildren).isTrue();
- }
+ List<Mailbox> mailboxes = testee.findMailboxWithPathLike(MailboxQuery.builder()
+ .privateNamespace()
+ .username(USER)
+ .expression(Wildcard.INSTANCE)
+ .build()
+ .asUserBound())
+ .collectList()
+ .block();
- @Test
- void hasChildrenShouldReturnChildWhenExistsInV3Table() {
- mailboxDAO.save(MAILBOX)
- .block();
- mailboxPathV3DAO.save(MAILBOX)
- .block();
- CassandraId childMailboxId = CassandraId.timeBased();
- MailboxPath childMailboxPath = MailboxPath.forUser(USER, "name.child");
- Mailbox childMailbox = new Mailbox(childMailboxPath, UID_VALIDITY, childMailboxId);
- mailboxDAO.save(childMailbox)
- .block();
- mailboxPathV3DAO.save(childMailbox)
- .block();
+ assertThat(mailboxes).containsOnly(MAILBOX);
+ }
- boolean hasChildren = testee.hasChildren(MAILBOX, '.').block();
+ @Test
+ void hasChildrenShouldReturnChildWhenExistsInV1Table() {
+ mailboxDAO.save(MAILBOX)
+ .block();
+ mailboxPathDAO.save(MAILBOX_PATH, MAILBOX_ID)
+ .block();
+ CassandraId childMailboxId = CassandraId.timeBased();
+ MailboxPath childMailboxPath = MailboxPath.forUser(USER, "name.child");
+ Mailbox childMailbox = new Mailbox(childMailboxPath, UID_VALIDITY, childMailboxId);
+ mailboxDAO.save(childMailbox)
+ .block();
+ mailboxPathDAO.save(childMailboxPath, childMailboxId)
+ .block();
+
+ boolean hasChildren = testee.hasChildren(MAILBOX, '.').block();
+
+ assertThat(hasChildren).isTrue();
+ }
- assertThat(hasChildren).isTrue();
- }
+ @Test
+ void hasChildrenShouldReturnChildWhenExistsInBothTables() {
+ mailboxDAO.save(MAILBOX)
+ .block();
+ mailboxPathDAO.save(MAILBOX_PATH, MAILBOX_ID)
+ .block();
+ mailboxPathV2DAO.save(MAILBOX_PATH, MAILBOX_ID)
+ .block();
+ CassandraId childMailboxId = CassandraId.timeBased();
+ MailboxPath childMailboxPath = MailboxPath.forUser(USER, "name.child");
+ Mailbox childMailbox = new Mailbox(childMailboxPath, UID_VALIDITY, childMailboxId);
+ mailboxDAO.save(childMailbox)
+ .block();
+ mailboxPathDAO.save(childMailboxPath, childMailboxId)
+ .block();
+
+ boolean hasChildren = testee.hasChildren(MAILBOX, '.').block();
+
+ assertThat(hasChildren).isTrue();
+ }
- @Test
- void findMailboxWithPathLikeShouldRemoveDuplicatesAndKeepV3() {
- mailboxDAO.save(MAILBOX).block();
- mailboxPathV3DAO.save(MAILBOX).block();
+ @Test
+ void hasChildrenShouldReturnChildWhenExistsInV2Table() {
+ mailboxDAO.save(MAILBOX)
+ .block();
+ mailboxPathV2DAO.save(MAILBOX_PATH, MAILBOX_ID)
+ .block();
+ CassandraId childMailboxId = CassandraId.timeBased();
+ MailboxPath childMailboxPath = MailboxPath.forUser(USER, "name.child");
+ Mailbox childMailbox = new Mailbox(childMailboxPath, UID_VALIDITY, childMailboxId);
+ mailboxDAO.save(childMailbox)
+ .block();
+ mailboxPathV2DAO.save(childMailboxPath, childMailboxId)
+ .block();
+
+ boolean hasChildren = testee.hasChildren(MAILBOX, '.').block();
+
+ assertThat(hasChildren).isTrue();
+ }
- mailboxDAO.save(MAILBOX_BIS).block();
- mailboxPathDAO.save(MAILBOX_PATH, MAILBOX_ID_2).block();
+ @Test
+ void hasChildrenShouldReturnChildWhenExistsInV3Table() {
+ mailboxDAO.save(MAILBOX)
+ .block();
+ mailboxPathV3DAO.save(MAILBOX)
+ .block();
+ CassandraId childMailboxId = CassandraId.timeBased();
+ MailboxPath childMailboxPath = MailboxPath.forUser(USER, "name.child");
+ Mailbox childMailbox = new Mailbox(childMailboxPath, UID_VALIDITY, childMailboxId);
+ mailboxDAO.save(childMailbox)
+ .block();
+ mailboxPathV3DAO.save(childMailbox)
+ .block();
+
+ boolean hasChildren = testee.hasChildren(MAILBOX, '.').block();
+
+ assertThat(hasChildren).isTrue();
+ }
- assertThat(testee.findMailboxWithPathLike(
- MailboxQuery.builder()
- .privateNamespace()
- .username(USER)
- .expression(Wildcard.INSTANCE)
- .build()
- .asUserBound())
- .collectList().block())
- .containsOnly(MAILBOX);
+ @Test
+ void findMailboxWithPathLikeShouldRemoveDuplicatesAndKeepV3() {
+ mailboxDAO.save(MAILBOX).block();
+ mailboxPathV3DAO.save(MAILBOX).block();
+
+ mailboxDAO.save(MAILBOX_BIS).block();
+ mailboxPathDAO.save(MAILBOX_PATH, MAILBOX_ID_2).block();
+
+ assertThat(testee.findMailboxWithPathLike(
+ MailboxQuery.builder()
+ .privateNamespace()
+ .username(USER)
+ .expression(Wildcard.INSTANCE)
+ .build()
+ .asUserBound())
+ .collectList().block())
+ .containsOnly(MAILBOX);
+ }
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org