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 c34c2ae0d063a4c3ffddea783e6d7c191f9d2c21 Author: Andrus Adamchik <[email protected]> AuthorDate: Sun May 17 09:20:45 2026 -0400 cleaning up DB selection in tests --- .../unit/datasource/DataSourceConfigFile.java | 4 +- .../unit/datasource/DataSourceConfigLoader.java | 113 +++------------------ .../DataSourceDescriptorFactory.java} | 34 ++++--- .../Db2DataSource.java} | 14 ++- .../DerbyDataSource.java} | 23 ++--- .../H2DataSource.java} | 19 +--- .../HsqlDataSource.java} | 23 ++--- .../MariaDbDataSource.java} | 10 +- .../MysqlDataSource.java} | 9 +- .../OracleDataSource.java} | 14 +-- .../PostgresDataSource.java} | 10 +- .../SQLiteDataSource.java} | 23 ++--- .../SqlServerDataSource.java} | 10 +- .../TestContainersDataSource.java} | 20 +++- 14 files changed, 130 insertions(+), 196 deletions(-) diff --git a/cayenne/src/test/java/org/apache/cayenne/unit/datasource/DataSourceConfigFile.java b/cayenne/src/test/java/org/apache/cayenne/unit/datasource/DataSourceConfigFile.java index 3736d2811..540e8d8d7 100644 --- a/cayenne/src/test/java/org/apache/cayenne/unit/datasource/DataSourceConfigFile.java +++ b/cayenne/src/test/java/org/apache/cayenne/unit/datasource/DataSourceConfigFile.java @@ -74,14 +74,12 @@ class DataSourceConfigFile { } private static DataSourceDescriptor buildDataSourceDescriptor(String name, Properties props) { - DataSourceDescriptor dsi = new DataSourceDescriptor(); + DataSourceDescriptor dsi = DataSourceDescriptorFactory.create(); dsi.setUserName(props.getProperty(name + "." + USER_NAME_KEY)); dsi.setPassword(props.getProperty(name + "." + PASSWORD_KEY)); dsi.setDataSourceUrl(props.getProperty(name + "." + URL_KEY)); dsi.setJdbcDriver(props.getProperty(name + "." + DRIVER_KEY)); - dsi.setMinConnections(DataSourceConfigLoader.MIN_CONNECTIONS); - dsi.setMaxConnections(DataSourceConfigLoader.MAX_CONNECTIONS); return dsi; } diff --git a/cayenne/src/test/java/org/apache/cayenne/unit/datasource/DataSourceConfigLoader.java b/cayenne/src/test/java/org/apache/cayenne/unit/datasource/DataSourceConfigLoader.java index 936d69721..4ee714fed 100644 --- a/cayenne/src/test/java/org/apache/cayenne/unit/datasource/DataSourceConfigLoader.java +++ b/cayenne/src/test/java/org/apache/cayenne/unit/datasource/DataSourceConfigLoader.java @@ -20,32 +20,19 @@ package org.apache.cayenne.unit.datasource; import org.apache.cayenne.ConfigurationException; import org.apache.cayenne.configuration.DataSourceDescriptor; -import org.apache.cayenne.unit.testcontainers.Db2ContainerStarter; -import org.apache.cayenne.unit.testcontainers.DbContainerStarter; -import org.apache.cayenne.unit.testcontainers.MariaDbContainerStarter; -import org.apache.cayenne.unit.testcontainers.MysqlContainerStarter; -import org.apache.cayenne.unit.testcontainers.OracleContainerStarter; -import org.apache.cayenne.unit.testcontainers.PostgresContainerStarter; -import org.apache.cayenne.unit.testcontainers.SqlServerContainerStarter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.testcontainers.containers.JdbcDatabaseContainer; public class DataSourceConfigLoader { private static final Logger LOGGER = LoggerFactory.getLogger(DataSourceConfigLoader.class); private static final String CONNECTION_NAME_KEY = "cayenneTestConnection"; - private static final String CONNECTION_DB_VERSION = "cayenneTestDbVersion"; - private static final String ADAPTER_KEY_MAVEN = "cayenneAdapter"; private static final String USER_NAME_KEY_MAVEN = "cayenneJdbcUsername"; private static final String PASSWORD_KEY_MAVEN = "cayenneJdbcPassword"; private static final String URL_KEY_MAVEN = "cayenneJdbcUrl"; private static final String DRIVER_KEY_MAVEN = "cayenneJdbcDriver"; - static final int MIN_CONNECTIONS = 1; - static final int MAX_CONNECTIONS = 3; - public static DataSourceDescriptor load() { String connectionName = System.getProperty(CONNECTION_NAME_KEY); @@ -59,11 +46,19 @@ public class DataSourceConfigLoader { DataSourceDescriptor descriptor = DataSourceConfigFile.load().get(connectionName); if (descriptor == null) { - descriptor = checkInMemoryDataSource(connectionName); - } - - if (descriptor == null) { - descriptor = checkTestContainersDataSource(connectionName); + descriptor = switch (connectionName) { + case "hsql" -> HsqlDataSource.start(); + case "h2" -> H2DataSource.start(); + case "derby" -> DerbyDataSource.start(); + case "sqlite" -> SQLiteDataSource.start(); + case "mysql-tc" -> MysqlDataSource.start(); + case "mariadb-tc" -> MariaDbDataSource.start(); + case "postgres-tc" -> PostgresDataSource.start(); + case "sqlserver-tc" -> SqlServerDataSource.start(); + case "oracle-tc" -> OracleDataSource.start(); + case "db2-tc" -> Db2DataSource.start(); + default -> null; + }; } descriptor = applyOverrides(descriptor); @@ -76,91 +71,15 @@ public class DataSourceConfigLoader { return descriptor; } - private static DataSourceDescriptor checkInMemoryDataSource(String connectionName) { - return switch (connectionName) { - case "hsql" -> { - DataSourceDescriptor descriptor = new DataSourceDescriptor(); - descriptor.setUserName("sa"); - descriptor.setPassword(""); - descriptor.setDataSourceUrl("jdbc:hsqldb:mem:aname;sql.regular_names=false"); - descriptor.setJdbcDriver("org.hsqldb.jdbcDriver"); - descriptor.setMinConnections(MIN_CONNECTIONS); - descriptor.setMaxConnections(MAX_CONNECTIONS); - yield descriptor; - } - case "h2" -> { - DataSourceDescriptor descriptor = new DataSourceDescriptor(); - descriptor.setUserName("sa"); - descriptor.setPassword(""); - descriptor.setDataSourceUrl("jdbc:h2:mem:aname;DB_CLOSE_DELAY=-1;"); - descriptor.setJdbcDriver("org.h2.Driver"); - descriptor.setMinConnections(MIN_CONNECTIONS); - descriptor.setMaxConnections(MAX_CONNECTIONS); - yield descriptor; - } - case "derby" -> { - DataSourceDescriptor descriptor = new DataSourceDescriptor(); - descriptor.setUserName("sa"); - descriptor.setPassword(""); - descriptor.setDataSourceUrl("jdbc:derby:target/testdb;create=true"); - descriptor.setJdbcDriver("org.apache.derby.jdbc.EmbeddedDriver"); - descriptor.setMinConnections(MIN_CONNECTIONS); - descriptor.setMaxConnections(MAX_CONNECTIONS); - yield descriptor; - } - case "sqlite" -> { - DataSourceDescriptor descriptor = new DataSourceDescriptor(); - descriptor.setUserName("sa"); - descriptor.setPassword(""); - descriptor.setDataSourceUrl("jdbc:sqlite:file:memdb?mode=memory&cache=shared&date_class=text"); - descriptor.setJdbcDriver("org.sqlite.JDBC"); - descriptor.setMinConnections(MIN_CONNECTIONS); - descriptor.setMaxConnections(MAX_CONNECTIONS); - yield descriptor; - } - default -> null; - }; - } - - private static DataSourceDescriptor checkTestContainersDataSource(String connectionName) { - - DbContainerStarter containerStarter = switch (connectionName) { - case "mysql-tc" -> new MysqlContainerStarter(); - case "mariadb-tc" -> new MariaDbContainerStarter(); - case "postgres-tc" -> new PostgresContainerStarter(); - case "sqlserver-tc" -> new SqlServerContainerStarter(); - case "oracle-tc" -> new OracleContainerStarter(); - case "db2-tc" -> new Db2ContainerStarter(); - default -> null; - }; - - if (containerStarter == null) { - return null; - } - - String version = System.getProperty(CONNECTION_DB_VERSION); - JdbcDatabaseContainer<?> container = containerStarter.startContainer(version); - - DataSourceDescriptor sourceInfo = new DataSourceDescriptor(); - sourceInfo.setUserName(container.getUsername()); - sourceInfo.setPassword(container.getPassword()); - sourceInfo.setDataSourceUrl(container.getJdbcUrl()); - sourceInfo.setJdbcDriver(container.getDriverClassName()); - sourceInfo.setMinConnections(MIN_CONNECTIONS); - sourceInfo.setMaxConnections(MAX_CONNECTIONS); - return sourceInfo; - } - private static DataSourceDescriptor applyOverrides(DataSourceDescriptor descriptor) { - String adapter = System.getProperty(ADAPTER_KEY_MAVEN); String user = System.getProperty(USER_NAME_KEY_MAVEN); String pass = System.getProperty(PASSWORD_KEY_MAVEN); String url = System.getProperty(URL_KEY_MAVEN); String driver = System.getProperty(DRIVER_KEY_MAVEN); // no overrides, do nothing - if (adapter == null && user == null && pass == null && url == null && driver == null) { + if (user == null && pass == null && url == null && driver == null) { return descriptor; } @@ -170,9 +89,7 @@ public class DataSourceConfigLoader { return null; } - descriptor = new DataSourceDescriptor(); - descriptor.setMinConnections(MIN_CONNECTIONS); - descriptor.setMaxConnections(MAX_CONNECTIONS); + descriptor = DataSourceDescriptorFactory.create(); } if (user != null) { diff --git a/cayenne/src/test/java/org/apache/cayenne/unit/testcontainers/OracleContainerStarter.java b/cayenne/src/test/java/org/apache/cayenne/unit/datasource/DataSourceDescriptorFactory.java similarity index 52% copy from cayenne/src/test/java/org/apache/cayenne/unit/testcontainers/OracleContainerStarter.java copy to cayenne/src/test/java/org/apache/cayenne/unit/datasource/DataSourceDescriptorFactory.java index 8d644fff8..dcfbf7fae 100644 --- a/cayenne/src/test/java/org/apache/cayenne/unit/testcontainers/OracleContainerStarter.java +++ b/cayenne/src/test/java/org/apache/cayenne/unit/datasource/DataSourceDescriptorFactory.java @@ -16,29 +16,31 @@ * specific language governing permissions and limitations * under the License. ****************************************************************/ -package org.apache.cayenne.unit.testcontainers; +package org.apache.cayenne.unit.datasource; -import org.testcontainers.containers.JdbcDatabaseContainer; -import org.testcontainers.utility.DockerImageName; +import org.apache.cayenne.configuration.DataSourceDescriptor; -import java.time.Duration; +class DataSourceDescriptorFactory { -public class OracleContainerStarter extends DbContainerStarter { + private static final int MIN_CONNECTIONS = 1; + private static final int MAX_CONNECTIONS = 3; - @Override - public JdbcDatabaseContainer<?> startContainer(String version) { - JdbcDatabaseContainer<?> container = super.startContainer(version); - return container; + private DataSourceDescriptorFactory() { } - @Override - protected JdbcDatabaseContainer<?> createContainer(DockerImageName dockerImageName) { - return new org.testcontainers.containers.OracleContainer(dockerImageName) - .withStartupTimeout(Duration.ofMinutes(5)); + static DataSourceDescriptor create() { + DataSourceDescriptor descriptor = new DataSourceDescriptor(); + descriptor.setMinConnections(MIN_CONNECTIONS); + descriptor.setMaxConnections(MAX_CONNECTIONS); + return descriptor; } - @Override - protected String dockerImage() { - return "gvenzl/oracle-xe:18-slim-faststart"; + static DataSourceDescriptor create(String userName, String password, String url, String driver) { + DataSourceDescriptor descriptor = create(); + descriptor.setUserName(userName); + descriptor.setPassword(password); + descriptor.setDataSourceUrl(url); + descriptor.setJdbcDriver(driver); + return descriptor; } } diff --git a/cayenne/src/test/java/org/apache/cayenne/unit/testcontainers/Db2ContainerStarter.java b/cayenne/src/test/java/org/apache/cayenne/unit/datasource/Db2DataSource.java similarity index 78% rename from cayenne/src/test/java/org/apache/cayenne/unit/testcontainers/Db2ContainerStarter.java rename to cayenne/src/test/java/org/apache/cayenne/unit/datasource/Db2DataSource.java index e22d3a9fb..b8f92869f 100644 --- a/cayenne/src/test/java/org/apache/cayenne/unit/testcontainers/Db2ContainerStarter.java +++ b/cayenne/src/test/java/org/apache/cayenne/unit/datasource/Db2DataSource.java @@ -16,17 +16,23 @@ * specific language governing permissions and limitations * under the License. ****************************************************************/ -package org.apache.cayenne.unit.testcontainers; +package org.apache.cayenne.unit.datasource; +import org.apache.cayenne.configuration.DataSourceDescriptor; +import org.testcontainers.containers.Db2Container; import org.testcontainers.containers.JdbcDatabaseContainer; import org.testcontainers.utility.DockerImageName; import java.time.Duration; -public class Db2ContainerStarter extends DbContainerStarter { +public class Db2DataSource extends TestContainersDataSource { + + public static DataSourceDescriptor start() { + return TestContainersDataSource.start(new Db2DataSource()); + } @Override - public JdbcDatabaseContainer<?> startContainer(String version) { + protected JdbcDatabaseContainer<?> startContainer(String version) { JdbcDatabaseContainer<?> container = super.startContainer(version); // need to wait to ensure that DB has started try { @@ -38,7 +44,7 @@ public class Db2ContainerStarter extends DbContainerStarter { @Override protected JdbcDatabaseContainer<?> createContainer(DockerImageName dockerImageName) { - return new org.testcontainers.containers.Db2Container(dockerImageName) + return new Db2Container(dockerImageName) .withStartupTimeout(Duration.ofMinutes(15)) .withDatabaseName("testdb") .acceptLicense(); diff --git a/cayenne/src/test/java/org/apache/cayenne/unit/testcontainers/MariaDbContainerStarter.java b/cayenne/src/test/java/org/apache/cayenne/unit/datasource/DerbyDataSource.java similarity index 64% copy from cayenne/src/test/java/org/apache/cayenne/unit/testcontainers/MariaDbContainerStarter.java copy to cayenne/src/test/java/org/apache/cayenne/unit/datasource/DerbyDataSource.java index 96681fbdc..4c185dc32 100644 --- a/cayenne/src/test/java/org/apache/cayenne/unit/testcontainers/MariaDbContainerStarter.java +++ b/cayenne/src/test/java/org/apache/cayenne/unit/datasource/DerbyDataSource.java @@ -16,22 +16,17 @@ * specific language governing permissions and limitations * under the License. ****************************************************************/ -package org.apache.cayenne.unit.testcontainers; +package org.apache.cayenne.unit.datasource; -import org.testcontainers.containers.JdbcDatabaseContainer; -import org.testcontainers.containers.MariaDBContainer; -import org.testcontainers.utility.DockerImageName; +import org.apache.cayenne.configuration.DataSourceDescriptor; -public class MariaDbContainerStarter extends DbContainerStarter { +public class DerbyDataSource { - @Override - protected JdbcDatabaseContainer<?> createContainer(DockerImageName dockerImageName) { - return new MariaDBContainer<>(dockerImageName); + public static DataSourceDescriptor start() { + return DataSourceDescriptorFactory.create( + "sa", + "", + "jdbc:derby:target/testdb;create=true", + "org.apache.derby.jdbc.EmbeddedDriver"); } - - @Override - protected String dockerImage() { - return "mariadb:10.3"; - } - } diff --git a/cayenne/src/test/java/org/apache/cayenne/unit/testcontainers/MariaDbContainerStarter.java b/cayenne/src/test/java/org/apache/cayenne/unit/datasource/H2DataSource.java similarity index 64% copy from cayenne/src/test/java/org/apache/cayenne/unit/testcontainers/MariaDbContainerStarter.java copy to cayenne/src/test/java/org/apache/cayenne/unit/datasource/H2DataSource.java index 96681fbdc..dbc55bfa7 100644 --- a/cayenne/src/test/java/org/apache/cayenne/unit/testcontainers/MariaDbContainerStarter.java +++ b/cayenne/src/test/java/org/apache/cayenne/unit/datasource/H2DataSource.java @@ -16,22 +16,13 @@ * specific language governing permissions and limitations * under the License. ****************************************************************/ -package org.apache.cayenne.unit.testcontainers; +package org.apache.cayenne.unit.datasource; -import org.testcontainers.containers.JdbcDatabaseContainer; -import org.testcontainers.containers.MariaDBContainer; -import org.testcontainers.utility.DockerImageName; +import org.apache.cayenne.configuration.DataSourceDescriptor; -public class MariaDbContainerStarter extends DbContainerStarter { +public class H2DataSource { - @Override - protected JdbcDatabaseContainer<?> createContainer(DockerImageName dockerImageName) { - return new MariaDBContainer<>(dockerImageName); + public static DataSourceDescriptor start() { + return DataSourceDescriptorFactory.create("sa", "", "jdbc:h2:mem:aname;DB_CLOSE_DELAY=-1;", "org.h2.Driver"); } - - @Override - protected String dockerImage() { - return "mariadb:10.3"; - } - } diff --git a/cayenne/src/test/java/org/apache/cayenne/unit/testcontainers/MariaDbContainerStarter.java b/cayenne/src/test/java/org/apache/cayenne/unit/datasource/HsqlDataSource.java similarity index 64% copy from cayenne/src/test/java/org/apache/cayenne/unit/testcontainers/MariaDbContainerStarter.java copy to cayenne/src/test/java/org/apache/cayenne/unit/datasource/HsqlDataSource.java index 96681fbdc..f1d0f5079 100644 --- a/cayenne/src/test/java/org/apache/cayenne/unit/testcontainers/MariaDbContainerStarter.java +++ b/cayenne/src/test/java/org/apache/cayenne/unit/datasource/HsqlDataSource.java @@ -16,22 +16,17 @@ * specific language governing permissions and limitations * under the License. ****************************************************************/ -package org.apache.cayenne.unit.testcontainers; +package org.apache.cayenne.unit.datasource; -import org.testcontainers.containers.JdbcDatabaseContainer; -import org.testcontainers.containers.MariaDBContainer; -import org.testcontainers.utility.DockerImageName; +import org.apache.cayenne.configuration.DataSourceDescriptor; -public class MariaDbContainerStarter extends DbContainerStarter { +public class HsqlDataSource { - @Override - protected JdbcDatabaseContainer<?> createContainer(DockerImageName dockerImageName) { - return new MariaDBContainer<>(dockerImageName); + public static DataSourceDescriptor start() { + return DataSourceDescriptorFactory.create( + "sa", + "", + "jdbc:hsqldb:mem:aname;sql.regular_names=false", + "org.hsqldb.jdbcDriver"); } - - @Override - protected String dockerImage() { - return "mariadb:10.3"; - } - } diff --git a/cayenne/src/test/java/org/apache/cayenne/unit/testcontainers/MariaDbContainerStarter.java b/cayenne/src/test/java/org/apache/cayenne/unit/datasource/MariaDbDataSource.java similarity index 82% copy from cayenne/src/test/java/org/apache/cayenne/unit/testcontainers/MariaDbContainerStarter.java copy to cayenne/src/test/java/org/apache/cayenne/unit/datasource/MariaDbDataSource.java index 96681fbdc..1380bb729 100644 --- a/cayenne/src/test/java/org/apache/cayenne/unit/testcontainers/MariaDbContainerStarter.java +++ b/cayenne/src/test/java/org/apache/cayenne/unit/datasource/MariaDbDataSource.java @@ -16,13 +16,18 @@ * specific language governing permissions and limitations * under the License. ****************************************************************/ -package org.apache.cayenne.unit.testcontainers; +package org.apache.cayenne.unit.datasource; +import org.apache.cayenne.configuration.DataSourceDescriptor; import org.testcontainers.containers.JdbcDatabaseContainer; import org.testcontainers.containers.MariaDBContainer; import org.testcontainers.utility.DockerImageName; -public class MariaDbContainerStarter extends DbContainerStarter { +public class MariaDbDataSource extends TestContainersDataSource { + + public static DataSourceDescriptor start() { + return TestContainersDataSource.start(new MariaDbDataSource()); + } @Override protected JdbcDatabaseContainer<?> createContainer(DockerImageName dockerImageName) { @@ -33,5 +38,4 @@ public class MariaDbContainerStarter extends DbContainerStarter { protected String dockerImage() { return "mariadb:10.3"; } - } diff --git a/cayenne/src/test/java/org/apache/cayenne/unit/testcontainers/MysqlContainerStarter.java b/cayenne/src/test/java/org/apache/cayenne/unit/datasource/MysqlDataSource.java similarity index 86% rename from cayenne/src/test/java/org/apache/cayenne/unit/testcontainers/MysqlContainerStarter.java rename to cayenne/src/test/java/org/apache/cayenne/unit/datasource/MysqlDataSource.java index b0b480804..d62a5aeae 100644 --- a/cayenne/src/test/java/org/apache/cayenne/unit/testcontainers/MysqlContainerStarter.java +++ b/cayenne/src/test/java/org/apache/cayenne/unit/datasource/MysqlDataSource.java @@ -16,15 +16,20 @@ * specific language governing permissions and limitations * under the License. ****************************************************************/ -package org.apache.cayenne.unit.testcontainers; +package org.apache.cayenne.unit.datasource; +import org.apache.cayenne.configuration.DataSourceDescriptor; import org.testcontainers.containers.JdbcDatabaseContainer; import org.testcontainers.containers.MySQLContainer; import org.testcontainers.utility.DockerImageName; import java.util.Calendar; -public class MysqlContainerStarter extends DbContainerStarter { +public class MysqlDataSource extends TestContainersDataSource { + + public static DataSourceDescriptor start() { + return TestContainersDataSource.start(new MysqlDataSource()); + } @Override protected JdbcDatabaseContainer<?> createContainer(DockerImageName dockerImageName) { diff --git a/cayenne/src/test/java/org/apache/cayenne/unit/testcontainers/OracleContainerStarter.java b/cayenne/src/test/java/org/apache/cayenne/unit/datasource/OracleDataSource.java similarity index 77% rename from cayenne/src/test/java/org/apache/cayenne/unit/testcontainers/OracleContainerStarter.java rename to cayenne/src/test/java/org/apache/cayenne/unit/datasource/OracleDataSource.java index 8d644fff8..e6635adbe 100644 --- a/cayenne/src/test/java/org/apache/cayenne/unit/testcontainers/OracleContainerStarter.java +++ b/cayenne/src/test/java/org/apache/cayenne/unit/datasource/OracleDataSource.java @@ -16,24 +16,24 @@ * specific language governing permissions and limitations * under the License. ****************************************************************/ -package org.apache.cayenne.unit.testcontainers; +package org.apache.cayenne.unit.datasource; +import org.apache.cayenne.configuration.DataSourceDescriptor; import org.testcontainers.containers.JdbcDatabaseContainer; +import org.testcontainers.containers.OracleContainer; import org.testcontainers.utility.DockerImageName; import java.time.Duration; -public class OracleContainerStarter extends DbContainerStarter { +public class OracleDataSource extends TestContainersDataSource { - @Override - public JdbcDatabaseContainer<?> startContainer(String version) { - JdbcDatabaseContainer<?> container = super.startContainer(version); - return container; + public static DataSourceDescriptor start() { + return TestContainersDataSource.start(new OracleDataSource()); } @Override protected JdbcDatabaseContainer<?> createContainer(DockerImageName dockerImageName) { - return new org.testcontainers.containers.OracleContainer(dockerImageName) + return new OracleContainer(dockerImageName) .withStartupTimeout(Duration.ofMinutes(5)); } diff --git a/cayenne/src/test/java/org/apache/cayenne/unit/testcontainers/PostgresContainerStarter.java b/cayenne/src/test/java/org/apache/cayenne/unit/datasource/PostgresDataSource.java similarity index 82% rename from cayenne/src/test/java/org/apache/cayenne/unit/testcontainers/PostgresContainerStarter.java rename to cayenne/src/test/java/org/apache/cayenne/unit/datasource/PostgresDataSource.java index c96c0d4ac..c69fa2013 100644 --- a/cayenne/src/test/java/org/apache/cayenne/unit/testcontainers/PostgresContainerStarter.java +++ b/cayenne/src/test/java/org/apache/cayenne/unit/datasource/PostgresDataSource.java @@ -16,13 +16,19 @@ * specific language governing permissions and limitations * under the License. ****************************************************************/ -package org.apache.cayenne.unit.testcontainers; +package org.apache.cayenne.unit.datasource; +import org.apache.cayenne.configuration.DataSourceDescriptor; import org.testcontainers.containers.JdbcDatabaseContainer; import org.testcontainers.containers.PostgreSQLContainer; import org.testcontainers.utility.DockerImageName; -public class PostgresContainerStarter extends DbContainerStarter { +public class PostgresDataSource extends TestContainersDataSource { + + public static DataSourceDescriptor start() { + return TestContainersDataSource.start(new PostgresDataSource()); + } + @Override protected JdbcDatabaseContainer<?> createContainer(DockerImageName dockerImageName) { return new PostgreSQLContainer<>(dockerImageName); diff --git a/cayenne/src/test/java/org/apache/cayenne/unit/testcontainers/MariaDbContainerStarter.java b/cayenne/src/test/java/org/apache/cayenne/unit/datasource/SQLiteDataSource.java similarity index 64% rename from cayenne/src/test/java/org/apache/cayenne/unit/testcontainers/MariaDbContainerStarter.java rename to cayenne/src/test/java/org/apache/cayenne/unit/datasource/SQLiteDataSource.java index 96681fbdc..12e1033b5 100644 --- a/cayenne/src/test/java/org/apache/cayenne/unit/testcontainers/MariaDbContainerStarter.java +++ b/cayenne/src/test/java/org/apache/cayenne/unit/datasource/SQLiteDataSource.java @@ -16,22 +16,17 @@ * specific language governing permissions and limitations * under the License. ****************************************************************/ -package org.apache.cayenne.unit.testcontainers; +package org.apache.cayenne.unit.datasource; -import org.testcontainers.containers.JdbcDatabaseContainer; -import org.testcontainers.containers.MariaDBContainer; -import org.testcontainers.utility.DockerImageName; +import org.apache.cayenne.configuration.DataSourceDescriptor; -public class MariaDbContainerStarter extends DbContainerStarter { +public class SQLiteDataSource { - @Override - protected JdbcDatabaseContainer<?> createContainer(DockerImageName dockerImageName) { - return new MariaDBContainer<>(dockerImageName); + public static DataSourceDescriptor start() { + return DataSourceDescriptorFactory.create( + "sa", + "", + "jdbc:sqlite:file:memdb?mode=memory&cache=shared&date_class=text", + "org.sqlite.JDBC"); } - - @Override - protected String dockerImage() { - return "mariadb:10.3"; - } - } diff --git a/cayenne/src/test/java/org/apache/cayenne/unit/testcontainers/SqlServerContainerStarter.java b/cayenne/src/test/java/org/apache/cayenne/unit/datasource/SqlServerDataSource.java similarity index 83% rename from cayenne/src/test/java/org/apache/cayenne/unit/testcontainers/SqlServerContainerStarter.java rename to cayenne/src/test/java/org/apache/cayenne/unit/datasource/SqlServerDataSource.java index 6969a7014..8453564f5 100644 --- a/cayenne/src/test/java/org/apache/cayenne/unit/testcontainers/SqlServerContainerStarter.java +++ b/cayenne/src/test/java/org/apache/cayenne/unit/datasource/SqlServerDataSource.java @@ -16,13 +16,19 @@ * specific language governing permissions and limitations * under the License. ****************************************************************/ -package org.apache.cayenne.unit.testcontainers; +package org.apache.cayenne.unit.datasource; +import org.apache.cayenne.configuration.DataSourceDescriptor; import org.testcontainers.containers.JdbcDatabaseContainer; import org.testcontainers.containers.MSSQLServerContainer; import org.testcontainers.utility.DockerImageName; -public class SqlServerContainerStarter extends DbContainerStarter { +public class SqlServerDataSource extends TestContainersDataSource { + + public static DataSourceDescriptor start() { + return TestContainersDataSource.start(new SqlServerDataSource()); + } + @Override protected JdbcDatabaseContainer<?> createContainer(DockerImageName dockerImageName) { return new MSSQLServerContainer<>(dockerImageName) diff --git a/cayenne/src/test/java/org/apache/cayenne/unit/testcontainers/DbContainerStarter.java b/cayenne/src/test/java/org/apache/cayenne/unit/datasource/TestContainersDataSource.java similarity index 66% rename from cayenne/src/test/java/org/apache/cayenne/unit/testcontainers/DbContainerStarter.java rename to cayenne/src/test/java/org/apache/cayenne/unit/datasource/TestContainersDataSource.java index 9c08bb00a..5feddb8fc 100644 --- a/cayenne/src/test/java/org/apache/cayenne/unit/testcontainers/DbContainerStarter.java +++ b/cayenne/src/test/java/org/apache/cayenne/unit/datasource/TestContainersDataSource.java @@ -16,14 +16,28 @@ * specific language governing permissions and limitations * under the License. ****************************************************************/ -package org.apache.cayenne.unit.testcontainers; +package org.apache.cayenne.unit.datasource; +import org.apache.cayenne.configuration.DataSourceDescriptor; import org.testcontainers.containers.JdbcDatabaseContainer; import org.testcontainers.utility.DockerImageName; -public abstract class DbContainerStarter { +abstract class TestContainersDataSource { - public JdbcDatabaseContainer<?> startContainer(String version) { + private static final String CONNECTION_DB_VERSION = "cayenneTestDbVersion"; + + protected static DataSourceDescriptor start(TestContainersDataSource dataSource) { + String version = System.getProperty(CONNECTION_DB_VERSION); + JdbcDatabaseContainer<?> container = dataSource.startContainer(version); + + return DataSourceDescriptorFactory.create( + container.getUsername(), + container.getPassword(), + container.getJdbcUrl(), + container.getDriverClassName()); + } + + protected JdbcDatabaseContainer<?> startContainer(String version) { DockerImageName baseName = DockerImageName.parse(dockerImage()); DockerImageName fullName = version != null ? baseName.withTag(version) : baseName;
