You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2023/03/12 12:59:03 UTC

[shardingsphere] branch master updated: Refactor TransactionBaseE2EIT (#24563)

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

panjuan 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 231e3c4e05b Refactor TransactionBaseE2EIT (#24563)
231e3c4e05b is described below

commit 231e3c4e05b644755c308a91fc9ec996443088c7
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Sun Mar 12 20:58:53 2023 +0800

    Refactor TransactionBaseE2EIT (#24563)
---
 .../engine/base/TransactionBaseE2EIT.java          | 133 ++++++++++-----------
 1 file changed, 65 insertions(+), 68 deletions(-)

diff --git a/test/e2e/transaction/src/test/java/org/apache/shardingsphere/test/e2e/transaction/engine/base/TransactionBaseE2EIT.java b/test/e2e/transaction/src/test/java/org/apache/shardingsphere/test/e2e/transaction/engine/base/TransactionBaseE2EIT.java
index f40cddb61db..0ca02237d75 100644
--- a/test/e2e/transaction/src/test/java/org/apache/shardingsphere/test/e2e/transaction/engine/base/TransactionBaseE2EIT.java
+++ b/test/e2e/transaction/src/test/java/org/apache/shardingsphere/test/e2e/transaction/engine/base/TransactionBaseE2EIT.java
@@ -336,104 +336,101 @@ public abstract class TransactionBaseE2EIT {
                 return result;
             }
             if (ENV.getItEnvType() == TransactionE2EEnvTypeEnum.DOCKER) {
-                addTestParameters(currentTestCaseInfo, result);
+                result.addAll(getTestParameters(currentTestCaseInfo));
             }
             if (ENV.getItEnvType() == TransactionE2EEnvTypeEnum.NATIVE && "MySQL".equalsIgnoreCase(ENV.getNativeDatabaseType())) {
-                addParametersByVersions(ENV.getMysqlVersions(), result, currentTestCaseInfo);
+                result.addAll(getTestParameters(currentTestCaseInfo, ENV.getMysqlVersions()));
             }
             return result;
         }
-    
-        private void addTestParameters(final TransactionTestCaseRegistry currentTestCaseInfo, final Collection<TransactionTestParameter> testParams) {
-            if (TransactionTestConstants.MYSQL.equalsIgnoreCase(currentTestCaseInfo.getDbType())) {
-                addParametersByVersions(ENV.getMysqlVersions(), testParams, currentTestCaseInfo);
-            } else if (TransactionTestConstants.POSTGRESQL.equalsIgnoreCase(currentTestCaseInfo.getDbType())) {
-                addParametersByVersions(ENV.getPostgresqlVersions(), testParams, currentTestCaseInfo);
-            } else if (TransactionTestConstants.OPENGAUSS.equalsIgnoreCase(currentTestCaseInfo.getDbType())) {
-                addParametersByVersions(ENV.getOpenGaussVersions(), testParams, currentTestCaseInfo);
+        
+        private Collection<TransactionTestParameter> getTestParameters(final TransactionTestCaseRegistry registry) {
+            Collection<TransactionTestParameter> result = new LinkedList<>();
+            if (TransactionTestConstants.MYSQL.equalsIgnoreCase(registry.getDbType())) {
+                result.addAll(getTestParameters(registry, ENV.getMysqlVersions()));
+            } else if (TransactionTestConstants.POSTGRESQL.equalsIgnoreCase(registry.getDbType())) {
+                result.addAll(getTestParameters(registry, ENV.getPostgresqlVersions()));
+            } else if (TransactionTestConstants.OPENGAUSS.equalsIgnoreCase(registry.getDbType())) {
+                result.addAll(getTestParameters(registry, ENV.getOpenGaussVersions()));
             }
+            return result;
         }
-    
-        private void addParametersByVersions(final List<String> databaseVersion, final Collection<TransactionTestParameter> testParams, final TransactionTestCaseRegistry currentTestCaseInfo) {
-            for (String each : databaseVersion) {
-                testParams.addAll(addParametersByTestCaseClasses(each, currentTestCaseInfo));
-            }
+        
+        private Collection<TransactionTestParameter> getTestParameters(final TransactionTestCaseRegistry registry, final List<String> databaseVersions) {
+            return databaseVersions.stream().flatMap(each -> getTestParameters(registry, each).stream()).collect(Collectors.toList());
         }
-    
-        private Collection<TransactionTestParameter> addParametersByTestCaseClasses(final String version, final TransactionTestCaseRegistry currentTestCaseInfo) {
-            Map<String, TransactionTestParameter> testParams = new LinkedHashMap<>();
+        
+        private Collection<TransactionTestParameter> getTestParameters(final TransactionTestCaseRegistry registry, final String databaseVersion) {
+            Map<String, TransactionTestParameter> result = new LinkedHashMap<>();
             for (Class<? extends BaseTransactionTestCase> each : TEST_CASES) {
                 if (!ENV.getNeedToRunTestCases().isEmpty() && !ENV.getNeedToRunTestCases().contains(each.getSimpleName())) {
                     log.info("Collect transaction test case, need to run cases don't contain this, skip: {}.", each.getName());
                     continue;
                 }
-                TransactionTestCase annotation = each.getAnnotation(TransactionTestCase.class);
-                if (null == annotation) {
+                TransactionTestCase transactionTestCase = each.getAnnotation(TransactionTestCase.class);
+                if (null == transactionTestCase) {
                     log.info("Collect transaction test case, annotation is null, skip: {}.", each.getName());
                     continue;
                 }
-                Optional<String> dbType = Arrays.stream(annotation.dbTypes()).filter(currentTestCaseInfo.getDbType()::equalsIgnoreCase).findAny();
-                if (!dbType.isPresent()) {
+                Optional<String> databaseType = Arrays.stream(transactionTestCase.dbTypes()).filter(registry.getDbType()::equalsIgnoreCase).findAny();
+                if (!databaseType.isPresent()) {
                     log.info("Collect transaction test case, dbType is not matched, skip: {}.", each.getName());
                     continue;
                 }
-                Optional<String> runAdapters = Arrays.stream(annotation.adapters()).filter(currentTestCaseInfo.getRunningAdaptor()::equalsIgnoreCase).findAny();
+                Optional<String> runAdapters = Arrays.stream(transactionTestCase.adapters()).filter(registry.getRunningAdaptor()::equalsIgnoreCase).findAny();
                 if (!runAdapters.isPresent()) {
                     log.info("Collect transaction test case, runAdapter is not matched, skip: {}.", each.getName());
                     continue;
                 }
-                String scenario = annotation.scenario();
-                addParametersByTransactionTypes(version, currentTestCaseInfo, each, annotation, testParams, scenario);
+                setTestParameters(result, registry, databaseVersion, transactionTestCase, transactionTestCase.scenario(), each);
             }
-            return testParams.values();
+            return result.values();
         }
-    
-        private void addParametersByTransactionTypes(final String version, final TransactionTestCaseRegistry currentTestCaseInfo,
-                                                            final Class<? extends BaseTransactionTestCase> caseClass, final TransactionTestCase annotation,
-                                                            final Map<String, TransactionTestParameter> testParams, final String scenario) {
-            if (AdapterType.PROXY.getValue().equals(currentTestCaseInfo.getRunningAdaptor())) {
-                List<TransactionType> allowTransactionTypes = ENV.getAllowTransactionTypes().isEmpty() ? Arrays.stream(TransactionType.values()).collect(Collectors.toList())
+        
+        private void setTestParameters(final Map<String, TransactionTestParameter> testParams, final TransactionTestCaseRegistry registry, final String databaseVersion,
+                                       final TransactionTestCase transactionTestCase, final String scenario, final Class<? extends BaseTransactionTestCase> caseClass) {
+            if (AdapterType.PROXY.getValue().equals(registry.getRunningAdaptor())) {
+                List<TransactionType> allowedTransactionTypes = ENV.getAllowTransactionTypes().isEmpty() ? Arrays.stream(TransactionType.values()).collect(Collectors.toList())
                         : ENV.getAllowTransactionTypes().stream().map(TransactionType::valueOf).collect(Collectors.toList());
-                List<String> allowProviders = ENV.getAllowXAProviders().isEmpty() ? ALL_XA_PROVIDERS : ENV.getAllowXAProviders();
-                addParameters(version, currentTestCaseInfo, caseClass, allowTransactionTypes, allowProviders, testParams, scenario);
-            } else {
-                for (TransactionType each : annotation.transactionTypes()) {
-                    if (!ENV.getAllowTransactionTypes().isEmpty() && !ENV.getAllowTransactionTypes().contains(each.toString())) {
-                        log.info("Collect transaction test case, need to run transaction types don't contain this, skip: {}-{}.", caseClass.getName(), each);
-                        continue;
-                    }
-                    addParametersByTransactionProvidersInJDBC(version, currentTestCaseInfo, caseClass, each, testParams, scenario);
+                List<String> allowedProviders = ENV.getAllowXAProviders().isEmpty() ? ALL_XA_PROVIDERS : ENV.getAllowXAProviders();
+                setTestParameters(testParams, registry, databaseVersion, allowedTransactionTypes, allowedProviders, scenario, caseClass);
+                return;
+            }
+            for (TransactionType each : transactionTestCase.transactionTypes()) {
+                if (!ENV.getAllowTransactionTypes().isEmpty() && !ENV.getAllowTransactionTypes().contains(each.toString())) {
+                    log.info("Collect transaction test case, need to run transaction types don't contain this, skip: {}-{}.", caseClass.getName(), each);
+                    continue;
                 }
+                setTestParameters(testParams, registry, databaseVersion, each, scenario, caseClass);
             }
         }
-    
-        private void addParametersByTransactionProvidersInJDBC(final String version, final TransactionTestCaseRegistry currentTestCaseInfo,
-                                                                      final Class<? extends BaseTransactionTestCase> caseClass, final TransactionType each,
-                                                                      final Map<String, TransactionTestParameter> testParams, final String scenario) {
-            if (TransactionType.LOCAL.equals(each)) {
-                addParameters(version, currentTestCaseInfo, caseClass, Collections.singletonList(each), Collections.singletonList(""), testParams, scenario);
-            } else if (TransactionType.XA.equals(each)) {
-                List<String> allowProviders = ENV.getAllowXAProviders().isEmpty() ? ALL_XA_PROVIDERS : ENV.getAllowXAProviders();
-                for (String provider : allowProviders) {
-                    addParameters(version, currentTestCaseInfo, caseClass, Collections.singletonList(each), Collections.singletonList(provider), testParams, scenario);
+        
+        private void setTestParameters(final Map<String, TransactionTestParameter> testParams, final TransactionTestCaseRegistry registry, final String databaseVersion,
+                                       final TransactionType transactionType, final String scenario, final Class<? extends BaseTransactionTestCase> caseClass) {
+            if (TransactionType.LOCAL.equals(transactionType)) {
+                setTestParameters(testParams, registry, databaseVersion, Collections.singletonList(transactionType), Collections.singletonList(""), scenario, caseClass);
+                return;
+            }
+            if (TransactionType.XA.equals(transactionType)) {
+                for (String each : ENV.getAllowXAProviders().isEmpty() ? ALL_XA_PROVIDERS : ENV.getAllowXAProviders()) {
+                    setTestParameters(testParams, registry, databaseVersion, Collections.singletonList(transactionType), Collections.singletonList(each), scenario, caseClass);
                 }
             }
         }
-    
-        private void addParameters(final String version, final TransactionTestCaseRegistry currentTestCaseInfo,
-                                          final Class<? extends BaseTransactionTestCase> caseClass, final List<TransactionType> transactionTypes, final List<String> providers,
-                                          final Map<String, TransactionTestParameter> testParams, final String scenario) {
-            String uniqueKey = getUniqueKey(currentTestCaseInfo.getDbType(), currentTestCaseInfo.getRunningAdaptor(), transactionTypes, providers, scenario);
-            testParams.putIfAbsent(uniqueKey, new TransactionTestParameter(getSqlDatabaseType(currentTestCaseInfo.getDbType()), currentTestCaseInfo.getRunningAdaptor(), transactionTypes, providers,
-                    getStorageContainerImage(currentTestCaseInfo.getDbType(), version), scenario, new LinkedList<>()));
-            testParams.get(uniqueKey).getTransactionTestCaseClasses().add(caseClass);
+        
+        private void setTestParameters(final Map<String, TransactionTestParameter> testParams, final TransactionTestCaseRegistry registry, final String databaseVersion,
+                                       final List<TransactionType> transactionTypes, final List<String> providers, final String scenario, final Class<? extends BaseTransactionTestCase> caseClass) {
+            String key = getUniqueKey(registry.getDbType(), registry.getRunningAdaptor(), transactionTypes, providers, scenario);
+            testParams.putIfAbsent(key, new TransactionTestParameter(getDatabaseType(registry.getDbType()), registry.getRunningAdaptor(), transactionTypes, providers,
+                    getStorageContainerImageName(registry.getDbType(), databaseVersion), scenario, new LinkedList<>()));
+            testParams.get(key).getTransactionTestCaseClasses().add(caseClass);
         }
-    
-        private String getUniqueKey(final String dbType, final String runningAdapter, final List<TransactionType> transactionTypes, final List<String> providers, final String scenario) {
-            return dbType + File.separator + runningAdapter + File.separator + transactionTypes + File.separator + providers + File.separator + scenario;
+        
+        private String getUniqueKey(final String databaseType, final String runningAdapter, final List<TransactionType> transactionTypes, final List<String> providers, final String scenario) {
+            return String.join(File.separator, databaseType, runningAdapter, transactionTypes.toString(), providers.toString(), scenario);
         }
-    
-        private DatabaseType getSqlDatabaseType(final String databaseType) {
+        
+        private DatabaseType getDatabaseType(final String databaseType) {
             switch (databaseType) {
                 case TransactionTestConstants.MYSQL:
                     return new MySQLDatabaseType();
@@ -445,14 +442,14 @@ public abstract class TransactionBaseE2EIT {
                     throw new UnsupportedOperationException(String.format("Unsupported database type `%s`.", databaseType));
             }
         }
-    
-        private String getStorageContainerImage(final String databaseType, final String version) {
+        
+        private String getStorageContainerImageName(final String databaseType, final String databaseVersion) {
             switch (databaseType) {
                 case TransactionTestConstants.MYSQL:
-                    return "mysql/mysql-server:" + version;
+                    return "mysql/mysql-server:" + databaseVersion;
                 case TransactionTestConstants.POSTGRESQL:
                 case TransactionTestConstants.OPENGAUSS:
-                    return version;
+                    return databaseVersion;
                 default:
                     throw new UnsupportedOperationException(String.format("Unsupported database type `%s`.", databaseType));
             }