From c59475084ac0b44641f75b9501efa3de13653bac Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Thu, 5 May 2022 20:54:07 +1200 Subject: [PATCH] #2686 - [ebean-test] Allow docker configuration options to be at ebean.test.X as well as ebean.test..X --- .../io/ebean/test/config/platform/Config.java | 28 +++---- .../test/config/platform/ConfigTest.java | 81 ++++++++++++++----- 2 files changed, 74 insertions(+), 35 deletions(-) diff --git a/ebean-test/src/main/java/io/ebean/test/config/platform/Config.java b/ebean-test/src/main/java/io/ebean/test/config/platform/Config.java index 8bde15468..0e6a276b8 100644 --- a/ebean-test/src/main/java/io/ebean/test/config/platform/Config.java +++ b/ebean-test/src/main/java/io/ebean/test/config/platform/Config.java @@ -63,7 +63,7 @@ class Config { } void setDefaultPort(int defaultPort) { - String val = getPlatformKey("port", null); + String val = getKey("port", null); if (val != null) { port = Integer.parseInt(val); } else { @@ -225,7 +225,7 @@ class Config { } void setUrl(String urlPattern) { - String val = getPlatformKey("url", urlPattern); + String val = getKey("url", urlPattern); val = val.replace("${host}", host()); val = val.replace("${port}", String.valueOf(port)); val = val.replace("${databaseName}", databaseName); @@ -245,7 +245,7 @@ class Config { } void setDriver(String driver) { - this.driver = getPlatformKey("driver", driver); + this.driver = getKey("driver", driver); } void setPasswordDefault() { @@ -259,7 +259,7 @@ class Config { private String deriveDbSchema() { String dbSchema = properties.getProperty("ebean.dbSchema", config.getDbSchema()); dbSchema = properties.getProperty("ebean.test.dbSchema", dbSchema); - return getPlatformKey("schema", dbSchema); + return getKey("schema", dbSchema); } /** @@ -267,7 +267,7 @@ class Config { */ void setUsernameDefault() { this.schema = first(deriveDbSchema()); - String defaultValue = schema != null ? schema : getPlatformKey("databaseName", this.databaseName); + String defaultValue = schema != null ? schema : getKey("databaseName", this.databaseName); this.username = getKey("username", defaultValue); } @@ -308,11 +308,11 @@ class Config { } void setUsername(String username) { - this.username = getPlatformKey("username", username); + this.username = getKey("username", username); } void setDatabaseName(String databaseName) { - this.databaseName = getPlatformKey("databaseName", databaseName); + this.databaseName = getKey("databaseName", databaseName); } boolean isUseDocker() { @@ -321,7 +321,7 @@ class Config { } void setDockerVersion(String version) { - String val = getPlatformKey("version", version); + String val = getKey("version", version); dockerProperties.setProperty(dockerKey("version"), val); if (containerDropCreate) { dockerProperties.setProperty(dockerKey("startMode"), "dropCreate"); @@ -334,16 +334,16 @@ class Config { } void setDockerContainerName(String containerName) { - dockerProperties.setProperty(dockerKey("containerName"), getPlatformKey("containerName", containerName)); + dockerProperties.setProperty(dockerKey("containerName"), getKey("containerName", containerName)); } void setDockerImage(String defaultImage) { - dockerProperties.setProperty(dockerKey("image"), getPlatformKey("image", defaultImage)); + dockerProperties.setProperty(dockerKey("image"), getKey("image", defaultImage)); } void setExtensions(String defaultValue) { // ebean.test.postgres.extensions=hstore,pgcrypto - String val = getPlatformKey("extensions", defaultValue); + String val = getKey("extensions", defaultValue); if (val != null) { dockerProperties.setProperty(dockerKey("extensions"), trimExtensions(val)); } @@ -363,7 +363,7 @@ class Config { return properties.getProperty("ebean.test." + platform + "." + key, defaultValue); } - private String getKey(String key, String defaultValue) { + String getKey(String key, String defaultValue) { defaultValue = properties.getProperty("ebean.test." + key, defaultValue); return properties.getProperty("ebean.test." + platform + "." + key, defaultValue); } @@ -402,7 +402,7 @@ class Config { } } for (String key : DOCKER_PLATFORM_PARAMS) { - String val = getPlatformKey(key, null); + String val = getKey(key, null); val = properties.getProperty("docker." + platform + "." + key, val); if (val != null) { dockerProperties.setProperty(dockerKey(key), val); @@ -442,7 +442,7 @@ class Config { * Pretty much only for SqlServer as we have the 2 platforms we need to choose from. */ void setDatabasePlatformName() { - String databasePlatformName = getPlatformKey("databasePlatformName", null); + String databasePlatformName = getKey("databasePlatformName", null); if (databasePlatformName != null) { setProperty("ebean." + db + ".databasePlatformName", databasePlatformName); } diff --git a/ebean-test/src/test/java/io/ebean/test/config/platform/ConfigTest.java b/ebean-test/src/test/java/io/ebean/test/config/platform/ConfigTest.java index 2670b4097..e84ae203b 100644 --- a/ebean-test/src/test/java/io/ebean/test/config/platform/ConfigTest.java +++ b/ebean-test/src/test/java/io/ebean/test/config/platform/ConfigTest.java @@ -14,22 +14,21 @@ import java.util.Properties; import static org.assertj.core.api.Assertions.assertThat; -public class ConfigTest { +class ConfigTest { @BeforeAll - public static void before() { + static void before() { // so that RunOnceMarker is not set when running these tests DbOffline.setPlatform(Platform.H2); } @AfterAll - public static void after() { + static void after() { DbOffline.reset(); } @Test - public void trimExtensions() { - + void trimExtensions() { Config config = new Config("db", "db", "db", new DatabaseConfig()); assertThat(config.trimExtensions("a,b")).isEqualTo("a,b"); @@ -38,8 +37,7 @@ public class ConfigTest { } @Test - public void extraDbProperties_basic() { - + void extraDbProperties_basic() { Properties p = new Properties(); p.setProperty("ebean.test.extraDb", "other"); @@ -61,8 +59,7 @@ public class ConfigTest { } @Test - public void extraDbProperties_basic_extraDb_dbName() { - + void extraDbProperties_basic_extraDb_dbName() { Properties p = new Properties(); p.setProperty("ebean.test.extraDb.dbName", "other"); @@ -84,8 +81,7 @@ public class ConfigTest { } @Test - public void extraDbProperties_withOptions() { - + void extraDbProperties_withOptions() { Properties p = new Properties(); p.setProperty("ebean.test.extraDb", "other1"); p.setProperty("ebean.test.extraDb.dbName", "other_db_name"); @@ -112,10 +108,8 @@ public class ConfigTest { assertThat(p.getProperty("datasource.other_db_name.url")).isEqualTo("other_url"); } - @Test - public void extraDbProperties_withExtraDbOptions() { - + void extraDbProperties_withExtraDbOptions() { Properties sourceProperties = new Properties(); sourceProperties.setProperty("ebean.test.dbName", "main"); sourceProperties.setProperty("ebean.test.extraDb.dbName", "central"); @@ -144,12 +138,10 @@ public class ConfigTest { Properties centralProps = serverConfig.getProperties(); assertThat(centralProps.getProperty("datasource.central.username")).isEqualTo("central"); - } @Test - public void ignoreDockerShutdown() { - + void ignoreDockerShutdown() { Properties sourceProperties = new Properties(); DatabaseConfig serverConfig = new DatabaseConfig(); serverConfig.loadFromProperties(sourceProperties); @@ -162,8 +154,7 @@ public class ConfigTest { @Disabled @Test - public void run_local_only_ignoreDockerShutdown() { - + void run_local_only_ignoreDockerShutdown() { Properties sourceProperties = new Properties(); DatabaseConfig serverConfig = new DatabaseConfig(); serverConfig.loadFromProperties(sourceProperties); @@ -174,8 +165,7 @@ public class ConfigTest { } @Test - public void ignoreDockerShutdown_viaProperties() { - + void ignoreDockerShutdown_viaProperties() { Properties sourceProperties = new Properties(); sourceProperties.setProperty("ebean.test.localDevelopment", "./src/test/resources/logback-test.xml"); @@ -186,4 +176,53 @@ public class ConfigTest { assertThat(config.ignoreDockerShutdown()).isTrue(); } + @Test + void readImage_fromPlatform() { + Properties p = new Properties(); + p.setProperty("ebean.test.postgres.image", "bar/bar"); + Config config = createConfig(p); + + String val = config.getPlatformKey("image", "someDefault"); + assertThat(val).isEqualTo("bar/bar"); + + val = config.getKey("image", "someDefault"); + assertThat(val).isEqualTo("bar/bar"); + } + + @Test + void readImage_fromTopLevel() { + Properties p = new Properties(); + p.setProperty("ebean.test.image", "bar/bar"); + p.setProperty("ebean.test.notPlatform.image", "bar/bar"); + Config config = createConfig(p); + + String val = config.getPlatformKey("image", "someDefault"); + assertThat(val).isEqualTo("someDefault"); + + val = config.getKey("image", "someDefault"); + assertThat(val).isEqualTo("bar/bar"); + } + + @Test + void readImage_expect_platformSpecificWins() { + Properties p = new Properties(); + p.setProperty("ebean.test.image", "foo/foo"); + p.setProperty("ebean.test.postgres.image", "bar/bar"); + + Config config = createConfig(p); + + String val = config.getPlatformKey("image", "someDefault"); + assertThat(val).isEqualTo("bar/bar"); + + val = config.getKey("image", "someDefault"); + assertThat(val).isEqualTo("bar/bar"); + } + + private Config createConfig(Properties p) { + DatabaseConfig serverConfig = new DatabaseConfig(); + serverConfig.setName("scOther"); + serverConfig.loadFromProperties(p); + return new Config("db_name", "postgres", "db_name", serverConfig); + } + }