From e43985b3bfa86a16ff4ef791022ec181e73f2e47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edd=C3=BA=20Mel=C3=A9ndez?= Date: Wed, 1 Oct 2025 10:40:12 -0600 Subject: [PATCH] Add Trino container implementation under org.testcontainers.trino --- docs/modules/databases/trino.md | 2 +- .../containers/TrinoContainer.java | 3 + .../testcontainers/trino/TrinoContainer.java | 108 ++++++++++++++++++ .../TrinoContainerTest.java | 6 +- 4 files changed, 114 insertions(+), 5 deletions(-) create mode 100644 modules/trino/src/main/java/org/testcontainers/trino/TrinoContainer.java rename modules/trino/src/test/java/org/testcontainers/{containers => trino}/TrinoContainerTest.java (93%) diff --git a/docs/modules/databases/trino.md b/docs/modules/databases/trino.md index a7ab7495de8..9cb6be8bb5b 100644 --- a/docs/modules/databases/trino.md +++ b/docs/modules/databases/trino.md @@ -7,7 +7,7 @@ Testcontainers module for [Trino](https://hub.docker.com/r/trinodb/trino) You can start a Trino container instance from any Java application by using: -[Container creation](../../../modules/trino/src/test/java/org/testcontainers/containers/TrinoContainerTest.java) inside_block:container +[Container creation](../../../modules/trino/src/test/java/org/testcontainers/trino/TrinoContainerTest.java) inside_block:container See [Database containers](./index.md) for documentation and usage that is common to all database container types. diff --git a/modules/trino/src/main/java/org/testcontainers/containers/TrinoContainer.java b/modules/trino/src/main/java/org/testcontainers/containers/TrinoContainer.java index 19da8d9252a..4f61b6e2352 100644 --- a/modules/trino/src/main/java/org/testcontainers/containers/TrinoContainer.java +++ b/modules/trino/src/main/java/org/testcontainers/containers/TrinoContainer.java @@ -15,7 +15,10 @@ * Supported image: {@code trinodb/trino} *

* Exposed ports: 8080 + * + * @deprecated use {@link org.testcontainers.trino.TrinoContainer} instead. */ +@Deprecated public class TrinoContainer extends JdbcDatabaseContainer { static final String NAME = "trino"; diff --git a/modules/trino/src/main/java/org/testcontainers/trino/TrinoContainer.java b/modules/trino/src/main/java/org/testcontainers/trino/TrinoContainer.java new file mode 100644 index 00000000000..145ae4b454c --- /dev/null +++ b/modules/trino/src/main/java/org/testcontainers/trino/TrinoContainer.java @@ -0,0 +1,108 @@ +package org.testcontainers.trino; + +import com.google.common.base.Strings; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.VisibleForTesting; +import org.testcontainers.containers.JdbcDatabaseContainer; +import org.testcontainers.utility.DockerImageName; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.Set; + +/** + * Testcontainers implementation for TrinoDB. + *

+ * Supported image: {@code trinodb/trino} + *

+ * Exposed ports: 8080 + */ +public class TrinoContainer extends JdbcDatabaseContainer { + + static final String NAME = "trino"; + + private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse("trinodb/trino"); + + static final String IMAGE = "trinodb/trino"; + + @VisibleForTesting + static final String DEFAULT_TAG = "352"; + + private static final int TRINO_PORT = 8080; + + private String username = "test"; + + private String catalog = null; + + public TrinoContainer(final String dockerImageName) { + this(DockerImageName.parse(dockerImageName)); + } + + public TrinoContainer(final DockerImageName dockerImageName) { + super(dockerImageName); + dockerImageName.assertCompatibleWith(DEFAULT_IMAGE_NAME); + addExposedPort(TRINO_PORT); + } + + /** + * @return the ports on which to check if the container is ready + * @deprecated use {@link #getLivenessCheckPortNumbers()} instead + */ + @NotNull + @Override + @Deprecated + protected Set getLivenessCheckPorts() { + return super.getLivenessCheckPorts(); + } + + @Override + public String getDriverClassName() { + return "io.trino.jdbc.TrinoDriver"; + } + + @Override + public String getJdbcUrl() { + return String.format( + "jdbc:trino://%s:%s/%s", + getHost(), + getMappedPort(TRINO_PORT), + Strings.nullToEmpty(catalog) + ); + } + + @Override + public String getUsername() { + return username; + } + + @Override + public String getPassword() { + return ""; + } + + @Override + public String getDatabaseName() { + return catalog; + } + + @Override + public String getTestQueryString() { + return "SELECT count(*) FROM tpch.tiny.nation"; + } + + @Override + public TrinoContainer withUsername(final String username) { + this.username = username; + return this; + } + + @Override + public TrinoContainer withDatabaseName(String dbName) { + this.catalog = dbName; + return this; + } + + public Connection createConnection() throws SQLException, NoDriverFoundException { + return createConnection(""); + } +} diff --git a/modules/trino/src/test/java/org/testcontainers/containers/TrinoContainerTest.java b/modules/trino/src/test/java/org/testcontainers/trino/TrinoContainerTest.java similarity index 93% rename from modules/trino/src/test/java/org/testcontainers/containers/TrinoContainerTest.java rename to modules/trino/src/test/java/org/testcontainers/trino/TrinoContainerTest.java index a12df1bcda7..c76c1bbb322 100644 --- a/modules/trino/src/test/java/org/testcontainers/containers/TrinoContainerTest.java +++ b/modules/trino/src/test/java/org/testcontainers/trino/TrinoContainerTest.java @@ -1,4 +1,4 @@ -package org.testcontainers.containers; +package org.testcontainers.trino; import org.junit.jupiter.api.Test; import org.testcontainers.TrinoTestImages; @@ -24,9 +24,7 @@ void testSimple() throws Exception { ResultSet resultSet = statement.executeQuery("SELECT DISTINCT node_version FROM system.runtime.nodes") ) { assertThat(resultSet.next()).as("results").isTrue(); - assertThat(resultSet.getString("node_version")) - .as("Trino version") - .isEqualTo(TrinoContainer.DEFAULT_TAG); + assertThat(resultSet.getString("node_version")).as("Trino version").isEqualTo("352"); assertContainerHasCorrectExposedAndLivenessCheckPorts(trino); } }