diff --git a/module/spring-boot-jdbc/build.gradle b/module/spring-boot-jdbc/build.gradle index 70cc1b17a01..1a7a2f74b0e 100644 --- a/module/spring-boot-jdbc/build.gradle +++ b/module/spring-boot-jdbc/build.gradle @@ -77,6 +77,8 @@ dependencies { } testImplementation("tools.jackson.core:jackson-databind") + testCompileOnly("org.checkerframework:checker-qual") + testRuntimeOnly("ch.qos.logback:logback-classic") testRuntimeOnly("com.clickhouse:clickhouse-jdbc") testRuntimeOnly("com.mysql:mysql-connector-j") @@ -102,3 +104,11 @@ tasks.named("checkSpringConfigurationMetadata").configure { "spring.datasource.tomcat.*", ] } + +tasks.named("compileTestJava") { + options.nullability.checking = "tests" +} + +tasks.named("compileDockerTestJava") { + options.nullability.checking = "tests" +} diff --git a/module/spring-boot-jdbc/src/dockerTest/java/org/springframework/boot/jdbc/docker/compose/ClickHouseJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java b/module/spring-boot-jdbc/src/dockerTest/java/org/springframework/boot/jdbc/docker/compose/ClickHouseJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java index d7ce1c3a28d..98d27e2144d 100644 --- a/module/spring-boot-jdbc/src/dockerTest/java/org/springframework/boot/jdbc/docker/compose/ClickHouseJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java +++ b/module/spring-boot-jdbc/src/dockerTest/java/org/springframework/boot/jdbc/docker/compose/ClickHouseJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java @@ -56,7 +56,9 @@ class ClickHouseJdbcDockerComposeConnectionDetailsFactoryIntegrationTests { dataSource.setDriverClass((Class) ClassUtils.forName(connectionDetails.getDriverClassName(), getClass().getClassLoader())); JdbcTemplate template = new JdbcTemplate(dataSource); - assertThat(template.queryForObject(DatabaseDriver.CLICKHOUSE.getValidationQuery(), Integer.class)).isEqualTo(1); + String validationQuery = DatabaseDriver.CLICKHOUSE.getValidationQuery(); + assertThat(validationQuery).isNotNull(); + assertThat(template.queryForObject(validationQuery, Integer.class)).isEqualTo(1); } } diff --git a/module/spring-boot-jdbc/src/dockerTest/java/org/springframework/boot/jdbc/docker/compose/OracleFreeJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java b/module/spring-boot-jdbc/src/dockerTest/java/org/springframework/boot/jdbc/docker/compose/OracleFreeJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java index 0c9f3d10ea6..499437ec43f 100644 --- a/module/spring-boot-jdbc/src/dockerTest/java/org/springframework/boot/jdbc/docker/compose/OracleFreeJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java +++ b/module/spring-boot-jdbc/src/dockerTest/java/org/springframework/boot/jdbc/docker/compose/OracleFreeJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java @@ -53,8 +53,9 @@ class OracleFreeJdbcDockerComposeConnectionDetailsFactoryIntegrationTests { getClass().getClassLoader())); Awaitility.await().atMost(Duration.ofMinutes(1)).ignoreExceptions().untilAsserted(() -> { JdbcTemplate template = new JdbcTemplate(dataSource); - assertThat(template.queryForObject(DatabaseDriver.ORACLE.getValidationQuery(), String.class)) - .isEqualTo("Hello"); + String validationQuery = DatabaseDriver.ORACLE.getValidationQuery(); + assertThat(validationQuery).isNotNull(); + assertThat(template.queryForObject(validationQuery, String.class)).isEqualTo("Hello"); }); } diff --git a/module/spring-boot-jdbc/src/dockerTest/java/org/springframework/boot/jdbc/docker/compose/OracleXeJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java b/module/spring-boot-jdbc/src/dockerTest/java/org/springframework/boot/jdbc/docker/compose/OracleXeJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java index 9872e787e33..287c59ee673 100644 --- a/module/spring-boot-jdbc/src/dockerTest/java/org/springframework/boot/jdbc/docker/compose/OracleXeJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java +++ b/module/spring-boot-jdbc/src/dockerTest/java/org/springframework/boot/jdbc/docker/compose/OracleXeJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java @@ -57,8 +57,9 @@ class OracleXeJdbcDockerComposeConnectionDetailsFactoryIntegrationTests { getClass().getClassLoader())); Awaitility.await().atMost(Duration.ofMinutes(1)).ignoreExceptions().untilAsserted(() -> { JdbcTemplate template = new JdbcTemplate(dataSource); - assertThat(template.queryForObject(DatabaseDriver.ORACLE.getValidationQuery(), String.class)) - .isEqualTo("Hello"); + String validationQuery = DatabaseDriver.ORACLE.getValidationQuery(); + assertThat(validationQuery).isNotNull(); + assertThat(template.queryForObject(validationQuery, String.class)).isEqualTo("Hello"); }); } diff --git a/module/spring-boot-jdbc/src/dockerTest/java/org/springframework/boot/jdbc/docker/compose/PostgresJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java b/module/spring-boot-jdbc/src/dockerTest/java/org/springframework/boot/jdbc/docker/compose/PostgresJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java index a17e88bd162..599eff5b968 100644 --- a/module/spring-boot-jdbc/src/dockerTest/java/org/springframework/boot/jdbc/docker/compose/PostgresJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java +++ b/module/spring-boot-jdbc/src/dockerTest/java/org/springframework/boot/jdbc/docker/compose/PostgresJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java @@ -18,6 +18,8 @@ package org.springframework.boot.jdbc.docker.compose; import java.sql.Driver; +import org.jspecify.annotations.Nullable; + import org.springframework.boot.docker.compose.service.connection.test.DockerComposeTest; import org.springframework.boot.jdbc.DatabaseDriver; import org.springframework.boot.jdbc.autoconfigure.JdbcConnectionDetails; @@ -72,12 +74,13 @@ class PostgresJdbcDockerComposeConnectionDetailsFactoryIntegrationTests { } private void checkDatabaseAccess(JdbcConnectionDetails connectionDetails) throws ClassNotFoundException { - assertThat(executeQuery(connectionDetails, DatabaseDriver.POSTGRESQL.getValidationQuery(), Integer.class)) - .isEqualTo(1); + String validationQuery = DatabaseDriver.POSTGRESQL.getValidationQuery(); + assertThat(validationQuery).isNotNull(); + assertThat(executeQuery(connectionDetails, validationQuery, Integer.class)).isEqualTo(1); } @SuppressWarnings("unchecked") - private T executeQuery(JdbcConnectionDetails connectionDetails, String sql, Class resultClass) + private @Nullable T executeQuery(JdbcConnectionDetails connectionDetails, String sql, Class resultClass) throws ClassNotFoundException { SimpleDriverDataSource dataSource = new SimpleDriverDataSource(); dataSource.setUrl(connectionDetails.getJdbcUrl()); diff --git a/module/spring-boot-jdbc/src/dockerTest/java/org/springframework/boot/jdbc/docker/compose/SqlServerJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java b/module/spring-boot-jdbc/src/dockerTest/java/org/springframework/boot/jdbc/docker/compose/SqlServerJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java index bea6f1b43ad..e32449179c4 100644 --- a/module/spring-boot-jdbc/src/dockerTest/java/org/springframework/boot/jdbc/docker/compose/SqlServerJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java +++ b/module/spring-boot-jdbc/src/dockerTest/java/org/springframework/boot/jdbc/docker/compose/SqlServerJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java @@ -68,7 +68,9 @@ class SqlServerJdbcDockerComposeConnectionDetailsFactoryIntegrationTests { dataSource.setDriverClass((Class) ClassUtils.forName(connectionDetails.getDriverClassName(), getClass().getClassLoader())); JdbcTemplate template = new JdbcTemplate(dataSource); - assertThat(template.queryForObject(DatabaseDriver.SQLSERVER.getValidationQuery(), Integer.class)).isEqualTo(1); + String validationQuery = DatabaseDriver.SQLSERVER.getValidationQuery(); + assertThat(validationQuery).isNotNull(); + assertThat(template.queryForObject(validationQuery, Integer.class)).isEqualTo(1); } } diff --git a/module/spring-boot-jdbc/src/dockerTest/java/org/springframework/boot/jdbc/testcontainers/JdbcContainerConnectionDetailsFactoryTests.java b/module/spring-boot-jdbc/src/dockerTest/java/org/springframework/boot/jdbc/testcontainers/JdbcContainerConnectionDetailsFactoryTests.java index f0fb0444b02..6525ebd2d34 100644 --- a/module/spring-boot-jdbc/src/dockerTest/java/org/springframework/boot/jdbc/testcontainers/JdbcContainerConnectionDetailsFactoryTests.java +++ b/module/spring-boot-jdbc/src/dockerTest/java/org/springframework/boot/jdbc/testcontainers/JdbcContainerConnectionDetailsFactoryTests.java @@ -60,7 +60,9 @@ class JdbcContainerConnectionDetailsFactoryTests { void connectionCanBeMadeToJdbcContainer() { assertThat(this.connectionDetails).isNotNull(); JdbcTemplate jdbc = new JdbcTemplate(this.dataSource); - assertThatNoException().isThrownBy(() -> jdbc.execute(DatabaseDriver.POSTGRESQL.getValidationQuery())); + String validationQuery = DatabaseDriver.POSTGRESQL.getValidationQuery(); + assertThat(validationQuery).isNotNull(); + assertThatNoException().isThrownBy(() -> jdbc.execute(validationQuery)); } @Configuration(proxyBeanMethods = false) diff --git a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/DataSourceBuilderRuntimeHintsTests.java b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/DataSourceBuilderRuntimeHintsTests.java index 23e1b786daf..bd27b97d2d6 100644 --- a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/DataSourceBuilderRuntimeHintsTests.java +++ b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/DataSourceBuilderRuntimeHintsTests.java @@ -49,6 +49,7 @@ class DataSourceBuilderRuntimeHintsTests { TypeHint typeHint = hints.getTypeHint(dataSourceType); assertThat(typeHint).withFailMessage(() -> "No hints found for data source type " + dataSourceType) .isNotNull(); + assertThat(typeHint).isNotNull(); Set memberCategories = typeHint.getMemberCategories(); assertThat(memberCategories).containsExactly(MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS); }); diff --git a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/DataSourceBuilderTests.java b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/DataSourceBuilderTests.java index 2ce57035ad5..ab90f0a35d5 100644 --- a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/DataSourceBuilderTests.java +++ b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/DataSourceBuilderTests.java @@ -39,6 +39,7 @@ import oracle.ucp.jdbc.PoolDataSourceImpl; import org.apache.commons.dbcp2.BasicDataSource; import org.h2.Driver; import org.h2.jdbcx.JdbcDataSource; +import org.jspecify.annotations.Nullable; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; import org.postgresql.ds.PGSimpleDataSource; @@ -63,7 +64,7 @@ import static org.assertj.core.api.Assertions.assertThatNoException; */ class DataSourceBuilderTests { - private DataSource dataSource; + private @Nullable DataSource dataSource; @AfterEach void shutdownDataSource() throws IOException { @@ -621,33 +622,33 @@ class DataSourceBuilderTests { static class CustomTomcatDataSource extends org.apache.tomcat.jdbc.pool.DataSource { - private String jdbcUrl; + private @Nullable String jdbcUrl; - private String user; + private @Nullable String user; - private String driverClass; + private @Nullable String driverClass; - String getJdbcUrl() { + @Nullable String getJdbcUrl() { return this.jdbcUrl; } - void setJdbcUrl(String jdbcUrl) { + void setJdbcUrl(@Nullable String jdbcUrl) { this.jdbcUrl = jdbcUrl; } - String getUser() { + @Nullable String getUser() { return this.user; } - void setUser(String user) { + void setUser(@Nullable String user) { this.user = user; } - String getDriverClass() { + @Nullable String getDriverClass() { return this.driverClass; } - void setDriverClass(String driverClass) { + void setDriverClass(@Nullable String driverClass) { this.driverClass = driverClass; } @@ -655,9 +656,9 @@ class DataSourceBuilderTests { static class LimitedCustomDataSource extends AbstractDataSource { - private String username; + private @Nullable String username; - private String password; + private @Nullable String password; @Override public Connection getConnection() throws SQLException { @@ -669,19 +670,19 @@ class DataSourceBuilderTests { throw new UnsupportedOperationException(); } - String getUsername() { + @Nullable String getUsername() { return this.username; } - void setUsername(String username) { + void setUsername(@Nullable String username) { this.username = username; } - String getPassword() { + @Nullable String getPassword() { return this.password; } - void setPassword(String password) { + void setPassword(@Nullable String password) { this.password = password; } @@ -689,13 +690,13 @@ class DataSourceBuilderTests { static class NoDriverClassNameDataSource extends LimitedCustomDataSource { - private String url; + private @Nullable String url; - String getUrl() { + @Nullable String getUrl() { return this.url; } - void setUrl(String url) { + void setUrl(@Nullable String url) { this.url = url; } @@ -703,23 +704,23 @@ class DataSourceBuilderTests { static class CustomDataSource extends LimitedCustomDataSource { - private String driverClassName; + private @Nullable String driverClassName; - private String url; + private @Nullable String url; - String getDriverClassName() { + @Nullable String getDriverClassName() { return this.driverClassName; } - void setDriverClassName(String driverClassName) { + void setDriverClassName(@Nullable String driverClassName) { this.driverClassName = driverClassName; } - String getUrl() { + @Nullable String getUrl() { return this.url; } - void setUrl(String url) { + void setUrl(@Nullable String url) { this.url = url; } diff --git a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/DatabaseDriverClassNameTests.java b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/DatabaseDriverClassNameTests.java index e207bafdad3..4e041688170 100644 --- a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/DatabaseDriverClassNameTests.java +++ b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/DatabaseDriverClassNameTests.java @@ -29,6 +29,7 @@ import java.util.stream.Stream; import javax.sql.XADataSource; +import org.jspecify.annotations.Nullable; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; @@ -71,19 +72,20 @@ class DatabaseDriverClassNameTests { } static Stream databaseClassIsOfRequiredType() { - return Stream.concat(argumentsForType(Driver.class, DatabaseDriver::getDriverClassName), + Function getDriverClassName = DatabaseDriver::getDriverClassName; + return Stream.concat(argumentsForType(Driver.class, getDriverClassName), argumentsForType(XADataSource.class, (databaseDriver) -> databaseDriver.getXaDataSourceClassName() != null, DatabaseDriver::getXaDataSourceClassName)); } private static Stream argumentsForType(Class type, - Function classNameExtractor) { + Function classNameExtractor) { return argumentsForType(type, (databaseDriver) -> true, classNameExtractor); } private static Stream argumentsForType(Class type, Predicate predicate, - Function classNameExtractor) { + Function classNameExtractor) { return Stream.of(DatabaseDriver.values()) .filter((databaseDriver) -> !EXCLUDED_DRIVERS.contains(databaseDriver)) .filter(predicate) diff --git a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/EmbeddedDatabaseConnectionTests.java b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/EmbeddedDatabaseConnectionTests.java index 6f44135a010..5e33d9d0331 100644 --- a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/EmbeddedDatabaseConnectionTests.java +++ b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/EmbeddedDatabaseConnectionTests.java @@ -22,6 +22,7 @@ import java.sql.SQLException; import javax.sql.DataSource; +import org.jspecify.annotations.Nullable; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; @@ -61,6 +62,7 @@ class EmbeddedDatabaseConnectionTests { } @Test + @SuppressWarnings("NullAway") // Test null check void getUrlWithNullDatabaseNameForHsqldb() { assertThatIllegalArgumentException().isThrownBy(() -> EmbeddedDatabaseConnection.HSQLDB.getUrl(null)) .withMessageContaining("'databaseName' must not be empty"); @@ -142,7 +144,7 @@ class EmbeddedDatabaseConnectionTests { .isEmbedded(mockDataSource(EmbeddedDatabaseConnection.H2.getDriverClassName(), null))).isTrue(); } - DataSource mockDataSource(String productName, String connectionUrl) throws SQLException { + DataSource mockDataSource(@Nullable String productName, @Nullable String connectionUrl) throws SQLException { DatabaseMetaData metaData = mock(DatabaseMetaData.class); given(metaData.getDatabaseProductName()).willReturn(productName); given(metaData.getURL()).willReturn(connectionUrl); diff --git a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/DataSourceAutoConfigurationTests.java b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/DataSourceAutoConfigurationTests.java index 7d7287f4138..85616e453f9 100644 --- a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/DataSourceAutoConfigurationTests.java +++ b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/DataSourceAutoConfigurationTests.java @@ -37,6 +37,7 @@ import io.r2dbc.spi.ConnectionFactory; import oracle.ucp.jdbc.PoolDataSourceImpl; import org.apache.commons.dbcp2.BasicDataSource; import org.assertj.core.api.InstanceOfAssertFactories; +import org.jspecify.annotations.Nullable; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.BeanCreationException; @@ -292,8 +293,9 @@ class DataSourceAutoConfigurationTests { TestDataSource source = (TestDataSource) dataSource; assertThat(source.getUsername()).isEqualTo("user-1"); assertThat(source.getPassword()).isEqualTo("password-1"); - assertThat(source.getDriver().getClass().getName()) - .isEqualTo(DatabaseDriver.POSTGRESQL.getDriverClassName()); + Driver driver = source.getDriver(); + assertThat(driver).isNotNull(); + assertThat(driver.getClass().getName()).isEqualTo(DatabaseDriver.POSTGRESQL.getDriverClassName()); assertThat(source.getUrl()).isEqualTo("jdbc:customdb://customdb.example.com:12345/database-1"); }); } @@ -326,7 +328,7 @@ class DataSourceAutoConfigurationTests { @Configuration(proxyBeanMethods = false) static class TestDataSourceConfiguration { - private BasicDataSource pool; + private @Nullable BasicDataSource pool; @Bean DataSource dataSource() { diff --git a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/DataSourceBeanCreationFailureAnalyzerTests.java b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/DataSourceBeanCreationFailureAnalyzerTests.java index 6a38c579897..14a322ac838 100644 --- a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/DataSourceBeanCreationFailureAnalyzerTests.java +++ b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/DataSourceBeanCreationFailureAnalyzerTests.java @@ -16,6 +16,7 @@ package org.springframework.boot.jdbc.autoconfigure; +import com.mchange.util.AssertException; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.BeanCreationException; @@ -62,7 +63,9 @@ class DataSourceBeanCreationFailureAnalyzerTests { assertThat(failure).isNotNull(); DataSourceBeanCreationFailureAnalyzer failureAnalyzer = new DataSourceBeanCreationFailureAnalyzer( this.environment); - return failureAnalyzer.analyze(failure); + FailureAnalysis analysis = failureAnalyzer.analyze(failure); + assertThat(analysis).isNotNull(); + return analysis; } private BeanCreationException createFailure(Class configuration) { @@ -72,7 +75,7 @@ class DataSourceBeanCreationFailureAnalyzerTests { context.register(configuration); context.refresh(); context.close(); - return null; + throw new AssertException("Shouldn't be reached!"); } catch (BeanCreationException ex) { return ex; diff --git a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/DataSourceInitializationAutoConfigurationTests.java b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/DataSourceInitializationAutoConfigurationTests.java index 2f4ae04a7eb..3b25bc134c3 100644 --- a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/DataSourceInitializationAutoConfigurationTests.java +++ b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/DataSourceInitializationAutoConfigurationTests.java @@ -122,7 +122,8 @@ class DataSourceInitializationAutoConfigurationTests { @Bean DataSourceScriptDatabaseInitializer customInitializer() { - return new DataSourceScriptDatabaseInitializer(null, new DatabaseInitializationSettings()) { + return new DataSourceScriptDatabaseInitializer(mock(DataSource.class), + new DatabaseInitializationSettings()) { @Override protected void runScripts(Scripts scripts) { diff --git a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/Dbcp2JdbcConnectionDetailsBeanPostProcessorTests.java b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/Dbcp2JdbcConnectionDetailsBeanPostProcessorTests.java index 67b1cdee827..08badb30492 100644 --- a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/Dbcp2JdbcConnectionDetailsBeanPostProcessorTests.java +++ b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/Dbcp2JdbcConnectionDetailsBeanPostProcessorTests.java @@ -19,9 +19,11 @@ package org.springframework.boot.jdbc.autoconfigure; import org.apache.commons.dbcp2.BasicDataSource; import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.jdbc.DatabaseDriver; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; /** * Tests for {@link Dbcp2JdbcConnectionDetailsBeanPostProcessor}. @@ -33,13 +35,14 @@ import static org.assertj.core.api.Assertions.assertThat; class Dbcp2JdbcConnectionDetailsBeanPostProcessorTests { @Test + @SuppressWarnings("unchecked") void setUsernamePasswordUrlAndDriverClassName() { BasicDataSource dataSource = new BasicDataSource(); dataSource.setUrl("will-be-overwritten"); dataSource.setUsername("will-be-overwritten"); dataSource.setPassword("will-be-overwritten"); dataSource.setDriverClassName("will-be-overwritten"); - new Dbcp2JdbcConnectionDetailsBeanPostProcessor(null).processDataSource(dataSource, + new Dbcp2JdbcConnectionDetailsBeanPostProcessor(mock(ObjectProvider.class)).processDataSource(dataSource, new TestJdbcConnectionDetails()); assertThat(dataSource.getUrl()).isEqualTo("jdbc:customdb://customdb.example.com:12345/database-1"); assertThat(dataSource.getUserName()).isEqualTo("user-1"); diff --git a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/EmbeddedDataSourceConfigurationTests.java b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/EmbeddedDataSourceConfigurationTests.java index 1eaba3eea3a..792104a6193 100644 --- a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/EmbeddedDataSourceConfigurationTests.java +++ b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/EmbeddedDataSourceConfigurationTests.java @@ -22,6 +22,7 @@ import java.sql.SQLException; import javax.sql.DataSource; +import org.jspecify.annotations.Nullable; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; @@ -38,7 +39,7 @@ import static org.assertj.core.api.Assertions.assertThat; */ class EmbeddedDataSourceConfigurationTests { - private AnnotationConfigApplicationContext context; + private @Nullable AnnotationConfigApplicationContext context; @AfterEach void closeContext() { diff --git a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/HikariDataSourceConfigurationTests.java b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/HikariDataSourceConfigurationTests.java index ebc83d72a5d..47d7ec7cc15 100644 --- a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/HikariDataSourceConfigurationTests.java +++ b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/HikariDataSourceConfigurationTests.java @@ -26,6 +26,7 @@ import javax.sql.DataSource; import com.zaxxer.hikari.HikariDataSource; import org.assertj.core.api.InstanceOfAssertFactories; +import org.jspecify.annotations.Nullable; import org.junit.jupiter.api.Test; import org.springframework.beans.BeansException; @@ -239,12 +240,12 @@ class HikariDataSourceConfigurationTests { public static class MockDataSource implements DataSource { @Override - public Logger getParentLogger() throws SQLFeatureNotSupportedException { + public @Nullable Logger getParentLogger() throws SQLFeatureNotSupportedException { return null; } @Override - public T unwrap(Class iface) throws SQLException { + public @Nullable T unwrap(Class iface) throws SQLException { return null; } @@ -264,7 +265,7 @@ class HikariDataSourceConfigurationTests { } @Override - public PrintWriter getLogWriter() throws SQLException { + public @Nullable PrintWriter getLogWriter() throws SQLException { return null; } diff --git a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/HikariDriverConfigurationFailureAnalyzerTests.java b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/HikariDriverConfigurationFailureAnalyzerTests.java index 6edb62a4867..09f55cb9601 100644 --- a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/HikariDriverConfigurationFailureAnalyzerTests.java +++ b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/HikariDriverConfigurationFailureAnalyzerTests.java @@ -16,7 +16,9 @@ package org.springframework.boot.jdbc.autoconfigure; +import com.mchange.util.AssertException; import com.zaxxer.hikari.HikariDataSource; +import org.jspecify.annotations.Nullable; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.BeanCreationException; @@ -53,7 +55,7 @@ class HikariDriverConfigurationFailureAnalyzerTests { assertThat(failureAnalysis).isNull(); } - private FailureAnalysis performAnalysis(Class configuration) { + private @Nullable FailureAnalysis performAnalysis(Class configuration) { BeanCreationException failure = createFailure(configuration); assertThat(failure).isNotNull(); return new HikariDriverConfigurationFailureAnalyzer().analyze(failure); @@ -69,7 +71,7 @@ class HikariDriverConfigurationFailureAnalyzerTests { try { context.refresh(); context.close(); - return null; + throw new AssertException("Shouldn't be reached!"); } catch (BeanCreationException ex) { return ex; diff --git a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/HikariJdbcConnectionDetailsBeanPostProcessorTests.java b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/HikariJdbcConnectionDetailsBeanPostProcessorTests.java index b32eb190393..f05a1eb8b02 100644 --- a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/HikariJdbcConnectionDetailsBeanPostProcessorTests.java +++ b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/HikariJdbcConnectionDetailsBeanPostProcessorTests.java @@ -19,6 +19,7 @@ package org.springframework.boot.jdbc.autoconfigure; import com.zaxxer.hikari.HikariDataSource; import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.jdbc.DatabaseDriver; import static org.assertj.core.api.Assertions.assertThat; @@ -34,13 +35,14 @@ import static org.mockito.Mockito.mock; class HikariJdbcConnectionDetailsBeanPostProcessorTests { @Test + @SuppressWarnings("unchecked") void setUsernamePasswordAndUrl() { HikariDataSource dataSource = new HikariDataSource(); dataSource.setJdbcUrl("will-be-overwritten"); dataSource.setUsername("will-be-overwritten"); dataSource.setPassword("will-be-overwritten"); dataSource.setDriverClassName(DatabaseDriver.H2.getDriverClassName()); - new HikariJdbcConnectionDetailsBeanPostProcessor(null).processDataSource(dataSource, + new HikariJdbcConnectionDetailsBeanPostProcessor(mock(ObjectProvider.class)).processDataSource(dataSource, new TestJdbcConnectionDetails()); assertThat(dataSource.getJdbcUrl()).isEqualTo("jdbc:customdb://customdb.example.com:12345/database-1"); assertThat(dataSource.getUsername()).isEqualTo("user-1"); @@ -49,11 +51,13 @@ class HikariJdbcConnectionDetailsBeanPostProcessorTests { } @Test + @SuppressWarnings("unchecked") void toleratesConnectionDetailsWithNullDriverClassName() { HikariDataSource dataSource = new HikariDataSource(); dataSource.setDriverClassName(DatabaseDriver.H2.getDriverClassName()); JdbcConnectionDetails connectionDetails = mock(JdbcConnectionDetails.class); - new HikariJdbcConnectionDetailsBeanPostProcessor(null).processDataSource(dataSource, connectionDetails); + new HikariJdbcConnectionDetailsBeanPostProcessor(mock(ObjectProvider.class)).processDataSource(dataSource, + connectionDetails); assertThat(dataSource.getDriverClassName()).isEqualTo(DatabaseDriver.H2.getDriverClassName()); } diff --git a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/JdbcTemplateAutoConfigurationTests.java b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/JdbcTemplateAutoConfigurationTests.java index 3e8020d9739..99217d482e6 100644 --- a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/JdbcTemplateAutoConfigurationTests.java +++ b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/JdbcTemplateAutoConfigurationTests.java @@ -23,6 +23,7 @@ import java.lang.annotation.Target; import javax.sql.DataSource; +import org.jspecify.annotations.Nullable; import org.junit.jupiter.api.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; @@ -262,7 +263,7 @@ class JdbcTemplateAutoConfigurationTests { static class DataSourceInitializationValidator { - private final Integer count; + private final @Nullable Integer count; DataSourceInitializationValidator(JdbcTemplate jdbcTemplate) { this.count = jdbcTemplate.queryForObject("SELECT COUNT(*) from BAR", Integer.class); diff --git a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/JndiDataSourceAutoConfigurationTests.java b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/JndiDataSourceAutoConfigurationTests.java index d01f6f644b6..ed50224b98f 100644 --- a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/JndiDataSourceAutoConfigurationTests.java +++ b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/JndiDataSourceAutoConfigurationTests.java @@ -22,6 +22,7 @@ import javax.naming.Context; import javax.sql.DataSource; import org.apache.commons.dbcp2.BasicDataSource; +import org.jspecify.annotations.Nullable; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -49,7 +50,7 @@ class JndiDataSourceAutoConfigurationTests { private String initialContextFactory; - private AnnotationConfigApplicationContext context; + private @Nullable AnnotationConfigApplicationContext context; @BeforeEach void setupJndi() { diff --git a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/OracleUcpJdbcConnectionDetailsBeanPostProcessorTests.java b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/OracleUcpJdbcConnectionDetailsBeanPostProcessorTests.java index dcf3668593b..a3b19c2c9af 100644 --- a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/OracleUcpJdbcConnectionDetailsBeanPostProcessorTests.java +++ b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/OracleUcpJdbcConnectionDetailsBeanPostProcessorTests.java @@ -22,9 +22,11 @@ import oracle.ucp.jdbc.PoolDataSourceImpl; import oracle.ucp.util.OpaqueString; import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.jdbc.DatabaseDriver; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; /** * Tests for {@link OracleUcpJdbcConnectionDetailsBeanPostProcessor}. @@ -36,13 +38,14 @@ import static org.assertj.core.api.Assertions.assertThat; class OracleUcpJdbcConnectionDetailsBeanPostProcessorTests { @Test + @SuppressWarnings("unchecked") void setUsernamePasswordUrlAndDriverClassName() throws SQLException { PoolDataSourceImpl dataSource = new PoolDataSourceImpl(); dataSource.setURL("will-be-overwritten"); dataSource.setUser("will-be-overwritten"); dataSource.setPassword("will-be-overwritten"); dataSource.setConnectionFactoryClassName("will-be-overwritten"); - new OracleUcpJdbcConnectionDetailsBeanPostProcessor(null).processDataSource(dataSource, + new OracleUcpJdbcConnectionDetailsBeanPostProcessor(mock(ObjectProvider.class)).processDataSource(dataSource, new TestJdbcConnectionDetails()); assertThat(dataSource.getURL()).isEqualTo("jdbc:customdb://customdb.example.com:12345/database-1"); assertThat(dataSource.getUser()).isEqualTo("user-1"); diff --git a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/TestJdbcConnectionDetails.java b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/TestJdbcConnectionDetails.java index 922ac9cfc2e..0f41987539b 100644 --- a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/TestJdbcConnectionDetails.java +++ b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/TestJdbcConnectionDetails.java @@ -18,6 +18,8 @@ package org.springframework.boot.jdbc.autoconfigure; import org.springframework.boot.jdbc.DatabaseDriver; +import static org.assertj.core.api.Assertions.assertThat; + /** * {@link JdbcConnectionDetails} used in tests. * @@ -42,12 +44,16 @@ class TestJdbcConnectionDetails implements JdbcConnectionDetails { @Override public String getDriverClassName() { - return DatabaseDriver.POSTGRESQL.getDriverClassName(); + String driverClassName = DatabaseDriver.POSTGRESQL.getDriverClassName(); + assertThat(driverClassName).isNotNull(); + return driverClassName; } @Override public String getXaDataSourceClassName() { - return DatabaseDriver.POSTGRESQL.getXaDataSourceClassName(); + String xaDataSourceClassName = DatabaseDriver.POSTGRESQL.getXaDataSourceClassName(); + assertThat(xaDataSourceClassName).isNotNull(); + return xaDataSourceClassName; } } diff --git a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/TomcatJdbcConnectionDetailsBeanPostProcessorTests.java b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/TomcatJdbcConnectionDetailsBeanPostProcessorTests.java index 002531a8852..7a9cbe1a2ad 100644 --- a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/TomcatJdbcConnectionDetailsBeanPostProcessorTests.java +++ b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/TomcatJdbcConnectionDetailsBeanPostProcessorTests.java @@ -19,9 +19,11 @@ package org.springframework.boot.jdbc.autoconfigure; import org.apache.tomcat.jdbc.pool.DataSource; import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.jdbc.DatabaseDriver; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; /** * Tests for {@link TomcatJdbcConnectionDetailsBeanPostProcessor}. @@ -33,13 +35,14 @@ import static org.assertj.core.api.Assertions.assertThat; class TomcatJdbcConnectionDetailsBeanPostProcessorTests { @Test + @SuppressWarnings("unchecked") void setUsernamePasswordUrlAndDriverClassName() { DataSource dataSource = new DataSource(); dataSource.setUrl("will-be-overwritten"); dataSource.setUsername("will-be-overwritten"); dataSource.setPassword("will-be-overwritten"); dataSource.setDriverClassName("will-be-overwritten"); - new TomcatJdbcConnectionDetailsBeanPostProcessor(null).processDataSource(dataSource, + new TomcatJdbcConnectionDetailsBeanPostProcessor(mock(ObjectProvider.class)).processDataSource(dataSource, new TestJdbcConnectionDetails()); assertThat(dataSource.getUrl()).isEqualTo("jdbc:customdb://customdb.example.com:12345/database-1"); assertThat(dataSource.getUsername()).isEqualTo("user-1"); diff --git a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/XADataSourceAutoConfigurationTests.java b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/XADataSourceAutoConfigurationTests.java index 9ab067031c7..eba862b8e71 100644 --- a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/XADataSourceAutoConfigurationTests.java +++ b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/autoconfigure/XADataSourceAutoConfigurationTests.java @@ -21,6 +21,7 @@ import javax.sql.XADataSource; import com.ibm.db2.jcc.DB2XADataSource; import org.hsqldb.jdbc.pool.JDBCXADataSource; +import org.jspecify.annotations.Nullable; import org.junit.jupiter.api.Test; import org.postgresql.xa.PGXADataSource; @@ -161,7 +162,7 @@ class XADataSourceAutoConfigurationTests { static class MockXADataSourceWrapper implements XADataSourceWrapper { - private XADataSource dataSource; + private @Nullable XADataSource dataSource; @Override public DataSource wrapDataSource(XADataSource dataSource) { @@ -169,7 +170,7 @@ class XADataSourceAutoConfigurationTests { return mock(DataSource.class); } - XADataSource getXaDataSource() { + @Nullable XADataSource getXaDataSource() { return this.dataSource; } diff --git a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/docker/compose/JdbcUrlBuilderTests.java b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/docker/compose/JdbcUrlBuilderTests.java index 785d2f5a91b..e103bdbbc22 100644 --- a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/docker/compose/JdbcUrlBuilderTests.java +++ b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/docker/compose/JdbcUrlBuilderTests.java @@ -38,9 +38,10 @@ import static org.mockito.Mockito.mock; */ class JdbcUrlBuilderTests { - private JdbcUrlBuilder builder = new JdbcUrlBuilder("mydb", 1234); + private final JdbcUrlBuilder builder = new JdbcUrlBuilder("mydb", 1234); @Test + @SuppressWarnings("NullAway") // Test null check void createWhenDriverProtocolIsNullThrowsException() { assertThatIllegalArgumentException().isThrownBy(() -> new JdbcUrlBuilder(null, 123)) .withMessage("'driverProtocol' must not be null"); @@ -82,6 +83,7 @@ class JdbcUrlBuilderTests { } @Test + @SuppressWarnings("NullAway") // Test null check void buildWhenServiceIsNullThrowsException() { assertThatIllegalArgumentException().isThrownBy(() -> this.builder.build(null, "mydb")) .withMessage("'service' must not be null"); diff --git a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/health/DataSourceHealthIndicatorTests.java b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/health/DataSourceHealthIndicatorTests.java index 55645092e6e..fbdca4f280b 100644 --- a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/health/DataSourceHealthIndicatorTests.java +++ b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/health/DataSourceHealthIndicatorTests.java @@ -54,7 +54,9 @@ class DataSourceHealthIndicatorTests { void init() { EmbeddedDatabaseConnection db = EmbeddedDatabaseConnection.HSQLDB; this.dataSource = new SingleConnectionDataSource(db.getUrl("testdb") + ";shutdown=true", "sa", "", false); - this.dataSource.setDriverClassName(db.getDriverClassName()); + String driverClassName = db.getDriverClassName(); + assertThat(driverClassName).isNotNull(); + this.dataSource.setDriverClassName(driverClassName); } @AfterEach diff --git a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/init/DataSourceScriptDatabaseInitializerTests.java b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/init/DataSourceScriptDatabaseInitializerTests.java index 2cff5e40d85..ef605a23488 100644 --- a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/init/DataSourceScriptDatabaseInitializerTests.java +++ b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/init/DataSourceScriptDatabaseInitializerTests.java @@ -109,7 +109,9 @@ class DataSourceScriptDatabaseInitializerTests } private int numberOfRows(DataSource dataSource, String sql) { - return new JdbcTemplate(dataSource).queryForObject(sql, Integer.class); + Integer rows = new JdbcTemplate(dataSource).queryForObject(sql, Integer.class); + assertThat(rows).isNotNull(); + return rows; } @Override diff --git a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/metadata/AbstractDataSourcePoolMetadataTests.java b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/metadata/AbstractDataSourcePoolMetadataTests.java index d5a394b5896..bca4000ced0 100644 --- a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/metadata/AbstractDataSourcePoolMetadataTests.java +++ b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/metadata/AbstractDataSourcePoolMetadataTests.java @@ -54,7 +54,7 @@ abstract class AbstractDataSourcePoolMetadataTests) (connection) -> null); + jdbcTemplate.execute((ConnectionCallback) (connection) -> new Object()); assertThat(getDataSourceMetadata().getActive()).isZero(); assertThat(getDataSourceMetadata().getUsage()).isZero(); } @@ -62,30 +62,30 @@ abstract class AbstractDataSourcePoolMetadataTests) (connection) -> { + jdbcTemplate.execute((ConnectionCallback) (connection) -> { assertThat(getDataSourceMetadata().getActive()).isOne(); assertThat(getDataSourceMetadata().getUsage()).isEqualTo(0.5f); - return null; + return new Object(); }); } @Test void getIdle() { JdbcTemplate jdbcTemplate = new JdbcTemplate(getDataSourceMetadata().getDataSource()); - jdbcTemplate.execute((ConnectionCallback) (connection) -> null); + jdbcTemplate.execute((ConnectionCallback) (connection) -> new Object()); assertThat(getDataSourceMetadata().getIdle()).isOne(); } @Test void getPoolSizeTwoConnections() { final JdbcTemplate jdbcTemplate = new JdbcTemplate(getDataSourceMetadata().getDataSource()); - jdbcTemplate.execute((ConnectionCallback) (connection) -> { - jdbcTemplate.execute((ConnectionCallback) (connection1) -> { + jdbcTemplate.execute((ConnectionCallback) (connection) -> { + jdbcTemplate.execute((ConnectionCallback) (connection1) -> { assertThat(getDataSourceMetadata().getActive()).isEqualTo(2); assertThat(getDataSourceMetadata().getUsage()).isOne(); - return null; + return new Object(); }); - return null; + return new Object(); }); } diff --git a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/metadata/CommonsDbcp2DataSourcePoolMetadataTests.java b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/metadata/CommonsDbcp2DataSourcePoolMetadataTests.java index 7c45b8ec625..f413744aa5e 100644 --- a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/metadata/CommonsDbcp2DataSourcePoolMetadataTests.java +++ b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/metadata/CommonsDbcp2DataSourcePoolMetadataTests.java @@ -19,6 +19,7 @@ package org.springframework.boot.jdbc.metadata; import java.time.Duration; import org.apache.commons.dbcp2.BasicDataSource; +import org.jspecify.annotations.Nullable; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; @@ -42,7 +43,7 @@ class CommonsDbcp2DataSourcePoolMetadataTests void getPoolUsageWithNoCurrent() { CommonsDbcp2DataSourcePoolMetadata dsm = new CommonsDbcp2DataSourcePoolMetadata(createDataSource()) { @Override - public Integer getActive() { + public @Nullable Integer getActive() { return null; } }; @@ -53,7 +54,7 @@ class CommonsDbcp2DataSourcePoolMetadataTests void getPoolUsageWithNoMax() { CommonsDbcp2DataSourcePoolMetadata dsm = new CommonsDbcp2DataSourcePoolMetadata(createDataSource()) { @Override - public Integer getMax() { + public @Nullable Integer getMax() { return null; } }; diff --git a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/metadata/CompositeDataSourcePoolMetadataProviderTests.java b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/metadata/CompositeDataSourcePoolMetadataProviderTests.java index 5da66ef0b5d..029ecbe0576 100644 --- a/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/metadata/CompositeDataSourcePoolMetadataProviderTests.java +++ b/module/spring-boot-jdbc/src/test/java/org/springframework/boot/jdbc/metadata/CompositeDataSourcePoolMetadataProviderTests.java @@ -38,24 +38,31 @@ import static org.mockito.BDDMockito.given; class CompositeDataSourcePoolMetadataProviderTests { @Mock + @SuppressWarnings("NullAway.Init") private DataSourcePoolMetadataProvider firstProvider; @Mock + @SuppressWarnings("NullAway.Init") private DataSourcePoolMetadata first; @Mock + @SuppressWarnings("NullAway.Init") private DataSource firstDataSource; @Mock + @SuppressWarnings("NullAway.Init") private DataSourcePoolMetadataProvider secondProvider; @Mock + @SuppressWarnings("NullAway.Init") private DataSourcePoolMetadata second; @Mock + @SuppressWarnings("NullAway.Init") private DataSource secondDataSource; @Mock + @SuppressWarnings("NullAway.Init") private DataSource unknownDataSource; @BeforeEach