From 37fe4e0ea0c3c678a7954ee6bcc0a3f267b039c7 Mon Sep 17 00:00:00 2001 From: Pavel Popov Date: Sun, 19 Nov 2017 15:53:21 +0300 Subject: [PATCH 1/7] Add ClickHouse support --- modules/clickhouse/pom.xml | 44 +++++++++++++ .../containers/ClickHouseContainer.java | 66 +++++++++++++++++++ .../containers/ClickHouseProvider.java | 13 ++++ ...s.containers.JdbcDatabaseContainerProvider | 1 + .../testcontainers/jdbc/JDBCDriverTest.java | 11 ++-- 5 files changed, 131 insertions(+), 4 deletions(-) create mode 100644 modules/clickhouse/pom.xml create mode 100644 modules/clickhouse/src/main/java/org/testcontainers/containers/ClickHouseContainer.java create mode 100644 modules/clickhouse/src/main/java/org/testcontainers/containers/ClickHouseProvider.java create mode 100644 modules/clickhouse/src/main/resources/META-INF/services/org.testcontainers.containers.JdbcDatabaseContainerProvider diff --git a/modules/clickhouse/pom.xml b/modules/clickhouse/pom.xml new file mode 100644 index 00000000000..b90853777cf --- /dev/null +++ b/modules/clickhouse/pom.xml @@ -0,0 +1,44 @@ + + + 4.0.0 + + + org.testcontainers + testcontainers-parent + 0-SNAPSHOT + ../../pom.xml + + + clickhouse + TestContainers :: JDBC :: ClickHouse + + + + ${project.groupId} + jdbc + ${project.version} + + + ru.yandex.clickhouse + clickhouse-jdbc + 0.1.34 + test + + + com.zaxxer + HikariCP-java6 + 2.3.8 + test + + + commons-dbutils + commons-dbutils + 1.6 + test + + + + + \ No newline at end of file diff --git a/modules/clickhouse/src/main/java/org/testcontainers/containers/ClickHouseContainer.java b/modules/clickhouse/src/main/java/org/testcontainers/containers/ClickHouseContainer.java new file mode 100644 index 00000000000..612aee13b10 --- /dev/null +++ b/modules/clickhouse/src/main/java/org/testcontainers/containers/ClickHouseContainer.java @@ -0,0 +1,66 @@ +package org.testcontainers.containers; + +import org.testcontainers.containers.wait.HttpWaitStrategy; + +import java.time.Duration; + +public class ClickHouseContainer> extends JdbcDatabaseContainer { + public static final String NAME = "clickhouse"; + public static final String IMAGE = "yandex/clickhouse-server"; + public static final Integer HTTP_PORT = 8123; + public static final Integer NATIVE_PORT = 9000; + + private String databaseName = "default"; + private String username = "default"; + private String password = ""; + + public ClickHouseContainer() { + super(IMAGE + ":1.1.54310"); + } + + public ClickHouseContainer(String dockerImageName) { + super(dockerImageName); + } + + @Override + protected void configure() { + withExposedPorts(HTTP_PORT, NATIVE_PORT); + waitingFor( + new HttpWaitStrategy() + .forStatusCode(200) + .forResponsePredicate(responseBody -> "Ok.".equals(responseBody)) + .withStartupTimeout(Duration.ofMinutes(1)) + ); + } + + @Override + protected Integer getLivenessCheckPort() { + return getMappedPort(HTTP_PORT); + } + + @Override + public String getDriverClassName() { + return "ru.yandex.clickhouse.ClickHouseDriver"; + } + + @Override + public String getJdbcUrl() { + return "jdbc:clickhouse://" + getContainerIpAddress() + ":" + getMappedPort(HTTP_PORT) + "/" + databaseName; + } + + @Override + public String getUsername() { + return username; + } + + @Override + public String getPassword() { + return password; + } + + @Override + public String getTestQueryString() { + return "SELECT 1"; + } + +} diff --git a/modules/clickhouse/src/main/java/org/testcontainers/containers/ClickHouseProvider.java b/modules/clickhouse/src/main/java/org/testcontainers/containers/ClickHouseProvider.java new file mode 100644 index 00000000000..be5a01657f0 --- /dev/null +++ b/modules/clickhouse/src/main/java/org/testcontainers/containers/ClickHouseProvider.java @@ -0,0 +1,13 @@ +package org.testcontainers.containers; + +public class ClickHouseProvider extends JdbcDatabaseContainerProvider { + @Override + public boolean supports(String databaseType) { + return databaseType.equals(ClickHouseContainer.NAME); + } + + @Override + public JdbcDatabaseContainer newInstance(String tag) { + return new ClickHouseContainer(ClickHouseContainer.IMAGE + ":" + tag); + } +} diff --git a/modules/clickhouse/src/main/resources/META-INF/services/org.testcontainers.containers.JdbcDatabaseContainerProvider b/modules/clickhouse/src/main/resources/META-INF/services/org.testcontainers.containers.JdbcDatabaseContainerProvider new file mode 100644 index 00000000000..63e99284d2b --- /dev/null +++ b/modules/clickhouse/src/main/resources/META-INF/services/org.testcontainers.containers.JdbcDatabaseContainerProvider @@ -0,0 +1 @@ +org.testcontainers.containers.ClickHouseProvider \ No newline at end of file diff --git a/modules/jdbc-test/src/test/java/org/testcontainers/jdbc/JDBCDriverTest.java b/modules/jdbc-test/src/test/java/org/testcontainers/jdbc/JDBCDriverTest.java index 762e2ab639a..1067a5386ba 100644 --- a/modules/jdbc-test/src/test/java/org/testcontainers/jdbc/JDBCDriverTest.java +++ b/modules/jdbc-test/src/test/java/org/testcontainers/jdbc/JDBCDriverTest.java @@ -30,6 +30,7 @@ private enum Options { CharacterSet, CustomIniFile, JDBCParams, + PmdKnownBroken } @Parameter @@ -56,7 +57,9 @@ public static Iterable data() { {"jdbc:tc:mariadb:10.2.14://hostname/databasename?TC_INITSCRIPT=somepath/init_unicode_mysql.sql&useUnicode=yes&characterEncoding=utf8", EnumSet.of(Options.CharacterSet)}, {"jdbc:tc:mariadb:10.2.14://hostname/databasename?TC_INITSCRIPT=somepath/init_mariadb.sql", EnumSet.of(Options.ScriptedSchema)}, {"jdbc:tc:mariadb:10.2.14://hostname/databasename?TC_INITFUNCTION=org.testcontainers.jdbc.JDBCDriverTest::sampleInitFunction", EnumSet.of(Options.ScriptedSchema)}, - {"jdbc:tc:mariadb:10.2.14://hostname/databasename?TC_MY_CNF=somepath/mariadb_conf_override", EnumSet.of(Options.CustomIniFile)}}); + {"jdbc:tc:mariadb:10.2.14://hostname/databasename?TC_MY_CNF=somepath/mariadb_conf_override", EnumSet.of(Options.CustomIniFile)}, + {"jdbc:tc:clickhouse://hostname/databasename", EnumSet.of(Options.PmdKnownBroken)}, + }); } public static void sampleInitFunction(Connection connection) throws SQLException { @@ -76,7 +79,7 @@ public static void testCleanup() { @Test public void test() throws SQLException { - performSimpleTest(jdbcUrl); + performSimpleTest(jdbcUrl, options.contains(Options.PmdKnownBroken)); if (options.contains(Options.ScriptedSchema)) { performTestForScriptedSchema(jdbcUrl); @@ -100,9 +103,9 @@ public void test() throws SQLException { } } - private void performSimpleTest(String jdbcUrl) throws SQLException { + private void performSimpleTest(String jdbcUrl, boolean pmdKnownBroken) throws SQLException { try (HikariDataSource dataSource = getDataSource(jdbcUrl, 1)) { - boolean result = new QueryRunner(dataSource).query("SELECT 1", rs -> { + boolean result = new QueryRunner(dataSource, pmdKnownBroken).query("SELECT 1", rs -> { rs.next(); int resultSetInt = rs.getInt(1); assertEquals("A basic SELECT query succeeds", 1, resultSetInt); From d282a0d9f7a1014cbcbd82599ce9a9ab6791cad3 Mon Sep 17 00:00:00 2001 From: Pavel Popov Date: Tue, 27 Feb 2018 12:43:46 +0300 Subject: [PATCH 2/7] Remove unused imports --- .../testcontainers/containers/ClickHouseContainer.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/clickhouse/src/main/java/org/testcontainers/containers/ClickHouseContainer.java b/modules/clickhouse/src/main/java/org/testcontainers/containers/ClickHouseContainer.java index 612aee13b10..f4915588d96 100644 --- a/modules/clickhouse/src/main/java/org/testcontainers/containers/ClickHouseContainer.java +++ b/modules/clickhouse/src/main/java/org/testcontainers/containers/ClickHouseContainer.java @@ -26,10 +26,10 @@ public ClickHouseContainer(String dockerImageName) { protected void configure() { withExposedPorts(HTTP_PORT, NATIVE_PORT); waitingFor( - new HttpWaitStrategy() - .forStatusCode(200) - .forResponsePredicate(responseBody -> "Ok.".equals(responseBody)) - .withStartupTimeout(Duration.ofMinutes(1)) + new HttpWaitStrategy() + .forStatusCode(200) + .forResponsePredicate(responseBody -> "Ok.".equals(responseBody)) + .withStartupTimeout(Duration.ofMinutes(1)) ); } From b87286287161e0adc7506aa67b181966358785a7 Mon Sep 17 00:00:00 2001 From: Pavel Popov Date: Tue, 27 Feb 2018 12:54:42 +0300 Subject: [PATCH 3/7] Fix deps --- modules/jdbc-test/build.gradle | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/jdbc-test/build.gradle b/modules/jdbc-test/build.gradle index 0223781eecb..e631d2fa1a3 100644 --- a/modules/jdbc-test/build.gradle +++ b/modules/jdbc-test/build.gradle @@ -10,6 +10,7 @@ dependencies { compile project(':mariadb') compile project(':oracle-xe') compile project(':mssqlserver') + compile project(':clickhouse') testCompile 'com.google.guava:guava:18.0' testCompile 'org.postgresql:postgresql:42.0.0' @@ -17,6 +18,7 @@ dependencies { testCompile 'org.mariadb.jdbc:mariadb-java-client:1.4.6' testCompile 'com.oracle:ojdbc6:12.1.0.1-atlassian-hosted' testCompile 'com.microsoft.sqlserver:mssql-jdbc:6.1.0.jre8' + testCompile 'ru.yandex.clickhouse:clickhouse-jdbc:0.1.41' testCompile 'com.zaxxer:HikariCP-java6:2.3.8' testCompile 'org.apache.tomcat:tomcat-jdbc:8.5.4' From 1e3af154df4e715f93cfe3a4fec9efba9afe86bc Mon Sep 17 00:00:00 2001 From: Vladislav Rassokhin Date: Thu, 23 Aug 2018 17:21:18 +0300 Subject: [PATCH 4/7] ClickHouse: migrate to Gradle --- modules/clickhouse/build.gradle | 6 +++++ modules/clickhouse/pom.xml | 44 --------------------------------- 2 files changed, 6 insertions(+), 44 deletions(-) create mode 100644 modules/clickhouse/build.gradle delete mode 100644 modules/clickhouse/pom.xml diff --git a/modules/clickhouse/build.gradle b/modules/clickhouse/build.gradle new file mode 100644 index 00000000000..4f0e1a1fd90 --- /dev/null +++ b/modules/clickhouse/build.gradle @@ -0,0 +1,6 @@ +description = "Testcontainers :: JDBC :: ClickHouse" + +dependencies { + compile project(':testcontainers') + compile project(':jdbc') +} diff --git a/modules/clickhouse/pom.xml b/modules/clickhouse/pom.xml deleted file mode 100644 index b90853777cf..00000000000 --- a/modules/clickhouse/pom.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - 4.0.0 - - - org.testcontainers - testcontainers-parent - 0-SNAPSHOT - ../../pom.xml - - - clickhouse - TestContainers :: JDBC :: ClickHouse - - - - ${project.groupId} - jdbc - ${project.version} - - - ru.yandex.clickhouse - clickhouse-jdbc - 0.1.34 - test - - - com.zaxxer - HikariCP-java6 - 2.3.8 - test - - - commons-dbutils - commons-dbutils - 1.6 - test - - - - - \ No newline at end of file From 9a88d7bdbabee44b816c34ee70babc633dd2d190 Mon Sep 17 00:00:00 2001 From: Vladislav Rassokhin Date: Thu, 23 Aug 2018 17:27:17 +0300 Subject: [PATCH 5/7] ClickHouse: extract constants as suggested in review, bump version --- .../containers/ClickHouseContainer.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/modules/clickhouse/src/main/java/org/testcontainers/containers/ClickHouseContainer.java b/modules/clickhouse/src/main/java/org/testcontainers/containers/ClickHouseContainer.java index f4915588d96..933f3c8c33a 100644 --- a/modules/clickhouse/src/main/java/org/testcontainers/containers/ClickHouseContainer.java +++ b/modules/clickhouse/src/main/java/org/testcontainers/containers/ClickHouseContainer.java @@ -7,15 +7,21 @@ public class ClickHouseContainer> extends JdbcDatabaseContainer { public static final String NAME = "clickhouse"; public static final String IMAGE = "yandex/clickhouse-server"; + public static final String DEFAULT_TAG = "18.10.3"; + public static final Integer HTTP_PORT = 8123; public static final Integer NATIVE_PORT = 9000; + private static final String DRIVER_CLASS_NAME = "ru.yandex.clickhouse.ClickHouseDriver"; + private static final String JDBC_URL_PREFIX = "jdbc:" + NAME + "://"; + private static final String TEST_QUERY = "SELECT 1"; + private String databaseName = "default"; private String username = "default"; private String password = ""; public ClickHouseContainer() { - super(IMAGE + ":1.1.54310"); + super(IMAGE + ":" + DEFAULT_TAG); } public ClickHouseContainer(String dockerImageName) { @@ -40,12 +46,12 @@ protected Integer getLivenessCheckPort() { @Override public String getDriverClassName() { - return "ru.yandex.clickhouse.ClickHouseDriver"; + return DRIVER_CLASS_NAME; } @Override public String getJdbcUrl() { - return "jdbc:clickhouse://" + getContainerIpAddress() + ":" + getMappedPort(HTTP_PORT) + "/" + databaseName; + return JDBC_URL_PREFIX + getContainerIpAddress() + ":" + getMappedPort(HTTP_PORT) + "/" + databaseName; } @Override @@ -60,7 +66,7 @@ public String getPassword() { @Override public String getTestQueryString() { - return "SELECT 1"; + return TEST_QUERY; } } From 9499dbe8f77c75d9b93316804213f80f0e40ed84 Mon Sep 17 00:00:00 2001 From: Vladislav Rassokhin Date: Thu, 23 Aug 2018 17:36:05 +0300 Subject: [PATCH 6/7] ClickHouse: simplification in JDBCDriverTest, add simple test --- .../testcontainers/jdbc/JDBCDriverTest.java | 6 ++-- .../junit/SimpleClickhouseTest.java | 36 +++++++++++++++++++ 2 files changed, 39 insertions(+), 3 deletions(-) create mode 100644 modules/jdbc-test/src/test/java/org/testcontainers/junit/SimpleClickhouseTest.java diff --git a/modules/jdbc-test/src/test/java/org/testcontainers/jdbc/JDBCDriverTest.java b/modules/jdbc-test/src/test/java/org/testcontainers/jdbc/JDBCDriverTest.java index 1067a5386ba..5cd5f25ae3c 100644 --- a/modules/jdbc-test/src/test/java/org/testcontainers/jdbc/JDBCDriverTest.java +++ b/modules/jdbc-test/src/test/java/org/testcontainers/jdbc/JDBCDriverTest.java @@ -79,7 +79,7 @@ public static void testCleanup() { @Test public void test() throws SQLException { - performSimpleTest(jdbcUrl, options.contains(Options.PmdKnownBroken)); + performSimpleTest(jdbcUrl); if (options.contains(Options.ScriptedSchema)) { performTestForScriptedSchema(jdbcUrl); @@ -103,9 +103,9 @@ public void test() throws SQLException { } } - private void performSimpleTest(String jdbcUrl, boolean pmdKnownBroken) throws SQLException { + private void performSimpleTest(String jdbcUrl) throws SQLException { try (HikariDataSource dataSource = getDataSource(jdbcUrl, 1)) { - boolean result = new QueryRunner(dataSource, pmdKnownBroken).query("SELECT 1", rs -> { + boolean result = new QueryRunner(dataSource, options.contains(Options.PmdKnownBroken)).query("SELECT 1", rs -> { rs.next(); int resultSetInt = rs.getInt(1); assertEquals("A basic SELECT query succeeds", 1, resultSetInt); diff --git a/modules/jdbc-test/src/test/java/org/testcontainers/junit/SimpleClickhouseTest.java b/modules/jdbc-test/src/test/java/org/testcontainers/junit/SimpleClickhouseTest.java new file mode 100644 index 00000000000..4e123617b8d --- /dev/null +++ b/modules/jdbc-test/src/test/java/org/testcontainers/junit/SimpleClickhouseTest.java @@ -0,0 +1,36 @@ +package org.testcontainers.junit; + +import com.zaxxer.hikari.HikariConfig; +import com.zaxxer.hikari.HikariDataSource; +import org.junit.Rule; +import org.junit.Test; +import org.testcontainers.containers.ClickHouseContainer; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; + +import static org.rnorth.visibleassertions.VisibleAssertions.assertEquals; + +public class SimpleClickhouseTest { + + @Rule + public ClickHouseContainer clickhouse = new ClickHouseContainer(); + + @Test + public void testSimple() throws SQLException { + HikariConfig hikariConfig = new HikariConfig(); + hikariConfig.setJdbcUrl(clickhouse.getJdbcUrl()); + hikariConfig.setUsername(clickhouse.getUsername()); + hikariConfig.setPassword(clickhouse.getPassword()); + + HikariDataSource ds = new HikariDataSource(hikariConfig); + Statement statement = ds.getConnection().createStatement(); + statement.execute("SELECT 1"); + ResultSet resultSet = statement.getResultSet(); + + resultSet.next(); + int resultSetInt = resultSet.getInt(1); + assertEquals("A basic SELECT query succeeds", 1, resultSetInt); + } +} From 6910982ea8ad451f111b2b365cfe04eb07949cce Mon Sep 17 00:00:00 2001 From: Vladislav Rassokhin Date: Wed, 5 Sep 2018 20:05:01 +0300 Subject: [PATCH 7/7] remove self-typing --- .../java/org/testcontainers/containers/ClickHouseContainer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/clickhouse/src/main/java/org/testcontainers/containers/ClickHouseContainer.java b/modules/clickhouse/src/main/java/org/testcontainers/containers/ClickHouseContainer.java index 933f3c8c33a..0fd6174bf3b 100644 --- a/modules/clickhouse/src/main/java/org/testcontainers/containers/ClickHouseContainer.java +++ b/modules/clickhouse/src/main/java/org/testcontainers/containers/ClickHouseContainer.java @@ -4,7 +4,7 @@ import java.time.Duration; -public class ClickHouseContainer> extends JdbcDatabaseContainer { +public class ClickHouseContainer extends JdbcDatabaseContainer { public static final String NAME = "clickhouse"; public static final String IMAGE = "yandex/clickhouse-server"; public static final String DEFAULT_TAG = "18.10.3";