diff --git a/common-internal-bom/build.gradle.kts b/common-internal-bom/build.gradle.kts index 9e0007c5..b443fa31 100644 --- a/common-internal-bom/build.gradle.kts +++ b/common-internal-bom/build.gradle.kts @@ -12,7 +12,7 @@ dependencies { api(platform("org.assertj:assertj-bom:3.26.3")) api(platform("org.testcontainers:testcontainers-bom:1.20.3")) api(platform("org.junit:junit-bom:5.11.3")) - api(platform("io.github.mfvanek:pg-index-health-bom:0.13.1")) + api(platform("io.github.mfvanek:pg-index-health-bom:0.13.2")) constraints { api("org.liquibase:liquibase-core:4.29.2") diff --git a/docker/docker-compose-base.yml b/docker/docker-compose-base.yml index dc3aba7b..fa15936f 100644 --- a/docker/docker-compose-base.yml +++ b/docker/docker-compose-base.yml @@ -86,7 +86,7 @@ services: postgres: container_name: postgres - image: postgres:16.4 + image: postgres:17.0 shm_size: "2gb" environment: POSTGRES_DB: "otel_demo_db" diff --git a/spring-boot-2-demo-app/build.gradle.kts b/spring-boot-2-demo-app/build.gradle.kts index a8914d89..0fb671a4 100644 --- a/spring-boot-2-demo-app/build.gradle.kts +++ b/spring-boot-2-demo-app/build.gradle.kts @@ -21,7 +21,8 @@ dependencies { implementation("org.springframework.kafka:spring-kafka") implementation("io.opentelemetry:opentelemetry-exporter-otlp") - implementation("org.springframework.cloud:spring-cloud-starter-sleuth") { + implementation("org.springframework.cloud:spring-cloud-starter-sleuth:3.1.11") { + because("The version is higher than in BOM") exclude(group = "org.springframework.cloud", module = "spring-cloud-sleuth-brave") } implementation("org.springframework.cloud:spring-cloud-sleuth-otel-autoconfigure") diff --git a/spring-boot-2-demo-app/src/test/java/io/github/mfvanek/spring/boot2/test/IndexesMaintenanceTest.java b/spring-boot-2-demo-app/src/test/java/io/github/mfvanek/spring/boot2/test/IndexesMaintenanceTest.java index 4967c663..064fd5aa 100644 --- a/spring-boot-2-demo-app/src/test/java/io/github/mfvanek/spring/boot2/test/IndexesMaintenanceTest.java +++ b/spring-boot-2-demo-app/src/test/java/io/github/mfvanek/spring/boot2/test/IndexesMaintenanceTest.java @@ -3,17 +3,17 @@ import io.github.mfvanek.pg.common.maintenance.DatabaseCheckOnHost; import io.github.mfvanek.pg.common.maintenance.Diagnostic; import io.github.mfvanek.pg.model.DbObject; -import io.github.mfvanek.pg.model.column.Column; -import io.github.mfvanek.pg.model.table.Table; +import io.github.mfvanek.pg.model.PgContext; +import io.github.mfvanek.pg.model.table.TableNameAware; import io.github.mfvanek.spring.boot2.test.support.TestBase; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import java.util.List; +import java.util.function.Predicate; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.InstanceOfAssertFactories.list; class IndexesMaintenanceTest extends TestBase { @@ -25,7 +25,7 @@ class IndexesMaintenanceTest extends TestBase { void checkPostgresVersion() { final String pgVersion = jdbcTemplate.queryForObject("select version();", String.class); assertThat(pgVersion) - .startsWith("PostgreSQL 16.4"); + .startsWith("PostgreSQL 17.0"); } @Test @@ -33,25 +33,19 @@ void databaseStructureCheckForPublicSchema() { assertThat(checks) .hasSameSizeAs(Diagnostic.values()); - checks.forEach(check -> { - switch (check.getDiagnostic()) { - case TABLES_WITHOUT_PRIMARY_KEY, TABLES_WITHOUT_DESCRIPTION -> assertThat(check.check()) - .asInstanceOf(list(Table.class)) - .hasSize(1) - .containsExactly(Table.of("databasechangelog", 0L)); - - case COLUMNS_WITHOUT_DESCRIPTION -> assertThat(check.check()) - .asInstanceOf(list(Column.class)) - .hasSize(14) - .allSatisfy(column -> assertThat(column.getTableName()).isEqualTo("databasechangelog")); - - case TABLES_WITH_MISSING_INDEXES -> assertThat(check.check()) - .hasSizeLessThanOrEqualTo(1); // TODO skip runtime checks after https://github.com/mfvanek/pg-index-health/issues/456 - - default -> assertThat(check.check()) + checks.stream() + .filter(DatabaseCheckOnHost::isStatic) + .forEach(check -> { + final Predicate skipLiquibaseTables = dbObject -> { + if (dbObject instanceof TableNameAware t) { + return !t.getTableName().equalsIgnoreCase("databasechangelog"); + } + return true; + }; + final List objects = check.check(PgContext.ofPublic(), skipLiquibaseTables); + assertThat(objects) .as(check.getDiagnostic().name()) .isEmpty(); - } - }); + }); } } diff --git a/spring-boot-2-demo-app/src/test/java/io/github/mfvanek/spring/boot2/test/support/PostgresInitializer.java b/spring-boot-2-demo-app/src/test/java/io/github/mfvanek/spring/boot2/test/support/PostgresInitializer.java index 9b551f18..52eb6b29 100644 --- a/spring-boot-2-demo-app/src/test/java/io/github/mfvanek/spring/boot2/test/support/PostgresInitializer.java +++ b/spring-boot-2-demo-app/src/test/java/io/github/mfvanek/spring/boot2/test/support/PostgresInitializer.java @@ -10,7 +10,7 @@ public class PostgresInitializer implements ApplicationContextInitializer { - private static final DockerImageName IMAGE = DockerImageName.parse("postgres:16.4"); + private static final DockerImageName IMAGE = DockerImageName.parse("postgres:17.0"); private static final Network NETWORK = Network.newNetwork(); private static final PostgreSQLContainer CONTAINER = new PostgreSQLContainer<>(IMAGE); diff --git a/spring-boot-3-demo-app/src/test/java/io/github/mfvanek/spring/boot3/test/IndexesMaintenanceTest.java b/spring-boot-3-demo-app/src/test/java/io/github/mfvanek/spring/boot3/test/IndexesMaintenanceTest.java index d19a43f0..0fe52597 100644 --- a/spring-boot-3-demo-app/src/test/java/io/github/mfvanek/spring/boot3/test/IndexesMaintenanceTest.java +++ b/spring-boot-3-demo-app/src/test/java/io/github/mfvanek/spring/boot3/test/IndexesMaintenanceTest.java @@ -3,17 +3,17 @@ import io.github.mfvanek.pg.common.maintenance.DatabaseCheckOnHost; import io.github.mfvanek.pg.common.maintenance.Diagnostic; import io.github.mfvanek.pg.model.DbObject; -import io.github.mfvanek.pg.model.column.Column; -import io.github.mfvanek.pg.model.table.Table; +import io.github.mfvanek.pg.model.PgContext; +import io.github.mfvanek.pg.model.table.TableNameAware; import io.github.mfvanek.spring.boot3.test.support.TestBase; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import java.util.List; +import java.util.function.Predicate; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.InstanceOfAssertFactories.list; class IndexesMaintenanceTest extends TestBase { @@ -25,7 +25,7 @@ class IndexesMaintenanceTest extends TestBase { void checkPostgresVersion() { final String pgVersion = jdbcTemplate.queryForObject("select version();", String.class); assertThat(pgVersion) - .startsWith("PostgreSQL 16.4"); + .startsWith("PostgreSQL 17.0"); } @Test @@ -33,25 +33,19 @@ void databaseStructureCheckForPublicSchema() { assertThat(checks) .hasSameSizeAs(Diagnostic.values()); - checks.forEach(check -> { - switch (check.getDiagnostic()) { - case TABLES_WITHOUT_PRIMARY_KEY, TABLES_WITHOUT_DESCRIPTION -> assertThat(check.check()) - .asInstanceOf(list(Table.class)) - .hasSize(1) - .containsExactly(Table.of("databasechangelog", 0L)); - - case COLUMNS_WITHOUT_DESCRIPTION -> assertThat(check.check()) - .asInstanceOf(list(Column.class)) - .hasSize(14) - .allSatisfy(column -> assertThat(column.getTableName()).isEqualTo("databasechangelog")); - - case TABLES_WITH_MISSING_INDEXES -> assertThat(check.check()) - .hasSizeLessThanOrEqualTo(1); // TODO skip runtime checks after https://github.com/mfvanek/pg-index-health/issues/456 - - default -> assertThat(check.check()) + checks.stream() + .filter(DatabaseCheckOnHost::isStatic) + .forEach(check -> { + final Predicate skipLiquibaseTables = dbObject -> { + if (dbObject instanceof TableNameAware t) { + return !t.getTableName().equalsIgnoreCase("databasechangelog"); + } + return true; + }; + final List objects = check.check(PgContext.ofPublic(), skipLiquibaseTables); + assertThat(objects) .as(check.getDiagnostic().name()) .isEmpty(); - } - }); + }); } } diff --git a/spring-boot-3-demo-app/src/test/java/io/github/mfvanek/spring/boot3/test/support/PostgresInitializer.java b/spring-boot-3-demo-app/src/test/java/io/github/mfvanek/spring/boot3/test/support/PostgresInitializer.java index 266e1742..408d17d5 100644 --- a/spring-boot-3-demo-app/src/test/java/io/github/mfvanek/spring/boot3/test/support/PostgresInitializer.java +++ b/spring-boot-3-demo-app/src/test/java/io/github/mfvanek/spring/boot3/test/support/PostgresInitializer.java @@ -10,7 +10,7 @@ public class PostgresInitializer implements ApplicationContextInitializer { - private static final DockerImageName IMAGE = DockerImageName.parse("postgres:16.4"); + private static final DockerImageName IMAGE = DockerImageName.parse("postgres:17.0"); private static final Network NETWORK = Network.newNetwork(); private static final PostgreSQLContainer CONTAINER = new PostgreSQLContainer<>(IMAGE);