#2686 - [ebean-test] Allow docker configuration options to be at ebean.test.X as well as ebean.test.<platform>.X

This commit is contained in:
Rob Bygrave
2022-05-05 20:54:07 +12:00
parent f41704b58c
commit c59475084a
2 changed files with 74 additions and 35 deletions
@@ -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);
}
@@ -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);
}
}