Skip to content

Commit

Permalink
Merge dc5fe8e into f12f153
Browse files Browse the repository at this point in the history
  • Loading branch information
ilaktasic committed May 7, 2021
2 parents f12f153 + dc5fe8e commit df606a0
Show file tree
Hide file tree
Showing 11 changed files with 254 additions and 1 deletion.
81 changes: 81 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)


## <a name="News"></a> 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:
Expand Down Expand Up @@ -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
```
<a name="ClickHouse"></a>
### ClickHouse

<a name="ClickHouseTests"></a>
####Tests

Include the dependency:

```xml
<dependency>
<groupId>com.infobip</groupId>
<artifactId>infobip-clickhouse-testcontainers-spring-boot-starter</artifactId>
<version>${infobip-clickhouse-testcontainers-spring-boot-starter.version}</version>
<scope>test</scope>
</dependency>
```

<a name="ClickHouseLocalDevelopment"></a>
####Local development

Add the following profile:

```xml
<profiles>
<profile>
<id>development</id>
<dependencies>
<dependency>
<groupId>com.infobip</groupId>
<artifactId>infobip-clickhouse-testcontainers-spring-boot-starter</artifactId>
<version>${infobip-clickhouse-testcontainers-spring-boot-starter.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</profile>
</profiles>
```

Before starting the application locally, activate development profile:

![profile.png](profile.png)
<a name="ClickHouseDockerImageVersion"></a>

and update your local configuration (e.g. application-development.yaml):

```yaml
spring:
datasource:
jdbc-url: <host>:<port>
```
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: <host>:<port>
```

####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
```

## <a name="Contributing"></a> Contributing

Expand All @@ -461,3 +541,4 @@ Pull requests are welcome!
## <a name="License"></a> License

This library is licensed under the [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0).

45 changes: 45 additions & 0 deletions infobip-clickhouse-testcontainers-spring-boot-starter/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>

<parent>
<groupId>com.infobip</groupId>
<artifactId>infobip-testcontainers-spring-boot-starter</artifactId>
<version>3.1.9-SNAPSHOT</version>
</parent>

<artifactId>infobip-clickhouse-testcontainers-spring-boot-starter</artifactId>

<properties>
<clickhouse-jdbc.version>0.2.4</clickhouse-jdbc.version>
</properties>

<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>infobip-testcontainers-common</artifactId>
<version>${project.version}</version>
</dependency>

<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>

<!-- LIBS -->
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>clickhouse</artifactId>
<version>${testcontainers.version}</version>
</dependency>
<dependency>
<groupId>ru.yandex.clickhouse</groupId>
<artifactId>clickhouse-jdbc</artifactId>
<version>${clickhouse-jdbc.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

</dependencies>
</project>
Original file line number Diff line number Diff line change
@@ -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<ClickhouseContainerWrapper> {

@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
Environment environment = applicationContext.getEnvironment();
Optional<String> 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("<host>", container.getContainerIpAddress())
.replace("<port>", container.getMappedPort(ClickhouseContainerWrapper.HTTP_PORT)
.toString());
TestPropertyValues values = TestPropertyValues.of(
String.format("%s=%s", jdbcUrlPropertyPath, url));
values.applyTo(applicationContext);
}

}
Original file line number Diff line number Diff line change
@@ -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);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
org.springframework.context.ApplicationContextInitializer=com.infobip.testcontainers.spring.clickhouse.ClickhouseContainerInitializer
org.springframework.context.ApplicationListener=com.infobip.testcontainers.spring.clickhouse.ClickhouseContainerInitializer
Original file line number Diff line number Diff line change
@@ -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");
}
}
Original file line number Diff line number Diff line change
@@ -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();
}
}
Original file line number Diff line number Diff line change
@@ -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);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
spring:
datasource:
clickhouse:
jdbc-url: jdbc:clickhouse://<host>:<port>

testcontainers:
clickhouse:
custom-path: "spring.datasource.clickhouse"
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,4 @@ public class Main {
public static void main(String[] args) {
new SpringApplicationBuilder(Main.class).run(args);
}
}
}
1 change: 1 addition & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
<module>infobip-redis-testcontainers-spring-boot-starter</module>
<module>infobip-testcontainers-common</module>
<module>infobip-rabbitmq-testcontainers-spring-boot</module>
<module>infobip-clickhouse-testcontainers-spring-boot-starter</module>
</modules>

<developers>
Expand Down

0 comments on commit df606a0

Please sign in to comment.