You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by nt...@apache.org on 2021/11/19 13:36:33 UTC

[cayenne] 01/02: count queries via custom DataNode to be able to intercept all queries

This is an automated email from the ASF dual-hosted git repository.

ntimofeev pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git

commit 2d74922db903723e997d6fe9b74654a078c3c2e2
Author: Nikita Timofeev <st...@gmail.com>
AuthorDate: Fri Nov 19 16:34:42 2021 +0300

    count queries via custom DataNode to be able to intercept all queries
---
 .../SimpleIdIncrementalFaultListPrefetchIT.java    |  3 +-
 .../server/ServerCaseDataChannelInterceptor.java   | 14 +++----
 .../cayenne/unit/di/server/ServerCaseDataNode.java | 45 ++++++++++++++++++++++
 .../unit/di/server/ServerCaseDataNodeFactory.java  |  2 +-
 4 files changed, 53 insertions(+), 11 deletions(-)

diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/SimpleIdIncrementalFaultListPrefetchIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/SimpleIdIncrementalFaultListPrefetchIT.java
index faeb0eb..e6d1581 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/SimpleIdIncrementalFaultListPrefetchIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/SimpleIdIncrementalFaultListPrefetchIT.java
@@ -134,7 +134,8 @@ public class SimpleIdIncrementalFaultListPrefetchIT extends ServerCase {
         });
 
         // within the same page only one query should've been executed
-        assertEquals(1, count);
+        // we expect the second one for the prefetch
+        assertEquals(2, count);
     }
 
     /**
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataChannelInterceptor.java b/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataChannelInterceptor.java
index 8ba46e9..c053077 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataChannelInterceptor.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataChannelInterceptor.java
@@ -48,20 +48,16 @@ public class ServerCaseDataChannelInterceptor implements DataChannelInterceptor
     }
 
     public int runWithQueryCounter(UnitTestClosure closure) {
+        UnitTestDomain channel = (UnitTestDomain) serverRuntimeProvider.get().getChannel();
+        ServerCaseDataNode node = (ServerCaseDataNode)channel.getDataNodes().iterator().next();
 
-        UnitTestDomain channel = (UnitTestDomain) serverRuntimeProvider
-                .get()
-                .getChannel();
-
-        int start = channel.getQueryCount();
+        int start = node.getQueriesCount();
         int end;
         try {
             closure.execute();
+        } finally {
+            end = node.getQueriesCount();
         }
-        finally {
-            end = channel.getQueryCount();
-        }
-
         return end - start;
     }
 
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataNode.java b/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataNode.java
new file mode 100644
index 0000000..f14ebae
--- /dev/null
+++ b/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataNode.java
@@ -0,0 +1,45 @@
+/*****************************************************************
+ *   Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    https://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ ****************************************************************/
+package org.apache.cayenne.unit.di.server;
+
+import java.util.Collection;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.apache.cayenne.access.DataNode;
+import org.apache.cayenne.access.OperationObserver;
+import org.apache.cayenne.query.Query;
+
+public class ServerCaseDataNode extends DataNode {
+
+    AtomicInteger queryCounter = new AtomicInteger();
+
+    public ServerCaseDataNode(String name) {
+        super(name);
+    }
+
+    @Override
+    public void performQueries(Collection<? extends Query> queries, OperationObserver callback) {
+        super.performQueries(queries, callback);
+        queryCounter.addAndGet(queries.size());
+    }
+
+    public int getQueriesCount() {
+        return queryCounter.get();
+    }
+}
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataNodeFactory.java b/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataNodeFactory.java
index 2ffdc6e..23991c0 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataNodeFactory.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseDataNodeFactory.java
@@ -55,7 +55,7 @@ public class ServerCaseDataNodeFactory implements DataNodeFactory {
 
 	@Override
 	public DataNode createDataNode(DataNodeDescriptor nodeDescriptor) throws Exception {
-		DataNode dataNode = new DataNode(nodeDescriptor.getName());
+		DataNode dataNode = new ServerCaseDataNode(nodeDescriptor.getName());
 
 		dataNode.setJdbcEventLogger(jdbcEventLogger);
 		dataNode.setRowReaderFactory(rowReaderFactory);