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

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

commit 18d55895b89e8f0600c6101712e238787f34c22c
Author: Andrus Adamchik <[email protected]>
AuthorDate: Thu May 14 10:40:24 2026 -0400

    tests cleanup - unwinding DI
    
    intercepting query telemetry at the DataNode level, no subclassing of 
DataDomain
---
 .../org/apache/cayenne/access/UnitTestDomain.java  | 61 -------------------
 .../cayenne/access/UnitTestDomainQueryAction.java  | 60 -------------------
 .../org/apache/cayenne/unit/CayenneTestEnvIT.java  | 69 ++++++++++++++++++++++
 .../org/apache/cayenne/unit/CayenneTestsEnv.java   |  4 +-
 .../unit/RuntimeCaseDataDomainProvider.java        |  6 --
 .../org/apache/cayenne/unit/RuntimeTelemetry.java  | 22 ++++---
 ...eCaseDataNode.java => CayenneTestDataNode.java} | 15 ++++-
 ...actory.java => CayenneTestDataNodeFactory.java} |  6 +-
 8 files changed, 100 insertions(+), 143 deletions(-)

diff --git 
a/cayenne/src/test/java/org/apache/cayenne/access/UnitTestDomain.java 
b/cayenne/src/test/java/org/apache/cayenne/access/UnitTestDomain.java
deleted file mode 100644
index 5f5ce1474..000000000
--- a/cayenne/src/test/java/org/apache/cayenne/access/UnitTestDomain.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*****************************************************************
- *   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.access;
-
-import org.apache.cayenne.ObjectContext;
-import org.apache.cayenne.QueryResponse;
-import org.apache.cayenne.query.Query;
-import org.junit.jupiter.api.Assertions;
-import org.opentest4j.AssertionFailedError;
-
-import java.util.Collection;
-
-public class UnitTestDomain extends DataDomain {
-
-    private boolean blockingQueries;
-
-    public UnitTestDomain(String name) {
-        super(name);
-    }
-
-    public void setBlockingQueries(boolean blockingQueries) {
-        this.blockingQueries = blockingQueries;
-    }
-
-    @Override
-    QueryResponse onQueryNoFilters(ObjectContext originatingContext, Query 
query) {
-        return new UnitTestDomainQueryAction(originatingContext, this, 
query).execute();
-    }
-
-    @Override
-    public void performQueries(
-            Collection<? extends Query> queries,
-            OperationObserver callback) {
-        checkQueryAllowed(queries);
-        super.performQueries(queries, callback);
-    }
-
-    public void checkQueryAllowed(Collection<? extends Query> queries)
-            throws AssertionFailedError {
-        if (blockingQueries) {
-            Assertions.fail("Query is unexpected: " + queries);
-        }
-    }
-}
diff --git 
a/cayenne/src/test/java/org/apache/cayenne/access/UnitTestDomainQueryAction.java
 
b/cayenne/src/test/java/org/apache/cayenne/access/UnitTestDomainQueryAction.java
deleted file mode 100644
index 2c50c923c..000000000
--- 
a/cayenne/src/test/java/org/apache/cayenne/access/UnitTestDomainQueryAction.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*****************************************************************
- *   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.access;
-
-import java.util.Collection;
-import java.util.Collections;
-
-import org.opentest4j.AssertionFailedError;
-
-import org.apache.cayenne.ObjectContext;
-import org.apache.cayenne.QueryResponse;
-import org.apache.cayenne.query.Query;
-
-/**
- * A DataDomainQueryAction that can be configured to block queries that are 
not run from
- * cache.
- */
-public class UnitTestDomainQueryAction extends DataDomainQueryAction {
-
-    public UnitTestDomainQueryAction(ObjectContext context, UnitTestDomain 
domain,
-            Query query) {
-        super(context, domain, query);
-    }
-
-    /**
-     * Exposing super as a public method.
-     */
-    @Override
-    public QueryResponse execute() {
-        return super.execute();
-    }
-
-    @Override
-    void runQueryInTransaction() {
-        checkQueryAllowed(Collections.singleton(query));
-        super.runQueryInTransaction();
-    }
-
-    protected void checkQueryAllowed(Collection<? extends Query> queries)
-            throws AssertionFailedError {
-        ((UnitTestDomain) domain).checkQueryAllowed(queries);
-    }
-}
diff --git 
a/cayenne/src/test/java/org/apache/cayenne/unit/CayenneTestEnvIT.java 
b/cayenne/src/test/java/org/apache/cayenne/unit/CayenneTestEnvIT.java
new file mode 100644
index 000000000..72c177d18
--- /dev/null
+++ b/cayenne/src/test/java/org/apache/cayenne/unit/CayenneTestEnvIT.java
@@ -0,0 +1,69 @@
+/*****************************************************************
+ *   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;
+
+import org.apache.cayenne.query.ObjectSelect;
+import org.apache.cayenne.test.jdbc.TableHelper;
+import org.apache.cayenne.testdo.testmap.Artist;
+import org.apache.cayenne.unit.runtime.CayenneProjects;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+import org.opentest4j.AssertionFailedError;
+
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
+/**
+ * Self-test for CayenneTestsEnv
+ */
+public class CayenneTestEnvIT {
+
+    @RegisterExtension
+    static final CayenneTestsEnv env = 
CayenneTestsEnv.forProject(CayenneProjects.TESTMAP_PROJECT);
+
+    private TableHelper tArtist;
+
+    @BeforeEach
+    public void setUp() {
+        tArtist = env.table("ARTIST", "ARTIST_ID", "ARTIST_NAME");
+    }
+
+    @Test
+    public void blockingQueries_failsOnUncachedSelect() throws Exception {
+        tArtist.insert(1, "a1");
+
+        assertThrows(AssertionFailedError.class,
+                () -> env.runWithQueriesBlocked(
+                        () -> 
ObjectSelect.query(Artist.class).select(env.context())));
+    }
+
+    @Test
+    public void blockingQueries_resetsAfterTaskThrows() throws Exception {
+        tArtist.insert(1, "a1");
+
+        assertThrows(RuntimeException.class,
+                () -> env.runWithQueriesBlocked(() -> {
+                    throw new RuntimeException("boom");
+                }));
+
+        // flag must have been cleared by the finally block in RuntimeTelemetry
+        assertDoesNotThrow(() -> 
ObjectSelect.query(Artist.class).select(env.context()));
+    }
+}
diff --git a/cayenne/src/test/java/org/apache/cayenne/unit/CayenneTestsEnv.java 
b/cayenne/src/test/java/org/apache/cayenne/unit/CayenneTestsEnv.java
index 1dce598ec..0d9fcc0cb 100644
--- a/cayenne/src/test/java/org/apache/cayenne/unit/CayenneTestsEnv.java
+++ b/cayenne/src/test/java/org/apache/cayenne/unit/CayenneTestsEnv.java
@@ -42,7 +42,7 @@ import org.apache.cayenne.unit.dba.UnitDbAdapter;
 import org.apache.cayenne.unit.runtime.AllTestsSchemaManager;
 import org.apache.cayenne.unit.runtime.DbCleaner;
 import org.apache.cayenne.unit.runtime.FlavoredDbHelper;
-import org.apache.cayenne.unit.runtime.RuntimeCaseDataNodeFactory;
+import org.apache.cayenne.unit.runtime.CayenneTestDataNodeFactory;
 import org.apache.cayenne.unit.runtime.RuntimeCaseDataSourceFactory;
 import org.apache.cayenne.unit.runtime.RuntimeCaseModule;
 import org.apache.cayenne.unit.util.SQLTemplateCustomizer;
@@ -265,7 +265,7 @@ public class CayenneTestsEnv implements BeforeEachCallback, 
AfterEachCallback {
             binder.bind(DbAdapter.class).toProviderInstance(() -> 
INJECTOR.getInstance(DbAdapter.class));
 
             binder.bind(DataDomain.class).toProviderInstance(new 
RuntimeCaseDataDomainProvider(unitDbAdapter));
-            
binder.bind(DataNodeFactory.class).to(RuntimeCaseDataNodeFactory.class);
+            
binder.bind(DataNodeFactory.class).to(CayenneTestDataNodeFactory.class);
             binder.bind(UnitDbAdapter.class).toInstance(unitDbAdapter);
             
binder.bind(RuntimeCaseDataSourceFactory.class).toInstance(DATA_SOURCE_FACTORY);
 
diff --git 
a/cayenne/src/test/java/org/apache/cayenne/unit/RuntimeCaseDataDomainProvider.java
 
b/cayenne/src/test/java/org/apache/cayenne/unit/RuntimeCaseDataDomainProvider.java
index b56ff33a5..be85adf71 100644
--- 
a/cayenne/src/test/java/org/apache/cayenne/unit/RuntimeCaseDataDomainProvider.java
+++ 
b/cayenne/src/test/java/org/apache/cayenne/unit/RuntimeCaseDataDomainProvider.java
@@ -20,7 +20,6 @@ package org.apache.cayenne.unit;
 
 import org.apache.cayenne.access.DataDomain;
 import org.apache.cayenne.access.DataNode;
-import org.apache.cayenne.access.UnitTestDomain;
 import org.apache.cayenne.configuration.DataNodeDescriptor;
 import org.apache.cayenne.configuration.runtime.DataDomainProvider;
 import org.apache.cayenne.configuration.runtime.DataNodeFactory;
@@ -38,11 +37,6 @@ class RuntimeCaseDataDomainProvider extends 
DataDomainProvider {
         // super fields are initialized via injection
     }
 
-    @Override
-    protected DataDomain createDataDomain(String name) {
-        return new UnitTestDomain(name);
-    }
-
     @Override
     protected DataDomain createAndInitDataDomain() throws Exception {
 
diff --git 
a/cayenne/src/test/java/org/apache/cayenne/unit/RuntimeTelemetry.java 
b/cayenne/src/test/java/org/apache/cayenne/unit/RuntimeTelemetry.java
index 26ade9896..2f94d02fa 100644
--- a/cayenne/src/test/java/org/apache/cayenne/unit/RuntimeTelemetry.java
+++ b/cayenne/src/test/java/org/apache/cayenne/unit/RuntimeTelemetry.java
@@ -18,27 +18,27 @@
  ****************************************************************/
 package org.apache.cayenne.unit;
 
-import org.apache.cayenne.access.DataDomain;
-import org.apache.cayenne.access.UnitTestDomain;
+import org.apache.cayenne.access.DataNode;
 import org.apache.cayenne.runtime.CayenneRuntime;
-import org.apache.cayenne.unit.runtime.RuntimeCaseDataNode;
+import org.apache.cayenne.unit.runtime.CayenneTestDataNode;
+
+import java.util.Collection;
 
 class RuntimeTelemetry {
 
     public static void runWithQueriesBlocked(CayenneRuntime runtime, Runnable 
task) {
 
-        UnitTestDomain channel = (UnitTestDomain) runtime.getChannel();
-        channel.setBlockingQueries(true);
+        Collection<DataNode> nodes = runtime.getDataDomain().getDataNodes();
+        setBlockingQueries(nodes, true);
         try {
             task.run();
         } finally {
-            channel.setBlockingQueries(false);
+            setBlockingQueries(nodes, false);
         }
     }
 
     public static int runWithQueryCounter(CayenneRuntime runtime, Runnable 
task) {
-        DataDomain channel = (DataDomain) runtime.getChannel();
-        RuntimeCaseDataNode node = (RuntimeCaseDataNode) 
channel.getDataNodes().iterator().next();
+        CayenneTestDataNode node = (CayenneTestDataNode) 
runtime.getDataDomain().getDataNodes().iterator().next();
 
         int start = node.getQueriesCount();
         int end;
@@ -49,4 +49,10 @@ class RuntimeTelemetry {
         }
         return end - start;
     }
+
+    private static void setBlockingQueries(Collection<DataNode> nodes, boolean 
blocking) {
+        for (DataNode node : nodes) {
+            ((CayenneTestDataNode) node).setBlockingQueries(blocking);
+        }
+    }
 }
diff --git 
a/cayenne/src/test/java/org/apache/cayenne/unit/runtime/RuntimeCaseDataNode.java
 
b/cayenne/src/test/java/org/apache/cayenne/unit/runtime/CayenneTestDataNode.java
similarity index 76%
rename from 
cayenne/src/test/java/org/apache/cayenne/unit/runtime/RuntimeCaseDataNode.java
rename to 
cayenne/src/test/java/org/apache/cayenne/unit/runtime/CayenneTestDataNode.java
index c00dac3b5..29e7f1956 100644
--- 
a/cayenne/src/test/java/org/apache/cayenne/unit/runtime/RuntimeCaseDataNode.java
+++ 
b/cayenne/src/test/java/org/apache/cayenne/unit/runtime/CayenneTestDataNode.java
@@ -21,20 +21,25 @@ package org.apache.cayenne.unit.runtime;
 import org.apache.cayenne.access.DataNode;
 import org.apache.cayenne.access.OperationObserver;
 import org.apache.cayenne.query.Query;
+import org.junit.jupiter.api.Assertions;
 
 import java.util.Collection;
 import java.util.concurrent.atomic.AtomicInteger;
 
-public class RuntimeCaseDataNode extends DataNode {
+public class CayenneTestDataNode extends DataNode {
 
-    AtomicInteger queryCounter = new AtomicInteger();
+    private final AtomicInteger queryCounter = new AtomicInteger();
+    private volatile boolean blockingQueries;
 
-    public RuntimeCaseDataNode(String name) {
+    public CayenneTestDataNode(String name) {
         super(name);
     }
 
     @Override
     public void performQueries(Collection<? extends Query> queries, 
OperationObserver callback) {
+        if (blockingQueries) {
+            Assertions.fail("Query is unexpected: " + queries);
+        }
         super.performQueries(queries, callback);
         queryCounter.addAndGet(queries.size());
     }
@@ -42,4 +47,8 @@ public class RuntimeCaseDataNode extends DataNode {
     public int getQueriesCount() {
         return queryCounter.get();
     }
+
+    public void setBlockingQueries(boolean blockingQueries) {
+        this.blockingQueries = blockingQueries;
+    }
 }
diff --git 
a/cayenne/src/test/java/org/apache/cayenne/unit/runtime/RuntimeCaseDataNodeFactory.java
 
b/cayenne/src/test/java/org/apache/cayenne/unit/runtime/CayenneTestDataNodeFactory.java
similarity index 94%
rename from 
cayenne/src/test/java/org/apache/cayenne/unit/runtime/RuntimeCaseDataNodeFactory.java
rename to 
cayenne/src/test/java/org/apache/cayenne/unit/runtime/CayenneTestDataNodeFactory.java
index 21d0a0065..321ffc3a2 100644
--- 
a/cayenne/src/test/java/org/apache/cayenne/unit/runtime/RuntimeCaseDataNodeFactory.java
+++ 
b/cayenne/src/test/java/org/apache/cayenne/unit/runtime/CayenneTestDataNodeFactory.java
@@ -30,7 +30,7 @@ import org.apache.cayenne.dba.DbAdapter;
 import org.apache.cayenne.di.Inject;
 import org.apache.cayenne.log.JdbcEventLogger;
 
-public class RuntimeCaseDataNodeFactory implements DataNodeFactory {
+public class CayenneTestDataNodeFactory implements DataNodeFactory {
 
        @Inject
        private JdbcEventLogger jdbcEventLogger;
@@ -54,8 +54,8 @@ public class RuntimeCaseDataNodeFactory implements 
DataNodeFactory {
        protected SQLTemplateProcessor sqlTemplateProcessor;
 
        @Override
-       public DataNode createDataNode(DataNodeDescriptor nodeDescriptor) 
throws Exception {
-               DataNode dataNode = new 
RuntimeCaseDataNode(nodeDescriptor.getName());
+       public DataNode createDataNode(DataNodeDescriptor nodeDescriptor) {
+               DataNode dataNode = new 
CayenneTestDataNode(nodeDescriptor.getName());
 
                dataNode.setJdbcEventLogger(jdbcEventLogger);
                dataNode.setRowReaderFactory(rowReaderFactory);

Reply via email to