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

zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 49796f6b10b Refactor TransactionE2EEnvironment (#36708)
49796f6b10b is described below

commit 49796f6b10b4b0b746d8344e27957d1e8047824d
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Sep 25 20:30:06 2025 +0800

    Refactor TransactionE2EEnvironment (#36708)
    
    * Refactor TransactionE2EEnvironment
    
    * Refactor TransactionE2EEnvironment
    
    * Refactor TransactionE2EEnvironment
---
 .../engine/base/TransactionBaseE2EIT.java          |  8 ++--
 .../transaction/env/TransactionE2EEnvironment.java | 53 +++++++---------------
 .../src/test/resources/env/e2e-env.properties      | 27 ++++++-----
 3 files changed, 37 insertions(+), 51 deletions(-)

diff --git 
a/test/e2e/operation/transaction/src/test/java/org/apache/shardingsphere/test/e2e/operation/transaction/engine/base/TransactionBaseE2EIT.java
 
b/test/e2e/operation/transaction/src/test/java/org/apache/shardingsphere/test/e2e/operation/transaction/engine/base/TransactionBaseE2EIT.java
index 7e283b3ce0f..bce77a3aa62 100644
--- 
a/test/e2e/operation/transaction/src/test/java/org/apache/shardingsphere/test/e2e/operation/transaction/engine/base/TransactionBaseE2EIT.java
+++ 
b/test/e2e/operation/transaction/src/test/java/org/apache/shardingsphere/test/e2e/operation/transaction/engine/base/TransactionBaseE2EIT.java
@@ -267,8 +267,8 @@ public abstract class TransactionBaseE2EIT {
      */
     public void addResource(final Connection connection, final String 
databaseName, final TransactionContainerComposer containerComposer) throws 
SQLException {
         String addSourceResource = commonSQL.getSourceAddNewResourceTemplate()
-                .replace("${user}", 
ENV.getActualDataSourceUsername(containerComposer.getDatabaseType()))
-                .replace("${password}", 
ENV.getActualDataSourcePassword(containerComposer.getDatabaseType()))
+                .replace("${user}", ENV.getActualDataSourceUsername())
+                .replace("${password}", ENV.getActualDataSourcePassword())
                 .replace("${ds2}", getActualJdbcUrlTemplate(databaseName, 
containerComposer));
         executeWithLog(connection, addSourceResource);
         int resourceCount = countWithLog("SHOW STORAGE UNITS FROM 
sharding_db", containerComposer);
@@ -329,7 +329,7 @@ public abstract class TransactionBaseE2EIT {
     }
     
     private static boolean isEnabled() {
-        return !ENV.getNeedToRunTestCases().isEmpty() && null != ENV.getType();
+        return !ENV.getScenarios().isEmpty() && null != ENV.getType();
     }
     
     private static final class TestCaseArgumentsProvider implements 
ArgumentsProvider {
@@ -373,7 +373,7 @@ public abstract class TransactionBaseE2EIT {
                 log.warn("Transaction test cases are empty.");
             }
             for (Class<? extends BaseTransactionTestCase> each : TEST_CASES) {
-                if (!ENV.getNeedToRunTestCases().isEmpty() && 
!ENV.getNeedToRunTestCases().contains(each.getSimpleName())) {
+                if (!ENV.getScenarios().isEmpty() && 
!ENV.getScenarios().contains(each.getSimpleName())) {
                     log.info("Collect transaction test case, need to run cases 
don't contain this, skip: {}.", each.getName());
                     continue;
                 }
diff --git 
a/test/e2e/operation/transaction/src/test/java/org/apache/shardingsphere/test/e2e/operation/transaction/env/TransactionE2EEnvironment.java
 
b/test/e2e/operation/transaction/src/test/java/org/apache/shardingsphere/test/e2e/operation/transaction/env/TransactionE2EEnvironment.java
index 132e19d1b7b..69c791c4144 100644
--- 
a/test/e2e/operation/transaction/src/test/java/org/apache/shardingsphere/test/e2e/operation/transaction/env/TransactionE2EEnvironment.java
+++ 
b/test/e2e/operation/transaction/src/test/java/org/apache/shardingsphere/test/e2e/operation/transaction/env/TransactionE2EEnvironment.java
@@ -19,13 +19,11 @@ package 
org.apache.shardingsphere.test.e2e.operation.transaction.env;
 
 import com.google.common.base.Strings;
 import lombok.Getter;
-import lombok.extern.slf4j.Slf4j;
+import 
org.apache.shardingsphere.database.connector.core.spi.DatabaseTypedSPILoader;
 import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
 import 
org.apache.shardingsphere.test.e2e.env.container.constants.ProxyContainerConstants;
 import 
org.apache.shardingsphere.test.e2e.env.container.constants.StorageContainerConstants;
-import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.dialect.mysql.MySQLStorageContainerCreateOption;
-import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.dialect.opengauss.OpenGaussStorageContainerCreateOption;
-import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.dialect.postgresql.PostgreSQLStorageContainerCreateOption;
+import 
org.apache.shardingsphere.test.e2e.env.container.storage.option.StorageContainerOption;
 import org.apache.shardingsphere.test.e2e.env.runtime.type.RunEnvironment.Type;
 import 
org.apache.shardingsphere.test.e2e.operation.transaction.env.enums.TransactionTestCaseRegistry;
 
@@ -39,13 +37,14 @@ import java.util.Properties;
 import java.util.stream.Collectors;
 
 @Getter
-@Slf4j
 public final class TransactionE2EEnvironment {
     
     private static final TransactionE2EEnvironment INSTANCE = new 
TransactionE2EEnvironment();
     
     private final Properties props;
     
+    private final List<String> scenarios;
+    
     private final Type type;
     
     private final List<String> portBindings;
@@ -56,8 +55,6 @@ public final class TransactionE2EEnvironment {
     
     private final List<String> openGaussVersions;
     
-    private final List<String> needToRunTestCases;
-    
     private final List<String> allowTransactionTypes;
     
     private final List<String> allowXAProviders;
@@ -66,15 +63,14 @@ public final class TransactionE2EEnvironment {
     
     private TransactionE2EEnvironment() {
         props = loadProperties();
-        type = props.containsKey("transaction.e2e.env.type") ? null : 
Type.valueOf(props.getProperty("transaction.e2e.env.type").toUpperCase());
-        portBindings = splitProperty("transaction.e2e.proxy.port.bindings");
-        mysqlVersions = splitProperty("transaction.e2e.docker.mysql.version");
-        postgresqlVersions = 
splitProperty("transaction.e2e.docker.postgresql.version");
-        openGaussVersions = 
splitProperty("transaction.e2e.docker.opengauss.version");
-        needToRunTestCases = splitProperty("transaction.e2e.env.cases");
+        scenarios = splitProperty("e2e.scenarios");
+        type = props.containsKey("e2e.run.type") ? null : 
Type.valueOf(props.getProperty("e2e.run.type").toUpperCase());
+        portBindings = splitProperty("e2e.proxy.port.bindings");
+        mysqlVersions = splitProperty("e2e.artifact.database.mysql.image");
+        postgresqlVersions = 
splitProperty("e2e.artifact.database.postgresql.image");
+        openGaussVersions = 
splitProperty("e2e.artifact.database.opengauss.image");
         allowTransactionTypes = 
splitProperty("transaction.e2e.env.transtypes");
         allowXAProviders = splitProperty("transaction.e2e.env.xa.providers");
-        log.info("Loaded properties, allowTransactionTypes:{}, 
allowXAProviders:{}", allowTransactionTypes, allowXAProviders);
         transactionTestCaseRegistryMap = initTransactionTestCaseRegistryMap();
     }
     
@@ -108,43 +104,28 @@ public final class TransactionE2EEnvironment {
      *
      * @param databaseType database type
      * @return default port
-     * @throws UnsupportedOperationException unsupported operation exception
      */
     public int getActualDataSourceDefaultPort(final DatabaseType databaseType) 
{
-        switch (databaseType.getType()) {
-            case "MySQL":
-                return 
Integer.parseInt(props.getOrDefault("transaction.e2e.native.mysql.port", new 
MySQLStorageContainerCreateOption().getPort()).toString());
-            case "PostgreSQL":
-                return 
Integer.parseInt(props.getOrDefault("transaction.e2e.native.postgresql.port", 
new PostgreSQLStorageContainerCreateOption().getPort()).toString());
-            case "openGauss":
-                return 
Integer.parseInt(props.getOrDefault("transaction.e2e.native.opengauss.port", 
new OpenGaussStorageContainerCreateOption().getPort()).toString());
-            default:
-                throw new 
UnsupportedOperationException(String.format("Unsupported database type: `%s`", 
databaseType.getType()));
-        }
+        int defaultPort = 
DatabaseTypedSPILoader.getService(StorageContainerOption.class, 
databaseType).getCreateOption().getPort();
+        return Integer.parseInt(props.getOrDefault("e2e.native.storage.port", 
defaultPort).toString());
     }
     
     /**
      * Get actual data source username.
      *
-     * @param databaseType database type
      * @return actual data source username
      */
-    public String getActualDataSourceUsername(final DatabaseType databaseType) 
{
-        return type == Type.NATIVE
-                ? 
String.valueOf(props.getOrDefault(String.format("transaction.e2e.native.%s.username",
 databaseType.getType().toLowerCase()), ProxyContainerConstants.USER))
-                : StorageContainerConstants.OPERATION_USER;
+    public String getActualDataSourceUsername() {
+        return type == Type.NATIVE ? 
String.valueOf(props.getOrDefault("e2e.native.storage.username", 
ProxyContainerConstants.USER)) : StorageContainerConstants.OPERATION_USER;
     }
     
     /**
      * Get actual data source password.
      *
-     * @param databaseType database type
-     * @return actual data source username
+     * @return actual data source password
      */
-    public String getActualDataSourcePassword(final DatabaseType databaseType) 
{
-        return type == Type.NATIVE
-                ? 
props.getOrDefault(String.format("transaction.e2e.native.%s.password", 
databaseType.getType().toLowerCase()), 
ProxyContainerConstants.PASSWORD).toString()
-                : StorageContainerConstants.OPERATION_PASSWORD;
+    public String getActualDataSourcePassword() {
+        return type == Type.NATIVE ? 
props.getOrDefault("e2e.native.storage.password", 
ProxyContainerConstants.PASSWORD).toString() : 
StorageContainerConstants.OPERATION_PASSWORD;
     }
     
     /**
diff --git 
a/test/e2e/operation/transaction/src/test/resources/env/e2e-env.properties 
b/test/e2e/operation/transaction/src/test/resources/env/e2e-env.properties
index 65f115246b6..91230d650c7 100644
--- a/test/e2e/operation/transaction/src/test/resources/env/e2e-env.properties
+++ b/test/e2e/operation/transaction/src/test/resources/env/e2e-env.properties
@@ -14,21 +14,26 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-# transaction.e2e.type=DOCKER,NATIVE
-transaction.e2e.env.type=
-# transaction.e2e.proxy.binding.ports=63308:3308
-# transaction.e2e.env.cases=ClassicTransferTestCase
-transaction.e2e.env.cases=TransactionDeadlockTestCase, 
MultiJDBCConnectionsTestCase, MultiTransactionInConnectionTestCase, 
MultiOperationsCommitAndRollbackTestCase, MySQLAutoCommitTestCase, 
PostgreSQLAutoCommitTestCase, BroadcastTableTransactionTestCase, 
ExceptionInTransactionTestCase, MultiTableCommitAndRollbackTestCase, 
SingleTableCommitAndRollbackTestCase, MySQLSetReadOnlyTestCase, 
MySQLLocalTruncateTestCase, MySQLXATruncateTestCase, OpenGaussCursorTestCase, 
NestedTransactionTestCase, [...]
+
+#e2e.scenarios=ClassicTransferTestCase
+e2e.scenarios=TransactionDeadlockTestCase, MultiJDBCConnectionsTestCase, 
MultiTransactionInConnectionTestCase, MultiOperationsCommitAndRollbackTestCase, 
MySQLAutoCommitTestCase, PostgreSQLAutoCommitTestCase, 
BroadcastTableTransactionTestCase, ExceptionInTransactionTestCase, 
MultiTableCommitAndRollbackTestCase, SingleTableCommitAndRollbackTestCase, 
MySQLSetReadOnlyTestCase, MySQLLocalTruncateTestCase, MySQLXATruncateTestCase, 
OpenGaussCursorTestCase, NestedTransactionTestCase, ReadwriteSp [...]
+
+#e2e.run.type=DOCKER,NATIVE
+e2e.run.type=
+
 # transaction.e2e.env.transtypes=LOCAL, XA, BASE
 transaction.e2e.env.transtypes=LOCAL, XA
 # transaction.e2e.env.xa.providers=Atomikos, Narayana
 transaction.e2e.env.xa.providers=Atomikos, Narayana
-# transaction.e2e.docker.mysql.version=mysql:5.7,mysql:8.0
-transaction.e2e.docker.mysql.version=
-# 
transaction.e2e.docker.postgresql.version=postgres:10-alpine,postgres:11-alpine,postgres:12-alpine,postgres:13-alpine,postgres:14-alpine
-transaction.e2e.docker.postgresql.version=
-# transaction.e2e.docker.opengauss.version=opengauss/opengauss:3.1.0
-transaction.e2e.docker.opengauss.version=
+
+#e2e.proxy.port.bindings=63308:3308
+
+#e2e.artifact.database.mysql.image=mysql:5.7,mysql:8.0
+e2e.artifact.database.mysql.image=
+#e2e.artifact.database.postgresql.image=postgres:10-alpine,postgres:11-alpine,postgres:12-alpine,postgres:13-alpine,postgres:14-alpine
+e2e.artifact.database.postgresql.image=
+#e2e.artifact.database.opengauss.image=opengauss/opengauss:3.1.0
+e2e.artifact.database.opengauss.image=
 
 e2e.native.storage.host=127.0.0.1
 e2e.native.storage.port=3306

Reply via email to