JAMES-1951 CassandraApplicableFlagsDAO should not care about system Flags as 
they are already always added to the answer

Limiting updates on this table will furthermore have benefits for read and 
compaction.

Tables modification are certified retro-compatible:
 - Use old diff, and plan Gatling tests to populate Cassandra
 - Run the same Gatling test with new code without purging Cassandra to ensure 
retro-compatibility.

And transform CassandraApplicableFlagDAO to only manage user flags


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/d356b483
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/d356b483
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/d356b483

Branch: refs/heads/master
Commit: d356b483c0436754d39f3b24e4061af1cdf4b93d
Parents: e56bb6a
Author: benwa <btell...@linagora.com>
Authored: Fri May 26 09:41:19 2017 +0700
Committer: Antoine Duprat <adup...@linagora.com>
Committed: Fri Jun 9 21:56:01 2017 +0200

----------------------------------------------------------------------
 .../org/apache/james/mailbox/FlagsBuilder.java  | 10 ++-
 .../mail/CassandraApplicableFlagDAO.java        | 40 +++------
 .../mail/CassandraIndexTableHandler.java        |  6 +-
 .../mailbox/cassandra/mail/FlagsExtractor.java  |  5 --
 .../modules/CassandraApplicableFlagsModule.java |  6 --
 .../table/CassandraApplicableFlagTable.java     |  2 +-
 .../mail/CassandraApplicableFlagDAOTest.java    | 94 +++++---------------
 .../mail/CassandraIndexTableHandlerTest.java    | 29 +++---
 8 files changed, 59 insertions(+), 133 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/d356b483/mailbox/api/src/main/java/org/apache/james/mailbox/FlagsBuilder.java
----------------------------------------------------------------------
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/FlagsBuilder.java 
b/mailbox/api/src/main/java/org/apache/james/mailbox/FlagsBuilder.java
index 1414cbf..25a64dd 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/FlagsBuilder.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/FlagsBuilder.java
@@ -34,21 +34,23 @@ public class FlagsBuilder {
     }
 
     public FlagsBuilder add(Flags.Flag... flags) {
-        for(Flags.Flag flag : flags) {
+        for (Flags.Flag flag : flags) {
             internalFlags.add(flag);
         }
         return this;
     }
 
     public FlagsBuilder add(String... flags) {
-        for(String userFlag : flags) {
+        for (String userFlag : flags) {
             internalFlags.add(userFlag);
         }
         return this;
     }
 
-    public FlagsBuilder add(Flags flags) {
-        internalFlags.add(flags);
+    public FlagsBuilder add(Flags... flagsArray) {
+        for (Flags flags: flagsArray) {
+            internalFlags.add(flags);
+        }
         return this;
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/d356b483/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraApplicableFlagDAO.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraApplicableFlagDAO.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraApplicableFlagDAO.java
index 4d5756e..71ea774 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraApplicableFlagDAO.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraApplicableFlagDAO.java
@@ -23,34 +23,30 @@ import static 
com.datastax.driver.core.querybuilder.QueryBuilder.add;
 import static com.datastax.driver.core.querybuilder.QueryBuilder.bindMarker;
 import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
 import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
-import static com.datastax.driver.core.querybuilder.QueryBuilder.set;
 import static com.datastax.driver.core.querybuilder.QueryBuilder.update;
 import static 
org.apache.james.mailbox.cassandra.table.CassandraApplicableFlagTable.FIELDS;
 import static 
org.apache.james.mailbox.cassandra.table.CassandraApplicableFlagTable.MAILBOX_ID;
 import static 
org.apache.james.mailbox.cassandra.table.CassandraApplicableFlagTable.TABLE_NAME;
-import static org.apache.james.mailbox.cassandra.table.Flag.FLAG_TO_STRING_MAP;
 import static org.apache.james.mailbox.cassandra.table.Flag.USER_FLAGS;
 
-import java.util.Arrays;
 import java.util.Optional;
+import java.util.Set;
 import java.util.concurrent.CompletableFuture;
 
 import javax.inject.Inject;
 import javax.mail.Flags;
-import javax.mail.Flags.Flag;
 
 import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
-import org.apache.james.mailbox.FlagsBuilder;
 import org.apache.james.mailbox.cassandra.CassandraId;
 
 import com.datastax.driver.core.PreparedStatement;
 import com.datastax.driver.core.Session;
 import com.datastax.driver.core.querybuilder.Update;
 import com.datastax.driver.core.querybuilder.Update.Assignments;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Sets;
 
 public class CassandraApplicableFlagDAO {
-    private static final Flags.Flag[] ALL_APPLICABLE_FLAGS = 
{Flags.Flag.ANSWERED, Flags.Flag.DELETED, Flags.Flag.DRAFT, Flags.Flag.SEEN, 
Flags.Flag.FLAGGED };
-    private static final Flags EMPTY_FLAGS = new Flags();
 
     private final CassandraAsyncExecutor cassandraAsyncExecutor;
     private final PreparedStatement select;
@@ -75,36 +71,22 @@ public class CassandraApplicableFlagDAO {
                 rowOptional.map(row -> new 
FlagsExtractor(row).getApplicableFlags()));
     }
 
-    public CompletableFuture<Void> updateApplicableFlags(CassandraId 
cassandraId, Flags flags) {
-        Flags newFlags = new FlagsBuilder().add(flags).build();
-        newFlags.remove(Flag.RECENT);
-        newFlags.remove(Flag.USER);
-
-        if (newFlags.equals(EMPTY_FLAGS)) {
+    public CompletableFuture<Void> updateApplicableFlags(CassandraId 
cassandraId, Set<String> toBeAdded) {
+        if (toBeAdded.isEmpty()) {
             return CompletableFuture.completedFuture(null);
         }
-        return cassandraAsyncExecutor.executeVoid(updateQuery(cassandraId, 
newFlags));
+        return cassandraAsyncExecutor.executeVoid(updateQuery(cassandraId, 
toBeAdded));
     }
 
-    private Update.Where updateQuery(CassandraId cassandraId, Flags flags) {
-        return addSystemFlagsToQuery(flags,
-            addUserFlagsToQuery(flags,
-                update(TABLE_NAME).with()))
+    private Update.Where updateQuery(CassandraId cassandraId, Set<String> 
userFlags) {
+        return addUserFlagsToQuery(userFlags,
+                update(TABLE_NAME).with())
             .where(eq(MAILBOX_ID, cassandraId.asUuid()));
     }
 
-    private Assignments addUserFlagsToQuery(Flags flags, Assignments 
updateQuery) {
-        if (flags.getUserFlags() != null && flags.getUserFlags().length > 0) {
-            Arrays.stream(flags.getUserFlags())
-                .forEach(userFlag -> updateQuery.and(add(USER_FLAGS, 
userFlag)));
-        }
+    private Assignments addUserFlagsToQuery(Set<String> userFlags, Assignments 
updateQuery) {
+        userFlags.forEach(userFlag -> updateQuery.and(add(USER_FLAGS, 
userFlag)));
         return updateQuery;
     }
 
-    private Assignments addSystemFlagsToQuery(Flags flags, Assignments 
updateQuery) {
-        Arrays.stream(ALL_APPLICABLE_FLAGS)
-            .filter(flags::contains)
-            .forEach(flag -> updateQuery.and(set(FLAG_TO_STRING_MAP.get(flag), 
true)));
-        return updateQuery;
-    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/d356b483/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraIndexTableHandler.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraIndexTableHandler.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraIndexTableHandler.java
index b99e91d..c173c7b 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraIndexTableHandler.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraIndexTableHandler.java
@@ -30,6 +30,8 @@ import 
org.apache.james.mailbox.model.ComposedMessageIdWithMetaData;
 import org.apache.james.mailbox.model.UpdatedFlags;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 
+import com.google.common.collect.ImmutableSet;
+
 public class CassandraIndexTableHandler {
 
     private final CassandraMailboxRecentsDAO mailboxRecentDAO;
@@ -70,14 +72,14 @@ public class CassandraIndexTableHandler {
             addRecentOnSave(mailboxId, message),
             incrementUnseenOnSave(mailboxId, flags),
             mailboxCounterDAO.incrementCount(mailboxId),
-            applicableFlagDAO.updateApplicableFlags(mailboxId, flags));
+            applicableFlagDAO.updateApplicableFlags(mailboxId, 
ImmutableSet.copyOf(flags.getUserFlags())));
     }
 
     public CompletableFuture<Void> updateIndexOnFlagsUpdate(CassandraId 
mailboxId, UpdatedFlags updatedFlags) {
         return 
CompletableFuture.allOf(manageUnseenMessageCountsOnFlagsUpdate(mailboxId, 
updatedFlags),
                                        manageRecentOnFlagsUpdate(mailboxId, 
updatedFlags),
                                        
updateFirstUnseenOnFlagsUpdate(mailboxId, updatedFlags),
-                                       
applicableFlagDAO.updateApplicableFlags(mailboxId, updatedFlags.getNewFlags()),
+                                       
applicableFlagDAO.updateApplicableFlags(mailboxId, 
ImmutableSet.copyOf(updatedFlags.userFlagIterator())),
                                        updateDeletedOnFlagsUpdate(mailboxId, 
updatedFlags));
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/d356b483/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/FlagsExtractor.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/FlagsExtractor.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/FlagsExtractor.java
index 7124495..d1b33b5 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/FlagsExtractor.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/FlagsExtractor.java
@@ -47,11 +47,6 @@ public class FlagsExtractor {
 
     public Flags getApplicableFlags() {
         Flags flags = new Flags();
-        for (String flag : Flag.ALL_APPLICABLE_FLAG) {
-            if (row.getBool(flag)) {
-                flags.add(Flag.JAVAX_MAIL_FLAG.get(flag));
-            }
-        }
         row.getSet(Flag.USER_FLAGS, String.class)
             .stream()
             .forEach(flags::add);

http://git-wip-us.apache.org/repos/asf/james-project/blob/d356b483/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraApplicableFlagsModule.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraApplicableFlagsModule.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraApplicableFlagsModule.java
index 5d1c183..35de1b4 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraApplicableFlagsModule.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraApplicableFlagsModule.java
@@ -19,7 +19,6 @@
 
 package org.apache.james.mailbox.cassandra.modules;
 
-import static com.datastax.driver.core.DataType.cboolean;
 import static com.datastax.driver.core.DataType.set;
 import static com.datastax.driver.core.DataType.text;
 import static com.datastax.driver.core.DataType.timeuuid;
@@ -46,11 +45,6 @@ public class CassandraApplicableFlagsModule implements 
CassandraModule {
                 
SchemaBuilder.createTable(CassandraApplicableFlagTable.TABLE_NAME)
                     .ifNotExists()
                     .addPartitionKey(CassandraApplicableFlagTable.MAILBOX_ID, 
timeuuid())
-                    .addColumn(Flag.ANSWERED, cboolean())
-                    .addColumn(Flag.DELETED, cboolean())
-                    .addColumn(Flag.DRAFT, cboolean())
-                    .addColumn(Flag.FLAGGED, cboolean())
-                    .addColumn(Flag.SEEN, cboolean())
                     .addColumn(Flag.USER_FLAGS, set(text()))
                     .withOptions()
                     .compactionOptions(SchemaBuilder.leveledStrategy())

http://git-wip-us.apache.org/repos/asf/james-project/blob/d356b483/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraApplicableFlagTable.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraApplicableFlagTable.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraApplicableFlagTable.java
index a7eb74c..cb97028 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraApplicableFlagTable.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraApplicableFlagTable.java
@@ -24,5 +24,5 @@ public interface CassandraApplicableFlagTable {
     String TABLE_NAME = "applicableFlag";
     String MAILBOX_ID = "mailboxId";
 
-    String[] FIELDS = { MAILBOX_ID, Flag.ANSWERED, Flag.DELETED, Flag.DRAFT, 
Flag.FLAGGED, Flag.SEEN, Flag.USER_FLAGS };
+    String[] FIELDS = { MAILBOX_ID, Flag.USER_FLAGS };
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/d356b483/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraApplicableFlagDAOTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraApplicableFlagDAOTest.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraApplicableFlagDAOTest.java
index f37ca92..8d5450d 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraApplicableFlagDAOTest.java
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraApplicableFlagDAOTest.java
@@ -24,7 +24,6 @@ import static org.assertj.core.api.Assertions.assertThat;
 import java.util.Optional;
 
 import javax.mail.Flags;
-import javax.mail.Flags.Flag;
 
 import org.apache.james.backends.cassandra.CassandraCluster;
 import org.apache.james.mailbox.FlagsBuilder;
@@ -34,6 +33,8 @@ import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
+import com.google.common.collect.ImmutableSet;
+
 public class CassandraApplicableFlagDAOTest {
 
     public static final String USER_FLAG = "User Flag";
@@ -64,111 +65,60 @@ public class CassandraApplicableFlagDAOTest {
     }
 
     @Test
-    public void updateApplicableFlagsShouldSupportEmptyFlags() throws 
Exception {
-        testee.updateApplicableFlags(CASSANDRA_ID, new Flags()).join();
-
-        Optional<Flags> actual = 
testee.retrieveApplicableFlag(CASSANDRA_ID).join();
-        assertThat(actual.isPresent()).isFalse();
-    }
-
-    @Test
-    public void updateApplicableFlagsShouldIgnoreRecentFlags() throws 
Exception {
-        testee.updateApplicableFlags(CASSANDRA_ID, new 
Flags(Flag.RECENT)).join();
+    public void updateApplicableFlagsShouldSupportEmptyUserFlags() throws 
Exception {
+        testee.updateApplicableFlags(CASSANDRA_ID, ImmutableSet.of()).join();
 
         Optional<Flags> actual = 
testee.retrieveApplicableFlag(CASSANDRA_ID).join();
         assertThat(actual.isPresent()).isFalse();
     }
 
     @Test
-    public void updateApplicableFlagsShouldUpdateMultiFlags() throws Exception 
{
-        Flags flags = new FlagsBuilder().add(Flag.ANSWERED, 
Flag.DELETED).build();
-        testee.updateApplicableFlags(CASSANDRA_ID, flags).join();
-
-        Optional<Flags> actual = 
testee.retrieveApplicableFlag(CASSANDRA_ID).join();
-        assertThat(actual.isPresent()).isTrue();
-        assertThat(actual.get()).isEqualTo(flags);
-    }
-
-    @Test
-    public void updateApplicableFlagsShouldAddAnsweredFlag() throws Exception {
-        Flags flags = new Flags(Flag.ANSWERED);
-        testee.updateApplicableFlags(CASSANDRA_ID, flags).join();
-
-        Optional<Flags> actual = 
testee.retrieveApplicableFlag(CASSANDRA_ID).join();
-        assertThat(actual.isPresent()).isTrue();
-        assertThat(actual.get()).isEqualTo(flags);
-    }
-
-    @Test
-    public void updateApplicableFlagsShouldAddDeletedFlag() throws Exception {
-        Flags flags = new Flags(Flag.DELETED);
-        testee.updateApplicableFlags(CASSANDRA_ID, flags).join();
-
-        Optional<Flags> actual = 
testee.retrieveApplicableFlag(CASSANDRA_ID).join();
-        assertThat(actual.isPresent()).isTrue();
-        assertThat(actual.get()).isEqualTo(flags);
-    }
-
-    @Test
-    public void updateApplicableFlagsShouldAddDraftFlag() throws Exception {
-        Flags flags = new Flags(Flag.DRAFT);
-        testee.updateApplicableFlags(CASSANDRA_ID, flags).join();
-
-        Optional<Flags> actual = 
testee.retrieveApplicableFlag(CASSANDRA_ID).join();
-        assertThat(actual.isPresent()).isTrue();
-        assertThat(actual.get()).isEqualTo(flags);
-    }
-
-    @Test
-    public void updateApplicableFlagsShouldAddFlaggedFlag() throws Exception {
-        Flags flags = new Flags(Flag.FLAGGED);
-        testee.updateApplicableFlags(CASSANDRA_ID, flags).join();
+    public void updateApplicableFlagsShouldUpdateUserFlag() throws Exception {
+        testee.updateApplicableFlags(CASSANDRA_ID, 
ImmutableSet.of(USER_FLAG)).join();
 
         Optional<Flags> actual = 
testee.retrieveApplicableFlag(CASSANDRA_ID).join();
         assertThat(actual.isPresent()).isTrue();
-        assertThat(actual.get()).isEqualTo(flags);
+        assertThat(actual.get()).isEqualTo(new Flags(USER_FLAG));
     }
 
     @Test
-    public void updateApplicableFlagsShouldAddSeenFlag() throws Exception {
-        Flags flags = new Flags(Flag.SEEN);
-        testee.updateApplicableFlags(CASSANDRA_ID, flags).join();
+    public void updateApplicableFlagsShouldUnionUserFlags() throws Exception {
+        testee.updateApplicableFlags(CASSANDRA_ID, 
ImmutableSet.of(USER_FLAG)).join();
+        testee.updateApplicableFlags(CASSANDRA_ID, 
ImmutableSet.of(USER_FLAG2)).join();
 
         Optional<Flags> actual = 
testee.retrieveApplicableFlag(CASSANDRA_ID).join();
         assertThat(actual.isPresent()).isTrue();
-        assertThat(actual.get()).isEqualTo(flags);
+        
assertThat(actual.get()).isEqualTo(FlagsBuilder.builder().add(USER_FLAG, 
USER_FLAG2).build());
     }
 
     @Test
-    public void updateApplicableFlagsShouldUnionSystemFlags() throws Exception 
{
-        testee.updateApplicableFlags(CASSANDRA_ID, new 
Flags(Flag.ANSWERED)).join();
-        testee.updateApplicableFlags(CASSANDRA_ID, new 
Flags(Flag.SEEN)).join();
+    public void updateApplicableFlagsShouldBeIdempotent() throws Exception {
+        testee.updateApplicableFlags(CASSANDRA_ID, 
ImmutableSet.of(USER_FLAG)).join();
+        testee.updateApplicableFlags(CASSANDRA_ID, 
ImmutableSet.of(USER_FLAG)).join();
 
         Optional<Flags> actual = 
testee.retrieveApplicableFlag(CASSANDRA_ID).join();
         assertThat(actual.isPresent()).isTrue();
-        assertThat(actual.get()).isEqualTo(new 
FlagsBuilder().add(Flag.ANSWERED, Flag.SEEN).build());
+        assertThat(actual.get()).isEqualTo(new Flags(USER_FLAG));
     }
 
     @Test
-    public void updateApplicableFlagsShouldUpdateUserFlag() throws Exception {
-        Flags flags = new 
FlagsBuilder().add(Flag.ANSWERED).add(USER_FLAG).build();
+    public void 
updateApplicableFlagsShouldSkipAlreadyStoredFlagsWhenAddingFlag() throws 
Exception {
+        testee.updateApplicableFlags(CASSANDRA_ID, 
ImmutableSet.of(USER_FLAG)).join();
+        testee.updateApplicableFlags(CASSANDRA_ID, ImmutableSet.of(USER_FLAG, 
USER_FLAG2)).join();
 
-        testee.updateApplicableFlags(CASSANDRA_ID, flags).join();
 
         Optional<Flags> actual = 
testee.retrieveApplicableFlag(CASSANDRA_ID).join();
         assertThat(actual.isPresent()).isTrue();
-        assertThat(actual.get()).isEqualTo(flags);
+        
assertThat(actual.get()).isEqualTo(FlagsBuilder.builder().add(USER_FLAG, 
USER_FLAG2).build());
     }
 
     @Test
-    public void updateApplicableFlagsShouldUnionUserFlags() throws Exception {
-        testee.updateApplicableFlags(CASSANDRA_ID, new 
Flags(USER_FLAG)).join();
-
-        testee.updateApplicableFlags(CASSANDRA_ID, new 
Flags(USER_FLAG2)).join();
+    public void updateApplicableFlagsShouldUpdateMultiFlags() throws Exception 
{
+        testee.updateApplicableFlags(CASSANDRA_ID, ImmutableSet.of(USER_FLAG, 
USER_FLAG2)).join();
 
         Optional<Flags> actual = 
testee.retrieveApplicableFlag(CASSANDRA_ID).join();
         assertThat(actual.isPresent()).isTrue();
-        assertThat(actual.get()).isEqualTo(new FlagsBuilder().add(USER_FLAG, 
USER_FLAG2).build());
+        
assertThat(actual.get()).isEqualTo(FlagsBuilder.builder().add(USER_FLAG, 
USER_FLAG2).build());
     }
 
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/d356b483/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraIndexTableHandlerTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraIndexTableHandlerTest.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraIndexTableHandlerTest.java
index e1b9f34..184e114 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraIndexTableHandlerTest.java
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraIndexTableHandlerTest.java
@@ -26,9 +26,7 @@ import static org.mockito.Mockito.when;
 import java.util.Optional;
 
 import javax.mail.Flags;
-import javax.mail.Flags.Flag;
 
-import com.github.steveash.guavate.Guavate;
 import org.apache.james.backends.cassandra.CassandraCluster;
 import org.apache.james.backends.cassandra.init.CassandraModuleComposite;
 import org.apache.james.mailbox.FlagsBuilder;
@@ -52,6 +50,8 @@ import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
+import com.github.steveash.guavate.Guavate;
+
 public class CassandraIndexTableHandlerTest {
 
     public static final CassandraId MAILBOX_ID = CassandraId.timeBased();
@@ -650,42 +650,43 @@ public class CassandraIndexTableHandlerTest {
 
     @Test
     public void updateIndexOnAddShouldUpdateApplicableFlag() throws Exception {
-        Flags answeredFlag = new Flags(Flag.ANSWERED);
+        Flags customFlags = new Flags("custom");
         MailboxMessage message = mock(MailboxMessage.class);
-        when(message.createFlags()).thenReturn(answeredFlag);
+        when(message.createFlags()).thenReturn(customFlags);
         when(message.getUid()).thenReturn(MESSAGE_UID);
         testee.updateIndexOnAdd(message, MAILBOX_ID).join();
 
         Flags applicableFlag = 
applicableFlagDAO.retrieveApplicableFlag(MAILBOX_ID).join().get();
 
-        assertThat(applicableFlag).isEqualTo(answeredFlag);
+        assertThat(applicableFlag).isEqualTo(customFlags);
     }
 
     @Test
     public void updateIndexOnFlagsUpdateShouldUnionApplicableFlag() throws 
Exception {
-        Flags answeredFlag = new Flags(Flag.ANSWERED);
+        Flags customFlag = new Flags("custom");
         MailboxMessage message = mock(MailboxMessage.class);
-        when(message.createFlags()).thenReturn(answeredFlag);
+        when(message.createFlags()).thenReturn(customFlag);
         when(message.getUid()).thenReturn(MESSAGE_UID);
         testee.updateIndexOnAdd(message, MAILBOX_ID).join();
 
+        Flags customBis = new Flags("customBis");
         testee.updateIndexOnFlagsUpdate(MAILBOX_ID, UpdatedFlags.builder()
             .uid(MESSAGE_UID)
-            .newFlags(new Flags(Flag.DELETED))
-            .oldFlags(answeredFlag)
+            .newFlags(customBis)
+            .oldFlags(customFlag)
             .modSeq(MODSEQ)
             .build()).join();
 
         Flags applicableFlag = 
applicableFlagDAO.retrieveApplicableFlag(MAILBOX_ID).join().get();
 
-        assertThat(applicableFlag).isEqualTo(new 
FlagsBuilder().add(Flag.ANSWERED, Flag.DELETED).build());
+        assertThat(applicableFlag).isEqualTo(new 
FlagsBuilder().add(customFlag, customBis).build());
     }
 
     @Test
     public void applicableFlagShouldKeepAllFlagsEvenTheMessageRemovesFlag() 
throws Exception {
-        Flags messageFlags = new Flags(Flag.ANSWERED);
-        messageFlags.add(Flag.DELETED);
-        messageFlags.add(Flag.DRAFT);
+        Flags messageFlags = FlagsBuilder.builder()
+            .add("custom1", "custom2", "custom3")
+            .build();
 
         MailboxMessage message = mock(MailboxMessage.class);
         when(message.createFlags()).thenReturn(messageFlags);
@@ -701,6 +702,6 @@ public class CassandraIndexTableHandlerTest {
             .build()).join();
 
         Flags applicableFlag = 
applicableFlagDAO.retrieveApplicableFlag(MAILBOX_ID).join().get();
-        assertThat(applicableFlag).isEqualTo(new 
FlagsBuilder().add(Flag.ANSWERED, Flag.DRAFT, Flag.DELETED).build());
+        assertThat(applicableFlag).isEqualTo(messageFlags);
     }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to