From d05b59343235c419785e5c8f9ae76d65a55e2f4f Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Mon, 7 Nov 2016 19:50:05 +1300 Subject: [PATCH] #862 - ENH: Change ServerConfig such that if H2 is the DataSource/DatabasePlatform then automatically it sets up for testing (ddl generation) --- .../com/avaje/ebean/config/ServerConfig.java | 34 +++++++++++++++++++ .../server/core/DefaultContainer.java | 2 +- ...nServerFactory_ServerConfigStart_Test.java | 1 + .../avaje/ebean/config/ServerConfigTest.java | 2 ++ .../build/ModelBuild_compoundKeyTest.java | 1 + .../ModelBuild_explicitSequencesTest.java | 1 + .../event/BeanPersistControllerTest.java | 1 + .../avaje/ebean/event/BeanPostLoadTest.java | 1 + .../transaction/TestAutoCommitDataSource.java | 1 + src/test/resources/ebean.properties | 4 +-- src/test/resources/logback-test.xml | 8 ++--- 11 files changed, 49 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/avaje/ebean/config/ServerConfig.java b/src/main/java/com/avaje/ebean/config/ServerConfig.java index 14e2e6085..d750c654b 100644 --- a/src/main/java/com/avaje/ebean/config/ServerConfig.java +++ b/src/main/java/com/avaje/ebean/config/ServerConfig.java @@ -77,6 +77,12 @@ public class ServerConfig { */ private String name = "db"; + /** + * When false (default) H2 automatically uses DDL generate and run + * (i.e. assumes we are running tests using in memory h2). + */ + private boolean h2ProductionMode; + /** * Typically configuration type objects that are passed by this ServerConfig * to plugins. For example - IgniteConfiguration passed to Ignite plugin. @@ -509,6 +515,27 @@ public class ServerConfig { this.name = name; } + /** + * Return true if H2 should be used in production mode. + *

+ * Otherwise it is assumed we are using H2 for testing and DDL generate and run is turned on. + *

+ */ + public boolean isH2ProductionMode() { + return h2ProductionMode; + } + + /** + * Set to true for H2 to be used in production mode. + *

+ * Do this when we want to use H2 and not have the DDL generation and run automatically turned on. + * Otherwise it is assumed we are using H2 for testing purposes. + *

+ */ + public void setH2ProductionMode(boolean h2ProductionMode) { + this.h2ProductionMode = h2ProductionMode; + } + /** * Return the container / clustering configuration. *

@@ -1444,6 +1471,12 @@ public class ServerConfig { */ public void setDatabasePlatform(DatabasePlatform databasePlatform) { this.databasePlatform = databasePlatform; + if (!h2ProductionMode && databasePlatform != null && databasePlatform.isPlatform(Platform.H2)) { + // we are using H2 to run tests so turn on DDL generation and run + this.ddlGenerate = true; + this.ddlRun = true; + this.ddlCreateOnly = true; + } } /** @@ -2460,6 +2493,7 @@ public class ServerConfig { jsonDateTime = JsonConfig.DateTime.MILLIS; } + h2ProductionMode = p.getBoolean("h2ProductionMode", h2ProductionMode); ddlGenerate = p.getBoolean("ddl.generate", ddlGenerate); ddlRun = p.getBoolean("ddl.run", ddlRun); ddlCreateOnly = p.getBoolean("ddl.createOnly", ddlCreateOnly); diff --git a/src/main/java/com/avaje/ebeaninternal/server/core/DefaultContainer.java b/src/main/java/com/avaje/ebeaninternal/server/core/DefaultContainer.java index 009513583..38e781d70 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/core/DefaultContainer.java +++ b/src/main/java/com/avaje/ebeaninternal/server/core/DefaultContainer.java @@ -240,7 +240,7 @@ public class DefaultContainer implements SpiContainer { DatabasePlatform db = factory.create(config); db.configure(config); config.setDatabasePlatform(db); - logger.info("DatabasePlatform name:" + config.getName() + " platform:" + db.getName()); + logger.info("DatabasePlatform name:{} platform:{}", config.getName(), db.getName()); } } diff --git a/src/test/java/com/avaje/ebean/EbeanServerFactory_ServerConfigStart_Test.java b/src/test/java/com/avaje/ebean/EbeanServerFactory_ServerConfigStart_Test.java index 3f9bdbed5..e30a39682 100644 --- a/src/test/java/com/avaje/ebean/EbeanServerFactory_ServerConfigStart_Test.java +++ b/src/test/java/com/avaje/ebean/EbeanServerFactory_ServerConfigStart_Test.java @@ -18,6 +18,7 @@ public class EbeanServerFactory_ServerConfigStart_Test { config.setName("h2"); config.loadFromProperties(); config.setName("h2other"); + config.setH2ProductionMode(true); config.setDdlGenerate(false); config.setDdlRun(false); config.setDefaultServer(false); diff --git a/src/test/java/com/avaje/ebean/config/ServerConfigTest.java b/src/test/java/com/avaje/ebean/config/ServerConfigTest.java index 202caca0f..01c1b4029 100644 --- a/src/test/java/com/avaje/ebean/config/ServerConfigTest.java +++ b/src/test/java/com/avaje/ebean/config/ServerConfigTest.java @@ -34,9 +34,11 @@ public class ServerConfigTest { props.setProperty("jdbcFetchSizeFindList", "43"); props.setProperty("backgroundExecutorShutdownSecs", "98"); props.setProperty("backgroundExecutorSchedulePoolSize", "4"); + props.setProperty("h2ProductionMode", "true"); serverConfig.loadFromProperties(props); + assertTrue(serverConfig.isH2ProductionMode()); assertEquals(PersistBatch.INSERT, serverConfig.getPersistBatch()); assertEquals(PersistBatch.INSERT, serverConfig.getPersistBatchOnCascade()); assertEquals(ServerConfig.DbUuid.BINARY, serverConfig.getDbUuid()); diff --git a/src/test/java/com/avaje/ebean/dbmigration/model/build/ModelBuild_compoundKeyTest.java b/src/test/java/com/avaje/ebean/dbmigration/model/build/ModelBuild_compoundKeyTest.java index 9a08860ef..9e5452c67 100644 --- a/src/test/java/com/avaje/ebean/dbmigration/model/build/ModelBuild_compoundKeyTest.java +++ b/src/test/java/com/avaje/ebean/dbmigration/model/build/ModelBuild_compoundKeyTest.java @@ -31,6 +31,7 @@ public class ModelBuild_compoundKeyTest extends BaseTestCase { config.setName("h2"); config.loadFromProperties(); config.setName("h2other"); + config.setH2ProductionMode(true); config.setDdlGenerate(false); config.setDdlRun(false); config.setDefaultServer(false); diff --git a/src/test/java/com/avaje/ebean/dbmigration/model/build/ModelBuild_explicitSequencesTest.java b/src/test/java/com/avaje/ebean/dbmigration/model/build/ModelBuild_explicitSequencesTest.java index 49fc3ada9..fa3fe09e7 100644 --- a/src/test/java/com/avaje/ebean/dbmigration/model/build/ModelBuild_explicitSequencesTest.java +++ b/src/test/java/com/avaje/ebean/dbmigration/model/build/ModelBuild_explicitSequencesTest.java @@ -25,6 +25,7 @@ public class ModelBuild_explicitSequencesTest extends BaseTestCase { config.setName("h2"); config.loadFromProperties(); config.setName("h2other"); + config.setH2ProductionMode(true); config.setDdlGenerate(false); config.setDdlRun(false); config.setDefaultServer(false); diff --git a/src/test/java/com/avaje/ebean/event/BeanPersistControllerTest.java b/src/test/java/com/avaje/ebean/event/BeanPersistControllerTest.java index 761634eb5..c1a6b02f6 100644 --- a/src/test/java/com/avaje/ebean/event/BeanPersistControllerTest.java +++ b/src/test/java/com/avaje/ebean/event/BeanPersistControllerTest.java @@ -73,6 +73,7 @@ public class BeanPersistControllerTest { ServerConfig config = new ServerConfig(); config.setName("h2ebasicver"); + config.setH2ProductionMode(true); config.loadFromProperties(); config.setDdlGenerate(true); config.setDdlRun(true); diff --git a/src/test/java/com/avaje/ebean/event/BeanPostLoadTest.java b/src/test/java/com/avaje/ebean/event/BeanPostLoadTest.java index 1dabfa7d1..7cbe11ee0 100644 --- a/src/test/java/com/avaje/ebean/event/BeanPostLoadTest.java +++ b/src/test/java/com/avaje/ebean/event/BeanPostLoadTest.java @@ -52,6 +52,7 @@ public class BeanPostLoadTest extends BaseTestCase { config.setName("h2ebasicver"); config.loadFromProperties(); + config.setH2ProductionMode(true); config.setDdlGenerate(true); config.setDdlRun(true); diff --git a/src/test/java/com/avaje/tests/transaction/TestAutoCommitDataSource.java b/src/test/java/com/avaje/tests/transaction/TestAutoCommitDataSource.java index 7365b352a..f03d17d49 100644 --- a/src/test/java/com/avaje/tests/transaction/TestAutoCommitDataSource.java +++ b/src/test/java/com/avaje/tests/transaction/TestAutoCommitDataSource.java @@ -43,6 +43,7 @@ public class TestAutoCommitDataSource extends BaseTestCase { ServerConfig config = new ServerConfig(); config.setName("h2autocommit"); + config.setH2ProductionMode(true); config.loadFromProperties(); config.setDataSource(pool); config.setDefaultServer(false); diff --git a/src/test/resources/ebean.properties b/src/test/resources/ebean.properties index 8eb6e2842..8ca08996f 100644 --- a/src/test/resources/ebean.properties +++ b/src/test/resources/ebean.properties @@ -15,8 +15,8 @@ ebean.encryptKeyManager=com.avaje.tests.basic.encrypt.BasicEncyptKeyManager #ebean.autotune.profiling=true #ebean.autotune.profilingUpdateFrequency=5 -ebean.ddl.generate=true -ebean.ddl.run=true +#ebean.ddl.generate=true +#ebean.ddl.run=true datasource.default=h2 #ebean.persistBatch=NONE diff --git a/src/test/resources/logback-test.xml b/src/test/resources/logback-test.xml index 44bfd40d3..ecacef46d 100644 --- a/src/test/resources/logback-test.xml +++ b/src/test/resources/logback-test.xml @@ -78,10 +78,10 @@ - - - - + + + +