From 4de91a204884f9ef40cfa871cdd474cc4518a065 Mon Sep 17 00:00:00 2001 From: Icemap Date: Mon, 20 Jun 2022 18:47:08 +0800 Subject: [PATCH 01/23] [Update] Support TiDB --- ...s.containers.JdbcDatabaseContainerProvider | 2 +- modules/tidb/build.gradle | 19 +++ modules/tidb/sql/init_mysql.sql | 5 + .../containers/TiDBContainer.java | 146 ++++++++++++++++++ .../containers/TiDBContainerProvider.java | 33 ++++ ...s.containers.JdbcDatabaseContainerProvider | 1 + .../main/resources/mysql-default-conf/my.cnf | 49 ++++++ .../org/testcontainers/TiDBTestImages.java | 8 + .../jdbc/tidb/TiDBJDBCDriverTest.java | 21 +++ .../junit/tidb/SimpleTiDBTest.java | 68 ++++++++ .../tidb/src/test/resources/logback-test.xml | 16 ++ .../test/resources/somepath/init_mysql.sql | 16 ++ 12 files changed, 383 insertions(+), 1 deletion(-) create mode 100644 modules/tidb/build.gradle create mode 100644 modules/tidb/sql/init_mysql.sql create mode 100644 modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java create mode 100644 modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainerProvider.java create mode 100644 modules/tidb/src/main/resources/META-INF/services/org.testcontainers.containers.JdbcDatabaseContainerProvider create mode 100644 modules/tidb/src/main/resources/mysql-default-conf/my.cnf create mode 100644 modules/tidb/src/test/java/org/testcontainers/TiDBTestImages.java create mode 100644 modules/tidb/src/test/java/org/testcontainers/jdbc/tidb/TiDBJDBCDriverTest.java create mode 100644 modules/tidb/src/test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java create mode 100644 modules/tidb/src/test/resources/logback-test.xml create mode 100644 modules/tidb/src/test/resources/somepath/init_mysql.sql diff --git a/modules/mysql/src/main/resources/META-INF/services/org.testcontainers.containers.JdbcDatabaseContainerProvider b/modules/mysql/src/main/resources/META-INF/services/org.testcontainers.containers.JdbcDatabaseContainerProvider index c68d4c09536..73081a59146 100644 --- a/modules/mysql/src/main/resources/META-INF/services/org.testcontainers.containers.JdbcDatabaseContainerProvider +++ b/modules/mysql/src/main/resources/META-INF/services/org.testcontainers.containers.JdbcDatabaseContainerProvider @@ -1 +1 @@ -org.testcontainers.containers.MySQLContainerProvider \ No newline at end of file +org.testcontainers.containers.TiDBContainerProvider diff --git a/modules/tidb/build.gradle b/modules/tidb/build.gradle new file mode 100644 index 00000000000..11f8e6ca969 --- /dev/null +++ b/modules/tidb/build.gradle @@ -0,0 +1,19 @@ +description = "Testcontainers :: JDBC :: TiDB" + +dependencies { + annotationProcessor 'com.google.auto.service:auto-service:1.0.1' + compileOnly 'com.google.auto.service:auto-service:1.0.1' + + api project(':jdbc') + + compileOnly project(':r2dbc') + compileOnly 'dev.miku:r2dbc-mysql:0.8.2.RELEASE' + + testImplementation project(':jdbc-test') + testImplementation 'mysql:mysql-connector-java:8.0.29' + + testImplementation testFixtures(project(':r2dbc')) + testImplementation 'dev.miku:r2dbc-mysql:0.8.2.RELEASE' + + compileOnly 'org.jetbrains:annotations:23.0.0' +} diff --git a/modules/tidb/sql/init_mysql.sql b/modules/tidb/sql/init_mysql.sql new file mode 100644 index 00000000000..2b00ee968b0 --- /dev/null +++ b/modules/tidb/sql/init_mysql.sql @@ -0,0 +1,5 @@ +CREATE TABLE bar ( + foo VARCHAR(255) +); + +INSERT INTO bar (foo) VALUES ('hello world'); \ No newline at end of file diff --git a/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java b/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java new file mode 100644 index 00000000000..5a38641d482 --- /dev/null +++ b/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java @@ -0,0 +1,146 @@ +package org.testcontainers.containers; + +import org.jetbrains.annotations.NotNull; +import org.testcontainers.containers.wait.strategy.HttpWaitStrategy; +import org.testcontainers.utility.DockerImageName; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.time.Duration; +import java.util.HashSet; +import java.util.Set; + +/** + * @author richardnorth + */ +public class TiDBContainer extends JdbcDatabaseContainer { + + public static final String NAME = "tidb"; + + private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse("pingcap/tidb"); + + @Deprecated + public static final String DEFAULT_TAG = "v6.1.0"; + + @Deprecated + public static final String IMAGE = DEFAULT_IMAGE_NAME.getUnversionedPart(); + + public static final String IMAGE_TAG = DEFAULT_TAG; + + public static final Integer TIDB_PORT = 4000; + + private static final int REST_API_PORT = 10080; + + private String databaseName = "test"; + + private String username = "root"; + + private String password = ""; + + /** + * @deprecated use {@link TiDBContainer (DockerImageName)} instead + */ + @Deprecated + public TiDBContainer() { + this(DEFAULT_IMAGE_NAME.withTag(DEFAULT_TAG)); + } + + public TiDBContainer(String dockerImageName) { + this(DockerImageName.parse(dockerImageName)); + } + + public TiDBContainer(final DockerImageName dockerImageName) { + super(dockerImageName); + dockerImageName.assertCompatibleWith(DEFAULT_IMAGE_NAME); + + addExposedPorts(TIDB_PORT, REST_API_PORT); + + waitingFor( + new HttpWaitStrategy() + .forPath("/status") + .forPort(REST_API_PORT) + .forStatusCode(200) + .withStartupTimeout(Duration.ofMinutes(1)) + ); + } + + @NotNull + @Override + protected Set getLivenessCheckPorts() { + return new HashSet<>(getMappedPort(TIDB_PORT)); + } + + @Override + public String getDriverClassName() { + try { + Class.forName("com.mysql.cj.jdbc.Driver"); + return "com.mysql.cj.jdbc.Driver"; + } catch (ClassNotFoundException e) { + return "com.mysql.jdbc.Driver"; + } + } + + @Override + public String getJdbcUrl() { + String additionalUrlParams = constructUrlParameters("?", "&"); + return "jdbc:mysql://" + getHost() + ":" + getMappedPort(TIDB_PORT) + "/" + databaseName + additionalUrlParams; + } + + @Override + protected String constructUrlForConnection(String queryString) { + String url = super.constructUrlForConnection(queryString); + + if (!url.contains("useSSL=")) { + String separator = url.contains("?") ? "&" : "?"; + url = url + separator + "useSSL=false"; + } + + if (!url.contains("allowPublicKeyRetrieval=")) { + url = url + "&allowPublicKeyRetrieval=true"; + } + + return url; + } + + @Override + public String getDatabaseName() { + return databaseName; + } + + @Override + public String getUsername() { + return username; + } + + @Override + public String getPassword() { + return password; + } + + @Override + public String getTestQueryString() { + return "SELECT 1"; + } + + @Override + public TiDBContainer withDatabaseName(final String databaseName) { + throw new UnsupportedOperationException( + "The TiDB docker image does not currently support this - please see https://github.com/cockroachdb/cockroach/issues/19826" + ); + } + + @Override + public TiDBContainer withUsername(final String username) { + throw new UnsupportedOperationException( + "The TiDB docker image does not currently support this - please see https://github.com/cockroachdb/cockroach/issues/19826" + ); + } + + @Override + public TiDBContainer withPassword(final String password) { + throw new UnsupportedOperationException( + "The TiDB docker image does not currently support this - please see https://github.com/cockroachdb/cockroach/issues/19826" + ); + } +} diff --git a/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainerProvider.java b/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainerProvider.java new file mode 100644 index 00000000000..70bf0631aae --- /dev/null +++ b/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainerProvider.java @@ -0,0 +1,33 @@ +package org.testcontainers.containers; + +import org.testcontainers.jdbc.ConnectionUrl; +import org.testcontainers.utility.DockerImageName; + +/** + * Factory for TiDB containers. + */ +public class TiDBContainerProvider extends JdbcDatabaseContainerProvider { + + private static final String USER_PARAM = "root"; + + private static final String PASSWORD_PARAM = ""; + + @Override + public boolean supports(String databaseType) { + return databaseType.equals(TiDBContainer.NAME); + } + + @Override + public JdbcDatabaseContainer newInstance() { + return newInstance(TiDBContainer.DEFAULT_TAG); + } + + @Override + public JdbcDatabaseContainer newInstance(String tag) { + if (tag != null) { + return new TiDBContainer(DockerImageName.parse(TiDBContainer.IMAGE).withTag(tag)); + } else { + return newInstance(); + } + } +} diff --git a/modules/tidb/src/main/resources/META-INF/services/org.testcontainers.containers.JdbcDatabaseContainerProvider b/modules/tidb/src/main/resources/META-INF/services/org.testcontainers.containers.JdbcDatabaseContainerProvider new file mode 100644 index 00000000000..73081a59146 --- /dev/null +++ b/modules/tidb/src/main/resources/META-INF/services/org.testcontainers.containers.JdbcDatabaseContainerProvider @@ -0,0 +1 @@ +org.testcontainers.containers.TiDBContainerProvider diff --git a/modules/tidb/src/main/resources/mysql-default-conf/my.cnf b/modules/tidb/src/main/resources/mysql-default-conf/my.cnf new file mode 100644 index 00000000000..d608cb9c923 --- /dev/null +++ b/modules/tidb/src/main/resources/mysql-default-conf/my.cnf @@ -0,0 +1,49 @@ +[mysqld] +user = mysql +datadir = /var/lib/mysql +port = 3306 +#socket = /tmp/mysql.sock +skip-external-locking +key_buffer_size = 16K +max_allowed_packet = 1M +table_open_cache = 4 +sort_buffer_size = 64K +read_buffer_size = 256K +read_rnd_buffer_size = 256K +net_buffer_length = 2K +skip-host-cache +skip-name-resolve + +# Don't listen on a TCP/IP port at all. This can be a security enhancement, +# if all processes that need to connect to mysqld run on the same host. +# All interaction with mysqld must be made via Unix sockets or named pipes. +# Note that using this option without enabling named pipes on Windows +# (using the "enable-named-pipe" option) will render mysqld useless! +# +#skip-networking +#server-id = 1 + +# Uncomment the following if you want to log updates +#log-bin=mysql-bin + +# binary logging format - mixed recommended +#binlog_format=mixed + +# Causes updates to non-transactional engines using statement format to be +# written directly to binary log. Before using this option make sure that +# there are no dependencies between transactional and non-transactional +# tables such as in the statement INSERT INTO t_myisam SELECT * FROM +# t_innodb; otherwise, slaves may diverge from the master. +#binlog_direct_non_transactional_updates=TRUE + +# Uncomment the following if you are using InnoDB tables +innodb_data_file_path = ibdata1:10M:autoextend +# You can set .._buffer_pool_size up to 50 - 80 % +# of RAM but beware of setting memory usage too high +innodb_buffer_pool_size = 16M +#innodb_additional_mem_pool_size = 2M +# Set .._log_file_size to 25 % of buffer pool size +innodb_log_file_size = 5M +innodb_log_buffer_size = 8M +innodb_flush_log_at_trx_commit = 1 +innodb_lock_wait_timeout = 50 \ No newline at end of file diff --git a/modules/tidb/src/test/java/org/testcontainers/TiDBTestImages.java b/modules/tidb/src/test/java/org/testcontainers/TiDBTestImages.java new file mode 100644 index 00000000000..32fb57911a2 --- /dev/null +++ b/modules/tidb/src/test/java/org/testcontainers/TiDBTestImages.java @@ -0,0 +1,8 @@ +package org.testcontainers; + +import org.testcontainers.utility.DockerImageName; + +public class TiDBTestImages { + + public static final DockerImageName TIDB_IMAGE = DockerImageName.parse("pingcap/tidb:v6.1.0"); +} diff --git a/modules/tidb/src/test/java/org/testcontainers/jdbc/tidb/TiDBJDBCDriverTest.java b/modules/tidb/src/test/java/org/testcontainers/jdbc/tidb/TiDBJDBCDriverTest.java new file mode 100644 index 00000000000..15adde80e40 --- /dev/null +++ b/modules/tidb/src/test/java/org/testcontainers/jdbc/tidb/TiDBJDBCDriverTest.java @@ -0,0 +1,21 @@ +package org.testcontainers.jdbc.tidb; + +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.testcontainers.jdbc.AbstractJDBCDriverTest; + +import java.util.Arrays; +import java.util.EnumSet; + +@RunWith(Parameterized.class) +public class TiDBJDBCDriverTest extends AbstractJDBCDriverTest { + + @Parameterized.Parameters(name = "{index} - {0}") + public static Iterable data() { + return Arrays.asList( + new Object[][] { + { "jdbc:tc:tidb://hostname/databasename", EnumSet.noneOf(Options.class) }, + } + ); + } +} diff --git a/modules/tidb/src/test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java b/modules/tidb/src/test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java new file mode 100644 index 00000000000..7d4ccd832e4 --- /dev/null +++ b/modules/tidb/src/test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java @@ -0,0 +1,68 @@ +package org.testcontainers.junit.tidb; + +import org.junit.Test; +import org.testcontainers.TiDBTestImages; +import org.testcontainers.containers.TiDBContainer; +import org.testcontainers.db.AbstractContainerDatabaseTest; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.logging.Level; +import java.util.logging.LogManager; + +import static org.hamcrest.Matchers.containsString; +import static org.junit.Assert.assertThat; +import static org.rnorth.visibleassertions.VisibleAssertions.assertEquals; + +public class SimpleTiDBTest extends AbstractContainerDatabaseTest { + + static { + // Postgres JDBC driver uses JUL; disable it to avoid annoying, irrelevant, stderr logs during connection testing + LogManager.getLogManager().getLogger("").setLevel(Level.OFF); + } + + @Test + public void testSimple() throws SQLException { + try (TiDBContainer tidb = new TiDBContainer(TiDBTestImages.TIDB_IMAGE)) { + tidb.start(); + + ResultSet resultSet = performQuery(tidb, "SELECT 1"); + + int resultSetInt = resultSet.getInt(1); + assertEquals("A basic SELECT query succeeds", 1, resultSetInt); + } + } + + @Test + public void testExplicitInitScript() throws SQLException { + try ( + TiDBContainer cockroach = new TiDBContainer(TiDBTestImages.TIDB_IMAGE) + .withInitScript("somepath/init_mysql.sql") + ) { // CockroachDB is expected to be compatible with Postgres + cockroach.start(); + + ResultSet resultSet = performQuery(cockroach, "SELECT foo FROM bar"); + + String firstColumnValue = resultSet.getString(1); + assertEquals("Value from init script should equal real value", "hello world", firstColumnValue); + } + } + + @Test + public void testWithAdditionalUrlParamInJdbcUrl() { + TiDBContainer cockroach = new TiDBContainer(TiDBTestImages.TIDB_IMAGE) + .withUrlParam("sslmode", "disable") + .withUrlParam("application_name", "cockroach"); + + try { + cockroach.start(); + String jdbcUrl = cockroach.getJdbcUrl(); + assertThat(jdbcUrl, containsString("?")); + assertThat(jdbcUrl, containsString("&")); + assertThat(jdbcUrl, containsString("sslmode=disable")); + assertThat(jdbcUrl, containsString("application_name=cockroach")); + } finally { + cockroach.stop(); + } + } +} diff --git a/modules/tidb/src/test/resources/logback-test.xml b/modules/tidb/src/test/resources/logback-test.xml new file mode 100644 index 00000000000..535e406fc13 --- /dev/null +++ b/modules/tidb/src/test/resources/logback-test.xml @@ -0,0 +1,16 @@ + + + + + + %d{HH:mm:ss.SSS} %-5level %logger - %msg%n + + + + + + + + + diff --git a/modules/tidb/src/test/resources/somepath/init_mysql.sql b/modules/tidb/src/test/resources/somepath/init_mysql.sql new file mode 100644 index 00000000000..73bc09151cb --- /dev/null +++ b/modules/tidb/src/test/resources/somepath/init_mysql.sql @@ -0,0 +1,16 @@ +CREATE TABLE bar ( + foo VARCHAR(255) +); + +SELECT "a /* string literal containing comment characters like -- here"; +SELECT "a 'quoting' \"scenario ` involving BEGIN keyword\" here"; +SELECT * from `bar`; + +-- What about a line comment containing imbalanced string delimiters? " + +/* or a block comment + containing imbalanced string delimiters? + ' " + */ + +INSERT INTO bar (foo) /* ; */ VALUES ('hello world'); From 1d0d360e9622420fd0b2ee305cd99aa836990f10 Mon Sep 17 00:00:00 2001 From: Icemap Date: Tue, 21 Jun 2022 12:32:41 +0800 Subject: [PATCH 02/23] [Update] TiDB documents --- docs/modules/databases/jdbc.md | 4 +++ docs/modules/databases/tidb.md | 25 +++++++++++++++++++ mkdocs.yml | 1 + .../containers/TiDBContainer.java | 6 ++--- .../junit/tidb/SimpleTiDBTest.java | 20 +++++++-------- 5 files changed, 42 insertions(+), 14 deletions(-) create mode 100644 docs/modules/databases/tidb.md diff --git a/docs/modules/databases/jdbc.md b/docs/modules/databases/jdbc.md index 3c52dd1d8a8..e3a077333cd 100644 --- a/docs/modules/databases/jdbc.md +++ b/docs/modules/databases/jdbc.md @@ -51,6 +51,10 @@ Insert `tc:` after `jdbc:` as follows. Note that the hostname, port and database `jdbc:tc:cockroach:v21.2.3:///databasename` +#### Using TiDB + +`jdbc:tc:tidb:v6.1.0:///databasename` + ### Using a classpath init script Testcontainers can run an init script after the database container is started, but before your code is given a connection to it. The script must be on the classpath, and is referenced as follows: diff --git a/docs/modules/databases/tidb.md b/docs/modules/databases/tidb.md new file mode 100644 index 00000000000..01c6b4cfcd4 --- /dev/null +++ b/docs/modules/databases/tidb.md @@ -0,0 +1,25 @@ +# TiDB Module + +See [Database containers](./index.md) for documentation and usage that is common to all relational database container types. + +## Adding this module to your project dependencies + +Add the following dependency to your `pom.xml`/`build.gradle` file: + +=== "Gradle" + ```groovy + testImplementation "org.testcontainers:tidb:{{latest_version}}" + ``` + +=== "Maven" + ```xml + + org.testcontainers + tidb + {{latest_version}} + test + + ``` + +!!! hint + Adding this Testcontainers library JAR will not automatically add a database driver JAR to your project. You should ensure that your project also has a suitable database driver as a dependency. diff --git a/mkdocs.yml b/mkdocs.yml index f6daad68155..d6d04dbe635 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -63,6 +63,7 @@ nav: - modules/databases/orientdb.md - modules/databases/postgres.md - modules/databases/presto.md + - modules/databases/tidb.md - modules/databases/trino.md - modules/azure.md - modules/docker_compose.md diff --git a/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java b/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java index 5a38641d482..11d6d33ced0 100644 --- a/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java +++ b/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java @@ -126,21 +126,21 @@ public String getTestQueryString() { @Override public TiDBContainer withDatabaseName(final String databaseName) { throw new UnsupportedOperationException( - "The TiDB docker image does not currently support this - please see https://github.com/cockroachdb/cockroach/issues/19826" + "The TiDB docker image does not currently support this" ); } @Override public TiDBContainer withUsername(final String username) { throw new UnsupportedOperationException( - "The TiDB docker image does not currently support this - please see https://github.com/cockroachdb/cockroach/issues/19826" + "The TiDB docker image does not currently support this" ); } @Override public TiDBContainer withPassword(final String password) { throw new UnsupportedOperationException( - "The TiDB docker image does not currently support this - please see https://github.com/cockroachdb/cockroach/issues/19826" + "The TiDB docker image does not currently support this" ); } } diff --git a/modules/tidb/src/test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java b/modules/tidb/src/test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java index 7d4ccd832e4..a626489b5e6 100644 --- a/modules/tidb/src/test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java +++ b/modules/tidb/src/test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java @@ -36,12 +36,12 @@ public void testSimple() throws SQLException { @Test public void testExplicitInitScript() throws SQLException { try ( - TiDBContainer cockroach = new TiDBContainer(TiDBTestImages.TIDB_IMAGE) + TiDBContainer tidb = new TiDBContainer(TiDBTestImages.TIDB_IMAGE) .withInitScript("somepath/init_mysql.sql") - ) { // CockroachDB is expected to be compatible with Postgres - cockroach.start(); + ) { // TiDB is expected to be compatible with MySQL + tidb.start(); - ResultSet resultSet = performQuery(cockroach, "SELECT foo FROM bar"); + ResultSet resultSet = performQuery(tidb, "SELECT foo FROM bar"); String firstColumnValue = resultSet.getString(1); assertEquals("Value from init script should equal real value", "hello world", firstColumnValue); @@ -50,19 +50,17 @@ public void testExplicitInitScript() throws SQLException { @Test public void testWithAdditionalUrlParamInJdbcUrl() { - TiDBContainer cockroach = new TiDBContainer(TiDBTestImages.TIDB_IMAGE) - .withUrlParam("sslmode", "disable") - .withUrlParam("application_name", "cockroach"); + TiDBContainer tidb = new TiDBContainer(TiDBTestImages.TIDB_IMAGE) + .withUrlParam("sslmode", "disable"); try { - cockroach.start(); - String jdbcUrl = cockroach.getJdbcUrl(); + tidb.start(); + String jdbcUrl = tidb.getJdbcUrl(); assertThat(jdbcUrl, containsString("?")); assertThat(jdbcUrl, containsString("&")); assertThat(jdbcUrl, containsString("sslmode=disable")); - assertThat(jdbcUrl, containsString("application_name=cockroach")); } finally { - cockroach.stop(); + tidb.stop(); } } } From e36bdb0f0df17639536e794d637f3f37bd1ba4bd Mon Sep 17 00:00:00 2001 From: Icemap Date: Wed, 20 Jul 2022 18:31:31 +0800 Subject: [PATCH 03/23] [Update] correct author and remove deprecated annotation --- .../containers/TiDBContainer.java | 25 +++---------------- .../containers/TiDBContainerProvider.java | 12 +++------ 2 files changed, 7 insertions(+), 30 deletions(-) diff --git a/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java b/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java index 11d6d33ced0..a107568337e 100644 --- a/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java +++ b/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java @@ -4,15 +4,12 @@ import org.testcontainers.containers.wait.strategy.HttpWaitStrategy; import org.testcontainers.utility.DockerImageName; -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.SQLException; import java.time.Duration; import java.util.HashSet; import java.util.Set; /** - * @author richardnorth + * @author Icemap */ public class TiDBContainer extends JdbcDatabaseContainer { @@ -20,13 +17,7 @@ public class TiDBContainer extends JdbcDatabaseContainer { private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse("pingcap/tidb"); - @Deprecated - public static final String DEFAULT_TAG = "v6.1.0"; - - @Deprecated - public static final String IMAGE = DEFAULT_IMAGE_NAME.getUnversionedPart(); - - public static final String IMAGE_TAG = DEFAULT_TAG; + private static final String IMAGE = DEFAULT_IMAGE_NAME.getUnversionedPart(); public static final Integer TIDB_PORT = 4000; @@ -38,16 +29,8 @@ public class TiDBContainer extends JdbcDatabaseContainer { private String password = ""; - /** - * @deprecated use {@link TiDBContainer (DockerImageName)} instead - */ - @Deprecated - public TiDBContainer() { - this(DEFAULT_IMAGE_NAME.withTag(DEFAULT_TAG)); - } - - public TiDBContainer(String dockerImageName) { - this(DockerImageName.parse(dockerImageName)); + public TiDBContainer(String tag) { + this(DockerImageName.parse(TiDBContainer.IMAGE).withTag(tag)); } public TiDBContainer(final DockerImageName dockerImageName) { diff --git a/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainerProvider.java b/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainerProvider.java index 70bf0631aae..fe6e7d3e0d3 100644 --- a/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainerProvider.java +++ b/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainerProvider.java @@ -1,16 +1,10 @@ package org.testcontainers.containers; -import org.testcontainers.jdbc.ConnectionUrl; -import org.testcontainers.utility.DockerImageName; - /** * Factory for TiDB containers. */ public class TiDBContainerProvider extends JdbcDatabaseContainerProvider { - - private static final String USER_PARAM = "root"; - - private static final String PASSWORD_PARAM = ""; + private static final String DEFAULT_TAG = "v6.1.0"; @Override public boolean supports(String databaseType) { @@ -19,13 +13,13 @@ public boolean supports(String databaseType) { @Override public JdbcDatabaseContainer newInstance() { - return newInstance(TiDBContainer.DEFAULT_TAG); + return newInstance(DEFAULT_TAG); } @Override public JdbcDatabaseContainer newInstance(String tag) { if (tag != null) { - return new TiDBContainer(DockerImageName.parse(TiDBContainer.IMAGE).withTag(tag)); + return new TiDBContainer(tag); } else { return newInstance(); } From bc8307afa82689219833834c95619b1e3de4fa6c Mon Sep 17 00:00:00 2001 From: Icemap Date: Thu, 21 Jul 2022 11:40:29 +0800 Subject: [PATCH 04/23] [Update] format TiDB code and adapt Java 17 --- gradle.properties | 5 +++++ .../org/testcontainers/containers/TiDBContainer.java | 12 +++--------- .../containers/TiDBContainerProvider.java | 1 + .../testcontainers/jdbc/tidb/TiDBJDBCDriverTest.java | 4 +--- .../testcontainers/junit/tidb/SimpleTiDBTest.java | 7 ++----- 5 files changed, 12 insertions(+), 17 deletions(-) diff --git a/gradle.properties b/gradle.properties index a063988958c..9dddc3f8992 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,8 @@ org.gradle.parallel=false org.gradle.caching=true org.gradle.configureondemand=true +org.gradle.jvmargs=--add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED \ + --add-exports jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED \ + --add-exports jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED \ + --add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED \ + --add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED diff --git a/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java b/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java index a107568337e..5d8c5cac702 100644 --- a/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java +++ b/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java @@ -108,22 +108,16 @@ public String getTestQueryString() { @Override public TiDBContainer withDatabaseName(final String databaseName) { - throw new UnsupportedOperationException( - "The TiDB docker image does not currently support this" - ); + throw new UnsupportedOperationException("The TiDB docker image does not currently support this"); } @Override public TiDBContainer withUsername(final String username) { - throw new UnsupportedOperationException( - "The TiDB docker image does not currently support this" - ); + throw new UnsupportedOperationException("The TiDB docker image does not currently support this"); } @Override public TiDBContainer withPassword(final String password) { - throw new UnsupportedOperationException( - "The TiDB docker image does not currently support this" - ); + throw new UnsupportedOperationException("The TiDB docker image does not currently support this"); } } diff --git a/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainerProvider.java b/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainerProvider.java index fe6e7d3e0d3..91d67299a66 100644 --- a/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainerProvider.java +++ b/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainerProvider.java @@ -4,6 +4,7 @@ * Factory for TiDB containers. */ public class TiDBContainerProvider extends JdbcDatabaseContainerProvider { + private static final String DEFAULT_TAG = "v6.1.0"; @Override diff --git a/modules/tidb/src/test/java/org/testcontainers/jdbc/tidb/TiDBJDBCDriverTest.java b/modules/tidb/src/test/java/org/testcontainers/jdbc/tidb/TiDBJDBCDriverTest.java index 15adde80e40..566850fa629 100644 --- a/modules/tidb/src/test/java/org/testcontainers/jdbc/tidb/TiDBJDBCDriverTest.java +++ b/modules/tidb/src/test/java/org/testcontainers/jdbc/tidb/TiDBJDBCDriverTest.java @@ -13,9 +13,7 @@ public class TiDBJDBCDriverTest extends AbstractJDBCDriverTest { @Parameterized.Parameters(name = "{index} - {0}") public static Iterable data() { return Arrays.asList( - new Object[][] { - { "jdbc:tc:tidb://hostname/databasename", EnumSet.noneOf(Options.class) }, - } + new Object[][] { { "jdbc:tc:tidb://hostname/databasename", EnumSet.noneOf(Options.class) } } ); } } diff --git a/modules/tidb/src/test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java b/modules/tidb/src/test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java index a626489b5e6..17cffe19fa6 100644 --- a/modules/tidb/src/test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java +++ b/modules/tidb/src/test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java @@ -15,7 +15,6 @@ import static org.rnorth.visibleassertions.VisibleAssertions.assertEquals; public class SimpleTiDBTest extends AbstractContainerDatabaseTest { - static { // Postgres JDBC driver uses JUL; disable it to avoid annoying, irrelevant, stderr logs during connection testing LogManager.getLogManager().getLogger("").setLevel(Level.OFF); @@ -36,8 +35,7 @@ public void testSimple() throws SQLException { @Test public void testExplicitInitScript() throws SQLException { try ( - TiDBContainer tidb = new TiDBContainer(TiDBTestImages.TIDB_IMAGE) - .withInitScript("somepath/init_mysql.sql") + TiDBContainer tidb = new TiDBContainer(TiDBTestImages.TIDB_IMAGE).withInitScript("somepath/init_mysql.sql") ) { // TiDB is expected to be compatible with MySQL tidb.start(); @@ -50,8 +48,7 @@ public void testExplicitInitScript() throws SQLException { @Test public void testWithAdditionalUrlParamInJdbcUrl() { - TiDBContainer tidb = new TiDBContainer(TiDBTestImages.TIDB_IMAGE) - .withUrlParam("sslmode", "disable"); + TiDBContainer tidb = new TiDBContainer(TiDBTestImages.TIDB_IMAGE).withUrlParam("sslmode", "disable"); try { tidb.start(); From d813e4e89273650009beaad75ce319d93e92cd7a Mon Sep 17 00:00:00 2001 From: Icemap Date: Thu, 21 Jul 2022 11:52:27 +0800 Subject: [PATCH 05/23] [Delete] no used file: my.cnf --- .../main/resources/mysql-default-conf/my.cnf | 49 ------------------- 1 file changed, 49 deletions(-) delete mode 100644 modules/tidb/src/main/resources/mysql-default-conf/my.cnf diff --git a/modules/tidb/src/main/resources/mysql-default-conf/my.cnf b/modules/tidb/src/main/resources/mysql-default-conf/my.cnf deleted file mode 100644 index d608cb9c923..00000000000 --- a/modules/tidb/src/main/resources/mysql-default-conf/my.cnf +++ /dev/null @@ -1,49 +0,0 @@ -[mysqld] -user = mysql -datadir = /var/lib/mysql -port = 3306 -#socket = /tmp/mysql.sock -skip-external-locking -key_buffer_size = 16K -max_allowed_packet = 1M -table_open_cache = 4 -sort_buffer_size = 64K -read_buffer_size = 256K -read_rnd_buffer_size = 256K -net_buffer_length = 2K -skip-host-cache -skip-name-resolve - -# Don't listen on a TCP/IP port at all. This can be a security enhancement, -# if all processes that need to connect to mysqld run on the same host. -# All interaction with mysqld must be made via Unix sockets or named pipes. -# Note that using this option without enabling named pipes on Windows -# (using the "enable-named-pipe" option) will render mysqld useless! -# -#skip-networking -#server-id = 1 - -# Uncomment the following if you want to log updates -#log-bin=mysql-bin - -# binary logging format - mixed recommended -#binlog_format=mixed - -# Causes updates to non-transactional engines using statement format to be -# written directly to binary log. Before using this option make sure that -# there are no dependencies between transactional and non-transactional -# tables such as in the statement INSERT INTO t_myisam SELECT * FROM -# t_innodb; otherwise, slaves may diverge from the master. -#binlog_direct_non_transactional_updates=TRUE - -# Uncomment the following if you are using InnoDB tables -innodb_data_file_path = ibdata1:10M:autoextend -# You can set .._buffer_pool_size up to 50 - 80 % -# of RAM but beware of setting memory usage too high -innodb_buffer_pool_size = 16M -#innodb_additional_mem_pool_size = 2M -# Set .._log_file_size to 25 % of buffer pool size -innodb_log_file_size = 5M -innodb_log_buffer_size = 8M -innodb_flush_log_at_trx_commit = 1 -innodb_lock_wait_timeout = 50 \ No newline at end of file From e9878199052f7fb73dbf53ba849e35dd14eaa04b Mon Sep 17 00:00:00 2001 From: Icemap Date: Thu, 21 Jul 2022 11:59:55 +0800 Subject: [PATCH 06/23] [Debug] rollback changed mysql meta file --- .../org.testcontainers.containers.JdbcDatabaseContainerProvider | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/mysql/src/main/resources/META-INF/services/org.testcontainers.containers.JdbcDatabaseContainerProvider b/modules/mysql/src/main/resources/META-INF/services/org.testcontainers.containers.JdbcDatabaseContainerProvider index 73081a59146..9e38a9d5d9f 100644 --- a/modules/mysql/src/main/resources/META-INF/services/org.testcontainers.containers.JdbcDatabaseContainerProvider +++ b/modules/mysql/src/main/resources/META-INF/services/org.testcontainers.containers.JdbcDatabaseContainerProvider @@ -1 +1 @@ -org.testcontainers.containers.TiDBContainerProvider +org.testcontainers.containers.MySQLContainerProvider From b32059cf7f3301f0ffc0b097d8f4e6c826b45c01 Mon Sep 17 00:00:00 2001 From: Icemap Date: Thu, 21 Jul 2022 12:34:57 +0800 Subject: [PATCH 07/23] [Update] consistent with the other containers by using image string --- modules/tidb/build.gradle | 3 --- .../java/org/testcontainers/containers/TiDBContainer.java | 8 ++++---- .../testcontainers/containers/TiDBContainerProvider.java | 4 +++- .../org/testcontainers/junit/tidb/SimpleTiDBTest.java | 1 - 4 files changed, 7 insertions(+), 9 deletions(-) diff --git a/modules/tidb/build.gradle b/modules/tidb/build.gradle index 11f8e6ca969..1fe223bf2dd 100644 --- a/modules/tidb/build.gradle +++ b/modules/tidb/build.gradle @@ -6,9 +6,6 @@ dependencies { api project(':jdbc') - compileOnly project(':r2dbc') - compileOnly 'dev.miku:r2dbc-mysql:0.8.2.RELEASE' - testImplementation project(':jdbc-test') testImplementation 'mysql:mysql-connector-java:8.0.29' diff --git a/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java b/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java index 5d8c5cac702..12090ba2e53 100644 --- a/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java +++ b/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java @@ -15,9 +15,9 @@ public class TiDBContainer extends JdbcDatabaseContainer { public static final String NAME = "tidb"; - private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse("pingcap/tidb"); + public static final String DOCKER_IMAGE_NAME = "pingcap/tidb"; - private static final String IMAGE = DEFAULT_IMAGE_NAME.getUnversionedPart(); + private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse(DOCKER_IMAGE_NAME); public static final Integer TIDB_PORT = 4000; @@ -29,8 +29,8 @@ public class TiDBContainer extends JdbcDatabaseContainer { private String password = ""; - public TiDBContainer(String tag) { - this(DockerImageName.parse(TiDBContainer.IMAGE).withTag(tag)); + public TiDBContainer(String dockerImageName) { + this(DockerImageName.parse(dockerImageName)); } public TiDBContainer(final DockerImageName dockerImageName) { diff --git a/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainerProvider.java b/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainerProvider.java index 91d67299a66..2147deb6b24 100644 --- a/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainerProvider.java +++ b/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainerProvider.java @@ -1,5 +1,7 @@ package org.testcontainers.containers; +import org.testcontainers.utility.DockerImageName; + /** * Factory for TiDB containers. */ @@ -20,7 +22,7 @@ public JdbcDatabaseContainer newInstance() { @Override public JdbcDatabaseContainer newInstance(String tag) { if (tag != null) { - return new TiDBContainer(tag); + return new TiDBContainer(DockerImageName.parse(TiDBContainer.DOCKER_IMAGE_NAME).withTag(tag)); } else { return newInstance(); } diff --git a/modules/tidb/src/test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java b/modules/tidb/src/test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java index 17cffe19fa6..0d7f7c05043 100644 --- a/modules/tidb/src/test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java +++ b/modules/tidb/src/test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java @@ -54,7 +54,6 @@ public void testWithAdditionalUrlParamInJdbcUrl() { tidb.start(); String jdbcUrl = tidb.getJdbcUrl(); assertThat(jdbcUrl, containsString("?")); - assertThat(jdbcUrl, containsString("&")); assertThat(jdbcUrl, containsString("sslmode=disable")); } finally { tidb.stop(); From baa25c1d1d2038c2ea3984f289b8a934b6e46939 Mon Sep 17 00:00:00 2001 From: Icemap Date: Thu, 21 Jul 2022 12:37:06 +0800 Subject: [PATCH 08/23] [Delete] close LogManager code --- .../java/org/testcontainers/junit/tidb/SimpleTiDBTest.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/modules/tidb/src/test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java b/modules/tidb/src/test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java index 0d7f7c05043..4eed894317e 100644 --- a/modules/tidb/src/test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java +++ b/modules/tidb/src/test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java @@ -7,18 +7,12 @@ import java.sql.ResultSet; import java.sql.SQLException; -import java.util.logging.Level; -import java.util.logging.LogManager; import static org.hamcrest.Matchers.containsString; import static org.junit.Assert.assertThat; import static org.rnorth.visibleassertions.VisibleAssertions.assertEquals; public class SimpleTiDBTest extends AbstractContainerDatabaseTest { - static { - // Postgres JDBC driver uses JUL; disable it to avoid annoying, irrelevant, stderr logs during connection testing - LogManager.getLogManager().getLogger("").setLevel(Level.OFF); - } @Test public void testSimple() throws SQLException { From f1bdcfea3aab3e9c4cec941723f91b2dd293f36e Mon Sep 17 00:00:00 2001 From: Icemap Date: Thu, 21 Jul 2022 12:41:37 +0800 Subject: [PATCH 09/23] [Rollback] adapt props for Java 17 --- gradle.properties | 5 ----- 1 file changed, 5 deletions(-) diff --git a/gradle.properties b/gradle.properties index 9dddc3f8992..a063988958c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,8 +1,3 @@ org.gradle.parallel=false org.gradle.caching=true org.gradle.configureondemand=true -org.gradle.jvmargs=--add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED \ - --add-exports jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED \ - --add-exports jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED \ - --add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED \ - --add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED From c31114aa8d5c4b1606dc934a105be1c6e60e20e3 Mon Sep 17 00:00:00 2001 From: Icemap Date: Fri, 22 Jul 2022 10:50:57 +0800 Subject: [PATCH 10/23] [Rollback] org.testcontainers.containers.JdbcDatabaseContainerProvider --- .../org.testcontainers.containers.JdbcDatabaseContainerProvider | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/mysql/src/main/resources/META-INF/services/org.testcontainers.containers.JdbcDatabaseContainerProvider b/modules/mysql/src/main/resources/META-INF/services/org.testcontainers.containers.JdbcDatabaseContainerProvider index 9e38a9d5d9f..c68d4c09536 100644 --- a/modules/mysql/src/main/resources/META-INF/services/org.testcontainers.containers.JdbcDatabaseContainerProvider +++ b/modules/mysql/src/main/resources/META-INF/services/org.testcontainers.containers.JdbcDatabaseContainerProvider @@ -1 +1 @@ -org.testcontainers.containers.MySQLContainerProvider +org.testcontainers.containers.MySQLContainerProvider \ No newline at end of file From 84f8d0d20972bf446d498d8867cd3c6be62c976a Mon Sep 17 00:00:00 2001 From: Icemap Date: Fri, 22 Jul 2022 10:54:52 +0800 Subject: [PATCH 11/23] [Delete] r2dbc on test scope --- modules/tidb/build.gradle | 3 --- 1 file changed, 3 deletions(-) diff --git a/modules/tidb/build.gradle b/modules/tidb/build.gradle index 1fe223bf2dd..3964e8ffb0b 100644 --- a/modules/tidb/build.gradle +++ b/modules/tidb/build.gradle @@ -9,8 +9,5 @@ dependencies { testImplementation project(':jdbc-test') testImplementation 'mysql:mysql-connector-java:8.0.29' - testImplementation testFixtures(project(':r2dbc')) - testImplementation 'dev.miku:r2dbc-mysql:0.8.2.RELEASE' - compileOnly 'org.jetbrains:annotations:23.0.0' } From 6bb208693901a05485801c40399666e815664242 Mon Sep 17 00:00:00 2001 From: Icemap Date: Fri, 22 Jul 2022 11:19:03 +0800 Subject: [PATCH 12/23] [Delete] auto service dependencied --- modules/tidb/build.gradle | 3 --- 1 file changed, 3 deletions(-) diff --git a/modules/tidb/build.gradle b/modules/tidb/build.gradle index 3964e8ffb0b..51f15a6a798 100644 --- a/modules/tidb/build.gradle +++ b/modules/tidb/build.gradle @@ -1,9 +1,6 @@ description = "Testcontainers :: JDBC :: TiDB" dependencies { - annotationProcessor 'com.google.auto.service:auto-service:1.0.1' - compileOnly 'com.google.auto.service:auto-service:1.0.1' - api project(':jdbc') testImplementation project(':jdbc-test') From d4e8554d4f156704eea9cdd39da6619849cfb89b Mon Sep 17 00:00:00 2001 From: Kevin Wittek Date: Thu, 4 Aug 2022 15:54:24 +0200 Subject: [PATCH 13/23] Update modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java Co-authored-by: Sergei Egorov --- .../java/org/testcontainers/containers/TiDBContainer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java b/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java index 12090ba2e53..a6db112e7d6 100644 --- a/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java +++ b/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java @@ -13,9 +13,9 @@ */ public class TiDBContainer extends JdbcDatabaseContainer { - public static final String NAME = "tidb"; + private static final String NAME = "tidb"; - public static final String DOCKER_IMAGE_NAME = "pingcap/tidb"; + private static final String DOCKER_IMAGE_NAME = "pingcap/tidb"; private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse(DOCKER_IMAGE_NAME); From 7eb23eb343a6401c9a96eda6c5ec70394ca19169 Mon Sep 17 00:00:00 2001 From: Kevin Wittek Date: Thu, 4 Aug 2022 15:54:33 +0200 Subject: [PATCH 14/23] Update modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java Co-authored-by: Sergei Egorov --- .../main/java/org/testcontainers/containers/TiDBContainer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java b/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java index a6db112e7d6..b45a94e87a0 100644 --- a/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java +++ b/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java @@ -19,7 +19,7 @@ public class TiDBContainer extends JdbcDatabaseContainer { private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse(DOCKER_IMAGE_NAME); - public static final Integer TIDB_PORT = 4000; + private static final Integer TIDB_PORT = 4000; private static final int REST_API_PORT = 10080; From e4522e741968a89483e94ff7b72f81cb3a875186 Mon Sep 17 00:00:00 2001 From: Kevin Wittek Date: Thu, 4 Aug 2022 16:06:25 +0200 Subject: [PATCH 15/23] Make `NAME` and `DOCKER_IMAGE_NAME` package-protected --- .../java/org/testcontainers/containers/TiDBContainer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java b/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java index b45a94e87a0..d9947d2ae15 100644 --- a/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java +++ b/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java @@ -13,9 +13,9 @@ */ public class TiDBContainer extends JdbcDatabaseContainer { - private static final String NAME = "tidb"; + static final String NAME = "tidb"; - private static final String DOCKER_IMAGE_NAME = "pingcap/tidb"; + static final String DOCKER_IMAGE_NAME = "pingcap/tidb"; private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse(DOCKER_IMAGE_NAME); From eb7203380568a9c35ebc94ea8719455ec671961b Mon Sep 17 00:00:00 2001 From: Kevin Wittek Date: Thu, 4 Aug 2022 16:14:42 +0200 Subject: [PATCH 16/23] Add TiDB module to GH automation --- .github/ISSUE_TEMPLATE/bug_report.yaml | 1 + .github/ISSUE_TEMPLATE/enhancement.yaml | 1 + .github/ISSUE_TEMPLATE/feature.yaml | 1 + .github/dependabot.yml | 5 +++++ .github/labeler.yml | 2 ++ 5 files changed, 10 insertions(+) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml index dc86b416e46..426dbe5b662 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yaml +++ b/.github/ISSUE_TEMPLATE/bug_report.yaml @@ -42,6 +42,7 @@ body: - RabbitMQ - Selenium - Solr + - TiDB - ToxiProxy - Trino - Vault diff --git a/.github/ISSUE_TEMPLATE/enhancement.yaml b/.github/ISSUE_TEMPLATE/enhancement.yaml index f06ea99c8ba..d0748f4fc71 100644 --- a/.github/ISSUE_TEMPLATE/enhancement.yaml +++ b/.github/ISSUE_TEMPLATE/enhancement.yaml @@ -42,6 +42,7 @@ body: - RabbitMQ - Selenium - Solr + - TiDB - ToxiProxy - Trino - Vault diff --git a/.github/ISSUE_TEMPLATE/feature.yaml b/.github/ISSUE_TEMPLATE/feature.yaml index 9e79553d357..a9ca9395460 100644 --- a/.github/ISSUE_TEMPLATE/feature.yaml +++ b/.github/ISSUE_TEMPLATE/feature.yaml @@ -42,6 +42,7 @@ body: - RabbitMQ - Selenium - Solr + - TiDB - ToxiProxy - Trino - Vault diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 3e2d53fed65..2d877f664ab 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -197,6 +197,11 @@ updates: schedule: interval: "monthly" open-pull-requests-limit: 10 + - package-ecosystem: "gradle" + directory: "/modules/tidb" + schedule: + interval: "monthly" + open-pull-requests-limit: 10 - package-ecosystem: "gradle" directory: "/modules/toxiproxy" schedule: diff --git a/.github/labeler.yml b/.github/labeler.yml index 84e21af744a..826e5c16215 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -73,6 +73,8 @@ - modules/solr/* "modules/spock": - modules/spock/* +"modules/tidb": + - modules/tidb/* "modules/toxiproxy": - modules/toxiproxy/* "modules/trino": From c6ff27d7e9f124a50ff768c75b82c7d4fa87a260 Mon Sep 17 00:00:00 2001 From: Icemap Date: Thu, 4 Aug 2022 22:20:17 +0800 Subject: [PATCH 17/23] [Update] init_mysql.sql -> init_tidb.sql --- .../test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java | 2 +- .../test/resources/somepath/{init_mysql.sql => init_tidb.sql} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename modules/tidb/src/test/resources/somepath/{init_mysql.sql => init_tidb.sql} (100%) diff --git a/modules/tidb/src/test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java b/modules/tidb/src/test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java index 4eed894317e..390ab27bdf1 100644 --- a/modules/tidb/src/test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java +++ b/modules/tidb/src/test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java @@ -29,7 +29,7 @@ public void testSimple() throws SQLException { @Test public void testExplicitInitScript() throws SQLException { try ( - TiDBContainer tidb = new TiDBContainer(TiDBTestImages.TIDB_IMAGE).withInitScript("somepath/init_mysql.sql") + TiDBContainer tidb = new TiDBContainer(TiDBTestImages.TIDB_IMAGE).withInitScript("somepath/init_tidb.sql") ) { // TiDB is expected to be compatible with MySQL tidb.start(); diff --git a/modules/tidb/src/test/resources/somepath/init_mysql.sql b/modules/tidb/src/test/resources/somepath/init_tidb.sql similarity index 100% rename from modules/tidb/src/test/resources/somepath/init_mysql.sql rename to modules/tidb/src/test/resources/somepath/init_tidb.sql From 8f692be08c9b5993a79d46421dbc17b8f336e28b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edd=C3=BA=20Mel=C3=A9ndez=20Gonzales?= Date: Thu, 4 Aug 2022 09:39:02 -0500 Subject: [PATCH 18/23] Update modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java --- .../main/java/org/testcontainers/containers/TiDBContainer.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java b/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java index d9947d2ae15..8340cf18078 100644 --- a/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java +++ b/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java @@ -9,6 +9,8 @@ import java.util.Set; /** + * Testcontainers implementation for TiDB. + * * @author Icemap */ public class TiDBContainer extends JdbcDatabaseContainer { From c0df0f01708f1dca74e090e56401fc314fc47ff5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edd=C3=BA=20Mel=C3=A9ndez?= Date: Thu, 4 Aug 2022 09:45:33 -0500 Subject: [PATCH 19/23] Fix spotless --- .../main/java/org/testcontainers/containers/TiDBContainer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java b/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java index 8340cf18078..ceab5db34a8 100644 --- a/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java +++ b/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java @@ -10,7 +10,7 @@ /** * Testcontainers implementation for TiDB. - * + * * @author Icemap */ public class TiDBContainer extends JdbcDatabaseContainer { From c16aa77df924104360ccefcc146ba04f5c23b3ec Mon Sep 17 00:00:00 2001 From: Icemap Date: Fri, 12 Aug 2022 12:53:31 +0800 Subject: [PATCH 20/23] [Rename] org.testcontainers.containers -> org.testcontainers.tidb --- .../testcontainers/{containers => tidb}/TiDBContainer.java | 3 ++- .../{containers => tidb}/TiDBContainerProvider.java | 4 +++- ...rg.testcontainers.containers.JdbcDatabaseContainerProvider | 2 +- .../java/org/testcontainers/junit/tidb/SimpleTiDBTest.java | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) rename modules/tidb/src/main/java/org/testcontainers/{containers => tidb}/TiDBContainer.java (97%) rename modules/tidb/src/main/java/org/testcontainers/{containers => tidb}/TiDBContainerProvider.java (82%) diff --git a/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java b/modules/tidb/src/main/java/org/testcontainers/tidb/TiDBContainer.java similarity index 97% rename from modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java rename to modules/tidb/src/main/java/org/testcontainers/tidb/TiDBContainer.java index ceab5db34a8..f8030fd2422 100644 --- a/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainer.java +++ b/modules/tidb/src/main/java/org/testcontainers/tidb/TiDBContainer.java @@ -1,6 +1,7 @@ -package org.testcontainers.containers; +package org.testcontainers.tidb; import org.jetbrains.annotations.NotNull; +import org.testcontainers.containers.JdbcDatabaseContainer; import org.testcontainers.containers.wait.strategy.HttpWaitStrategy; import org.testcontainers.utility.DockerImageName; diff --git a/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainerProvider.java b/modules/tidb/src/main/java/org/testcontainers/tidb/TiDBContainerProvider.java similarity index 82% rename from modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainerProvider.java rename to modules/tidb/src/main/java/org/testcontainers/tidb/TiDBContainerProvider.java index 2147deb6b24..ee66771b42c 100644 --- a/modules/tidb/src/main/java/org/testcontainers/containers/TiDBContainerProvider.java +++ b/modules/tidb/src/main/java/org/testcontainers/tidb/TiDBContainerProvider.java @@ -1,5 +1,7 @@ -package org.testcontainers.containers; +package org.testcontainers.tidb; +import org.testcontainers.containers.JdbcDatabaseContainer; +import org.testcontainers.containers.JdbcDatabaseContainerProvider; import org.testcontainers.utility.DockerImageName; /** diff --git a/modules/tidb/src/main/resources/META-INF/services/org.testcontainers.containers.JdbcDatabaseContainerProvider b/modules/tidb/src/main/resources/META-INF/services/org.testcontainers.containers.JdbcDatabaseContainerProvider index 73081a59146..a4168b00e74 100644 --- a/modules/tidb/src/main/resources/META-INF/services/org.testcontainers.containers.JdbcDatabaseContainerProvider +++ b/modules/tidb/src/main/resources/META-INF/services/org.testcontainers.containers.JdbcDatabaseContainerProvider @@ -1 +1 @@ -org.testcontainers.containers.TiDBContainerProvider +org.testcontainers.tidb.TiDBContainerProvider diff --git a/modules/tidb/src/test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java b/modules/tidb/src/test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java index 390ab27bdf1..f3a7026559c 100644 --- a/modules/tidb/src/test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java +++ b/modules/tidb/src/test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java @@ -2,7 +2,7 @@ import org.junit.Test; import org.testcontainers.TiDBTestImages; -import org.testcontainers.containers.TiDBContainer; +import org.testcontainers.tidb.TiDBContainer; import org.testcontainers.db.AbstractContainerDatabaseTest; import java.sql.ResultSet; From 5d4355b87b6f158184cb897cf8bf9d8d2555fcf3 Mon Sep 17 00:00:00 2001 From: Icemap Date: Fri, 12 Aug 2022 14:57:59 +0800 Subject: [PATCH 21/23] [Unit Test] static import only from classes and interfaces --- .../testcontainers/junit/tidb/SimpleTiDBTest.java | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/modules/tidb/src/test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java b/modules/tidb/src/test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java index f3a7026559c..75346456d45 100644 --- a/modules/tidb/src/test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java +++ b/modules/tidb/src/test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java @@ -1,6 +1,9 @@ package org.testcontainers.junit.tidb; +import org.hamcrest.Matchers; +import org.junit.Assert; import org.junit.Test; +import org.rnorth.visibleassertions.VisibleAssertions; import org.testcontainers.TiDBTestImages; import org.testcontainers.tidb.TiDBContainer; import org.testcontainers.db.AbstractContainerDatabaseTest; @@ -8,10 +11,6 @@ import java.sql.ResultSet; import java.sql.SQLException; -import static org.hamcrest.Matchers.containsString; -import static org.junit.Assert.assertThat; -import static org.rnorth.visibleassertions.VisibleAssertions.assertEquals; - public class SimpleTiDBTest extends AbstractContainerDatabaseTest { @Test @@ -22,7 +21,7 @@ public void testSimple() throws SQLException { ResultSet resultSet = performQuery(tidb, "SELECT 1"); int resultSetInt = resultSet.getInt(1); - assertEquals("A basic SELECT query succeeds", 1, resultSetInt); + VisibleAssertions.assertEquals("A basic SELECT query succeeds", 1, resultSetInt); } } @@ -36,7 +35,7 @@ public void testExplicitInitScript() throws SQLException { ResultSet resultSet = performQuery(tidb, "SELECT foo FROM bar"); String firstColumnValue = resultSet.getString(1); - assertEquals("Value from init script should equal real value", "hello world", firstColumnValue); + VisibleAssertions.assertEquals("Value from init script should equal real value", "hello world", firstColumnValue); } } @@ -47,8 +46,8 @@ public void testWithAdditionalUrlParamInJdbcUrl() { try { tidb.start(); String jdbcUrl = tidb.getJdbcUrl(); - assertThat(jdbcUrl, containsString("?")); - assertThat(jdbcUrl, containsString("sslmode=disable")); + Assert.assertThat(jdbcUrl, Matchers.containsString("?")); + Assert.assertThat(jdbcUrl, Matchers.containsString("sslmode=disable")); } finally { tidb.stop(); } From 6f2c6a7a71152f49204e7c996a9b8e0044b4de48 Mon Sep 17 00:00:00 2001 From: Icemap Date: Fri, 12 Aug 2022 15:23:27 +0800 Subject: [PATCH 22/23] [Debug] import wrong package --- .../java/org/testcontainers/junit/tidb/SimpleTiDBTest.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/modules/tidb/src/test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java b/modules/tidb/src/test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java index 75346456d45..3b087b49098 100644 --- a/modules/tidb/src/test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java +++ b/modules/tidb/src/test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java @@ -3,7 +3,6 @@ import org.hamcrest.Matchers; import org.junit.Assert; import org.junit.Test; -import org.rnorth.visibleassertions.VisibleAssertions; import org.testcontainers.TiDBTestImages; import org.testcontainers.tidb.TiDBContainer; import org.testcontainers.db.AbstractContainerDatabaseTest; @@ -21,7 +20,7 @@ public void testSimple() throws SQLException { ResultSet resultSet = performQuery(tidb, "SELECT 1"); int resultSetInt = resultSet.getInt(1); - VisibleAssertions.assertEquals("A basic SELECT query succeeds", 1, resultSetInt); + Assert.assertEquals("A basic SELECT query succeeds", 1, resultSetInt); } } @@ -35,7 +34,7 @@ public void testExplicitInitScript() throws SQLException { ResultSet resultSet = performQuery(tidb, "SELECT foo FROM bar"); String firstColumnValue = resultSet.getString(1); - VisibleAssertions.assertEquals("Value from init script should equal real value", "hello world", firstColumnValue); + Assert.assertEquals("Value from init script should equal real value", "hello world", firstColumnValue); } } From 680075b72b8b4f4f1a367563101345f0f49729da Mon Sep 17 00:00:00 2001 From: Icemap Date: Mon, 15 Aug 2022 13:31:48 +0800 Subject: [PATCH 23/23] [Debug] spotlessApply --- .../test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/tidb/src/test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java b/modules/tidb/src/test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java index 3b087b49098..c4833f14224 100644 --- a/modules/tidb/src/test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java +++ b/modules/tidb/src/test/java/org/testcontainers/junit/tidb/SimpleTiDBTest.java @@ -4,8 +4,8 @@ import org.junit.Assert; import org.junit.Test; import org.testcontainers.TiDBTestImages; -import org.testcontainers.tidb.TiDBContainer; import org.testcontainers.db.AbstractContainerDatabaseTest; +import org.testcontainers.tidb.TiDBContainer; import java.sql.ResultSet; import java.sql.SQLException;