diff --git a/externals/kyuubi-trino-engine/pom.xml b/externals/kyuubi-trino-engine/pom.xml
index 07042da5d..f4cafe035 100644
--- a/externals/kyuubi-trino-engine/pom.xml
+++ b/externals/kyuubi-trino-engine/pom.xml
@@ -65,15 +65,14 @@
- org.testcontainers
- testcontainers
+ com.dimafeng
+ testcontainers-scala-scalatest_${scala.binary.version}
test
-
- org.testcontainers
- trino
+ com.dimafeng
+ testcontainers-scala-trino_${scala.binary.version}
test
diff --git a/externals/kyuubi-trino-engine/src/test/scala/org/apache/kyuubi/engine/trino/TrinoContextSuite.scala b/externals/kyuubi-trino-engine/src/test/scala/org/apache/kyuubi/engine/trino/TrinoContextSuite.scala
index 5b195ba49..dd9f6c545 100644
--- a/externals/kyuubi-trino-engine/src/test/scala/org/apache/kyuubi/engine/trino/TrinoContextSuite.scala
+++ b/externals/kyuubi-trino-engine/src/test/scala/org/apache/kyuubi/engine/trino/TrinoContextSuite.scala
@@ -20,13 +20,13 @@ package org.apache.kyuubi.engine.trino
class TrinoContextSuite extends WithTrinoContainerServer {
test("set current schema") {
- val trinoContext = TrinoContext(httpClient, session)
+ withTrinoContainer { trinoContext =>
+ val trinoStatement = TrinoStatement(trinoContext, kyuubiConf, "select 1")
+ assert("tiny" === trinoStatement.getCurrentDatabase)
- val trinoStatement = TrinoStatement(trinoContext, kyuubiConf, "select 1")
- assert("tiny" === trinoStatement.getCurrentDatabase)
-
- trinoContext.setCurrentSchema("sf1")
- val trinoStatement2 = TrinoStatement(trinoContext, kyuubiConf, "select 1")
- assert("sf1" === trinoStatement2.getCurrentDatabase)
+ trinoContext.setCurrentSchema("sf1")
+ val trinoStatement2 = TrinoStatement(trinoContext, kyuubiConf, "select 1")
+ assert("sf1" === trinoStatement2.getCurrentDatabase)
+ }
}
}
diff --git a/externals/kyuubi-trino-engine/src/test/scala/org/apache/kyuubi/engine/trino/TrinoStatementSuite.scala b/externals/kyuubi-trino-engine/src/test/scala/org/apache/kyuubi/engine/trino/TrinoStatementSuite.scala
index 137b12657..1076a0cc1 100644
--- a/externals/kyuubi-trino-engine/src/test/scala/org/apache/kyuubi/engine/trino/TrinoStatementSuite.scala
+++ b/externals/kyuubi-trino-engine/src/test/scala/org/apache/kyuubi/engine/trino/TrinoStatementSuite.scala
@@ -22,42 +22,47 @@ import org.apache.kyuubi.KyuubiSQLException
class TrinoStatementSuite extends WithTrinoContainerServer {
test("test query") {
- val trinoStatement = TrinoStatement(TrinoContext(httpClient, session), kyuubiConf, "select 1")
- val schema = trinoStatement.getColumns
- val resultSet = trinoStatement.execute()
+ withTrinoContainer { trinoContext =>
+ val trinoStatement = TrinoStatement(trinoContext, kyuubiConf, "select 1")
+ val schema = trinoStatement.getColumns
+ val resultSet = trinoStatement.execute()
- assert(schema.size === 1)
- assert(schema(0).getName === "_col0")
+ assert(schema.size === 1)
+ assert(schema(0).getName === "_col0")
- assert(resultSet.toIterator.hasNext)
- assert(resultSet.toIterator.next() === List(1))
+ assert(resultSet.toIterator.hasNext)
+ assert(resultSet.toIterator.next() === List(1))
- val trinoStatement2 =
- TrinoStatement(TrinoContext(httpClient, session), kyuubiConf, "show schemas")
- val schema2 = trinoStatement2.getColumns
- val resultSet2 = trinoStatement2.execute()
+ val trinoStatement2 = TrinoStatement(trinoContext, kyuubiConf, "show schemas")
+ val schema2 = trinoStatement2.getColumns
+ val resultSet2 = trinoStatement2.execute()
- assert(schema2.size === 1)
- assert(resultSet2.toIterator.hasNext)
+ assert(schema2.size === 1)
+ assert(resultSet2.toIterator.hasNext)
+ }
}
test("test update session") {
- val trinoStatement = TrinoStatement(TrinoContext(httpClient, session), kyuubiConf, "select 1")
- val schema2 = trinoStatement.getColumns
+ withTrinoContainer { trinoContext =>
+ val trinoStatement = TrinoStatement(trinoContext, kyuubiConf, "select 1")
+ val schema2 = trinoStatement.getColumns
- assert(schema2.size === 1)
- assert(schema2(0).getName === "_col0")
- assert(this.schema === trinoStatement.getCurrentDatabase)
+ assert(schema2.size === 1)
+ assert(schema2(0).getName === "_col0")
+ assert(this.schema === trinoStatement.getCurrentDatabase)
- val trinoStatement2 = TrinoStatement(TrinoContext(httpClient, session), kyuubiConf, "use sf1")
- trinoStatement2.execute()
+ val trinoStatement2 = TrinoStatement(trinoContext, kyuubiConf, "use sf1")
+ trinoStatement2.execute()
- assert("sf1" === trinoStatement2.getCurrentDatabase)
+ assert("sf1" === trinoStatement2.getCurrentDatabase)
+ }
}
test("test exception") {
- val trinoStatement = TrinoStatement(TrinoContext(httpClient, session), kyuubiConf, "use kyuubi")
- val e1 = intercept[KyuubiSQLException](trinoStatement.execute())
- assert(e1.getMessage.contains("Schema does not exist: tpch.kyuubi"))
+ withTrinoContainer { trinoContext =>
+ val trinoStatement = TrinoStatement(trinoContext, kyuubiConf, "use kyuubi")
+ val e1 = intercept[KyuubiSQLException](trinoStatement.execute())
+ assert(e1.getMessage.contains("Schema does not exist: tpch.kyuubi"))
+ }
}
}
diff --git a/externals/kyuubi-trino-engine/src/test/scala/org/apache/kyuubi/engine/trino/WithTrinoContainerServer.scala b/externals/kyuubi-trino-engine/src/test/scala/org/apache/kyuubi/engine/trino/WithTrinoContainerServer.scala
index 6b751549e..f72164b42 100644
--- a/externals/kyuubi-trino-engine/src/test/scala/org/apache/kyuubi/engine/trino/WithTrinoContainerServer.scala
+++ b/externals/kyuubi-trino-engine/src/test/scala/org/apache/kyuubi/engine/trino/WithTrinoContainerServer.scala
@@ -25,39 +25,38 @@ import java.util.concurrent.TimeUnit
import scala.collection.JavaConverters._
+import com.dimafeng.testcontainers.TrinoContainer
+import com.dimafeng.testcontainers.scalatest.TestContainerForAll
import io.airlift.units.Duration
import io.trino.client.ClientSelectedRole
import io.trino.client.ClientSession
import okhttp3.OkHttpClient
-import org.testcontainers.containers.TrinoContainer
+import org.testcontainers.utility.DockerImageName
import org.apache.kyuubi.KyuubiFunSuite
import org.apache.kyuubi.config.KyuubiConf
-trait WithTrinoContainerServer extends KyuubiFunSuite {
+trait WithTrinoContainerServer extends KyuubiFunSuite with TestContainerForAll {
final val IMAGE_VERSION = 363
final val DOCKER_IMAGE_NAME = s"trinodb/trino:${IMAGE_VERSION}"
- val trino = new TrinoContainer(DOCKER_IMAGE_NAME)
+ override val containerDef = TrinoContainer.Def(DockerImageName.parse(DOCKER_IMAGE_NAME))
+
val kyuubiConf: KyuubiConf = KyuubiConf()
protected val catalog = "tpch"
protected val schema = "tiny"
- override def beforeAll(): Unit = {
- trino.start()
- super.beforeAll()
+ def withTrinoContainer(tc: TrinoContext => Unit): Unit = {
+ withContainers { trinoContainer =>
+ val connectionUrl = trinoContainer.jdbcUrl.replace("jdbc:trino", "http")
+ val trinoContext = TrinoContext(httpClient, session(connectionUrl))
+ tc(trinoContext)
+ }
}
- override def afterAll(): Unit = {
- trino.stop()
- super.afterAll()
- }
-
- lazy val connectionUrl = trino.getJdbcUrl.replace("jdbc:trino", "http")
-
- lazy val session = new ClientSession(
+ protected def session(connectionUrl: String): ClientSession = new ClientSession(
URI.create(connectionUrl),
"kyuubi_test",
Optional.empty(),
diff --git a/pom.xml b/pom.xml
index 9c1a7488c..c3437c07d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -137,7 +137,7 @@
false
2.1.11
4.1.3
- 1.16.2
+ 0.39.12
363
3.4.14
@@ -455,14 +455,14 @@
- org.testcontainers
- testcontainers
+ com.dimafeng
+ testcontainers-scala-scalatest_${scala.binary.version}
${testcontainers.version}
- org.testcontainers
- trino
+ com.dimafeng
+ testcontainers-scala-trino_${scala.binary.version}
${testcontainers.version}