|
|
@ -17,6 +17,7 @@
|
|
|
|
package org.springframework.boot.autoconfigure.h2;
|
|
|
|
package org.springframework.boot.autoconfigure.h2;
|
|
|
|
|
|
|
|
|
|
|
|
import java.sql.Connection;
|
|
|
|
import java.sql.Connection;
|
|
|
|
|
|
|
|
import java.sql.DatabaseMetaData;
|
|
|
|
import java.sql.SQLException;
|
|
|
|
import java.sql.SQLException;
|
|
|
|
|
|
|
|
|
|
|
|
import javax.sql.DataSource;
|
|
|
|
import javax.sql.DataSource;
|
|
|
@ -33,6 +34,7 @@ import org.springframework.boot.test.system.OutputCaptureExtension;
|
|
|
|
import org.springframework.boot.web.servlet.ServletRegistrationBean;
|
|
|
|
import org.springframework.boot.web.servlet.ServletRegistrationBean;
|
|
|
|
import org.springframework.context.annotation.Bean;
|
|
|
|
import org.springframework.context.annotation.Bean;
|
|
|
|
import org.springframework.context.annotation.Configuration;
|
|
|
|
import org.springframework.context.annotation.Configuration;
|
|
|
|
|
|
|
|
import org.springframework.core.annotation.Order;
|
|
|
|
|
|
|
|
|
|
|
|
import static org.assertj.core.api.Assertions.assertThat;
|
|
|
|
import static org.assertj.core.api.Assertions.assertThat;
|
|
|
|
import static org.mockito.BDDMockito.given;
|
|
|
|
import static org.mockito.BDDMockito.given;
|
|
|
@ -114,25 +116,42 @@ class H2ConsoleAutoConfigurationTests {
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@Test
|
|
|
|
@ExtendWith(OutputCaptureExtension.class)
|
|
|
|
@ExtendWith(OutputCaptureExtension.class)
|
|
|
|
void dataSourceUrlIsLoggedWhenAvailable(CapturedOutput output) {
|
|
|
|
void singleDataSourceUrlIsLoggedWhenOnlyOneAvailable(CapturedOutput output) {
|
|
|
|
this.contextRunner.withConfiguration(AutoConfigurations.of(DataSourceAutoConfiguration.class))
|
|
|
|
this.contextRunner.withConfiguration(AutoConfigurations.of(DataSourceAutoConfiguration.class))
|
|
|
|
.withPropertyValues("spring.h2.console.enabled=true").run((context) -> {
|
|
|
|
.withPropertyValues("spring.h2.console.enabled=true").run((context) -> {
|
|
|
|
try (Connection connection = context.getBean(DataSource.class).getConnection()) {
|
|
|
|
try (Connection connection = context.getBean(DataSource.class).getConnection()) {
|
|
|
|
assertThat(output)
|
|
|
|
assertThat(output).contains("H2 console available at '/h2-console'. Database available at '"
|
|
|
|
.contains("Database available at '" + connection.getMetaData().getURL() + "'");
|
|
|
|
+ connection.getMetaData().getURL() + "'");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
|
|
|
@ExtendWith(OutputCaptureExtension.class)
|
|
|
|
|
|
|
|
void noDataSourceIsLoggedWhenNoneAvailable(CapturedOutput output) {
|
|
|
|
|
|
|
|
this.contextRunner.withUserConfiguration(FailingDataSourceConfiguration.class)
|
|
|
|
|
|
|
|
.withPropertyValues("spring.h2.console.enabled=true")
|
|
|
|
|
|
|
|
.run((context) -> assertThat(output).doesNotContain("H2 console available"));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
|
|
|
@ExtendWith(OutputCaptureExtension.class)
|
|
|
|
|
|
|
|
void allDataSourceUrlsAreLoggedWhenMultipleAvailable(CapturedOutput output) {
|
|
|
|
|
|
|
|
this.contextRunner
|
|
|
|
|
|
|
|
.withUserConfiguration(FailingDataSourceConfiguration.class, MultiDataSourceConfiguration.class)
|
|
|
|
|
|
|
|
.withPropertyValues("spring.h2.console.enabled=true").run((context) -> assertThat(output).contains(
|
|
|
|
|
|
|
|
"H2 console available at '/h2-console'. Databases available at 'someJdbcUrl', 'anotherJdbcUrl'"));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
@Test
|
|
|
|
void h2ConsoleShouldNotFailIfDatabaseConnectionFails() {
|
|
|
|
void h2ConsoleShouldNotFailIfDatabaseConnectionFails() {
|
|
|
|
this.contextRunner.withUserConfiguration(CustomDataSourceConfiguration.class)
|
|
|
|
this.contextRunner.withUserConfiguration(FailingDataSourceConfiguration.class)
|
|
|
|
.withPropertyValues("spring.h2.console.enabled=true")
|
|
|
|
.withPropertyValues("spring.h2.console.enabled=true")
|
|
|
|
.run((context) -> assertThat(context.isRunning()).isTrue());
|
|
|
|
.run((context) -> assertThat(context.isRunning()).isTrue());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Configuration(proxyBeanMethods = false)
|
|
|
|
@Configuration(proxyBeanMethods = false)
|
|
|
|
static class CustomDataSourceConfiguration {
|
|
|
|
static class FailingDataSourceConfiguration {
|
|
|
|
|
|
|
|
|
|
|
|
@Bean
|
|
|
|
@Bean
|
|
|
|
DataSource dataSource() throws SQLException {
|
|
|
|
DataSource dataSource() throws SQLException {
|
|
|
@ -143,4 +162,29 @@ class H2ConsoleAutoConfigurationTests {
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Configuration(proxyBeanMethods = false)
|
|
|
|
|
|
|
|
static class MultiDataSourceConfiguration {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Bean
|
|
|
|
|
|
|
|
@Order(5)
|
|
|
|
|
|
|
|
DataSource anotherDataSource() throws SQLException {
|
|
|
|
|
|
|
|
return mockDataSource("anotherJdbcUrl");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Bean
|
|
|
|
|
|
|
|
@Order(0)
|
|
|
|
|
|
|
|
DataSource someDataSource() throws SQLException {
|
|
|
|
|
|
|
|
return mockDataSource("someJdbcUrl");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private DataSource mockDataSource(String url) throws SQLException {
|
|
|
|
|
|
|
|
DataSource dataSource = mock(DataSource.class);
|
|
|
|
|
|
|
|
given(dataSource.getConnection()).willReturn(mock(Connection.class));
|
|
|
|
|
|
|
|
given(dataSource.getConnection().getMetaData()).willReturn(mock(DatabaseMetaData.class));
|
|
|
|
|
|
|
|
given(dataSource.getConnection().getMetaData().getURL()).willReturn(url);
|
|
|
|
|
|
|
|
return dataSource;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|