diff --git a/README.md b/README.md
index 14714e2..c9d474f 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,76 @@ 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 +541,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..627960a
--- /dev/null
+++ b/infobip-clickhouse-testcontainers-spring-boot-starter/pom.xml
@@ -0,0 +1,45 @@
+
+ 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.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-clickhouse-testcontainers-spring-boot-starter/src/test/java/com/infobip/testcontainers/spring/clickhouse/Main.java b/infobip-clickhouse-testcontainers-spring-boot-starter/src/test/java/com/infobip/testcontainers/spring/clickhouse/Main.java
new file mode 100644
index 0000000..16fbf74
--- /dev/null
+++ b/infobip-clickhouse-testcontainers-spring-boot-starter/src/test/java/com/infobip/testcontainers/spring/clickhouse/Main.java
@@ -0,0 +1,12 @@
+package com.infobip.testcontainers.spring.clickhouse;
+
+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);
+ }
+}
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/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
index bcbc670..259769c 100644
--- 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
@@ -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/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