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 ---- 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 923c620..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 @@ -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 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