From 26821c93511023d111a824be7dc4a0d99022b9f8 Mon Sep 17 00:00:00 2001 From: Alexander Buntakov Date: Sun, 6 Jun 2021 22:58:13 +0300 Subject: [PATCH 1/3] add common-spring-test-jpa --- README.md | 4 +++ build.gradle.kts | 7 ++++ common-spring-test-jpa/build.gradle.kts | 21 +++++++++++ .../test/jpa/repository/RepositoryTest.kt | 13 +++++++ .../jpa/repository/RepositoryTestConfig.kt | 36 +++++++++++++++++++ .../src/main/resources/test-slow.yml | 16 +++++++++ .../src/main/resources/test.yml | 8 +++++ settings.gradle.kts | 1 + 8 files changed, 106 insertions(+) create mode 100644 common-spring-test-jpa/build.gradle.kts create mode 100644 common-spring-test-jpa/src/main/kotlin/ru/touchin/common/spring/test/jpa/repository/RepositoryTest.kt create mode 100644 common-spring-test-jpa/src/main/kotlin/ru/touchin/common/spring/test/jpa/repository/RepositoryTestConfig.kt create mode 100644 common-spring-test-jpa/src/main/resources/test-slow.yml create mode 100644 common-spring-test-jpa/src/main/resources/test.yml diff --git a/README.md b/README.md index 7f3b6c4..2c665e2 100644 --- a/README.md +++ b/README.md @@ -48,3 +48,7 @@ ## common-spring-test Утилиты для тестирования в среде `spring-test` + +## common-spring-test-jpa + +Утилиты для тестирования репозиториев diff --git a/build.gradle.kts b/build.gradle.kts index 8bc21b0..7a14c9f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -48,6 +48,13 @@ subprojects { dependency("ch.qos.logback:logback-classic:1.2.3") dependency("ch.qos.logback.contrib:logback-json-classic:0.1.5") dependency("ch.qos.logback.contrib:logback-jackson:0.1.5") + + dependency("org.testcontainers:testcontainers:1.15.1") + dependency("org.testcontainers:postgresql:1.15.1") + dependency("org.testcontainers:junit-jupiter:1.15.1") + dependency("org.junit.jupiter:junit-jupiter-api:5.4.2") + dependency("org.junit.jupiter:junit-jupiter-params:5.4.2") + dependency("org.junit.jupiter:junit-jupiter-engine:5.4.2") } } diff --git a/common-spring-test-jpa/build.gradle.kts b/common-spring-test-jpa/build.gradle.kts new file mode 100644 index 0000000..c772b63 --- /dev/null +++ b/common-spring-test-jpa/build.gradle.kts @@ -0,0 +1,21 @@ +plugins { + id("kotlin") + id("kotlin-spring") + id("maven-publish") +} + +dependencies { + implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8") + + compileOnly(project(":common-spring-jpa")) + compileOnly(project(":common-spring-test")) + + compileOnly("org.springframework.boot:spring-boot-starter-data-jpa") + compileOnly("org.springframework.boot:spring-boot-starter-test") + + compileOnly("org.testcontainers:testcontainers") + compileOnly("org.testcontainers:postgresql") + compileOnly("org.testcontainers:junit-jupiter") + compileOnly("org.junit.jupiter:junit-jupiter-api") + compileOnly("org.junit.jupiter:junit-jupiter-params") +} diff --git a/common-spring-test-jpa/src/main/kotlin/ru/touchin/common/spring/test/jpa/repository/RepositoryTest.kt b/common-spring-test-jpa/src/main/kotlin/ru/touchin/common/spring/test/jpa/repository/RepositoryTest.kt new file mode 100644 index 0000000..aa346fd --- /dev/null +++ b/common-spring-test-jpa/src/main/kotlin/ru/touchin/common/spring/test/jpa/repository/RepositoryTest.kt @@ -0,0 +1,13 @@ +@file:Suppress("unused") +package ru.touchin.common.spring.test.jpa.repository + +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest +import org.springframework.context.annotation.Import +import org.springframework.test.context.ActiveProfiles +import ru.touchin.common.spring.test.annotations.SlowTest + +@ActiveProfiles("test", "test-slow") +@SlowTest +@DataJpaTest +@Import(RepositoryTestConfig::class) +annotation class RepositoryTest diff --git a/common-spring-test-jpa/src/main/kotlin/ru/touchin/common/spring/test/jpa/repository/RepositoryTestConfig.kt b/common-spring-test-jpa/src/main/kotlin/ru/touchin/common/spring/test/jpa/repository/RepositoryTestConfig.kt new file mode 100644 index 0000000..414bda1 --- /dev/null +++ b/common-spring-test-jpa/src/main/kotlin/ru/touchin/common/spring/test/jpa/repository/RepositoryTestConfig.kt @@ -0,0 +1,36 @@ +@file:Suppress("SpringFacetCodeInspection") +package ru.touchin.common.spring.test.jpa.repository + +import com.zaxxer.hikari.HikariConfig +import com.zaxxer.hikari.HikariDataSource +import org.springframework.boot.test.context.TestConfiguration +import org.springframework.context.annotation.Bean +import org.springframework.context.annotation.ComponentScan +import org.testcontainers.containers.JdbcDatabaseContainer +import org.testcontainers.containers.PostgreSQLContainer +import org.testcontainers.containers.wait.strategy.Wait +import ru.touchin.common.spring.jpa.EnableJpaAuditingExtra +import javax.sql.DataSource + +@TestConfiguration +@EnableJpaAuditingExtra +@ComponentScan +class RepositoryTestConfig { + + // запуск и остановка контейнера по lifecycle-событиями компонента (1) + @Bean(initMethod = "start", destroyMethod = "stop") + fun jdbcDatabaseContainer(): JdbcDatabaseContainer<*> { + return PostgreSQLContainer("postgres:12").apply { + waitingFor(Wait.forListeningPort()) + } + } + + @Bean + fun dataSource(jdbcDatabaseContainer: JdbcDatabaseContainer<*>): DataSource { + val hikariConfig = HikariConfig() + hikariConfig.jdbcUrl = jdbcDatabaseContainer.jdbcUrl + hikariConfig.username = jdbcDatabaseContainer.username + hikariConfig.password = jdbcDatabaseContainer.password + return HikariDataSource(hikariConfig) + } +} diff --git a/common-spring-test-jpa/src/main/resources/test-slow.yml b/common-spring-test-jpa/src/main/resources/test-slow.yml new file mode 100644 index 0000000..25f6110 --- /dev/null +++ b/common-spring-test-jpa/src/main/resources/test-slow.yml @@ -0,0 +1,16 @@ +spring: + datasource: + url: jdbc:postgresql://localhost:5432/test-db + username: postgres + password: qwerty + platform: postgresql + initialization-mode: always + jpa: + databasePlatform: org.hibernate.dialect.PostgreSQL95Dialect + liquibase: + enabled: true + test: + database: + replace: none + + diff --git a/common-spring-test-jpa/src/main/resources/test.yml b/common-spring-test-jpa/src/main/resources/test.yml new file mode 100644 index 0000000..32becb6 --- /dev/null +++ b/common-spring-test-jpa/src/main/resources/test.yml @@ -0,0 +1,8 @@ +spring: + jpa: + hibernate: + ddl-auto: none + liquibase: + enabled: false + main: + lazy-initialization: true diff --git a/settings.gradle.kts b/settings.gradle.kts index 7365602..3ec0d07 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -25,3 +25,4 @@ include("common-spring") include("common-spring-jpa") include("common-spring-web") include("common-spring-test") +include("common-spring-test-jpa") From 1dba5f72a0c8c3c7488b6ca5c2e43c95c4d52b33 Mon Sep 17 00:00:00 2001 From: Alexander Buntakov Date: Mon, 7 Jun 2021 18:37:38 +0300 Subject: [PATCH 2/3] review fixes --- .../test/jpa/repository/RepositoryTest.kt | 2 +- ...nfig.kt => RepositoryTestConfiguration.kt} | 19 +++++++++++++------ .../src/main/resources/test-slow.yml | 6 ++++-- 3 files changed, 18 insertions(+), 9 deletions(-) rename common-spring-test-jpa/src/main/kotlin/ru/touchin/common/spring/test/jpa/repository/{RepositoryTestConfig.kt => RepositoryTestConfiguration.kt} (68%) diff --git a/common-spring-test-jpa/src/main/kotlin/ru/touchin/common/spring/test/jpa/repository/RepositoryTest.kt b/common-spring-test-jpa/src/main/kotlin/ru/touchin/common/spring/test/jpa/repository/RepositoryTest.kt index aa346fd..fcbf1c7 100644 --- a/common-spring-test-jpa/src/main/kotlin/ru/touchin/common/spring/test/jpa/repository/RepositoryTest.kt +++ b/common-spring-test-jpa/src/main/kotlin/ru/touchin/common/spring/test/jpa/repository/RepositoryTest.kt @@ -9,5 +9,5 @@ import ru.touchin.common.spring.test.annotations.SlowTest @ActiveProfiles("test", "test-slow") @SlowTest @DataJpaTest -@Import(RepositoryTestConfig::class) +@Import(RepositoryTestConfiguration::class) annotation class RepositoryTest diff --git a/common-spring-test-jpa/src/main/kotlin/ru/touchin/common/spring/test/jpa/repository/RepositoryTestConfig.kt b/common-spring-test-jpa/src/main/kotlin/ru/touchin/common/spring/test/jpa/repository/RepositoryTestConfiguration.kt similarity index 68% rename from common-spring-test-jpa/src/main/kotlin/ru/touchin/common/spring/test/jpa/repository/RepositoryTestConfig.kt rename to common-spring-test-jpa/src/main/kotlin/ru/touchin/common/spring/test/jpa/repository/RepositoryTestConfiguration.kt index 414bda1..9d3ad79 100644 --- a/common-spring-test-jpa/src/main/kotlin/ru/touchin/common/spring/test/jpa/repository/RepositoryTestConfig.kt +++ b/common-spring-test-jpa/src/main/kotlin/ru/touchin/common/spring/test/jpa/repository/RepositoryTestConfiguration.kt @@ -3,6 +3,7 @@ package ru.touchin.common.spring.test.jpa.repository import com.zaxxer.hikari.HikariConfig import com.zaxxer.hikari.HikariDataSource +import org.springframework.beans.factory.annotation.Value import org.springframework.boot.test.context.TestConfiguration import org.springframework.context.annotation.Bean import org.springframework.context.annotation.ComponentScan @@ -15,12 +16,14 @@ import javax.sql.DataSource @TestConfiguration @EnableJpaAuditingExtra @ComponentScan -class RepositoryTestConfig { +class RepositoryTestConfiguration { // запуск и остановка контейнера по lifecycle-событиями компонента (1) @Bean(initMethod = "start", destroyMethod = "stop") - fun jdbcDatabaseContainer(): JdbcDatabaseContainer<*> { - return PostgreSQLContainer("postgres:12").apply { + fun jdbcDatabaseContainer( + @Value("\${tests.slow.db.container}") containerName: String, + ): JdbcDatabaseContainer<*> { + return PostgreSQLContainer(containerName).apply { waitingFor(Wait.forListeningPort()) } } @@ -28,9 +31,13 @@ class RepositoryTestConfig { @Bean fun dataSource(jdbcDatabaseContainer: JdbcDatabaseContainer<*>): DataSource { val hikariConfig = HikariConfig() - hikariConfig.jdbcUrl = jdbcDatabaseContainer.jdbcUrl - hikariConfig.username = jdbcDatabaseContainer.username - hikariConfig.password = jdbcDatabaseContainer.password + .apply { + jdbcUrl = jdbcDatabaseContainer.jdbcUrl + username = jdbcDatabaseContainer.username + password = jdbcDatabaseContainer.password + } + return HikariDataSource(hikariConfig) } + } diff --git a/common-spring-test-jpa/src/main/resources/test-slow.yml b/common-spring-test-jpa/src/main/resources/test-slow.yml index 25f6110..7a697af 100644 --- a/common-spring-test-jpa/src/main/resources/test-slow.yml +++ b/common-spring-test-jpa/src/main/resources/test-slow.yml @@ -12,5 +12,7 @@ spring: test: database: replace: none - - +tests: + slow: + db: + container: "postgres:12" From c44ee79cbcdd6f5c01aa3e0a2d497414c1a3f533 Mon Sep 17 00:00:00 2001 From: Alexander Buntakov Date: Mon, 7 Jun 2021 18:41:18 +0300 Subject: [PATCH 3/3] rename containerName -> imageName --- .../spring/test/jpa/repository/RepositoryTestConfiguration.kt | 4 ++-- common-spring-test-jpa/src/main/resources/test-slow.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/common-spring-test-jpa/src/main/kotlin/ru/touchin/common/spring/test/jpa/repository/RepositoryTestConfiguration.kt b/common-spring-test-jpa/src/main/kotlin/ru/touchin/common/spring/test/jpa/repository/RepositoryTestConfiguration.kt index 9d3ad79..5e21ff8 100644 --- a/common-spring-test-jpa/src/main/kotlin/ru/touchin/common/spring/test/jpa/repository/RepositoryTestConfiguration.kt +++ b/common-spring-test-jpa/src/main/kotlin/ru/touchin/common/spring/test/jpa/repository/RepositoryTestConfiguration.kt @@ -21,9 +21,9 @@ class RepositoryTestConfiguration { // запуск и остановка контейнера по lifecycle-событиями компонента (1) @Bean(initMethod = "start", destroyMethod = "stop") fun jdbcDatabaseContainer( - @Value("\${tests.slow.db.container}") containerName: String, + @Value("\${tests.slow.db.imageName}") imageName: String, ): JdbcDatabaseContainer<*> { - return PostgreSQLContainer(containerName).apply { + return PostgreSQLContainer(imageName).apply { waitingFor(Wait.forListeningPort()) } } diff --git a/common-spring-test-jpa/src/main/resources/test-slow.yml b/common-spring-test-jpa/src/main/resources/test-slow.yml index 7a697af..6931644 100644 --- a/common-spring-test-jpa/src/main/resources/test-slow.yml +++ b/common-spring-test-jpa/src/main/resources/test-slow.yml @@ -15,4 +15,4 @@ spring: tests: slow: db: - container: "postgres:12" + imageName: "postgres:12"