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 bc0e45d7a6951d57513ae885dcdf697897da86dd
Author: Benoit Tellier <btell...@linagora.com>
AuthorDate: Wed Jun 24 12:48:09 2020 +0700

    JAMES-3265 Introduce StatementRecorder.Selector
    
    This ease Cassandra statement testing
---
 .../backends/cassandra/StatementRecorder.java      | 30 ++++++++++++++++++++++
 .../backends/cassandra/TestingSessionTest.java     | 11 ++++----
 .../cassandra/mail/CassandraMessageMapperTest.java | 18 +++++--------
 3 files changed, 42 insertions(+), 17 deletions(-)

diff --git 
a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/StatementRecorder.java
 
b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/StatementRecorder.java
index e8773f5..ddd595f 100644
--- 
a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/StatementRecorder.java
+++ 
b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/StatementRecorder.java
@@ -22,11 +22,37 @@ package org.apache.james.backends.cassandra;
 
 import java.util.List;
 import java.util.concurrent.ConcurrentLinkedDeque;
+import java.util.function.Predicate;
 
+import com.datastax.driver.core.BoundStatement;
 import com.datastax.driver.core.Statement;
+import com.github.steveash.guavate.Guavate;
 import com.google.common.collect.ImmutableList;
 
 public class StatementRecorder {
+    @FunctionalInterface
+    public interface Selector {
+        Selector ALL = statements -> statements;
+
+        static Selector preparedStatement(String statementString) {
+            return preparedStatementMatching(statement -> 
statement.preparedStatement().getQueryString().equals(statementString));
+        }
+
+        static Selector preparedStatementStartingWith(String statementString) {
+            return preparedStatementMatching(statement -> 
statement.preparedStatement().getQueryString().startsWith(statementString));
+        }
+
+        private static StatementRecorder.Selector 
preparedStatementMatching(Predicate<BoundStatement> condition) {
+            return statements -> statements.stream()
+                .filter(BoundStatement.class::isInstance)
+                .map(BoundStatement.class::cast)
+                .filter(condition)
+                .collect(Guavate.toImmutableList());
+        }
+
+        List<Statement> select(List<Statement> statements);
+    }
+
     private final ConcurrentLinkedDeque statements;
 
     public StatementRecorder() {
@@ -40,4 +66,8 @@ public class StatementRecorder {
     public List<Statement> listExecutedStatements() {
         return ImmutableList.copyOf(statements);
     }
+
+    public List<Statement> listExecutedStatements(Selector selector) {
+        return selector.select(ImmutableList.copyOf(statements));
+    }
 }
diff --git 
a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/TestingSessionTest.java
 
b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/TestingSessionTest.java
index e496e34..6f9987b 100644
--- 
a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/TestingSessionTest.java
+++ 
b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/TestingSessionTest.java
@@ -33,6 +33,7 @@ import java.util.concurrent.CompletableFuture;
 
 import org.apache.james.backends.cassandra.Scenario.Barrier;
 import org.apache.james.backends.cassandra.Scenario.InjectedFailureException;
+import org.apache.james.backends.cassandra.StatementRecorder.Selector;
 import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
 import org.apache.james.backends.cassandra.versions.CassandraSchemaVersionDAO;
 import 
org.apache.james.backends.cassandra.versions.CassandraSchemaVersionModule;
@@ -81,11 +82,9 @@ class TestingSessionTest {
 
         dao.getCurrentSchemaVersion().block();
 
-        assertThat(statementRecorder.listExecutedStatements())
-            .filteredOn(statement -> statement instanceof BoundStatement)
-            .extracting(BoundStatement.class::cast)
-            .extracting(statement -> 
statement.preparedStatement().getQueryString())
-            .containsExactly("SELECT value FROM schemaVersion;");
+        assertThat(statementRecorder.listExecutedStatements(
+                Selector.preparedStatement("SELECT value FROM 
schemaVersion;")))
+            .hasSize(1);
     }
 
     @Test
@@ -96,7 +95,7 @@ class TestingSessionTest {
         dao.updateVersion(new SchemaVersion(36)).block();
         dao.getCurrentSchemaVersion().block();
 
-        assertThat(statementRecorder.listExecutedStatements())
+        assertThat(statementRecorder.listExecutedStatements(Selector.ALL))
             .filteredOn(statement -> statement instanceof BoundStatement)
             .extracting(BoundStatement.class::cast)
             .extracting(statement -> 
statement.preparedStatement().getQueryString())
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapperTest.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapperTest.java
index f115e60..c3c8bc3 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapperTest.java
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapperTest.java
@@ -30,6 +30,7 @@ import javax.mail.Flags;
 import org.apache.james.backends.cassandra.CassandraCluster;
 import org.apache.james.backends.cassandra.CassandraClusterExtension;
 import org.apache.james.backends.cassandra.StatementRecorder;
+import org.apache.james.backends.cassandra.StatementRecorder.Selector;
 import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.cassandra.ids.CassandraId;
 import org.apache.james.mailbox.cassandra.ids.CassandraMessageId;
@@ -47,7 +48,6 @@ import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.RegisterExtension;
 import org.testcontainers.shaded.com.google.common.collect.ImmutableList;
 
-import com.datastax.driver.core.BoundStatement;
 import com.github.fge.lambdas.Throwing;
 
 class CassandraMessageMapperTest extends MessageMapperTest {
@@ -69,11 +69,10 @@ class CassandraMessageMapperTest extends MessageMapperTest {
         int limit = 2;
         consume(messageMapper.findInMailbox(benwaInboxMailbox, 
MessageRange.all(), FetchType.Full, limit));
 
-        assertThat(statementRecorder.listExecutedStatements())
-            .filteredOn(statement -> statement instanceof BoundStatement)
-            .extracting(BoundStatement.class::cast)
-            .extracting(statement -> 
statement.preparedStatement().getQueryString())
-            .filteredOn(statementString -> statementString.equals("SELECT 
messageId,internalDate,bodyStartOctet,fullContentOctets,bodyOctets,bodyContent,headerContent,textualLineCount,properties,attachments
 FROM messageV2 WHERE messageId=:messageId;"))
+
+        
assertThat(statementRecorder.listExecutedStatements(Selector.preparedStatement(
+            "SELECT 
messageId,internalDate,bodyStartOctet,fullContentOctets,bodyOctets,bodyContent,headerContent,textualLineCount,properties,attachments
 " +
+                "FROM messageV2 WHERE messageId=:messageId;")))
             .hasSize(limit);
     }
 
@@ -86,11 +85,8 @@ class CassandraMessageMapperTest extends MessageMapperTest {
 
         messageMapper.updateFlags(benwaInboxMailbox, new 
FlagsUpdateCalculator(new Flags(Flags.Flag.ANSWERED), 
MessageManager.FlagsUpdateMode.REPLACE), MessageRange.all());
 
-        assertThat(statementRecorder.listExecutedStatements())
-            .filteredOn(statement -> statement instanceof BoundStatement)
-            .extracting(BoundStatement.class::cast)
-            .extracting(statement -> 
statement.preparedStatement().getQueryString())
-            .filteredOn(statementString -> statementString.equals("UPDATE 
modseq SET nextModseq=:nextModseq WHERE mailboxId=:mailboxId IF 
nextModseq=:modSeqCondition;"))
+        
assertThat(statementRecorder.listExecutedStatements(Selector.preparedStatement(
+            "UPDATE modseq SET nextModseq=:nextModseq WHERE 
mailboxId=:mailboxId IF nextModseq=:modSeqCondition;")))
             .hasSize(1);
     }
 


---------------------------------------------------------------------
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