ebean-test: Modify postgis platform to support both net.postgis and og.postgis (#3449)

* ebean-test: Modify postgis platform to support both net.postgis and org.postgis

Use Class.forName() to test existence of net.postgis.jdbc.DriverWrapperLW and if available use that driver rather than the older org.postgis.DriverWrapperLW one.

Also support explicitly specifying the driver to use via test property - ebean.test.postgis.driver

* Update test for net postgis to use a separate container

* Remove NetPostgisSetup as PostgisSetup handles both cases now
This commit is contained in:
Rob Bygrave
2024-08-27 20:44:03 +12:00
committed by GitHub
parent 53b4d94933
commit 86c7de2de8
4 changed files with 20 additions and 62 deletions
@@ -5,12 +5,12 @@ ebean:
test:
# useDocker: false
# shutdown: stop # stop | remove
platform: netpostgis
platform: postgis
ddlMode: dropCreate # none | dropCreate | create | migration | createOnly | migrationDropCreate
dbName: mynetgisapp
netpostgis:
containerName: ebeanbuild_postgisnet
postgis:
containerName: ebeanbuild_postgis2
port: 9433
image: ghcr.io/baosystems/postgis:15
# extensions: postgis
@@ -1,56 +0,0 @@
package io.ebean.test.config.platform;
import java.util.Properties;
/**
* A variation of Postgres that expected Postgis extension support.
*
* Uses postgis/postgis image by default.
*/
class NetPostgisSetup implements PlatformSetup {
@Override
public Properties setup(Config config) {
int defaultPort = config.isUseDocker() ? 7432 : 5432;
config.setDockerPlatform("postgis");
config.ddlMode("dropCreate");
config.setDefaultPort(defaultPort);
config.setUsernameDefault();
config.setPasswordDefault();
config.setDriver("net.postgis.jdbc.DriverWrapperLW");
config.setUrl("jdbc:postgresql_lwgis://${host}:${port}/${databaseName}");
String schema = config.getSchema();
if (schema != null && !schema.equals(config.getUsername())) {
config.urlAppend("?currentSchema=" + schema);
}
config.datasourceDefaults();
return dockerProperties(config);
}
private Properties dockerProperties(Config config) {
if (!config.isUseDocker()) {
return new Properties();
}
config.setExtensions("hstore,pgcrypto,postgis");
config.setDockerContainerName("ut_postgis");
config.setDockerVersion("14-3.2");
return config.getDockerProperties();
}
@Override
public void setupExtraDbDataSource(Config config) {
int defaultPort = config.isUseDocker() ? 7432 : 5432;
config.setDefaultPort(defaultPort);
config.setExtraUsernameDefault();
config.setExtraDbPasswordDefault();
config.setExtraUrl("jdbc:postgresql_lwgis://${host}:${port}/${databaseName}");
config.extraDatasourceDefaults();
}
@Override
public boolean isLocal() {
return false;
}
}
@@ -26,7 +26,6 @@ public class PlatformAutoConfig {
KNOWN_PLATFORMS.put("sqlite", new SqliteSetup());
KNOWN_PLATFORMS.put("postgres", new PostgresSetup());
KNOWN_PLATFORMS.put("postgis", new PostgisSetup());
KNOWN_PLATFORMS.put("netpostgis", new NetPostgisSetup());
KNOWN_PLATFORMS.put("nuodb", new NuoDBSetup());
KNOWN_PLATFORMS.put("mysql", new MySqlSetup());
KNOWN_PLATFORMS.put("mariadb", new MariaDBSetup());
@@ -9,6 +9,9 @@ import java.util.Properties;
*/
class PostgisSetup implements PlatformSetup {
private static final String NET_POSTGIS_DRIVER = "net.postgis.jdbc.DriverWrapperLW";
private static final String ORG_POSTGIS_DRIVER = "org.postgis.DriverWrapperLW";
@Override
public Properties setup(Config config) {
int defaultPort = config.isUseDocker() ? 7432 : 5432;
@@ -17,9 +20,8 @@ class PostgisSetup implements PlatformSetup {
config.setDefaultPort(defaultPort);
config.setUsernameDefault();
config.setPasswordDefault();
config.setDriver("org.postgis.DriverWrapperLW");
config.setDriver(driver(config));
config.setUrl("jdbc:postgresql_lwgis://${host}:${port}/${databaseName}");
String schema = config.getSchema();
if (schema != null && !schema.equals(config.getUsername())) {
config.urlAppend("?currentSchema=" + schema);
@@ -28,6 +30,19 @@ class PostgisSetup implements PlatformSetup {
return dockerProperties(config);
}
private String driver(Config config) {
String driver = config.getPlatformKey("driver", "");
if (!driver.isEmpty()) {
return driver;
}
try {
Class.forName(NET_POSTGIS_DRIVER);
return NET_POSTGIS_DRIVER;
} catch (ClassNotFoundException e){
return ORG_POSTGIS_DRIVER;
}
}
private Properties dockerProperties(Config config) {
if (!config.isUseDocker()) {
return new Properties();