From aac44cb526723c3900990d75fdb626f438dabf36 Mon Sep 17 00:00:00 2001 From: Sergey Nikolaev Date: Mon, 13 Jun 2022 14:31:14 +1000 Subject: [PATCH 1/3] =?UTF-8?q?spring-test-postgres:=20-=20"latest"=20?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8F=20=D0=BA=D0=BE=D0=BD=D1=82?= =?UTF-8?q?=D0=B5=D0=B9=D0=BD=D0=B5=D1=80=D0=B0=20=D0=B2=D0=BC=D0=B5=D1=81?= =?UTF-8?q?=D1=82=D0=BE=20=D1=84=D0=B8=D0=BA=D1=81=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=BD=D0=BE=D0=B9=20-=20=D0=B2=D0=BE=D0=B7=D0=BC?= =?UTF-8?q?=D0=BE=D0=B6=D0=BD=D0=BE=D1=81=D1=82=D1=8C=20=D1=83=D0=BA=D0=B0?= =?UTF-8?q?=D0=B7=D0=B0=D1=82=D1=8C=20=D0=B6=D0=B5=D0=BB=D0=B0=D0=B5=D0=BC?= =?UTF-8?q?=D1=83=D1=8E=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8E=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BD=D1=82=D0=B5=D0=B9=D0=BD=D0=B5=D1=80=D0=B0=20-=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=B4=D0=BD=D1=8F=D1=82=D0=B0=20=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D1=81=D0=B8=D1=8F=20testcontainers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- spring-test-postgres/pom.xml | 2 +- .../extension/PostgresTcExtension.java | 21 +++++- .../PostgresTcExtensionCustomVersionTest.java | 68 +++++++++++++++++++ .../extension/PostgresTcExtensionTest.java | 12 ++++ 4 files changed, 100 insertions(+), 3 deletions(-) create mode 100644 spring-test-postgres/src/test/java/com/jupiter/tools/spring/test/postgres/extension/PostgresTcExtensionCustomVersionTest.java diff --git a/spring-test-postgres/pom.xml b/spring-test-postgres/pom.xml index 923c620..dcdcb4c 100644 --- a/spring-test-postgres/pom.xml +++ b/spring-test-postgres/pom.xml @@ -40,7 +40,7 @@ org.testcontainers postgresql - 1.11.4 + 1.17.2 compile diff --git a/spring-test-postgres/src/main/java/com/jupiter/tools/spring/test/postgres/extension/PostgresTcExtension.java b/spring-test-postgres/src/main/java/com/jupiter/tools/spring/test/postgres/extension/PostgresTcExtension.java index 01da115..14c0fca 100644 --- a/spring-test-postgres/src/main/java/com/jupiter/tools/spring/test/postgres/extension/PostgresTcExtension.java +++ b/spring-test-postgres/src/main/java/com/jupiter/tools/spring/test/postgres/extension/PostgresTcExtension.java @@ -1,8 +1,13 @@ package com.jupiter.tools.spring.test.postgres.extension; +import org.hibernate.dialect.PostgreSQL10Dialect; import org.hibernate.dialect.PostgreSQL9Dialect; import org.junit.jupiter.api.extension.Extension; import org.testcontainers.containers.PostgreSQLContainer; +import org.testcontainers.utility.DockerImageName; + +import java.io.IOException; +import java.util.Properties; /** * Created on 06.08.2018. @@ -14,13 +19,25 @@ public class PostgresTcExtension implements Extension { static { System.out.println("Start Postgres testcontainers extension...\n"); - PostgreSQLContainer postgres = new PostgreSQLContainer(); + PostgreSQLContainer postgres = new PostgreSQLContainer("postgres:" + getDockerImageName()); postgres.start(); System.setProperty("spring.datasource.driver-class-name", postgres.getDriverClassName()); System.setProperty("spring.datasource.url", postgres.getJdbcUrl()); System.setProperty("spring.datasource.username", postgres.getUsername()); System.setProperty("spring.datasource.password", postgres.getPassword()); - System.setProperty("spring.jpa.properties.hibernate.dialect", PostgreSQL9Dialect.class.getCanonicalName()); + System.setProperty("spring.jpa.properties.hibernate.dialect", PostgreSQL10Dialect.class.getCanonicalName()); + } + + private static String getDockerImageName() { + try { + Properties props = new Properties(); + props.load(PostgresTcExtension.class.getResourceAsStream("/tc-extension.properties")); + return props.getProperty("tc-extension.postgres.docker-image-version", "latest"); + } catch (Exception e) { + e.printStackTrace(); + return "latest"; + } } + } diff --git a/spring-test-postgres/src/test/java/com/jupiter/tools/spring/test/postgres/extension/PostgresTcExtensionCustomVersionTest.java b/spring-test-postgres/src/test/java/com/jupiter/tools/spring/test/postgres/extension/PostgresTcExtensionCustomVersionTest.java new file mode 100644 index 0000000..9b51dc6 --- /dev/null +++ b/spring-test-postgres/src/test/java/com/jupiter/tools/spring/test/postgres/extension/PostgresTcExtensionCustomVersionTest.java @@ -0,0 +1,68 @@ +package com.jupiter.tools.spring.test.postgres.extension; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.AfterAllCallback; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.api.extension.Extension; +import org.junit.jupiter.api.extension.ExtensionContext; +import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import javax.persistence.StoredProcedureQuery; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; + +/** + * Created on 13.06.2022. + * + * @author Sergey Nikolaev + */ +@DataJpaTest +@ExtendWith(PostgresTcExtensionCustomVersionTest.InitializePropertiesExtension.class) +@ExtendWith(SpringExtension.class) +@ExtendWith(PostgresTcExtension.class) +@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) +public class PostgresTcExtensionCustomVersionTest { + + @PersistenceContext + private EntityManager entityManager; + + @Test + void testCustomPostgresVersion() { + // Arrange + StoredProcedureQuery query = entityManager.createStoredProcedureQuery("version"); + // Act + query.execute(); + // Assert + Object result = query.getSingleResult(); + Assertions.assertThat(result.toString()).contains("PostgreSQL 12"); + } + + public static class InitializePropertiesExtension implements Extension, AfterAllCallback { + public static final String SOURCE; + static { + SOURCE = PostgresTcExtensionCustomVersionTest.class.getResource("/").getPath() + "tc-extension.properties"; + try(FileWriter writer = new FileWriter(SOURCE)) { + writer.write("tc-extension.postgres.docker-image-version=12"); + } catch (IOException e) { + e.printStackTrace(); + Assertions.fail("Fail create tc-extension.properties"); + } + } + + @Override + public void afterAll(ExtensionContext extensionContext) throws Exception { + try { + new File(SOURCE).delete(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + +} diff --git a/spring-test-postgres/src/test/java/com/jupiter/tools/spring/test/postgres/extension/PostgresTcExtensionTest.java b/spring-test-postgres/src/test/java/com/jupiter/tools/spring/test/postgres/extension/PostgresTcExtensionTest.java index 0456587..7f3d636 100644 --- a/spring-test-postgres/src/test/java/com/jupiter/tools/spring/test/postgres/extension/PostgresTcExtensionTest.java +++ b/spring-test-postgres/src/test/java/com/jupiter/tools/spring/test/postgres/extension/PostgresTcExtensionTest.java @@ -44,4 +44,16 @@ void testStoredFunc() { int rnd = (int) resultList.get(0); Assertions.assertThat(rnd).isEqualTo(123); } + + @Test + void testCustomPostgresVersion() { + // Arrange + StoredProcedureQuery query = entityManager.createStoredProcedureQuery("version"); + // Act + query.execute(); + // Assert + Object result = query.getSingleResult(); + Assertions.assertThat(result.toString()).contains("PostgreSQL 12"); + } + } \ No newline at end of file From e3fd5ae70631aea0cd6d84ea5621f797cd129621 Mon Sep 17 00:00:00 2001 From: Sergey Nikolaev Date: Mon, 13 Jun 2022 14:41:01 +1000 Subject: [PATCH 2/3] =?UTF-8?q?=D0=9F=D0=BE=D0=B4=D0=BD=D1=8F=D1=82=D0=B0?= =?UTF-8?q?=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8F=20=D0=BB=D0=B8=D0=B1?= =?UTF-8?q?=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- spring-test-activemq/pom.xml | 2 +- spring-test-core/pom.xml | 2 +- spring-test-jpa/pom.xml | 2 +- spring-test-mysql/pom.xml | 2 +- spring-test-postgres/pom.xml | 2 +- spring-test-rabbitmq/pom.xml | 2 +- spring-test-web/pom.xml | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/pom.xml b/pom.xml index e79b897..8f4644c 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.jupiter-tools spring-boot-extensions-parent - 0.4 + 0.5 pom spring-boot-extensions-parent diff --git a/spring-test-activemq/pom.xml b/spring-test-activemq/pom.xml index a3e3268..e1c0df9 100644 --- a/spring-test-activemq/pom.xml +++ b/spring-test-activemq/pom.xml @@ -6,7 +6,7 @@ com.jupiter-tools spring-boot-extensions-parent - 0.4 + 0.5 spring-test-activemq diff --git a/spring-test-core/pom.xml b/spring-test-core/pom.xml index a8e6d7f..4656080 100644 --- a/spring-test-core/pom.xml +++ b/spring-test-core/pom.xml @@ -6,7 +6,7 @@ com.jupiter-tools spring-boot-extensions-parent - 0.4 + 0.5 spring-test-core diff --git a/spring-test-jpa/pom.xml b/spring-test-jpa/pom.xml index ea1ce42..61feb21 100644 --- a/spring-test-jpa/pom.xml +++ b/spring-test-jpa/pom.xml @@ -6,7 +6,7 @@ com.jupiter-tools spring-boot-extensions-parent - 0.4 + 0.5 spring-test-jpa diff --git a/spring-test-mysql/pom.xml b/spring-test-mysql/pom.xml index f116b9f..f2adcfe 100644 --- a/spring-test-mysql/pom.xml +++ b/spring-test-mysql/pom.xml @@ -6,7 +6,7 @@ com.jupiter-tools spring-boot-extensions-parent - 0.4 + 0.5 spring-test-mysql diff --git a/spring-test-postgres/pom.xml b/spring-test-postgres/pom.xml index dcdcb4c..1127b7f 100644 --- a/spring-test-postgres/pom.xml +++ b/spring-test-postgres/pom.xml @@ -6,7 +6,7 @@ com.jupiter-tools spring-boot-extensions-parent - 0.4 + 0.5 spring-test-postgres diff --git a/spring-test-rabbitmq/pom.xml b/spring-test-rabbitmq/pom.xml index c37d21a..d9cd7c2 100644 --- a/spring-test-rabbitmq/pom.xml +++ b/spring-test-rabbitmq/pom.xml @@ -6,7 +6,7 @@ com.jupiter-tools spring-boot-extensions-parent - 0.4 + 0.5 spring-test-rabbitmq diff --git a/spring-test-web/pom.xml b/spring-test-web/pom.xml index d8f60aa..93d2b07 100644 --- a/spring-test-web/pom.xml +++ b/spring-test-web/pom.xml @@ -6,7 +6,7 @@ com.jupiter-tools spring-boot-extensions-parent - 0.4 + 0.5 spring-test-web From e121b0e05c7eb5cddf1e2892d4f723ef10a0d482 Mon Sep 17 00:00:00 2001 From: Sergey Nikolaev Date: Mon, 13 Jun 2022 14:42:53 +1000 Subject: [PATCH 3/3] =?UTF-8?q?Read.me=20=D0=B4=D0=BE=D0=BF=D0=BE=D0=BB?= =?UTF-8?q?=D0=BD=D0=B5=D0=BD=20=D0=B8=D0=BD=D1=84=D0=BE=D1=80=D0=BC=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D0=B5=D0=B9=20=D0=BE=20=D0=BA=D0=B0=D1=81=D1=82?= =?UTF-8?q?=D0=BE=D0=BC=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B8=20=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D1=81=D0=B8=D0=B8=20=D0=BA=D0=BE=D0=BD=D1=82=D0=B5=D0=B9?= =?UTF-8?q?=D0=BD=D0=B5=D1=80=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.adoc | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/README.adoc b/README.adoc index 02433ef..99c1715 100644 --- a/README.adoc +++ b/README.adoc @@ -20,7 +20,7 @@ You need to add the next dependency: com.jupiter-tools spring-test-jpa - 0.2 + 0.5 ---- @@ -74,7 +74,7 @@ in your integration test, you can use PostgresTcExtension. com.jupiter-tools spring-test-postgres - 0.2 + 0.5 ---- @@ -140,6 +140,11 @@ image:./images/pg-annotations.png[postgres annotation system] You can build a necessary test configuration by using annotations which you need. Meta-annotations is a beautiful mechanism which will you a making configuration in a declarative style. +By default, the *latest* version of PostgreSQL docker image will be used for test. But it can be overridden by setting necessary version via _resources/tc-extension.properties_ file: +[source, properties] +---- +tc-extension.postgres.docker-image-version=13.7-alpine +---- ### MySql Extension @@ -151,7 +156,7 @@ in the configuration to use this datasource in tests. com.jupiter-tools spring-test-mysql - 0.2 + 0.5 ---- @@ -196,7 +201,7 @@ and configure SpringBoot properties to work with this container. com.jupiter-tools spring-test-rabbitmq - 0.2 + 0.5 ---- @@ -308,7 +313,7 @@ You need to use the next dependency: com.jupiter-tools spring-test-activemq - 0.2 + 0.5 ---- @@ -401,7 +406,7 @@ web server with a mocked external controller and send HTTP requests to this serv com.jupiter-tools spring-test-web - 0.2 + 0.5 ----