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

duanzhengqiang 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 5160ad4f68b Optimize the code for testing sqlParser using MySQL Test 
Suite. (#25574)
5160ad4f68b is described below

commit 5160ad4f68b8f9c70df27b66c613b4f2c57f6247
Author: Cong Hu <[email protected]>
AuthorDate: Thu May 11 18:17:05 2023 +0800

    Optimize the code for testing sqlParser using MySQL Test Suite. (#25574)
    
    * Optimize the code for testing sqlParser using MySQL Test Suite.
    
    * Modified the code as per the suggestion.
    
    * Modified the code as per the suggestion.
---
 .../it/mysql/external/ExternalMySQLParserIT.java   |   9 ++
 .../external/ExternalPostgreSQLParserIT.java       |   9 ++
 .../sql/parser/external/ExternalSQLParserIT.java   |  33 +++---
 .../loader/ExternalMySQLTestParameterLoader.java   | 113 +++++++++++++++++++++
 ... => ExternalPostgreSQLTestParameterLoader.java} |  24 ++---
 .../test/loader/AbstractTestParameterLoader.java   |  41 ++++++--
 .../impl/GitHubTestParameterLoadStrategy.java      |  12 ++-
 7 files changed, 194 insertions(+), 47 deletions(-)

diff --git 
a/parser/sql/dialect/mysql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/mysql/external/ExternalMySQLParserIT.java
 
b/parser/sql/dialect/mysql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/mysql/external/ExternalMySQLParserIT.java
index d377c211c2e..f937457df3c 100644
--- 
a/parser/sql/dialect/mysql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/mysql/external/ExternalMySQLParserIT.java
+++ 
b/parser/sql/dialect/mysql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/mysql/external/ExternalMySQLParserIT.java
@@ -18,7 +18,11 @@
 package org.apache.shardingsphere.test.it.sql.parser.it.mysql.external;
 
 import 
org.apache.shardingsphere.test.it.sql.parser.external.ExternalSQLParserIT;
+import 
org.apache.shardingsphere.test.it.sql.parser.external.ExternalSQLParserTestParameter;
+import 
org.apache.shardingsphere.test.it.sql.parser.external.loader.ExternalMySQLTestParameterLoader;
+import org.apache.shardingsphere.test.loader.AbstractTestParameterLoader;
 import org.apache.shardingsphere.test.loader.ExternalCaseSettings;
+import 
org.apache.shardingsphere.test.loader.strategy.impl.GitHubTestParameterLoadStrategy;
 
 @ExternalCaseSettings(value = "MySQL", caseURL = 
ExternalMySQLParserIT.CASE_URL, resultURL = ExternalMySQLParserIT.RESULT_URL)
 class ExternalMySQLParserIT extends ExternalSQLParserIT {
@@ -26,4 +30,9 @@ class ExternalMySQLParserIT extends ExternalSQLParserIT {
     static final String CASE_URL = 
"https://github.com/mysql/mysql-server/tree/8.0/mysql-test/t";;
     
     static final String RESULT_URL = 
"https://github.com/mysql/mysql-server/tree/8.0/mysql-test/r";;
+    
+    @Override
+    protected AbstractTestParameterLoader<ExternalSQLParserTestParameter> 
getTestParameterLoader() {
+        return new ExternalMySQLTestParameterLoader(new 
GitHubTestParameterLoadStrategy());
+    }
 }
diff --git 
a/parser/sql/dialect/postgresql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/postgresql/external/ExternalPostgreSQLParserIT.java
 
b/parser/sql/dialect/postgresql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/postgresql/external/ExternalPostgreSQLParserIT.java
index 74acd54b101..c8f547538f2 100644
--- 
a/parser/sql/dialect/postgresql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/postgresql/external/ExternalPostgreSQLParserIT.java
+++ 
b/parser/sql/dialect/postgresql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/postgresql/external/ExternalPostgreSQLParserIT.java
@@ -18,7 +18,11 @@
 package org.apache.shardingsphere.test.it.sql.parser.it.postgresql.external;
 
 import 
org.apache.shardingsphere.test.it.sql.parser.external.ExternalSQLParserIT;
+import 
org.apache.shardingsphere.test.it.sql.parser.external.ExternalSQLParserTestParameter;
+import 
org.apache.shardingsphere.test.it.sql.parser.external.loader.ExternalPostgreSQLTestParameterLoader;
+import org.apache.shardingsphere.test.loader.AbstractTestParameterLoader;
 import org.apache.shardingsphere.test.loader.ExternalCaseSettings;
+import 
org.apache.shardingsphere.test.loader.strategy.impl.GitHubTestParameterLoadStrategy;
 
 @ExternalCaseSettings(value = "PostgreSQL", caseURL = 
ExternalPostgreSQLParserIT.CASE_URL, resultURL = 
ExternalPostgreSQLParserIT.RESULT_URL)
 class ExternalPostgreSQLParserIT extends ExternalSQLParserIT {
@@ -26,4 +30,9 @@ class ExternalPostgreSQLParserIT extends ExternalSQLParserIT {
     static final String CASE_URL = 
"https://github.com/postgres/postgres/tree/master/src/test/regress/sql";;
     
     static final String RESULT_URL = 
"https://github.com/postgres/postgres/tree/master/src/test/regress/expected";;
+    
+    @Override
+    protected AbstractTestParameterLoader<ExternalSQLParserTestParameter> 
getTestParameterLoader() {
+        return new ExternalPostgreSQLTestParameterLoader(new 
GitHubTestParameterLoadStrategy());
+    }
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/ExternalSQLParserIT.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/ExternalSQLParserIT.java
index bbe5ab55a71..ec4efec15c3 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/ExternalSQLParserIT.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/ExternalSQLParserIT.java
@@ -25,28 +25,26 @@ import 
org.apache.shardingsphere.sql.parser.api.SQLParserEngine;
 import org.apache.shardingsphere.sql.parser.api.SQLStatementVisitorEngine;
 import org.apache.shardingsphere.sql.parser.core.ParseASTNode;
 import 
org.apache.shardingsphere.test.it.sql.parser.external.env.SQLParserExternalITEnvironment;
-import 
org.apache.shardingsphere.test.it.sql.parser.external.loader.ExternalSQLParserTestParameterLoader;
 import 
org.apache.shardingsphere.test.it.sql.parser.external.result.SQLParseResultReporter;
 import 
org.apache.shardingsphere.test.it.sql.parser.external.result.SQLParseResultReporterCreator;
+import org.apache.shardingsphere.test.loader.AbstractTestParameterLoader;
 import org.apache.shardingsphere.test.loader.ExternalCaseSettings;
-import 
org.apache.shardingsphere.test.loader.strategy.impl.GitHubTestParameterLoadStrategy;
+import org.junit.jupiter.api.TestInstance;
 import org.junit.jupiter.api.condition.EnabledIf;
-import org.junit.jupiter.api.extension.ExtensionContext;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.ArgumentsProvider;
-import org.junit.jupiter.params.provider.ArgumentsSource;
+import org.junit.jupiter.params.provider.MethodSource;
 
 import java.io.IOException;
 import java.net.URI;
-import java.util.Collection;
 import java.util.stream.Stream;
 
+@TestInstance(TestInstance.Lifecycle.PER_CLASS)
 public abstract class ExternalSQLParserIT {
     
     @ParameterizedTest(name = "{0} ({1}) -> {2}")
     @EnabledIf("isEnabled")
-    @ArgumentsSource(TestCaseArgumentsProvider.class)
+    @MethodSource("provideArguments")
     void assertParseSQL(final String sqlCaseId, final String databaseType, 
final String sql, final String reportType) throws IOException {
         boolean isSuccess = true;
         try (
@@ -66,18 +64,13 @@ public abstract class ExternalSQLParserIT {
         return 
SQLParserExternalITEnvironment.getInstance().isSqlParserITEnabled();
     }
     
-    private static class TestCaseArgumentsProvider implements 
ArgumentsProvider {
-        
-        @Override
-        public Stream<? extends Arguments> provideArguments(final 
ExtensionContext extensionContext) {
-            ExternalCaseSettings settings = 
extensionContext.getRequiredTestClass().getAnnotation(ExternalCaseSettings.class);
-            Preconditions.checkNotNull(settings, "Annotation 
ExternalSQLParserITSettings is required.");
-            return getTestParameters(settings).stream().map(each -> 
Arguments.of(each.getSqlCaseId(), each.getDatabaseType(), each.getSql(), 
each.getReportType()));
-        }
-        
-        private Collection<ExternalSQLParserTestParameter> 
getTestParameters(final ExternalCaseSettings settings) {
-            return new ExternalSQLParserTestParameterLoader(
-                    new 
GitHubTestParameterLoadStrategy()).load(URI.create(settings.caseURL()), 
URI.create(settings.resultURL()), settings.value(), settings.reportType());
-        }
+    private Stream<Arguments> provideArguments() {
+        ExternalCaseSettings settings = 
this.getClass().getAnnotation(ExternalCaseSettings.class);
+        Preconditions.checkNotNull(settings, "Annotation 
ExternalSQLParserITSettings is required.");
+        return getTestParameterLoader()
+                .load(URI.create(settings.caseURL()), 
URI.create(settings.resultURL()), settings.value(), settings.reportType())
+                .stream().map(each -> Arguments.of(each.getSqlCaseId(), 
each.getDatabaseType(), each.getSql(), each.getReportType()));
     }
+    
+    protected abstract 
AbstractTestParameterLoader<ExternalSQLParserTestParameter> 
getTestParameterLoader();
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/ExternalMySQLTestParameterLoader.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/ExternalMySQLTestParameterLoader.java
new file mode 100644
index 00000000000..ba67ba436e3
--- /dev/null
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/ExternalMySQLTestParameterLoader.java
@@ -0,0 +1,113 @@
+/*
+ * 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.
+ */
+
+package org.apache.shardingsphere.test.it.sql.parser.external.loader;
+
+import 
org.apache.shardingsphere.test.it.sql.parser.external.ExternalSQLParserTestParameter;
+import org.apache.shardingsphere.test.loader.AbstractTestParameterLoader;
+import 
org.apache.shardingsphere.test.loader.strategy.TestParameterLoadStrategy;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * External MySQL SQL parser test parameter loader.
+ */
+public final class ExternalMySQLTestParameterLoader extends 
AbstractTestParameterLoader<ExternalSQLParserTestParameter> {
+
+    private static final int DELIMITER_COMMAND_LENGTH = "DELIMITER".length();
+
+    public ExternalMySQLTestParameterLoader(final TestParameterLoadStrategy 
loadStrategy) {
+        super(loadStrategy);
+    }
+    
+    /**
+     * Create external SQL parser test parameters.
+     * 
+     * @param sqlCaseFileName SQL case file name
+     * @param sqlCaseFileContent SQL case file content
+     * @param resultFileContent result file content
+     * @param databaseType database type
+     * @param reportType report type
+     * @return external SQL parser test parameters
+     */
+    public Collection<ExternalSQLParserTestParameter> 
createTestParameters(final String sqlCaseFileName,
+                                                                           
final List<String> sqlCaseFileContent,
+                                                                           
final List<String> resultFileContent, final String databaseType, final String 
reportType) {
+        Collection<ExternalSQLParserTestParameter> result = new LinkedList<>();
+        List<String> sqlLines = new ArrayList<>();
+        int sqlCaseIndex = 1;
+        String delimiter = ";";
+        for (String line : sqlCaseFileContent) {
+            String trimLine = line.trim();
+            if (trimLine.isEmpty() || 0 == sqlLines.size() && 
isComment(trimLine)) {
+                continue;
+            }
+            if (0 == sqlLines.size() && 
trimLine.toUpperCase().startsWith("DELIMITER")) {
+                delimiter = getNewDelimiter(trimLine, delimiter);
+                continue;
+            }
+            sqlLines.add(trimLine);
+            if (trimLine.endsWith(delimiter)) {
+                if (existInResultContent(resultFileContent, sqlLines)) {
+                    String sqlCaseId = sqlCaseFileName + sqlCaseIndex++;
+                    String sql = String.join("\n", sqlLines);
+                    sql = sql.substring(0, sql.length() - delimiter.length());
+                    result.add(new ExternalSQLParserTestParameter(sqlCaseId, 
databaseType, sql, reportType));
+                }
+                sqlLines.clear();
+            }
+        }
+        return result;
+    }
+    
+    private String getNewDelimiter(final String trimSql, final String 
delimiter) {
+        String newDelimiter = trimSql
+                .substring(DELIMITER_COMMAND_LENGTH, 
trimSql.endsWith(delimiter) ? trimSql.length() - delimiter.length() : 
trimSql.length())
+                .trim();
+        if (newDelimiter.startsWith("\"") && newDelimiter.endsWith("\"") || 
newDelimiter.startsWith("'") && newDelimiter.endsWith("'")) {
+            newDelimiter = newDelimiter.substring(1, newDelimiter.length() - 
1);
+        }
+        return newDelimiter.isEmpty() ? delimiter : newDelimiter;
+    }
+    
+    private boolean isComment(final String statement) {
+        return statement.startsWith("#") || statement.startsWith("/") || 
statement.startsWith("--") || statement.startsWith(":") || 
statement.startsWith("\\");
+    }
+    
+    private boolean existInResultContent(final List<String> resultLines, final 
List<String> sqlLines) {
+        int nextLineIndex = findSQLNextLineIndex(resultLines, sqlLines);
+        return -1 != nextLineIndex && (nextLineIndex == resultLines.size() || 
!resultLines.get(nextLineIndex).contains("ERROR"));
+    }
+    
+    private int findSQLNextLineIndex(final List<String> resultLines, final 
List<String> sqlLines) {
+        int completedSQLIndex = 0;
+        for (int resultIndex = 0; resultIndex < resultLines.size(); 
resultIndex++) {
+            if (Objects.equals(sqlLines.get(completedSQLIndex), 
resultLines.get(resultIndex).trim())) {
+                if (++completedSQLIndex == sqlLines.size()) {
+                    return resultIndex + 1;
+                }
+            } else {
+                completedSQLIndex = 0;
+            }
+        }
+        return -1;
+    }
+}
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/ExternalSQLParserTestParameterLoader.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/ExternalPostgreSQLTestParameterLoader.java
similarity index 79%
rename from 
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/ExternalSQLParserTestParameterLoader.java
rename to 
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/ExternalPostgreSQLTestParameterLoader.java
index 59be173c54d..20cd45de664 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/ExternalSQLParserTestParameterLoader.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/ExternalPostgreSQLTestParameterLoader.java
@@ -23,13 +23,14 @@ import 
org.apache.shardingsphere.test.loader.strategy.TestParameterLoadStrategy;
 
 import java.util.Collection;
 import java.util.LinkedList;
+import java.util.List;
 
 /**
- * External SQL parser test parameter loader.
+ * External PostgreSQL SQL parser test parameter loader.
  */
-public final class ExternalSQLParserTestParameterLoader extends 
AbstractTestParameterLoader<ExternalSQLParserTestParameter> {
+public final class ExternalPostgreSQLTestParameterLoader extends 
AbstractTestParameterLoader<ExternalSQLParserTestParameter> {
     
-    public ExternalSQLParserTestParameterLoader(final 
TestParameterLoadStrategy loadStrategy) {
+    public ExternalPostgreSQLTestParameterLoader(final 
TestParameterLoadStrategy loadStrategy) {
         super(loadStrategy);
     }
     
@@ -44,22 +45,21 @@ public final class ExternalSQLParserTestParameterLoader 
extends AbstractTestPara
      * @return external SQL parser test parameters
      */
     public Collection<ExternalSQLParserTestParameter> 
createTestParameters(final String sqlCaseFileName,
-                                                                           
final String sqlCaseFileContent, final String resultFileContent, final String 
databaseType, final String reportType) {
+                                                                           
final List<String> sqlCaseFileContent,
+                                                                           
final List<String> resultFileContent, final String databaseType, final String 
reportType) {
         Collection<ExternalSQLParserTestParameter> result = new LinkedList<>();
-        String[] rawCaseLines = sqlCaseFileContent.split("\n");
-        String[] rawResultLines = resultFileContent.split("\n");
         String completedSQL = "";
         int sqlCaseEnum = 1;
         int statementLines = 0;
         int resultIndex = 0;
         boolean inProcedure = false;
-        for (String each : rawCaseLines) {
+        for (String each : sqlCaseFileContent) {
             inProcedure = isInProcedure(inProcedure, each.trim());
             completedSQL = getStatement(completedSQL, each.trim(), 
inProcedure);
             statementLines = completedSQL.isEmpty() ? 0 : statementLines + 1;
             if (completedSQL.contains(";") && !inProcedure) {
-                resultIndex = searchInResultContent(resultIndex, 
rawResultLines, completedSQL, statementLines);
-                if (resultIndex >= rawResultLines.length || 
!rawResultLines[resultIndex].contains("ERROR")) {
+                resultIndex = searchInResultContent(resultIndex, 
resultFileContent, completedSQL, statementLines);
+                if (resultIndex >= resultFileContent.size() || 
!resultFileContent.get(resultIndex).contains("ERROR")) {
                     String sqlCaseId = sqlCaseFileName + sqlCaseEnum;
                     result.add(new ExternalSQLParserTestParameter(sqlCaseId, 
databaseType, completedSQL, reportType));
                     sqlCaseEnum++;
@@ -86,12 +86,12 @@ public final class ExternalSQLParserTestParameterLoader 
extends AbstractTestPara
         return statement.startsWith("#") || statement.startsWith("/") || 
statement.startsWith("--") || statement.startsWith(":") || 
statement.startsWith("\\");
     }
     
-    private int searchInResultContent(final int resultIndex, final String[] 
resultLines, final String completedSQL, final int statementLines) {
+    private int searchInResultContent(final int resultIndex, final 
List<String> resultLines, final String completedSQL, final int statementLines) {
         int index = resultIndex;
-        while (index < resultLines.length && 
!completedSQL.startsWith(resultLines[index].trim())) {
+        while (index < resultLines.size() && 
!completedSQL.startsWith(resultLines.get(index).trim())) {
             index++;
         }
-        if (index != resultLines.length) {
+        if (index != resultLines.size()) {
             return index + statementLines;
         }
         return resultIndex;
diff --git 
a/test/util/src/main/java/org/apache/shardingsphere/test/loader/AbstractTestParameterLoader.java
 
b/test/util/src/main/java/org/apache/shardingsphere/test/loader/AbstractTestParameterLoader.java
index 7cd4fc414a7..5ffed41772a 100644
--- 
a/test/util/src/main/java/org/apache/shardingsphere/test/loader/AbstractTestParameterLoader.java
+++ 
b/test/util/src/main/java/org/apache/shardingsphere/test/loader/AbstractTestParameterLoader.java
@@ -17,7 +17,9 @@
 
 package org.apache.shardingsphere.test.loader;
 
+import com.google.common.collect.Lists;
 import lombok.RequiredArgsConstructor;
+import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import 
org.apache.shardingsphere.test.loader.strategy.TestParameterLoadStrategy;
 import org.apache.shardingsphere.test.loader.summary.FileSummary;
@@ -28,8 +30,13 @@ import java.io.InputStreamReader;
 import java.net.URI;
 import java.util.Collection;
 import java.util.LinkedList;
+import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 import java.util.stream.Collectors;
 
 /**
@@ -41,6 +48,10 @@ import java.util.stream.Collectors;
 @Slf4j
 public abstract class AbstractTestParameterLoader<T> {
     
+    private static final int DEFAULT_DOWNLOAD_THREADS = 4;
+    
+    private final ExecutorService executorService = 
Executors.newFixedThreadPool(DEFAULT_DOWNLOAD_THREADS);
+    
     private final TestParameterLoadStrategy loadStrategy;
     
     /**
@@ -52,19 +63,29 @@ public abstract class AbstractTestParameterLoader<T> {
      * @param reportType report type
      * @return loaded test parameters
      */
+    @SneakyThrows
     public Collection<T> load(final URI sqlCaseURI, final URI resultURI, final 
String databaseType, final String reportType) {
         Collection<T> result = new LinkedList<>();
-        Map<String, FileSummary> sqlCaseFileSummaries = 
loadStrategy.loadSQLCaseFileSummaries(sqlCaseURI).stream().collect(Collectors.toMap(FileSummary::getFileName,
 v -> v, (k, v) -> v));
-        Map<String, FileSummary> resultFileSummaries = 
loadStrategy.loadSQLCaseFileSummaries(resultURI).stream().collect(Collectors.toMap(FileSummary::getFileName,
 v -> v, (k, v) -> v));
-        for (Entry<String, FileSummary> each : 
sqlCaseFileSummaries.entrySet()) {
+        Map<String, List<String>> sqlCaseFileContents = 
downloadAllBySummary(sqlCaseURI);
+        Map<String, List<String>> resultFileContents = 
downloadAllBySummary(resultURI);
+        for (Entry<String, List<String>> each : 
sqlCaseFileContents.entrySet()) {
             String fileName = each.getKey();
-            String sqlCaseFileContent = 
loadContent(URI.create(each.getValue().getAccessURI()));
-            String resultFileContent = 
resultFileSummaries.containsKey(fileName) ? 
loadContent(URI.create(resultFileSummaries.get(fileName).getAccessURI())) : "";
+            List<String> sqlCaseFileContent = each.getValue();
+            List<String> resultFileContent = 
resultFileContents.getOrDefault(fileName, Lists.newArrayList());
             result.addAll(createTestParameters(fileName, sqlCaseFileContent, 
resultFileContent, databaseType, reportType));
         }
         return result;
     }
     
+    private Map<String, List<String>> downloadAllBySummary(final URI 
sqlCaseURI) throws InterruptedException {
+        Map<String, List<String>> contents = new ConcurrentHashMap<>();
+        Collection<FileSummary> fileSummaries = 
loadStrategy.loadSQLCaseFileSummaries(sqlCaseURI);
+        executorService.invokeAll(fileSummaries.stream()
+                .map(summary -> (Callable<Object>) () -> 
contents.put(summary.getFileName(), 
loadContent(URI.create(summary.getAccessURI()))))
+                .collect(Collectors.toList()));
+        return contents;
+    }
+    
     /**
      * Create test parameters.
      * 
@@ -75,17 +96,17 @@ public abstract class AbstractTestParameterLoader<T> {
      * @param reportType report type
      * @return test parameters
      */
-    public abstract Collection<T> createTestParameters(String sqlCaseFileName, 
String sqlCaseFileContent,
-                                                       String 
resultFileContent, String databaseType, String reportType);
+    public abstract Collection<T> createTestParameters(String sqlCaseFileName, 
List<String> sqlCaseFileContent,
+                                                       List<String> 
resultFileContent, String databaseType, String reportType);
     
-    private String loadContent(final URI uri) {
+    private List<String> loadContent(final URI uri) {
         try (
                 InputStreamReader in = new 
InputStreamReader(uri.toURL().openStream());
                 BufferedReader reader = new BufferedReader(in)) {
-            return 
reader.lines().collect(Collectors.joining(System.lineSeparator()));
+            return reader.lines().collect(Collectors.toList());
         } catch (final IOException ex) {
             log.warn("Load failed, reason is: ", ex);
-            return "";
+            return Lists.newArrayList();
         }
     }
 }
diff --git 
a/test/util/src/main/java/org/apache/shardingsphere/test/loader/strategy/impl/GitHubTestParameterLoadStrategy.java
 
b/test/util/src/main/java/org/apache/shardingsphere/test/loader/strategy/impl/GitHubTestParameterLoadStrategy.java
index 666675e22db..bfae3981a07 100644
--- 
a/test/util/src/main/java/org/apache/shardingsphere/test/loader/strategy/impl/GitHubTestParameterLoadStrategy.java
+++ 
b/test/util/src/main/java/org/apache/shardingsphere/test/loader/strategy/impl/GitHubTestParameterLoadStrategy.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.test.loader.strategy.impl;
 
+import com.jayway.jsonpath.DocumentContext;
 import com.jayway.jsonpath.JsonPath;
 import lombok.extern.slf4j.Slf4j;
 import 
org.apache.shardingsphere.test.loader.strategy.TestParameterLoadStrategy;
@@ -45,11 +46,12 @@ public final class GitHubTestParameterLoadStrategy 
implements TestParameterLoadS
             return Collections.emptyList();
         }
         Collection<FileSummary> result = new LinkedList<>();
-        List<String> fileNames = JsonPath.parse(content).read("$..name");
-        List<String> folderTypes = JsonPath.parse(content).read("$..type");
-        List<String> downloadURLs = 
JsonPath.parse(content).read("$..download_url");
-        List<String> htmlURLs = JsonPath.parse(content).read("$..html_url");
-        int length = JsonPath.parse(content).read("$.length()");
+        DocumentContext documentContext = JsonPath.parse(content);
+        List<String> fileNames = documentContext.read("$..name");
+        List<String> folderTypes = documentContext.read("$..type");
+        List<String> downloadURLs = documentContext.read("$..download_url");
+        List<String> htmlURLs = documentContext.read("$..html_url");
+        int length = documentContext.read("$.length()");
         for (int i = 0; i < length; i++) {
             String fileName = fileNames.get(i).split("\\.")[0];
             String folderType = folderTypes.get(i);

Reply via email to