This is an automated email from the ASF dual-hosted git repository.

diqiu50 pushed a commit to branch branch-trino-smv
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/branch-trino-smv by this push:
     new 457edb955e [#9720] feat(trino-connector): Trino integration tests 
support specifying the version of the testing Trino environment (#9752)
457edb955e is described below

commit 457edb955eee874753e6eb6c8c8ffa28f359e6ae
Author: qbhan <[email protected]>
AuthorDate: Fri Jan 23 12:01:24 2026 +0800

    [#9720] feat(trino-connector): Trino integration tests support specifying 
the version of the testing Trino environment (#9752)
    
    ### What changes were proposed in this pull request?
    `--trino_version` specify the trino version.
    `--trino_connector_dir` specify the trino connector JAR files path.
    
    
    ### Why are the changes needed?
    Fix: #9720
    
    ### Does this PR introduce _any_ user-facing change?
    No
    
    ### How was this patch tested?
    local tests
---
 docs/how-to-test.md                                |  4 +
 .../docker-script/docker-compose.yaml              |  8 +-
 .../init/trino/config/catalog/gravitino.properties |  1 +
 .../docker-script/init/trino/init.sh               |  2 +-
 .../test/container/TrinoITContainers.java          | 16 +++-
 .../connector/integration/test/TrinoQueryIT.java   |  8 +-
 .../integration/test/TrinoQueryITBase.java         | 14 +++-
 .../integration/test/TrinoQueryTestTool.java       | 69 +++++++++++-----
 .../trino-test-tools/run_test_with_versions.sh     | 92 ++++++++++++++++++++++
 9 files changed, 182 insertions(+), 32 deletions(-)

diff --git a/docs/how-to-test.md b/docs/how-to-test.md
index dfaf63fb62..fc8591889a 100644
--- a/docs/how-to-test.md
+++ b/docs/how-to-test.md
@@ -66,6 +66,10 @@ To deploy the Gravitino server locally to run the 
integration tests, follow thes
 4. Use the `bash 
trino-connector/integration-test/trino-test-tools/trino_test.sh` command to run 
all the
    Trino test sets in the 
`trino-connector/integration-test/src/test/resources/trino-ci-testset/testsets` 
directory.
    Specify the `--trino_worker_num` parameter to make the Trino test sets run 
in a distributed environment.
+   Specify the `--trino_version` parameter to make the Trino test sets run 
with specific trino version.
+   Specify the `--trino_connector_dir` parameter to run Trino tests using the 
JAR files located in the `gravitino-trino-connector` plugin directory.
+   Alternatively, use `bash 
trino-connector/integration-test/trino-test-tools/run_test_with_versions.sh` 
command to execute 
+   tests across different Trino versions. 
 
 ## Skip tests
 
diff --git a/integration-test-common/docker-script/docker-compose.yaml 
b/integration-test-common/docker-script/docker-compose.yaml
index 1620b53a7e..7b3d46b89e 100644
--- a/integration-test-common/docker-script/docker-compose.yaml
+++ b/integration-test-common/docker-script/docker-compose.yaml
@@ -79,7 +79,7 @@ services:
       retries: 5
 
   trino:
-    image: trinodb/trino:435
+    image: trinodb/trino:${TRINO_VERSION:-435}
     networks:
       - trino-net
     container_name: trino-ci-trino
@@ -94,7 +94,7 @@ services:
     entrypoint:  /bin/bash /tmp/trino/init.sh
     volumes:
       - ./init/trino:/tmp/trino
-      - 
../../trino-connector/trino-connector/build/libs:/usr/lib/trino/plugin/gravitino
+      - 
${GRAVITINO_TRINO_CONNECTOR_DIR:-../../trino-connector/trino-connector/build/libs}:/usr/lib/trino/plugin/gravitino
     extra_hosts:
       - "host.docker.internal:host-gateway"
     healthcheck:
@@ -113,7 +113,7 @@ services:
         condition: service_healthy
 
   trino-worker:
-    image: trinodb/trino:435
+    image: trinodb/trino:${TRINO_VERSION:-435}
     networks:
       - trino-net
     deploy:
@@ -128,7 +128,7 @@ services:
     entrypoint:  /bin/bash /tmp/trino/init.sh
     volumes:
       - ./init/trino:/tmp/trino
-      - 
../../trino-connector/trino-connector/build/libs:/usr/lib/trino/plugin/gravitino
+      - 
${GRAVITINO_TRINO_CONNECTOR_DIR:-../../trino-connector/trino-connector/build/libs}:/usr/lib/trino/plugin/gravitino
     extra_hosts:
       - "host.docker.internal:host-gateway"
     depends_on:
diff --git 
a/integration-test-common/docker-script/init/trino/config/catalog/gravitino.properties
 
b/integration-test-common/docker-script/init/trino/config/catalog/gravitino.properties
index 990ee0b147..d84f93364c 100644
--- 
a/integration-test-common/docker-script/init/trino/config/catalog/gravitino.properties
+++ 
b/integration-test-common/docker-script/init/trino/config/catalog/gravitino.properties
@@ -20,3 +20,4 @@
 connector.name = gravitino
 gravitino.uri = http://GRAVITINO_HOST_IP:GRAVITINO_HOST_PORT
 gravitino.metalake = GRAVITINO_METALAKE_NAME
+gravitino.trino.skip-version-validation=true
diff --git a/integration-test-common/docker-script/init/trino/init.sh 
b/integration-test-common/docker-script/init/trino/init.sh
index f266ae8c76..385c06e8f5 100644
--- a/integration-test-common/docker-script/init/trino/init.sh
+++ b/integration-test-common/docker-script/init/trino/init.sh
@@ -28,7 +28,7 @@ cp "$trino_conf_dir/config/node.properties" 
/etc/trino/node.properties
 cp "$trino_conf_dir/config/catalog/gravitino.properties" 
/etc/trino/catalog/gravitino.properties
 
 # Copy the MYSQL driver to iceberg connector
-cp /usr/lib/trino/plugin/mysql/mysql-connector-j-8.2.0.jar 
/usr/lib/trino/plugin/iceberg/
+cp /usr/lib/trino/plugin/mysql/*mysql-connector-j-*.jar 
/usr/lib/trino/plugin/iceberg/
 
 # Update `gravitino.uri = http://GRAVITINO_HOST_IP:GRAVITINO_HOST_PORT` in the 
`conf/catalog/gravitino.properties`
 sed -i 
"s/GRAVITINO_HOST_IP:GRAVITINO_HOST_PORT/${GRAVITINO_HOST_IP}:${GRAVITINO_HOST_PORT}/g"
 /etc/trino/catalog/gravitino.properties
diff --git 
a/integration-test-common/src/test/java/org/apache/gravitino/integration/test/container/TrinoITContainers.java
 
b/integration-test-common/src/test/java/org/apache/gravitino/integration/test/container/TrinoITContainers.java
index cb1aed1d68..b26984c6d2 100644
--- 
a/integration-test-common/src/test/java/org/apache/gravitino/integration/test/container/TrinoITContainers.java
+++ 
b/integration-test-common/src/test/java/org/apache/gravitino/integration/test/container/TrinoITContainers.java
@@ -49,19 +49,29 @@ public class TrinoITContainers implements AutoCloseable {
   }
 
   public void launch(int gravitinoServerPort) throws Exception {
-    launch(gravitinoServerPort, "hive2", false, 0);
+    launch(gravitinoServerPort, "hive2", false, null, null, null);
   }
 
   public void launch(
       int gravitinoServerPort,
       String hiveRuntimeVersion,
       boolean isTrinoConnectorTest,
-      int trinoWorkerNum)
+      Integer trinoWorkerNum,
+      Integer trinoVersion,
+      String trinoConnectorDir)
       throws Exception {
     shutdown();
 
     Map<String, String> env = new HashMap<>();
-    env.put("TRINO_WORKER_NUM", String.valueOf(trinoWorkerNum));
+    if (trinoWorkerNum != null) {
+      env.put("TRINO_WORKER_NUM", String.valueOf(trinoWorkerNum));
+    }
+    if (trinoVersion != null) {
+      env.put("TRINO_VERSION", String.valueOf(trinoVersion));
+    }
+    if (trinoConnectorDir != null) {
+      env.put("GRAVITINO_TRINO_CONNECTOR_DIR", trinoConnectorDir);
+    }
     env.put("GRAVITINO_SERVER_PORT", String.valueOf(gravitinoServerPort));
     env.put("HIVE_RUNTIME_VERSION", hiveRuntimeVersion);
     env.put("TRINO_CONNECTOR_TEST", String.valueOf(isTrinoConnectorTest));
diff --git 
a/trino-connector/integration-test/src/test/java/org/apache/gravitino/trino/connector/integration/test/TrinoQueryIT.java
 
b/trino-connector/integration-test/src/test/java/org/apache/gravitino/trino/connector/integration/test/TrinoQueryIT.java
index d4e6e2dad0..811e8229f7 100644
--- 
a/trino-connector/integration-test/src/test/java/org/apache/gravitino/trino/connector/integration/test/TrinoQueryIT.java
+++ 
b/trino-connector/integration-test/src/test/java/org/apache/gravitino/trino/connector/integration/test/TrinoQueryIT.java
@@ -71,7 +71,11 @@ public class TrinoQueryIT extends TrinoQueryITBase {
 
   static TrinoQueryITBase trinoQueryITBase;
 
-  static int trinoWorkerNum = 0;
+  static Integer trinoWorkerNum;
+
+  static Integer trinoVersion;
+
+  static String trinoConnectorDir;
 
   static {
     testsetsDir = 
TrinoQueryIT.class.getClassLoader().getResource("trino-ci-testset").getPath();
@@ -80,7 +84,7 @@ public class TrinoQueryIT extends TrinoQueryITBase {
 
   @BeforeAll
   public void setup() throws Exception {
-    trinoQueryITBase = new TrinoQueryITBase(trinoWorkerNum);
+    trinoQueryITBase = new TrinoQueryITBase(trinoWorkerNum, trinoVersion, 
trinoConnectorDir);
     trinoQueryITBase.setup();
     cleanupTestEnv();
 
diff --git 
a/trino-connector/integration-test/src/test/java/org/apache/gravitino/trino/connector/integration/test/TrinoQueryITBase.java
 
b/trino-connector/integration-test/src/test/java/org/apache/gravitino/trino/connector/integration/test/TrinoQueryITBase.java
index 5580ffbd36..f2197c0e57 100644
--- 
a/trino-connector/integration-test/src/test/java/org/apache/gravitino/trino/connector/integration/test/TrinoQueryITBase.java
+++ 
b/trino-connector/integration-test/src/test/java/org/apache/gravitino/trino/connector/integration/test/TrinoQueryITBase.java
@@ -70,12 +70,18 @@ public class TrinoQueryITBase {
 
   private static BaseIT baseIT;
 
-  protected int trinoWorkerNum = 0;
+  protected Integer trinoWorkerNum;
+
+  protected Integer trinoVersion;
+
+  protected String trinoConnectorDir;
 
   public TrinoQueryITBase() {}
 
-  public TrinoQueryITBase(int trinoWorkerNum) {
+  public TrinoQueryITBase(Integer trinoWorkerNum, Integer trinoVersion, String 
trinoConnectorDir) {
     this.trinoWorkerNum = trinoWorkerNum;
+    this.trinoVersion = trinoVersion;
+    this.trinoConnectorDir = trinoConnectorDir;
   }
 
   private void setEnv() throws Exception {
@@ -104,7 +110,9 @@ public class TrinoQueryITBase {
           baseIT.getGravitinoServerPort(),
           hiveRuntimeVersion,
           isTrinoConnectorTest,
-          trinoWorkerNum);
+          trinoWorkerNum,
+          trinoVersion,
+          trinoConnectorDir);
 
       trinoUri = trinoITContainers.getTrinoUri();
       hiveMetastoreUri = trinoITContainers.getHiveMetastoreUri();
diff --git 
a/trino-connector/integration-test/src/test/java/org/apache/gravitino/trino/connector/integration/test/TrinoQueryTestTool.java
 
b/trino-connector/integration-test/src/test/java/org/apache/gravitino/trino/connector/integration/test/TrinoQueryTestTool.java
index 872b3e1373..13a4bf8ed3 100644
--- 
a/trino-connector/integration-test/src/test/java/org/apache/gravitino/trino/connector/integration/test/TrinoQueryTestTool.java
+++ 
b/trino-connector/integration-test/src/test/java/org/apache/gravitino/trino/connector/integration/test/TrinoQueryTestTool.java
@@ -32,7 +32,7 @@ public class TrinoQueryTestTool {
 
   public static void main(String[] args) throws Exception {
     Options options = new Options();
-
+    boolean isFailed = false;
     try {
       options.addOption(
           "auto",
@@ -92,6 +92,16 @@ public class TrinoQueryTestTool {
               + "Use a distributed cluster for integration testing when 
necessary (value > 0), "
               + "otherwise fall back to a single-node setup with combined 
coordinator-worker roles.");
 
+      options.addOption(
+          "trino_version", true, "Specify the Trino version to test, the 
default value is 435.");
+
+      options.addOption(
+          "trino_connector_dir",
+          true,
+          "Specify the Gravitino connector JAR path. "
+              + "The JAR file under ${trino_connector_dir} will be copied into 
the test image, "
+              + "the default value is 
${project_root}/trino-connector/trino-connector/build/libs.");
+
       options.addOption("help", false, "Print this help message");
 
       CommandLineParser parser = new PosixParser();
@@ -106,6 +116,10 @@ public class TrinoQueryTestTool {
                 + "TrinoTestTool --auto=all\n\n"
                 + "Run all the testers in the 'testsets' directory with a 
distributed cluster:\n"
                 + "TrinoTestTool --auto=all --trino_worker_num=3\n\n"
+                + "Run all the testers in the 'testsets' directory with 
specific trino version:\n"
+                + "TrinoTestTool --auto=all --trino_version=435\n\n"
+                + "Run all the testers in the 'testsets' directory with 
specific trino connector JAR files:\n"
+                + "TrinoTestTool --auto=all 
--trino_connector_dir=./trino-connector/libs\n\n"
                 + "Run all the tpch testset's testers in the 'testsets/tpch' 
directory:\n"
                 + "TrinoTestTool --testset=tpch --auto=all\n\n"
                 + "Run the tester 'testsets/tpch/00005.sql' in the tpch 
testset under hive catalog :\n"
@@ -221,22 +235,9 @@ public class TrinoQueryTestTool {
         }
       }
 
-      String trinoWorkerNumConfig = 
commandLine.getOptionValue("trino_worker_num", "0");
-      try {
-        int trinoWorkerNum = Integer.parseInt(trinoWorkerNumConfig);
-        if (trinoWorkerNum < 0) {
-          System.out.println(
-              "The value of trino_worker_num must be greater than zero, 
current value is: "
-                  + trinoWorkerNumConfig);
-          System.exit(1);
-        }
-        TrinoQueryIT.trinoWorkerNum = trinoWorkerNum;
-      } catch (Exception e) {
-        System.out.println(
-            "The value of trino_worker_num must be an integer value, current 
value is: "
-                + trinoWorkerNumConfig);
-        System.exit(1);
-      }
+      TrinoQueryIT.trinoWorkerNum = extractIntValue(commandLine, 
"trino_worker_num");
+      TrinoQueryIT.trinoVersion = extractIntValue(commandLine, 
"trino_version");
+      TrinoQueryIT.trinoConnectorDir = 
commandLine.getOptionValue("trino_connector_dir");
 
       checkEnv();
 
@@ -263,10 +264,40 @@ public class TrinoQueryTestTool {
           testerRunner.totalCount, testerRunner.passCount, 
testerRunner.generateTestStatus());
     } catch (Exception e) {
       System.out.println(e.getMessage());
-      System.exit(-1);
+      isFailed = true;
     } finally {
-      TrinoQueryIT.cleanup();
+      try {
+        TrinoQueryIT.cleanup();
+      } catch (Exception ex) {
+        System.out.println("Cleanup failed during error handling: " + 
ex.getMessage());
+      }
+      if (isFailed) {
+        System.exit(-1);
+      }
+    }
+  }
+
+  private static Integer extractIntValue(CommandLine commandLine, String key) {
+    String valueConfig = commandLine.getOptionValue(key);
+    if (valueConfig != null) {
+      try {
+        int value = Integer.parseInt(valueConfig);
+        if (value < 0) {
+          System.out.println(
+              "The value of "
+                  + key
+                  + " must be greater than zero, current value is: "
+                  + valueConfig);
+          System.exit(1);
+        }
+        return value;
+      } catch (Exception e) {
+        System.out.println(
+            "The value of " + key + " must be an integer value, current value 
is: " + valueConfig);
+        System.exit(1);
+      }
     }
+    return null;
   }
 
   private static void checkEnv() {
diff --git 
a/trino-connector/integration-test/trino-test-tools/run_test_with_versions.sh 
b/trino-connector/integration-test/trino-test-tools/run_test_with_versions.sh
new file mode 100755
index 0000000000..7061d0ad70
--- /dev/null
+++ 
b/trino-connector/integration-test/trino-test-tools/run_test_with_versions.sh
@@ -0,0 +1,92 @@
+#!/bin/bash
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#  http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# This script is used to execute tests for the Trino connector across 
different Trino versions.
+# It wraps the `trino_test.sh` script and iterates through a configured map of 
Trino versions
+# to connector modules.
+#
+# Arguments:
+# --trino_versions_map: Space-separated list of "version:module" pairs.
+#                       Defaults to "435:trino-connector" if not provided.
+# --trino_test_args:    Arguments passed directly to the underlying test 
script.
+#
+# Example:
+# ./run_test_with_versions.sh \
+#   --trino_versions_map="435:trino-connector 478:trino-connector-470-478" \
+#   --trino_test_args="--auto=all"
+#
+# This configuration will run tests for:
+# - Trino 435 using the connector in 'trino-connector' directory
+# - Trino 478 using the connector in 'trino-connector-470-478' directory
+# And pass "--auto=all" to the underlying test script for each version.
+
+cd "$(dirname "$0")"
+
+# Set the Gravitino server directories
+GRAVITINO_HOME_DIR=../../../
+GRAVITINO_HOME_DIR=`realpath $GRAVITINO_HOME_DIR`
+
+# Parse arguments
+trino_versions_map=""
+trino_test_args=""
+
+while [[ $# -gt 0 ]]; do
+  case $1 in
+    --trino_versions_map=*)
+      trino_versions_map="${1#*=}"
+      shift
+      ;;
+    --trino_test_args=*)
+      trino_test_args="${1#*=}"
+      shift
+      ;;
+    *)
+      echo "Unknown argument: $1"
+      exit 1
+      ;;
+  esac
+done
+
+if [ -z "$trino_versions_map" ]; then
+  trino_versions_map="435:trino-connector"
+fi
+
+for entry in $trino_versions_map; do
+    trino_version=${entry%%:*}
+    trino_module_name=${entry##*:}
+    
+    
trino_connector_dir="$GRAVITINO_HOME_DIR/trino-connector/$trino_module_name/build/libs"
+    
+    # Combine test arguments with version-specific arguments
+    args="$trino_test_args --trino_version=${trino_version} 
--trino_connector_dir=${trino_connector_dir}"
+    
+    # execute test
+    echo "Running test for Trino version: $trino_version with connector: 
$trino_module_name"
+    echo "The args: $args"
+    
+    sleep 5
+    
$GRAVITINO_HOME_DIR/trino-connector/integration-test/trino-test-tools/trino_test.sh
 $args
+    
+    if [ $? -ne 0 ]; then
+        echo "Test failed for Trino version $trino_version"
+        exit 1
+    fi
+done
+
+echo "Test success"

Reply via email to