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 1bcf43edce654c5fe368bc04792c3fd3600fbe89 Author: Andrus Adamchik <[email protected]> AuthorDate: Sat May 16 13:56:29 2026 -0400 Tests cleanup --- .../org/apache/cayenne/dbsync/merge/MergeCase.java | 2 +- .../dbsync/reverse/dbload/BaseLoaderIT.java | 2 +- .../cayenne/dbsync/reverse/dbload/DbLoaderIT.java | 2 +- .../cayenne/access/DataNodeQueryExceptionsIT.java | 2 +- .../cayenne/access/jdbc/SQLTemplateActionIT.java | 14 ++-- .../org/apache/cayenne/dba/JdbcPkGeneratorIT.java | 9 ++- .../org/apache/cayenne/dba/TypesMappingIT.java | 4 +- .../cayenne/dba/sqlserver/SQLServerSnifferIT.java | 2 +- .../org/apache/cayenne/unit/CayenneTestsEnv.java | 34 +++++----- .../cayenne/unit/{runtime => }/DbCleaner.java | 7 +- ...estsSchemaManager.java => DbSchemaManager.java} | 18 ++++-- .../org/apache/cayenne/unit/TestDataSources.java | 75 ---------------------- 12 files changed, 55 insertions(+), 116 deletions(-) diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/MergeCase.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/MergeCase.java index d835e481a..ec5c485ca 100644 --- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/MergeCase.java +++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/merge/MergeCase.java @@ -227,7 +227,7 @@ public abstract class MergeCase { private void executeSql(String sql) throws Exception { - try (Connection conn = CayenneTestsEnv.DATA_SOURCES.sharedDataSource().getConnection();) { + try (Connection conn = CayenneTestsEnv.COMMON_SCHEMA.dataSource().getConnection();) { try (Statement st = conn.createStatement();) { st.execute(sql); diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/BaseLoaderIT.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/BaseLoaderIT.java index 12401bbd9..407702fa5 100644 --- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/BaseLoaderIT.java +++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/BaseLoaderIT.java @@ -56,7 +56,7 @@ public class BaseLoaderIT { accessStackAdapter = env.testDbAdapter(); store = new DbLoadDataStore(); assertTrue(store.getDbEntities().isEmpty(), "Store is not empty"); - this.connection = CayenneTestsEnv.DATA_SOURCES.sharedDataSource().getConnection(); + this.connection = CayenneTestsEnv.COMMON_SCHEMA.dataSource().getConnection(); } @AfterEach diff --git a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/DbLoaderIT.java b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/DbLoaderIT.java index f54c4dfef..c64bc3108 100644 --- a/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/DbLoaderIT.java +++ b/cayenne-dbsync/src/test/java/org/apache/cayenne/dbsync/reverse/dbload/DbLoaderIT.java @@ -138,7 +138,7 @@ public class DbLoaderIT { @BeforeEach public void before() throws Exception { adapter = env.dataNode().getAdapter(); - this.connection = CayenneTestsEnv.DATA_SOURCES.sharedDataSource().getConnection(); + this.connection = CayenneTestsEnv.COMMON_SCHEMA.dataSource().getConnection(); } private DbLoader createDbLoader() { diff --git a/cayenne/src/test/java/org/apache/cayenne/access/DataNodeQueryExceptionsIT.java b/cayenne/src/test/java/org/apache/cayenne/access/DataNodeQueryExceptionsIT.java index 7d3a74cf6..b30565146 100644 --- a/cayenne/src/test/java/org/apache/cayenne/access/DataNodeQueryExceptionsIT.java +++ b/cayenne/src/test/java/org/apache/cayenne/access/DataNodeQueryExceptionsIT.java @@ -77,7 +77,7 @@ public class DataNodeQueryExceptionsIT { int activeConnections() { try { - UnmanagedPoolingDataSource ds = CayenneTestsEnv.DATA_SOURCES.sharedDataSource().unwrap(UnmanagedPoolingDataSource.class); + UnmanagedPoolingDataSource ds = CayenneTestsEnv.COMMON_SCHEMA.dataSource().unwrap(UnmanagedPoolingDataSource.class); Method poolSize = UnmanagedPoolingDataSource.class.getDeclaredMethod("poolSize"); poolSize.setAccessible(true); diff --git a/cayenne/src/test/java/org/apache/cayenne/access/jdbc/SQLTemplateActionIT.java b/cayenne/src/test/java/org/apache/cayenne/access/jdbc/SQLTemplateActionIT.java index 93b2b10ee..3c862a91f 100644 --- a/cayenne/src/test/java/org/apache/cayenne/access/jdbc/SQLTemplateActionIT.java +++ b/cayenne/src/test/java/org/apache/cayenne/access/jdbc/SQLTemplateActionIT.java @@ -106,7 +106,7 @@ public class SQLTemplateActionIT { MockOperationObserver observer = new MockOperationObserver(); - try (Connection c = CayenneTestsEnv.DATA_SOURCES.sharedDataSource().getConnection();) { + try (Connection c = CayenneTestsEnv.COMMON_SCHEMA.dataSource().getConnection();) { plan.performAction(c, observer); } @@ -163,7 +163,7 @@ public class SQLTemplateActionIT { MockOperationObserver observer = new MockOperationObserver(); - try (Connection c = CayenneTestsEnv.DATA_SOURCES.sharedDataSource().getConnection();) { + try (Connection c = CayenneTestsEnv.COMMON_SCHEMA.dataSource().getConnection();) { plan.performAction(c, observer); } @@ -193,7 +193,7 @@ public class SQLTemplateActionIT { MockOperationObserver observer = new MockOperationObserver(); - try (Connection c = CayenneTestsEnv.DATA_SOURCES.sharedDataSource().getConnection();) { + try (Connection c = CayenneTestsEnv.COMMON_SCHEMA.dataSource().getConnection();) { plan.performAction(c, observer); } @@ -223,7 +223,7 @@ public class SQLTemplateActionIT { MockOperationObserver observer = new MockOperationObserver(); - try (Connection c = CayenneTestsEnv.DATA_SOURCES.sharedDataSource().getConnection();) { + try (Connection c = CayenneTestsEnv.COMMON_SCHEMA.dataSource().getConnection();) { plan.performAction(c, observer); } @@ -251,7 +251,7 @@ public class SQLTemplateActionIT { SQLAction action = node.getAdapter().getAction(template, node); - try (Connection c = CayenneTestsEnv.DATA_SOURCES.sharedDataSource().getConnection();) { + try (Connection c = CayenneTestsEnv.COMMON_SCHEMA.dataSource().getConnection();) { MockOperationObserver observer = new MockOperationObserver(); action.performAction(c, observer); @@ -273,7 +273,7 @@ public class SQLTemplateActionIT { SQLAction action = node.getAdapter().getAction(template, node); - try (Connection c = CayenneTestsEnv.DATA_SOURCES.sharedDataSource().getConnection();) { + try (Connection c = CayenneTestsEnv.COMMON_SCHEMA.dataSource().getConnection();) { MockOperationObserver observer = new MockOperationObserver(); action.performAction(c, observer); @@ -308,7 +308,7 @@ public class SQLTemplateActionIT { assertSame(node, action.dataNode); assertSame(template, action.getQuery()); - try (Connection c = CayenneTestsEnv.DATA_SOURCES.sharedDataSource().getConnection();) { + try (Connection c = CayenneTestsEnv.COMMON_SCHEMA.dataSource().getConnection();) { MockOperationObserver observer = new MockOperationObserver(); action.performAction(c, observer); diff --git a/cayenne/src/test/java/org/apache/cayenne/dba/JdbcPkGeneratorIT.java b/cayenne/src/test/java/org/apache/cayenne/dba/JdbcPkGeneratorIT.java index 3630ce8fa..83d0e4e15 100644 --- a/cayenne/src/test/java/org/apache/cayenne/dba/JdbcPkGeneratorIT.java +++ b/cayenne/src/test/java/org/apache/cayenne/dba/JdbcPkGeneratorIT.java @@ -45,7 +45,9 @@ public class JdbcPkGeneratorIT { @BeforeEach public void setUp() throws Exception { node = env.dataNode(); - CayenneTestsEnv.SCHEMAS.dropPKSupport(); + + // TODO: we should have a dedicated DbSchemaManager for such destructive operations working off of its own DB + CayenneTestsEnv.COMMON_SCHEMA.dropPKSupport(); } @AfterEach @@ -57,8 +59,9 @@ public class JdbcPkGeneratorIT { pkGenerator.setPkStartValue(JdbcPkGenerator.DEFAULT_PK_START_VALUE); - CayenneTestsEnv.SCHEMAS.dropPKSupport(); - CayenneTestsEnv.SCHEMAS.createPKSupport(); + // TODO: we should have a dedicated DbSchemaManager for such destructive operations working off of its own DB + CayenneTestsEnv.COMMON_SCHEMA.dropPKSupport(); + CayenneTestsEnv.COMMON_SCHEMA.createPKSupport(); } } diff --git a/cayenne/src/test/java/org/apache/cayenne/dba/TypesMappingIT.java b/cayenne/src/test/java/org/apache/cayenne/dba/TypesMappingIT.java index d097fdb8a..b73c44c79 100644 --- a/cayenne/src/test/java/org/apache/cayenne/dba/TypesMappingIT.java +++ b/cayenne/src/test/java/org/apache/cayenne/dba/TypesMappingIT.java @@ -130,7 +130,7 @@ public class TypesMappingIT { // check counts // since more then 1 database type can map to a single JDBC type int len = 0; - try (Connection conn = CayenneTestsEnv.DATA_SOURCES.sharedDataSource().getConnection()) { + try (Connection conn = CayenneTestsEnv.COMMON_SCHEMA.dataSource().getConnection()) { DatabaseMetaData md = conn.getMetaData(); try (ResultSet rs = md.getTypeInfo()) { while (rs.next()) { @@ -153,7 +153,7 @@ public class TypesMappingIT { } private TypesMapping createTypesMapping() throws Exception { - try (Connection conn = CayenneTestsEnv.DATA_SOURCES.sharedDataSource().getConnection()) { + try (Connection conn = CayenneTestsEnv.COMMON_SCHEMA.dataSource().getConnection()) { DatabaseMetaData md = conn.getMetaData(); return new TypesMapping(md); } diff --git a/cayenne/src/test/java/org/apache/cayenne/dba/sqlserver/SQLServerSnifferIT.java b/cayenne/src/test/java/org/apache/cayenne/dba/sqlserver/SQLServerSnifferIT.java index b58739807..53245ced1 100644 --- a/cayenne/src/test/java/org/apache/cayenne/dba/sqlserver/SQLServerSnifferIT.java +++ b/cayenne/src/test/java/org/apache/cayenne/dba/sqlserver/SQLServerSnifferIT.java @@ -43,7 +43,7 @@ public class SQLServerSnifferIT { DbAdapter adapter; - try (Connection c = CayenneTestsEnv.DATA_SOURCES.sharedDataSource().getConnection()) { + try (Connection c = CayenneTestsEnv.COMMON_SCHEMA.dataSource().getConnection()) { adapter = sniffer.createAdapter(c.getMetaData()); } 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 610ae6117..a91bae33a 100644 --- a/cayenne/src/test/java/org/apache/cayenne/unit/CayenneTestsEnv.java +++ b/cayenne/src/test/java/org/apache/cayenne/unit/CayenneTestsEnv.java @@ -31,6 +31,7 @@ import org.apache.cayenne.configuration.DataNodeDescriptor; import org.apache.cayenne.configuration.DataSourceDescriptor; import org.apache.cayenne.configuration.runtime.CoreModule; import org.apache.cayenne.configuration.runtime.DbAdapterFactory; +import org.apache.cayenne.datasource.DataSourceBuilder; import org.apache.cayenne.dba.DbAdapter; import org.apache.cayenne.di.AdhocObjectFactory; import org.apache.cayenne.di.DIBootstrap; @@ -44,7 +45,6 @@ import org.apache.cayenne.runtime.CayenneRuntime; import org.apache.cayenne.test.jdbc.DbHelper; import org.apache.cayenne.test.jdbc.TableHelper; import org.apache.cayenne.unit.dba.TestDbAdapter; -import org.apache.cayenne.unit.runtime.DbCleaner; import org.apache.cayenne.unit.runtime.FlavoredDbHelper; import org.apache.cayenne.unit.runtime.RuntimeCaseModule; import org.apache.cayenne.unit.util.SQLTemplateCustomizer; @@ -67,19 +67,25 @@ public class CayenneTestsEnv implements BeforeEachCallback, AfterEachCallback { private static final Injector INJECTOR; // shared stack parts... use these directly from the tests - public static final TestDataSources DATA_SOURCES; - public static final AllTestsSchemaManager SCHEMAS; + public static final DbSchemaManager COMMON_SCHEMA; static { INJECTOR = DIBootstrap.createInjector(new RuntimeCaseModule()); - DATA_SOURCES = new TestDataSources( - INJECTOR.getInstance(DataSourceDescriptor.class), - INJECTOR.getInstance(AdhocObjectFactory.class)); - - SCHEMAS = new AllTestsSchemaManager(DATA_SOURCES.sharedDataSource()); + DataSourceDescriptor dataSourceDescriptor = INJECTOR.getInstance(DataSourceDescriptor.class); + DataSource dataSource = DataSourceBuilder + .url(dataSourceDescriptor.getDataSourceUrl()) + .driver(dataSourceDescriptor.getJdbcDriver()) + .userName(dataSourceDescriptor.getUserName()) + .password(dataSourceDescriptor.getPassword()) + .pool(dataSourceDescriptor.getMinConnections(), dataSourceDescriptor.getMaxConnections()) + .build(); - SCHEMAS.rebuildSchema(); + // "cayenne-ALL.xml" is a special synthetic project file that includes all test DataMaps + // TODO: support for multiple schemas, so that DDL operation scope (such as dropping PK) + // can be isolated from the wider test environment + COMMON_SCHEMA = new DbSchemaManager("cayenne-ALL.xml", dataSource); + COMMON_SCHEMA.rebuildSchema(); } private final String project; @@ -121,7 +127,7 @@ public class CayenneTestsEnv implements BeforeEachCallback, AfterEachCallback { @Override public void beforeEach(ExtensionContext ctx) { this.runtime = buildRuntime(); - synthesizeDataNodes(runtime); + synthesizeDataNodes(runtime, COMMON_SCHEMA.dataSource()); this.context = (DataContext) runtime.newContext(); @@ -130,12 +136,12 @@ public class CayenneTestsEnv implements BeforeEachCallback, AfterEachCallback { tweakProcedures(runtime, testDbAdapter); this.dbHelper = new FlavoredDbHelper( - DATA_SOURCES.sharedDataSource(), + COMMON_SCHEMA.dataSource(), firstAdapter.getQuotingStrategy(), context.getEntityResolver().getDataMaps().iterator().next()); this.dbCleaner = new DbCleaner( - SCHEMAS, + COMMON_SCHEMA, dbHelper, context.getEntityResolver().getDataMaps().stream().map(DataMap::getName).collect(Collectors.toSet())); @@ -168,7 +174,7 @@ public class CayenneTestsEnv implements BeforeEachCallback, AfterEachCallback { .build(); } - private static void synthesizeDataNodes(CayenneRuntime runtime) { + private static void synthesizeDataNodes(CayenneRuntime runtime, DataSource dataSource) { DataDomain domain = runtime.getDataDomain(); Injector runtimeInjector = runtime.getInjector(); @@ -181,8 +187,6 @@ public class CayenneTestsEnv implements BeforeEachCallback, AfterEachCallback { for (DataMap dataMap : domain.getDataMaps()) { - DataSource dataSource = DATA_SOURCES.dataSource(dataMap.getName()); - DataNode node = new TestTelemetryDataNode(dataMap.getName()); node.setJdbcEventLogger(jdbcEventLogger); diff --git a/cayenne/src/test/java/org/apache/cayenne/unit/runtime/DbCleaner.java b/cayenne/src/test/java/org/apache/cayenne/unit/DbCleaner.java similarity index 87% rename from cayenne/src/test/java/org/apache/cayenne/unit/runtime/DbCleaner.java rename to cayenne/src/test/java/org/apache/cayenne/unit/DbCleaner.java index deb93c12e..7145ce068 100644 --- a/cayenne/src/test/java/org/apache/cayenne/unit/runtime/DbCleaner.java +++ b/cayenne/src/test/java/org/apache/cayenne/unit/DbCleaner.java @@ -17,11 +17,10 @@ * under the License. ****************************************************************/ -package org.apache.cayenne.unit.runtime; +package org.apache.cayenne.unit; import org.apache.cayenne.map.DbEntity; import org.apache.cayenne.test.jdbc.DbHelper; -import org.apache.cayenne.unit.AllTestsSchemaManager; import java.sql.SQLException; import java.util.Set; @@ -32,10 +31,10 @@ import java.util.Set; public class DbCleaner { private final DbHelper dbHelper; - private final AllTestsSchemaManager parentSchemaManager; + private final DbSchemaManager parentSchemaManager; private final Set<String> dataMaps; - public DbCleaner(AllTestsSchemaManager parentSchemaManager, DbHelper dbHelper, Set<String> dataMaps) { + public DbCleaner(DbSchemaManager parentSchemaManager, DbHelper dbHelper, Set<String> dataMaps) { this.parentSchemaManager = parentSchemaManager; this.dbHelper = dbHelper; this.dataMaps = dataMaps; diff --git a/cayenne/src/test/java/org/apache/cayenne/unit/AllTestsSchemaManager.java b/cayenne/src/test/java/org/apache/cayenne/unit/DbSchemaManager.java similarity index 97% rename from cayenne/src/test/java/org/apache/cayenne/unit/AllTestsSchemaManager.java rename to cayenne/src/test/java/org/apache/cayenne/unit/DbSchemaManager.java index a9dc68c2e..300c6a1ae 100644 --- a/cayenne/src/test/java/org/apache/cayenne/unit/AllTestsSchemaManager.java +++ b/cayenne/src/test/java/org/apache/cayenne/unit/DbSchemaManager.java @@ -49,9 +49,12 @@ import java.util.ListIterator; import java.util.Map; import java.util.Set; -public class AllTestsSchemaManager { +/** + * Maps a full physical DB namespace (schema or database) that can be shared between many test DataMaps. + */ +public class DbSchemaManager { - private static final Logger LOGGER = LoggerFactory.getLogger(AllTestsSchemaManager.class); + private static final Logger LOGGER = LoggerFactory.getLogger(DbSchemaManager.class); // hardcoded dependent entities that should be excluded if LOBs are not supported private static final Set<String> EXTRA_EXCLUDED_FOR_NO_LOB = Set.of("CLOB_DETAIL"); @@ -62,11 +65,11 @@ public class AllTestsSchemaManager { private final DataDomain domain; private final List<DataMap> dataMapsInSchemaSetupOrder; - public AllTestsSchemaManager(DataSource dataSource) { + public DbSchemaManager(String project, DataSource dataSource) { this.dataSource = dataSource; this.domain = CayenneRuntime.builder() - .addConfig("cayenne-ALL.xml") + .addConfig(project) .dataSource(dataSource) .build() .getDataDomain(); @@ -88,6 +91,10 @@ public class AllTestsSchemaManager { this.dataMapsInSchemaSetupOrder = sortDataMapsInSchemaSetupOrder(); } + public DataSource dataSource() { + return dataSource; + } + /** * Rebuilds the test schema, combining all DataMaps that require schema support. Schema generation is done like that * instead of on-demand per-DataMap to avoid conflicts when dropping and generating PK objects. @@ -168,6 +175,7 @@ public class AllTestsSchemaManager { } } + // TODO: this is only needed for "map-db1" and "map-db2". Looks wasteful private List<DataMap> sortDataMapsInSchemaSetupOrder() { List<DataMap> maps = new ArrayList<>(domain.getDataMaps()); Map<DataMap, List<DataMap>> dependencies = new IdentityHashMap<>(); @@ -184,7 +192,7 @@ public class AllTestsSchemaManager { sortDataMap(map, dependencies, visited, visiting, sorted); } - return Collections.unmodifiableList(sorted); + return sorted; } private List<DataMap> dataMapDependencies(DataMap map, List<DataMap> maps) { diff --git a/cayenne/src/test/java/org/apache/cayenne/unit/TestDataSources.java b/cayenne/src/test/java/org/apache/cayenne/unit/TestDataSources.java deleted file mode 100644 index 366cfcf06..000000000 --- a/cayenne/src/test/java/org/apache/cayenne/unit/TestDataSources.java +++ /dev/null @@ -1,75 +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.unit; - -import org.apache.cayenne.configuration.DataSourceDescriptor; -import org.apache.cayenne.datasource.DataSourceBuilder; -import org.apache.cayenne.di.AdhocObjectFactory; - -import javax.sql.DataSource; -import java.sql.Driver; -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -public class TestDataSources { - - private final DataSource sharedDataSource; - private final DataSourceDescriptor dataSourceInfo; - private final Map<String, DataSource> dataSources; - private final Set<String> mapsWithDedicatedDataSource; - private final AdhocObjectFactory objectFactory; - - public TestDataSources(DataSourceDescriptor dataSourceInfo, AdhocObjectFactory objectFactory) { - - this.objectFactory = objectFactory; - this.dataSourceInfo = dataSourceInfo; - this.dataSources = new HashMap<>(); - this.mapsWithDedicatedDataSource = new HashSet<>(Arrays.asList("map-db1", "map-db2")); - - this.sharedDataSource = createDataSource(); - } - - public DataSource sharedDataSource() { - return sharedDataSource; - } - - public DataSource dataSource(String dataMapName) { - DataSource ds = dataSources.get(dataMapName); - if (ds == null) { - - ds = mapsWithDedicatedDataSource.contains(dataMapName) ? createDataSource() : sharedDataSource; - - dataSources.put(dataMapName, ds); - } - - return ds; - } - - private DataSource createDataSource() { - Driver driver = objectFactory.newInstance(Driver.class, dataSourceInfo.getJdbcDriver()); - - return DataSourceBuilder.url(dataSourceInfo.getDataSourceUrl()).driver(driver) - .userName(dataSourceInfo.getUserName()).password(dataSourceInfo.getPassword()) - .pool(dataSourceInfo.getMinConnections(), dataSourceInfo.getMaxConnections()).build(); - } - -}
