From 2a031983937a574e35ee4d87f44b7b4b47c9df79 Mon Sep 17 00:00:00 2001 From: rob bygrave Date: Wed, 29 Apr 2020 22:07:27 +1200 Subject: [PATCH] #1999 - Additionally support "none" for read only url "none" can then be used as a special literal value in configuration for "no read-only jdbc url" --- .../server/core/InitDataSource.java | 3 +- .../server/core/InitDataSourceTest.java | 38 ++++++++++--------- 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/src/main/java/io/ebeaninternal/server/core/InitDataSource.java b/src/main/java/io/ebeaninternal/server/core/InitDataSource.java index 51a45a404..313d40aba 100644 --- a/src/main/java/io/ebeaninternal/server/core/InitDataSource.java +++ b/src/main/java/io/ebeaninternal/server/core/InitDataSource.java @@ -74,7 +74,8 @@ class InitDataSource { // it has explicitly been set to null, not expected but ok return null; } - if (roConfig.getUrl() == null && !config.isAutoReadOnlyDataSource()) { + final String url = roConfig.getUrl(); + if ("none".equalsIgnoreCase(url) || (url == null && !config.isAutoReadOnlyDataSource())) { // no read-only DataSource will be used return null; } diff --git a/src/test/java/io/ebeaninternal/server/core/InitDataSourceTest.java b/src/test/java/io/ebeaninternal/server/core/InitDataSourceTest.java index f4472eedc..550e2a078 100644 --- a/src/test/java/io/ebeaninternal/server/core/InitDataSourceTest.java +++ b/src/test/java/io/ebeaninternal/server/core/InitDataSourceTest.java @@ -8,6 +8,14 @@ import static org.junit.Assert.*; public class InitDataSourceTest { + private ServerConfig newConfig(String readOnlyUrl) { + ServerConfig config = new ServerConfig(); + DataSourceConfig roConfig = new DataSourceConfig(); + roConfig.setUrl(readOnlyUrl); + config.setReadOnlyDataSourceConfig(roConfig); + return config; + } + @Test public void readOnlyConfig_nullByDefault() { InitDataSource init = new InitDataSource(new ServerConfig()); @@ -19,19 +27,19 @@ public class InitDataSourceTest { ServerConfig config = new ServerConfig(); config.setReadOnlyDataSourceConfig(null); - InitDataSource init = new InitDataSource(config); - assertNull(init.readOnlyConfig()); + assertNull(new InitDataSource(config).readOnlyConfig()); } @Test public void readOnlyConfig_null_whenSetNullExplicitly_2() { - ServerConfig config = new ServerConfig(); - DataSourceConfig roConfig = new DataSourceConfig(); - roConfig.setUrl(null); - config.setReadOnlyDataSourceConfig(roConfig); + assertNull(new InitDataSource(newConfig(null)).readOnlyConfig()); + } - InitDataSource init = new InitDataSource(config); - assertNull(init.readOnlyConfig()); + @Test + public void readOnlyConfig_null_whenValueNONE() { + assertNull(new InitDataSource(newConfig("none")).readOnlyConfig()); + assertNull(new InitDataSource(newConfig("None")).readOnlyConfig()); + assertNull(new InitDataSource(newConfig("NONE")).readOnlyConfig()); } @Test @@ -39,19 +47,14 @@ public class InitDataSourceTest { ServerConfig config = new ServerConfig(); config.setAutoReadOnlyDataSource(true); - InitDataSource init = new InitDataSource(config); - assertNotNull(init.readOnlyConfig()); + assertNotNull(new InitDataSource(config).readOnlyConfig()); } @Test public void readOnlyConfig_when_urlSet() { - ServerConfig config = new ServerConfig(); - DataSourceConfig dsConfig = new DataSourceConfig(); - dsConfig.setUrl("foo"); - config.setReadOnlyDataSourceConfig(dsConfig); + ServerConfig config = newConfig("foo"); - InitDataSource init = new InitDataSource(config); - final DataSourceConfig roConfig = init.readOnlyConfig(); + final DataSourceConfig roConfig = new InitDataSource(config).readOnlyConfig(); assertNotNull(roConfig); assertEquals("foo", roConfig.getUrl()); } @@ -61,8 +64,7 @@ public class InitDataSourceTest { ServerConfig config = new ServerConfig(); config.getReadOnlyDataSourceConfig().setUrl("foo"); - InitDataSource init = new InitDataSource(config); - final DataSourceConfig roConfig = init.readOnlyConfig(); + final DataSourceConfig roConfig = new InitDataSource(config).readOnlyConfig(); assertNotNull(roConfig); assertEquals("foo", roConfig.getUrl()); }