You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2020/07/03 10:48:22 UTC

[james-project] 02/07: JAMES-3138 Cassandra testing instrumentation should allow injecting empty results

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 74896fd4e3d4c0392aa1cb13869070ec0397bf25
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Wed Jul 1 16:55:32 2020 +0700

    JAMES-3138 Cassandra testing instrumentation should allow injecting empty results
---
 .../java/org/apache/james/backends/cassandra/Scenario.java   | 11 +++++++++++
 .../apache/james/backends/cassandra/TestingSessionTest.java  | 12 ++++++++++++
 2 files changed, 23 insertions(+)

diff --git a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/Scenario.java b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/Scenario.java
index f5ddbf7..74c4aa8 100644
--- a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/Scenario.java
+++ b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/Scenario.java
@@ -54,6 +54,10 @@ public class Scenario {
 
         Behavior EXECUTE_NORMALLY = Session::executeAsync;
 
+        // Hack. We rely on version key unicity (because UUID) to create an empty ResultSet
+        Behavior RETURN_EMPTY = (session, statement) -> session.executeAsync(
+            "SELECT value FROM schemaVersion WHERE key=49128560-bb80-11ea-bad6-e3b96c9cd431;");
+
         static Behavior awaitOn(Barrier barrier, Behavior behavior) {
             return (session, statement) -> {
                 barrier.call();
@@ -163,6 +167,13 @@ public class Scenario {
                 validity);
         }
 
+        static RequiresValidity returnEmpty() {
+            return validity -> statementPredicate -> new ExecutionHook(
+                statementPredicate,
+                Behavior.RETURN_EMPTY,
+                validity);
+        }
+
         static RequiresValidity executeNormally() {
             return validity -> statementPredicate -> new ExecutionHook(
                 statementPredicate,
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 6f9987b..e6cd607 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
@@ -23,6 +23,7 @@ import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
 import static org.apache.james.backends.cassandra.Scenario.Builder.awaitOn;
 import static org.apache.james.backends.cassandra.Scenario.Builder.executeNormally;
 import static org.apache.james.backends.cassandra.Scenario.Builder.fail;
+import static org.apache.james.backends.cassandra.Scenario.Builder.returnEmpty;
 import static org.apache.james.backends.cassandra.versions.table.CassandraSchemaVersionTable.TABLE_NAME;
 import static org.apache.james.backends.cassandra.versions.table.CassandraSchemaVersionTable.VALUE;
 import static org.assertj.core.api.Assertions.assertThat;
@@ -76,6 +77,17 @@ class TestingSessionTest {
     }
 
     @Test
+    void daoOperationShouldNotBeInstrumentedWhenReturnEmpty(CassandraCluster cassandra) {
+        cassandra.getConf()
+            .registerScenario(returnEmpty()
+                .times(1)
+                .whenQueryStartsWith("SELECT value FROM schemaVersion;"));
+
+        assertThat(dao.getCurrentSchemaVersion().block())
+            .isEmpty();
+    }
+
+    @Test
     void recordStatementsShouldKeepTraceOfExecutedStatement(CassandraCluster cassandra) {
         StatementRecorder statementRecorder = new StatementRecorder();
         cassandra.getConf().recordStatements(statementRecorder);


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