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