From 21a7a2c032bd9b20c90339e9678770ffa2fbbe16 Mon Sep 17 00:00:00 2001 From: Roland Praml Date: Fri, 28 Jan 2022 09:26:08 +0100 Subject: [PATCH] FIX: Datasource was not initialized in offline mode. --- .../server/core/InitDataSource.java | 1 - .../server/core/InitDataSourceTest.java | 66 +++++++++++++++++++ 2 files changed, 66 insertions(+), 1 deletion(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/InitDataSource.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/InitDataSource.java index 5cf4d7b2c..54bfff518 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/InitDataSource.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/InitDataSource.java @@ -99,7 +99,6 @@ final class InitDataSource { if (config.getDatabasePlatformName() == null) { throw new PersistenceException("You MUST specify a DatabasePlatformName on DatabaseConfig when offline"); } - return null; } attachAlert(dsConfig); diff --git a/ebean-test/src/test/java/io/ebeaninternal/server/core/InitDataSourceTest.java b/ebean-test/src/test/java/io/ebeaninternal/server/core/InitDataSourceTest.java index 584a943be..eb501029e 100644 --- a/ebean-test/src/test/java/io/ebeaninternal/server/core/InitDataSourceTest.java +++ b/ebean-test/src/test/java/io/ebeaninternal/server/core/InitDataSourceTest.java @@ -1,11 +1,19 @@ package io.ebeaninternal.server.core; import io.ebean.config.DatabaseConfig; +import io.ebean.datasource.DataSourceAlert; import io.ebean.datasource.DataSourceConfig; +import io.ebean.datasource.pool.ConnectionPool; + import org.junit.jupiter.api.Test; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.*; +import java.sql.SQLException; + +import javax.sql.DataSource; + public class InitDataSourceTest { private DatabaseConfig newConfig(String readOnlyUrl) { @@ -121,4 +129,62 @@ public class InitDataSourceTest { assertNotNull(roConfig); assertEquals("foo", roConfig.getUrl()); } + + + @Test + public void online() { + DatabaseConfig config = new DatabaseConfig(); + config.getDataSourceConfig().setUsername("sa"); + config.getDataSourceConfig().setPassword(""); + config.getDataSourceConfig().setUrl("jdbc:h2:mem:dsTestOnline"); + config.getDataSourceConfig().setDriver("org.h2.Driver"); + InitDataSource.init(config); + ConnectionPool pool = (ConnectionPool) config.getDataSource(); + assertThat(pool.isDataSourceUp()).isTrue(); + pool.shutdown(); + } + + static class MyAlert implements DataSourceAlert { + + int up; + + @Override + public void dataSourceUp(DataSource dataSource) { + up++; + } + + @Override + public void dataSourceDown(DataSource dataSource, SQLException reason) { + } + + @Override + public void dataSourceWarning(DataSource dataSource, String msg) { + } + + } + + @Test + public void offline() throws SQLException { + DatabaseConfig config = new DatabaseConfig(); + config.getDataSourceConfig().setUsername("sa"); + config.getDataSourceConfig().setPassword(""); + config.getDataSourceConfig().setUrl("jdbc:h2:mem:dsTestOffline"); + config.getDataSourceConfig().setDriver("org.h2.Driver"); + config.getDataSourceConfig().setOffline(true); + config.getDataSourceConfig().setFailOnStart(false); + MyAlert alert = new MyAlert(); + config.getDataSourceConfig().setAlert(alert); + config.setDatabasePlatformName("h2"); + InitDataSource.init(config); + ConnectionPool pool = (ConnectionPool) config.getDataSource(); + assertThat(pool).isNotNull(); + // make some additional tests with the pool + assertThat(pool.isDataSourceUp()).isFalse(); + assertThat(alert.up).isEqualTo(0); + pool.online(); + assertThat(alert.up).isEqualTo(1); + assertThat(pool.isDataSourceUp()).isTrue(); + pool.shutdown(); + } + }