diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/liquibase/LiquibaseEndpoint.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/liquibase/LiquibaseEndpoint.java index 5e780e7652a..54679040dd1 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/liquibase/LiquibaseEndpoint.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/liquibase/LiquibaseEndpoint.java @@ -80,10 +80,8 @@ public class LiquibaseEndpoint { Database database = null; try { database = factory.findCorrectDatabaseImplementation(connection); - String schemaToUse = liquibase.getLiquibaseSchema(); - if (!StringUtils.hasText(schemaToUse)) { // Use liquibase-schema if set, otherwise fall back to default-schema - schemaToUse = liquibase.getDefaultSchema(); - } + String schemaToUse = StringUtils.hasText(liquibase.getLiquibaseSchema()) + ? liquibase.getLiquibaseSchema() : liquibase.getDefaultSchema(); if (StringUtils.hasText(schemaToUse)) { database.setDefaultSchemaName(schemaToUse); } diff --git a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/liquibase/LiquibaseEndpointTests.java b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/liquibase/LiquibaseEndpointTests.java index fb1718d206a..8d412812a0a 100644 --- a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/liquibase/LiquibaseEndpointTests.java +++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/liquibase/LiquibaseEndpointTests.java @@ -18,7 +18,7 @@ package org.springframework.boot.actuate.liquibase; import java.sql.Connection; import java.sql.SQLException; -import java.util.Arrays; +import java.util.List; import java.util.Map; import java.util.UUID; @@ -34,7 +34,9 @@ import org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfigurati import org.springframework.boot.jdbc.EmbeddedDatabaseConnection; import org.springframework.boot.jdbc.init.DataSourceScriptDatabaseInitializer; import org.springframework.boot.sql.init.DatabaseInitializationSettings; +import org.springframework.boot.test.context.assertj.AssertableApplicationContext; import org.springframework.boot.test.context.runner.ApplicationContextRunner; +import org.springframework.boot.test.context.runner.ContextConsumer; import org.springframework.boot.testsupport.classpath.resources.WithResource; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; @@ -50,7 +52,6 @@ import static org.assertj.core.api.Assertions.assertThat; * @author Andy Wilkinson * @author Stephane Nicoll * @author Leo Li - * @author Nabil Fawwaz Elqayyim */ @WithResource(name = "db/changelog/db.changelog-master.yaml", content = """ databaseChangeLog: @@ -66,14 +67,7 @@ class LiquibaseEndpointTests { @Test void liquibaseReportIsReturned() { - this.contextRunner.withUserConfiguration(Config.class).run((context) -> { - Map liquibaseBeans = context.getBean(LiquibaseEndpoint.class) - .liquibaseBeans() - .getContexts() - .get(context.getId()) - .getLiquibaseBeans(); - assertThat(liquibaseBeans.get("liquibase").getChangeSets()).hasSize(1); - }); + this.contextRunner.withUserConfiguration(Config.class).run(hasEndpointWithInitializedSchema()); } @Test @@ -91,48 +85,60 @@ class LiquibaseEndpointTests { } @Test - @WithResource(name = "db/create-custom-schema.sql", content = "CREATE SCHEMA CUSTOMSCHEMA;") - void invokeWithCustomSchema() { + @WithResource(name = "db/create-custom-schema.sql", content = "CREATE SCHEMA ANOTHER_SCHEMA;") + void invokeWithCustomDefaultSchemaFailsIfItDoesNotExist() { this.contextRunner.withUserConfiguration(Config.class, DataSourceWithSchemaConfiguration.class) - .withPropertyValues("spring.liquibase.default-schema=CUSTOMSCHEMA") - .run((context) -> { - Map liquibaseBeans = context.getBean(LiquibaseEndpoint.class) - .liquibaseBeans() - .getContexts() - .get(context.getId()) - .getLiquibaseBeans(); - assertThat(liquibaseBeans.get("liquibase").getChangeSets()).hasSize(1); - }); + .withPropertyValues("spring.liquibase.default-schema=CUSTOM_DEFAULT_SCHEMA") + .run((context) -> assertThat(context).hasFailed() + .getFailure() + .rootCause() + .hasMessageContaining("CUSTOM_DEFAULT_SCHEMA")); } @Test - void invokeWithCustomTables() { - this.contextRunner.withUserConfiguration(Config.class) - .withPropertyValues("spring.liquibase.database-change-log-lock-table=liquibase_database_changelog_lock", - "spring.liquibase.database-change-log-table=liquibase_database_changelog") - .run((context) -> { - Map liquibaseBeans = context.getBean(LiquibaseEndpoint.class) - .liquibaseBeans() - .getContexts() - .get(context.getId()) - .getLiquibaseBeans(); - assertThat(liquibaseBeans.get("liquibase").getChangeSets()).hasSize(1); - }); + @WithResource(name = "db/create-custom-schema.sql", content = "CREATE SCHEMA CUSTOM_SCHEMA;") + void invokeWithCustomDefaultSchema() { + this.contextRunner.withUserConfiguration(Config.class, DataSourceWithSchemaConfiguration.class) + .withPropertyValues("spring.liquibase.default-schema=CUSTOM_SCHEMA") + .run(hasEndpointWithInitializedSchema()); + } + + @Test + @WithResource(name = "db/create-custom-schema.sql", content = "CREATE SCHEMA ANOTHER_SCHEMA;") + void invokeWithLiquibaseSchemaFailsIfItDoesNotExist() { + this.contextRunner.withUserConfiguration(Config.class, DataSourceWithSchemaConfiguration.class) + .withPropertyValues("spring.liquibase.liquibase-schema=CUSTOM_LIQUIBASE_SCHEMA") + .run((context) -> assertThat(context).hasFailed() + .getFailure() + .rootCause() + .hasMessageContaining("CUSTOM_LIQUIBASE_SCHEMA")); } @Test @WithResource(name = "db/create-custom-schema.sql", content = "CREATE SCHEMA LIQUIBASE_SCHEMA;") void invokeWithLiquibaseSchema() { this.contextRunner.withUserConfiguration(Config.class, DataSourceWithSchemaConfiguration.class) - .withPropertyValues("spring.liquibase.liquibase-schema=LIQUIBASE_SCHEMA") - .run((context) -> { - Map liquibaseBeans = context.getBean(LiquibaseEndpoint.class) - .liquibaseBeans() - .getContexts() - .get(context.getId()) - .getLiquibaseBeans(); - assertThat(liquibaseBeans.get("liquibase").getChangeSets()).hasSize(1); - }); + .withPropertyValues("spring.liquibase.liquibase-schema=LIQUIBASE_SCHEMA") + .run(hasEndpointWithInitializedSchema()); + } + + @Test + void invokeWithCustomTables() { + this.contextRunner.withUserConfiguration(Config.class) + .withPropertyValues("spring.liquibase.database-change-log-lock-table=liquibase_database_changelog_lock", + "spring.liquibase.database-change-log-table=liquibase_database_changelog") + .run(hasEndpointWithInitializedSchema()); + } + + private ContextConsumer hasEndpointWithInitializedSchema() { + return (context) -> { + Map liquibaseBeans = context.getBean(LiquibaseEndpoint.class) + .liquibaseBeans() + .getContexts() + .get(context.getId()) + .getLiquibaseBeans(); + assertThat(liquibaseBeans.get("liquibase").getChangeSets()).hasSize(1); + }; } @Test @@ -195,7 +201,7 @@ class LiquibaseEndpointTests { .setName(UUID.randomUUID().toString()) .build(); DatabaseInitializationSettings settings = new DatabaseInitializationSettings(); - settings.setSchemaLocations(Arrays.asList("classpath:/db/create-custom-schema.sql")); + settings.setSchemaLocations(List.of("classpath:/db/create-custom-schema.sql")); DataSourceScriptDatabaseInitializer initializer = new DataSourceScriptDatabaseInitializer(dataSource, settings); initializer.initializeDatabase();