From 2c2f880ae44e4760d1da0c83561d6e87b7336d0c Mon Sep 17 00:00:00 2001 From: ilaktasic Date: Thu, 29 Apr 2021 09:15:21 +0200 Subject: [PATCH 1/4] added clickhouse support --- README.md | 77 +++++++++++++++++++ .../pom.xml | 49 ++++++++++++ .../ClickhouseContainerInitializer.java | 33 ++++++++ .../ClickhouseContainerWrapper.java | 13 ++++ .../main/resources/META-INF/spring.factories | 2 + .../ClickhouseContainerInitializerTest.java | 33 ++++++++ .../spring/clickhouse/DataSourceConfig.java | 25 ++++++ .../spring/clickhouse}/Main.java | 4 +- .../src/test/resources/application-test.yaml | 8 ++ .../spring/kafka/KafkaContainerWrapper.java | 13 ---- pom.xml | 1 + 11 files changed, 243 insertions(+), 15 deletions(-) create mode 100644 infobip-clickhouse-testcontainers-spring-boot-starter/pom.xml create mode 100644 infobip-clickhouse-testcontainers-spring-boot-starter/src/main/java/com/infobip/testcontainers/spring/clickhouse/ClickhouseContainerInitializer.java create mode 100644 infobip-clickhouse-testcontainers-spring-boot-starter/src/main/java/com/infobip/testcontainers/spring/clickhouse/ClickhouseContainerWrapper.java create mode 100644 infobip-clickhouse-testcontainers-spring-boot-starter/src/main/resources/META-INF/spring.factories create mode 100644 infobip-clickhouse-testcontainers-spring-boot-starter/src/test/java/com/infobip/testcontainers/spring/clickhouse/ClickhouseContainerInitializerTest.java create mode 100644 infobip-clickhouse-testcontainers-spring-boot-starter/src/test/java/com/infobip/testcontainers/spring/clickhouse/DataSourceConfig.java rename {infobip-kafka-testcontainers-spring-boot-starter/src/test/java/com/infobip/testcontainers/spring/kafka => infobip-clickhouse-testcontainers-spring-boot-starter/src/test/java/com/infobip/testcontainers/spring/clickhouse}/Main.java (83%) create mode 100644 infobip-clickhouse-testcontainers-spring-boot-starter/src/test/resources/application-test.yaml delete mode 100644 infobip-kafka-testcontainers-spring-boot-starter/src/main/java/com/infobip/testcontainers/spring/kafka/KafkaContainerWrapper.java diff --git a/README.md b/README.md index 14714e2..b038f1c 100644 --- a/README.md +++ b/README.md @@ -35,9 +35,19 @@ Usual use cases include: * [Tests](#RabbitMqTests) * [Local development](#RabbitMqLocalDevelopment) * [Docker image](#RabbitMqDockerImage) + * [ClickHouse](#ClickHouse) + * [Tests](#ClickHouseTests) + * [Local development](#ClickHouseLocalDevelopment) + * [Docker image version](#ClickHouseDockerImageVersion) + ## News +### 3.2.0 +####ClickHouse: +* Added support for ClickHouse +* Custom path for ClickHouse jdbc properties can be provided under `testcontainers.clickhouse.custom-path` property. In case custom path is not provided, properties under `spring.datasource` will be used + ### 3.1.0 #### MSSQL: @@ -451,6 +461,72 @@ To change the docker image used simply add the following property (e.g. in yaml) ```yaml testcontainers.rabbit.docker.image: rabbitmq:3.6.14-alpine ``` + +### ClickHouse + +##Tests +Include the dependency: + +```xml + + com.infobip + infobip-clickhouse-testcontainers-spring-boot-starter + ${infobip-clickhouse-testcontainers-spring-boot-starter.version} + test + +``` + +##Local development +Add the following profile: + +```xml + + + development + + + com.infobip + infobip-clickhouse-testcontainers-spring-boot-starter + ${infobip-clickhouse-testcontainers-spring-boot-starter.version} + test + + + + +``` + +Before starting the application locally, activate development profile: + +![profile.png](profile.png) + + +and update your local configuration (e.g. application-development.yaml): + +```yaml +spring: + datasource: + jdbc-url: : +``` +In case your datasource configuration is different from default one you can provide custom configuration property path +```yaml + testcontainers.clickhouse.custom-path: "spring.datasource.clickhouse" +``` +in this case your configuration would look like this + +```yaml +spring: + datasource: + clickhouse: + jdbc-url: : +``` + +##Docker image version + +To change the docker image used simply add the following property (e.g. in yaml): + +```yaml +testcontainers.clickhouse.docker.image: rabbitmq:latest +``` ## Contributing @@ -461,3 +537,4 @@ Pull requests are welcome! ## License This library is licensed under the [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0). + diff --git a/infobip-clickhouse-testcontainers-spring-boot-starter/pom.xml b/infobip-clickhouse-testcontainers-spring-boot-starter/pom.xml new file mode 100644 index 0000000..d06f3ee --- /dev/null +++ b/infobip-clickhouse-testcontainers-spring-boot-starter/pom.xml @@ -0,0 +1,49 @@ + + 4.0.0 + + + com.infobip + infobip-testcontainers-spring-boot-starter + 3.1.9-SNAPSHOT + + + infobip-clickhouse-testcontainers-spring-boot-starter + + + 0.2.4 + + + + + ${project.groupId} + infobip-testcontainers-common + ${project.version} + + + + com.fasterxml.jackson.core + jackson-databind + + + + + org.testcontainers + clickhouse + ${testcontainers.version} + + + ru.yandex.clickhouse + clickhouse-jdbc + ${clickhouse-jdbc.version} + + + org.springframework + spring-jdbc + + + org.springframework.boot + spring-boot-starter-jdbc + + + + diff --git a/infobip-clickhouse-testcontainers-spring-boot-starter/src/main/java/com/infobip/testcontainers/spring/clickhouse/ClickhouseContainerInitializer.java b/infobip-clickhouse-testcontainers-spring-boot-starter/src/main/java/com/infobip/testcontainers/spring/clickhouse/ClickhouseContainerInitializer.java new file mode 100644 index 0000000..512581b --- /dev/null +++ b/infobip-clickhouse-testcontainers-spring-boot-starter/src/main/java/com/infobip/testcontainers/spring/clickhouse/ClickhouseContainerInitializer.java @@ -0,0 +1,33 @@ +package com.infobip.testcontainers.spring.clickhouse; + +import java.util.Objects; +import java.util.Optional; + +import com.infobip.testcontainers.InitializerBase; +import org.springframework.boot.test.util.TestPropertyValues; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.core.env.Environment; + +public class ClickhouseContainerInitializer extends InitializerBase { + + @Override + public void initialize(ConfigurableApplicationContext applicationContext) { + Environment environment = applicationContext.getEnvironment(); + Optional customPropertyPath = Optional.ofNullable(environment.getProperty("testcontainers.clickhouse.custom-path")); + String jdbcUrlPropertyPath = customPropertyPath.orElse( "spring.datasource") + ".jdbc-url"; + String jdbcUrlValue = Objects.requireNonNull(environment.getProperty(jdbcUrlPropertyPath)); + ClickhouseContainerWrapper container = Optional.ofNullable( + environment.getProperty("testcontainers.clickhouse.docker.image.version")) + .map(ClickhouseContainerWrapper::new) + .orElseGet(ClickhouseContainerWrapper::new); + + start(container); + String url = jdbcUrlValue.replace("", container.getContainerIpAddress()) + .replace("", container.getMappedPort(ClickhouseContainerWrapper.HTTP_PORT) + .toString()); + TestPropertyValues values = TestPropertyValues.of( + String.format("%s=%s", jdbcUrlPropertyPath, url)); + values.applyTo(applicationContext); + } + +} diff --git a/infobip-clickhouse-testcontainers-spring-boot-starter/src/main/java/com/infobip/testcontainers/spring/clickhouse/ClickhouseContainerWrapper.java b/infobip-clickhouse-testcontainers-spring-boot-starter/src/main/java/com/infobip/testcontainers/spring/clickhouse/ClickhouseContainerWrapper.java new file mode 100644 index 0000000..5368a9d --- /dev/null +++ b/infobip-clickhouse-testcontainers-spring-boot-starter/src/main/java/com/infobip/testcontainers/spring/clickhouse/ClickhouseContainerWrapper.java @@ -0,0 +1,13 @@ +package com.infobip.testcontainers.spring.clickhouse; + +import org.testcontainers.containers.ClickHouseContainer; + +public class ClickhouseContainerWrapper extends ClickHouseContainer { + + public ClickhouseContainerWrapper() { + } + + public ClickhouseContainerWrapper(String confluentPlatformVersion) { + super(confluentPlatformVersion); + } +} diff --git a/infobip-clickhouse-testcontainers-spring-boot-starter/src/main/resources/META-INF/spring.factories b/infobip-clickhouse-testcontainers-spring-boot-starter/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000..a87a95a --- /dev/null +++ b/infobip-clickhouse-testcontainers-spring-boot-starter/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.context.ApplicationContextInitializer=com.infobip.testcontainers.spring.clickhouse.ClickhouseContainerInitializer +org.springframework.context.ApplicationListener=com.infobip.testcontainers.spring.clickhouse.ClickhouseContainerInitializer diff --git a/infobip-clickhouse-testcontainers-spring-boot-starter/src/test/java/com/infobip/testcontainers/spring/clickhouse/ClickhouseContainerInitializerTest.java b/infobip-clickhouse-testcontainers-spring-boot-starter/src/test/java/com/infobip/testcontainers/spring/clickhouse/ClickhouseContainerInitializerTest.java new file mode 100644 index 0000000..e28485c --- /dev/null +++ b/infobip-clickhouse-testcontainers-spring-boot-starter/src/test/java/com/infobip/testcontainers/spring/clickhouse/ClickhouseContainerInitializerTest.java @@ -0,0 +1,33 @@ +package com.infobip.testcontainers.spring.clickhouse; + +import static org.assertj.core.api.BDDAssertions.then; + +import javax.sql.DataSource; + +import lombok.AllArgsConstructor; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.TestConstructor; + +@AllArgsConstructor +@ActiveProfiles("test") +@TestConstructor(autowireMode = TestConstructor.AutowireMode.ALL) +@SpringBootTest(classes = Main.class) +class ClickhouseContainerInitializerTest { + + DataSource dataSource; + + @Test + void shouldCreateContainer() { + //given + JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); + + //when + String result = jdbcTemplate.queryForObject("SELECT 1", String.class); + + //then + then(result).isEqualTo("1"); + } +} diff --git a/infobip-clickhouse-testcontainers-spring-boot-starter/src/test/java/com/infobip/testcontainers/spring/clickhouse/DataSourceConfig.java b/infobip-clickhouse-testcontainers-spring-boot-starter/src/test/java/com/infobip/testcontainers/spring/clickhouse/DataSourceConfig.java new file mode 100644 index 0000000..80057e7 --- /dev/null +++ b/infobip-clickhouse-testcontainers-spring-boot-starter/src/test/java/com/infobip/testcontainers/spring/clickhouse/DataSourceConfig.java @@ -0,0 +1,25 @@ +package com.infobip.testcontainers.spring.clickhouse; + +import javax.sql.DataSource; + +import lombok.AllArgsConstructor; +import org.springframework.boot.jdbc.DataSourceBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.Environment; + +@Configuration +@AllArgsConstructor +public class DataSourceConfig { + + private final Environment environment; + + @Bean + public DataSource getDataSource() { + String url = environment.getProperty("spring.datasource.clickhouse.jdbc-url"); + DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create(); + dataSourceBuilder.driverClassName("ru.yandex.clickhouse.ClickHouseDriver"); + dataSourceBuilder.url(url); + return dataSourceBuilder.build(); + } +} diff --git a/infobip-kafka-testcontainers-spring-boot-starter/src/test/java/com/infobip/testcontainers/spring/kafka/Main.java b/infobip-clickhouse-testcontainers-spring-boot-starter/src/test/java/com/infobip/testcontainers/spring/clickhouse/Main.java similarity index 83% rename from infobip-kafka-testcontainers-spring-boot-starter/src/test/java/com/infobip/testcontainers/spring/kafka/Main.java rename to infobip-clickhouse-testcontainers-spring-boot-starter/src/test/java/com/infobip/testcontainers/spring/clickhouse/Main.java index bcbc670..16fbf74 100644 --- a/infobip-kafka-testcontainers-spring-boot-starter/src/test/java/com/infobip/testcontainers/spring/kafka/Main.java +++ b/infobip-clickhouse-testcontainers-spring-boot-starter/src/test/java/com/infobip/testcontainers/spring/clickhouse/Main.java @@ -1,4 +1,4 @@ -package com.infobip.testcontainers.spring.kafka; +package com.infobip.testcontainers.spring.clickhouse; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; @@ -9,4 +9,4 @@ public class Main { public static void main(String[] args) { new SpringApplicationBuilder(Main.class).run(args); } -} \ No newline at end of file +} diff --git a/infobip-clickhouse-testcontainers-spring-boot-starter/src/test/resources/application-test.yaml b/infobip-clickhouse-testcontainers-spring-boot-starter/src/test/resources/application-test.yaml new file mode 100644 index 0000000..91f5396 --- /dev/null +++ b/infobip-clickhouse-testcontainers-spring-boot-starter/src/test/resources/application-test.yaml @@ -0,0 +1,8 @@ +spring: + datasource: + clickhouse: + jdbc-url: jdbc:clickhouse://: + +testcontainers: + clickhouse: + custom-path: "spring.datasource.clickhouse" diff --git a/infobip-kafka-testcontainers-spring-boot-starter/src/main/java/com/infobip/testcontainers/spring/kafka/KafkaContainerWrapper.java b/infobip-kafka-testcontainers-spring-boot-starter/src/main/java/com/infobip/testcontainers/spring/kafka/KafkaContainerWrapper.java deleted file mode 100644 index bc337b6..0000000 --- a/infobip-kafka-testcontainers-spring-boot-starter/src/main/java/com/infobip/testcontainers/spring/kafka/KafkaContainerWrapper.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.infobip.testcontainers.spring.kafka; - -import org.testcontainers.containers.KafkaContainer; - -public class KafkaContainerWrapper extends KafkaContainer { - - public KafkaContainerWrapper() { - } - - public KafkaContainerWrapper(String confluentPlatformVersion) { - super(confluentPlatformVersion); - } -} diff --git a/pom.xml b/pom.xml index 2238701..e1cedc3 100644 --- a/pom.xml +++ b/pom.xml @@ -40,6 +40,7 @@ infobip-redis-testcontainers-spring-boot-starter infobip-testcontainers-common infobip-rabbitmq-testcontainers-spring-boot + infobip-clickhouse-testcontainers-spring-boot-starter From ff8b7353075306028604a875781d83e499252073 Mon Sep 17 00:00:00 2001 From: ilaktasic Date: Thu, 29 Apr 2021 09:16:21 +0200 Subject: [PATCH 2/4] reverted moving KafkaContainerWrapper --- .../spring/kafka/KafkaContainerWrapper.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 infobip-kafka-testcontainers-spring-boot-starter/src/main/java/com/infobip/testcontainers/spring/kafka/KafkaContainerWrapper.java diff --git a/infobip-kafka-testcontainers-spring-boot-starter/src/main/java/com/infobip/testcontainers/spring/kafka/KafkaContainerWrapper.java b/infobip-kafka-testcontainers-spring-boot-starter/src/main/java/com/infobip/testcontainers/spring/kafka/KafkaContainerWrapper.java new file mode 100644 index 0000000..bc337b6 --- /dev/null +++ b/infobip-kafka-testcontainers-spring-boot-starter/src/main/java/com/infobip/testcontainers/spring/kafka/KafkaContainerWrapper.java @@ -0,0 +1,13 @@ +package com.infobip.testcontainers.spring.kafka; + +import org.testcontainers.containers.KafkaContainer; + +public class KafkaContainerWrapper extends KafkaContainer { + + public KafkaContainerWrapper() { + } + + public KafkaContainerWrapper(String confluentPlatformVersion) { + super(confluentPlatformVersion); + } +} From f1181615292cbb001243dab3131bcbf2771f70d6 Mon Sep 17 00:00:00 2001 From: ilaktasic Date: Thu, 29 Apr 2021 12:56:25 +0200 Subject: [PATCH 3/4] reverted main in kafka tests --- .../infobip/testcontainers/spring/kafka/Main.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 infobip-kafka-testcontainers-spring-boot-starter/src/test/java/com/infobip/testcontainers/spring/kafka/Main.java diff --git a/infobip-kafka-testcontainers-spring-boot-starter/src/test/java/com/infobip/testcontainers/spring/kafka/Main.java b/infobip-kafka-testcontainers-spring-boot-starter/src/test/java/com/infobip/testcontainers/spring/kafka/Main.java new file mode 100644 index 0000000..259769c --- /dev/null +++ b/infobip-kafka-testcontainers-spring-boot-starter/src/test/java/com/infobip/testcontainers/spring/kafka/Main.java @@ -0,0 +1,12 @@ +package com.infobip.testcontainers.spring.kafka; + +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.builder.SpringApplicationBuilder; + +@SpringBootApplication +public class Main { + + public static void main(String[] args) { + new SpringApplicationBuilder(Main.class).run(args); + } +} From dc5fe8ef3ff4d9b2d6db041ab7ceb18e29fd0260 Mon Sep 17 00:00:00 2001 From: ilaktasic Date: Fri, 7 May 2021 08:43:21 +0200 Subject: [PATCH 4/4] fixed readme formatting removed jdbc --- README.md | 10 +++++++--- .../pom.xml | 4 ---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index b038f1c..c9d474f 100644 --- a/README.md +++ b/README.md @@ -463,8 +463,10 @@ testcontainers.rabbit.docker.image: rabbitmq:3.6.14-alpine ``` ### ClickHouse + -##Tests +####Tests + Include the dependency: ```xml @@ -475,8 +477,10 @@ Include the dependency: test ``` + -##Local development +####Local development + Add the following profile: ```xml @@ -520,7 +524,7 @@ spring: jdbc-url: : ``` -##Docker image version +####Docker image version To change the docker image used simply add the following property (e.g. in yaml): diff --git a/infobip-clickhouse-testcontainers-spring-boot-starter/pom.xml b/infobip-clickhouse-testcontainers-spring-boot-starter/pom.xml index d06f3ee..627960a 100644 --- a/infobip-clickhouse-testcontainers-spring-boot-starter/pom.xml +++ b/infobip-clickhouse-testcontainers-spring-boot-starter/pom.xml @@ -36,10 +36,6 @@ clickhouse-jdbc ${clickhouse-jdbc.version} - - org.springframework - spring-jdbc - org.springframework.boot spring-boot-starter-jdbc