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 5bddcdc09f983384699bb8cdf54d0dd5d286ef5e Author: Benoit Tellier <[email protected]> AuthorDate: Sun Apr 12 16:45:09 2020 +0700 JAMES-3148 ACL deletion --- .../mailbox/cassandra/mail/CassandraACLMapper.java | 16 ++++++++++++++++ .../cassandra/mail/CassandraACLMapperTest.java | 20 ++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java index 43eeef8..376cd0a 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java @@ -49,6 +49,7 @@ import com.datastax.driver.core.ConsistencyLevel; import com.datastax.driver.core.PreparedStatement; import com.datastax.driver.core.Row; import com.datastax.driver.core.Session; +import com.datastax.driver.core.querybuilder.QueryBuilder; import com.fasterxml.jackson.core.JsonProcessingException; import reactor.core.publisher.Mono; @@ -64,6 +65,7 @@ public class CassandraACLMapper { private final PreparedStatement conditionalInsertStatement; private final PreparedStatement conditionalUpdateStatement; private final PreparedStatement readStatement; + private final PreparedStatement deleteStatement; @Inject public CassandraACLMapper(Session session, CassandraUserMailboxRightsDAO userMailboxRightsDAO, CassandraConfiguration cassandraConfiguration) { @@ -72,9 +74,17 @@ public class CassandraACLMapper { this.conditionalInsertStatement = prepareConditionalInsert(session); this.conditionalUpdateStatement = prepareConditionalUpdate(session); this.readStatement = prepareReadStatement(session); + this.deleteStatement = prepareDelete(session); this.userMailboxRightsDAO = userMailboxRightsDAO; } + private PreparedStatement prepareDelete(Session session) { + return session.prepare( + QueryBuilder.delete().from(CassandraACLTable.TABLE_NAME) + .where(eq(CassandraACLTable.ID, bindMarker(CassandraACLTable.ID))) + .ifExists()); + } + private PreparedStatement prepareConditionalInsert(Session session) { return session.prepare( insertInto(CassandraACLTable.TABLE_NAME) @@ -157,6 +167,12 @@ public class CassandraACLMapper { .map(any -> aclWithVersion.mailboxACL); } + public Mono<Void> delete(CassandraId cassandraId) { + return executor.executeVoid( + deleteStatement.bind() + .setUUID(CassandraACLTable.ID, cassandraId.asUuid())); + } + private Mono<MailboxACL> insertACL(CassandraId cassandraId, MailboxACL acl) { return executor.executeReturnApplied( conditionalInsertStatement.bind() diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java index d6b66e9..d6dafc1 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java @@ -21,6 +21,7 @@ package org.apache.james.mailbox.cassandra.mail; import static com.datastax.driver.core.querybuilder.QueryBuilder.insertInto; import static org.apache.james.backends.cassandra.Scenario.Builder.awaitOn; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatCode; import java.util.UUID; import java.util.concurrent.ExecutionException; @@ -88,6 +89,25 @@ class CassandraACLMapperTest { } @Test + void deleteShouldRemoveACL() throws Exception { + MailboxACL.EntryKey key = new MailboxACL.EntryKey("bob", MailboxACL.NameType.user, false); + MailboxACL.Rfc4314Rights rights = new MailboxACL.Rfc4314Rights(MailboxACL.Right.Read); + + cassandraACLMapper.updateACL(MAILBOX_ID, + MailboxACL.command().key(key).rights(rights).asAddition()); + + cassandraACLMapper.delete(MAILBOX_ID).block(); + + assertThat(cassandraACLMapper.getACL(MAILBOX_ID).block()).isEqualTo(MailboxACL.EMPTY); + } + + @Test + void deleteShouldNotThrowWhenDoesNotExist() { + assertThatCode(() -> cassandraACLMapper.delete(MAILBOX_ID).block()) + .doesNotThrowAnyException(); + } + + @Test void addACLWhenNoneStoredShouldReturnUpdatedACL() throws Exception { MailboxACL.EntryKey key = new MailboxACL.EntryKey("bob", MailboxACL.NameType.user, false); MailboxACL.Rfc4314Rights rights = new MailboxACL.Rfc4314Rights(MailboxACL.Right.Read); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
