Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
ebd0501
Fix resource leak in performQuery by using Consumer pattern
Oct 12, 2025
c8f91bf
Refactor query execution to use performSelectOneQuery method for cons…
Oct 12, 2025
4555238
Refactor query execution to use performSelectFooBarQuery method for c…
Oct 12, 2025
8a13162
Refactor query execution to use performSelectMaxConnectionsQuery meth…
Oct 12, 2025
e94be98
Refactor query execution to use performSelectVersionQuery method for …
Oct 12, 2025
2681006
Refactor performSelectMaxConnectionsQuery and performSelectVersionQue…
Oct 12, 2025
6079f9d
Refactor query execution methods to use executeSelectOneQuery and exe…
Oct 12, 2025
6d8e8d3
Refactor query execution methods to use executeSelectOneQuery and exe…
Oct 12, 2025
51568cd
Refactor MariaDBContainerTest to use executeSelectVersionQuery with e…
Oct 13, 2025
3af19d2
Merge branch 'main' into main
rajucomp Oct 13, 2025
4ec62c9
Merge branch 'main' into main
rajucomp Oct 14, 2025
6dc7b16
Merge branch 'main' into main
rajucomp Oct 14, 2025
e3de543
Merge branch 'main' into main
rajucomp Oct 16, 2025
b29cc3c
Merge branch 'main' into main
rajucomp Oct 20, 2025
b3a79e4
Merge branch 'main' into main
rajucomp Nov 5, 2025
03835c5
Merge branch 'main' into main
rajucomp Nov 13, 2025
d7d7187
Merge branch 'main' into main
rajucomp Dec 3, 2025
ba9ed2f
Merge branch 'main' into main
rajucomp Dec 5, 2025
2e1191e
Merge branch 'main' into main
rajucomp Dec 14, 2025
2bdef47
Merge branch 'main' into main
rajucomp Dec 29, 2025
dcfd0d6
Merge branch 'main' into main
rajucomp Mar 28, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
import com.clickhouse.client.api.Client;
import com.clickhouse.client.api.data_formats.ClickHouseBinaryFormatReader;
import com.clickhouse.client.api.query.QueryResponse;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import org.testcontainers.ClickhouseTestImages;
import org.testcontainers.db.AbstractContainerDatabaseTest;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
Expand All @@ -26,10 +26,7 @@ void testSimple() throws SQLException {
) {
clickhouse.start();

ResultSet resultSet = performQuery(clickhouse, "SELECT 1");

int resultSetInt = resultSet.getInt(1);
assertThat(resultSetInt).isEqualTo(1);
executeSelectOneQuery(clickhouse);
}
}

Expand All @@ -45,13 +42,18 @@ void customCredentialsWithUrlParams() throws SQLException {
) {
clickhouse.start();

ResultSet resultSet = performQuery(
executeQuery(
clickhouse,
"SELECT value FROM system.settings where name='max_result_rows'"
"SELECT value FROM system.settings where name='max_result_rows'",
resultSet -> {
Assertions
.assertThatNoException()
.isThrownBy(() -> {
int resultSetInt = resultSet.getInt(1);
assertThat(resultSetInt).isEqualTo(5);
});
}
);

int resultSetInt = resultSet.getInt(1);
assertThat(resultSetInt).isEqualTo(5);
}
}

Expand All @@ -60,10 +62,7 @@ void testNewAuth() throws SQLException {
try (ClickHouseContainer clickhouse = new ClickHouseContainer(ClickhouseTestImages.CLICKHOUSE_24_12_IMAGE)) {
clickhouse.start();

ResultSet resultSet = performQuery(clickhouse, "SELECT 1");

int resultSetInt = resultSet.getInt(1);
assertThat(resultSetInt).isEqualTo(1);
executeSelectOneQuery(clickhouse);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,16 @@
import org.testcontainers.containers.ClickHouseContainer;
import org.testcontainers.db.AbstractContainerDatabaseTest;

import java.sql.ResultSet;
import java.sql.SQLException;

import static org.assertj.core.api.Assertions.assertThat;

class SimpleClickhouseTest extends AbstractContainerDatabaseTest {

@Test
public void testSimple() throws SQLException {
void testSimple() throws SQLException {
try (ClickHouseContainer clickhouse = new ClickHouseContainer(ClickhouseTestImages.CLICKHOUSE_IMAGE)) {
clickhouse.start();

ResultSet resultSet = performQuery(clickhouse, "SELECT 1");

int resultSetInt = resultSet.getInt(1);
assertThat(resultSetInt).as("A basic SELECT query succeeds").isEqualTo(1);
executeSelectOneQuery(clickhouse);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import org.testcontainers.db.AbstractContainerDatabaseTest;
import org.testcontainers.images.builder.Transferable;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.LogManager;
Expand All @@ -25,11 +24,7 @@ void testSimple() throws SQLException {
// }
) {
cockroach.start();

ResultSet resultSet = performQuery(cockroach, "SELECT 1");

int resultSetInt = resultSet.getInt(1);
assertThat(resultSetInt).as("A basic SELECT query succeeds").isEqualTo(1);
executeSelectOneQuery(cockroach);
}
}

Expand All @@ -41,10 +36,7 @@ void testExplicitInitScript() throws SQLException {
) { // CockroachDB is expected to be compatible with Postgres
cockroach.start();

ResultSet resultSet = performQuery(cockroach, "SELECT foo FROM bar");

String firstColumnValue = resultSet.getString(1);
assertThat(firstColumnValue).as("Value from init script should equal real value").isEqualTo("hello world");
executeSelectFooBarQuery(cockroach);
}
}

Expand Down Expand Up @@ -77,10 +69,7 @@ void testWithUsernamePasswordDatabase() throws SQLException {
) {
cockroach.start();

ResultSet resultSet = performQuery(cockroach, "SELECT 1");

int resultSetInt = resultSet.getInt(1);
assertThat(resultSetInt).as("A basic SELECT query succeeds").isEqualTo(1);
executeSelectOneQuery(cockroach);

String jdbcUrl = cockroach.getJdbcUrl();
assertThat(jdbcUrl).contains("/" + "test_database");
Expand All @@ -101,10 +90,7 @@ void testInitializationScript() throws SQLException {
) { // CockroachDB is expected to be compatible with Postgres
cockroach.start();

ResultSet resultSet = performQuery(cockroach, "SELECT foo FROM bar");

String firstColumnValue = resultSet.getString(1);
assertThat(firstColumnValue).as("Value from init script should equal real value").isEqualTo("hello world");
executeSelectFooBarQuery(cockroach);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package org.testcontainers.junit.cratedb;

import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import org.testcontainers.CrateDBTestImages;
import org.testcontainers.cratedb.CrateDBContainer;
import org.testcontainers.db.AbstractContainerDatabaseTest;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.LogManager;
Expand All @@ -26,9 +26,7 @@ void testSimple() throws SQLException {
) {
cratedb.start();

ResultSet resultSet = performQuery(cratedb, "SELECT 1");
int resultSetInt = resultSet.getInt(1);
assertThat(resultSetInt).as("A basic SELECT query succeeds").isEqualTo(1);
executeSelectOneQuery(cratedb);
assertHasCorrectExposedAndLivenessCheckPorts(cratedb);
}
}
Expand All @@ -41,9 +39,18 @@ void testCommandOverride() throws SQLException {
) {
cratedb.start();

ResultSet resultSet = performQuery(cratedb, "select name from sys.cluster");
String result = resultSet.getString(1);
assertThat(result).as("cluster name should be overridden").isEqualTo("testcontainers");
executeQuery(
cratedb,
"select name from sys.cluster",
resultSet -> {
Assertions
.assertThatNoException()
.isThrownBy(() -> {
String result = resultSet.getString(1);
assertThat(result).as("cluster name should be overridden").isEqualTo("testcontainers");
});
}
);
}
}

Expand All @@ -55,10 +62,7 @@ void testExplicitInitScript() throws SQLException {
) {
cratedb.start();

ResultSet resultSet = performQuery(cratedb, "SELECT foo FROM bar");

String firstColumnValue = resultSet.getString(1);
assertThat(firstColumnValue).as("Value from init script should equal real value").isEqualTo("hello world");
executeSelectFooBarQuery(cratedb);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,8 @@
import org.junit.jupiter.api.Test;
import org.testcontainers.db.AbstractContainerDatabaseTest;

import java.sql.ResultSet;
import java.sql.SQLException;

import static org.assertj.core.api.Assertions.assertThat;

class DatabendContainerTest extends AbstractContainerDatabaseTest {

@Test
Expand All @@ -18,10 +15,7 @@ void testSimple() throws SQLException {
) {
databend.start();

ResultSet resultSet = performQuery(databend, "SELECT 1");

int resultSetInt = resultSet.getInt(1);
assertThat(resultSetInt).isEqualTo(1);
executeSelectOneQuery(databend);
}
}

Expand All @@ -35,10 +29,7 @@ void customCredentialsWithUrlParams() throws SQLException {
) {
databend.start();

ResultSet resultSet = performQuery(databend, "SELECT 1;");

int resultSetInt = resultSet.getInt(1);
assertThat(resultSetInt).isEqualTo(1);
executeSelectOneQuery(databend);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import org.testcontainers.Db2TestImages;
import org.testcontainers.db.AbstractContainerDatabaseTest;

import java.sql.ResultSet;
import java.sql.SQLException;

import static org.assertj.core.api.Assertions.assertThat;
Expand All @@ -19,10 +18,8 @@ void testSimple() throws SQLException {
) {
db2.start();

ResultSet resultSet = performQuery(db2, "SELECT 1 FROM SYSIBM.SYSDUMMY1");
executeSelectOneQuery(db2, "SELECT 1 FROM SYSIBM.SYSDUMMY1");

int resultSetInt = resultSet.getInt(1);
assertThat(resultSetInt).as("A basic SELECT query succeeds").isEqualTo(1);
assertHasCorrectExposedAndLivenessCheckPorts(db2);
}
}
Expand All @@ -32,10 +29,8 @@ void testSimpleWithNewImage() throws SQLException {
try (Db2Container db2 = new Db2Container("icr.io/db2_community/db2:11.5.8.0").acceptLicense()) {
db2.start();

ResultSet resultSet = performQuery(db2, "SELECT 1 FROM SYSIBM.SYSDUMMY1");
executeSelectOneQuery(db2, "SELECT 1 FROM SYSIBM.SYSDUMMY1");

int resultSetInt = resultSet.getInt(1);
assertThat(resultSetInt).as("A basic SELECT query succeeds").isEqualTo(1);
assertHasCorrectExposedAndLivenessCheckPorts(db2);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,115 @@

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.assertj.core.api.Assertions;
import org.testcontainers.containers.JdbcDatabaseContainer;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.function.Consumer;

import javax.sql.DataSource;

public abstract class AbstractContainerDatabaseTest {

protected ResultSet performQuery(JdbcDatabaseContainer<?> container, String sql) throws SQLException {
DataSource ds = getDataSource(container);
Statement statement = ds.getConnection().createStatement();
statement.execute(sql);
ResultSet resultSet = statement.getResultSet();
protected void executeQuery(
final JdbcDatabaseContainer<?> container,
final String sql,
final Consumer<ResultSet> consumer
) throws SQLException {
final DataSource ds = getDataSource(container);

resultSet.next();
return resultSet;
try (
Connection connection = ds.getConnection();
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(sql)
) {
resultSet.next();
consumer.accept(resultSet);
}
}

protected DataSource getDataSource(JdbcDatabaseContainer<?> container) {
protected void executeSelectOneQuery(final JdbcDatabaseContainer<?> container) throws SQLException {
executeSelectOneQuery(container, "SELECT 1");
}

protected void executeSelectOneQuery(final JdbcDatabaseContainer<?> container, final String sql)
throws SQLException {
executeQuery(
container,
sql,
resultSet -> {
Assertions
.assertThatNoException()
.isThrownBy(() -> {
int resultSetInt = resultSet.getInt(1);
Assertions.assertThat(resultSetInt).as("A basic SELECT query succeeds").isEqualTo(1);
});
}
);
}

protected void executeSelectFooBarQuery(final JdbcDatabaseContainer<?> container) throws SQLException {
executeQuery(
container,
"SELECT foo FROM bar",
resultSet -> {
Assertions
.assertThatNoException()
.isThrownBy(() -> {
String firstColumnValue = resultSet.getString(1);
Assertions
.assertThat(firstColumnValue)
.as("Value from init script should equal real value")
.isEqualTo("hello world");
});
}
);
}

protected void executeSelectMaxConnectionsQuery(
final JdbcDatabaseContainer<?> container,
final String expectedMaxConnections
) throws SQLException {
executeQuery(
container,
"SELECT current_setting('max_connections')",
resultSet -> {
Assertions
.assertThatNoException()
.isThrownBy(() -> {
String result = resultSet.getString(1);
Assertions
.assertThat(result)
.as("max_connections should be overridden")
.isEqualTo(expectedMaxConnections);
});
}
);
}

protected void executeSelectVersionQuery(final JdbcDatabaseContainer<?> container, final String expectedVersion)
throws SQLException {
executeQuery(
container,
"SELECT VERSION()",
resultSet -> {
Assertions
.assertThatNoException()
.isThrownBy(() -> {
String resultSetString = resultSet.getString(1);
Assertions
.assertThat(resultSetString)
.as("The database version can be set using a container rule parameter")
.startsWith(expectedVersion);
});
}
);
}

protected DataSource getDataSource(final JdbcDatabaseContainer<?> container) {
HikariConfig hikariConfig = new HikariConfig();
hikariConfig.setJdbcUrl(container.getJdbcUrl());
hikariConfig.setUsername(container.getUsername());
Expand Down
Loading
Loading