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 16a5cca5df3 Refactor external test case loader (#25407)
16a5cca5df3 is described below

commit 16a5cca5df32eaa24ddbcd185f188893f20ca358
Author: Guocheng Tang <[email protected]>
AuthorDate: Sat Apr 29 23:07:28 2023 +0800

    Refactor external test case loader (#25407)
    
    * abstract external test cases are loaded and put into the test util module
    
    * refactor sql parser module
---
 .../it/mysql/external/ExternalMySQLParserIT.java   |  4 +-
 .../external/ExternalPostgreSQLParserIT.java       |  4 +-
 test/it/parser/pom.xml                             | 13 ++--
 .../sql/parser/external/ExternalSQLParserIT.java   | 11 ++-
 .../ExternalSQLParserTestParameterLoader.java      | 61 ++++-----------
 .../result/SQLParseResultReporterCreator.java      |  3 +-
 .../result/type/csv/CsvSQLParseResultReporter.java |  5 +-
 .../type/csv/CsvSQLParseResultReporterCreator.java |  4 +-
 .../type/log/LogSQLParseResultReporterCreator.java |  2 +-
 test/util/pom.xml                                  | 33 +++++---
 .../test/loader/AbstractTestParameterLoader.java   | 91 ++++++++++++++++++++++
 .../test/loader/ExternalCaseSettings.java}         |  6 +-
 .../loader/strategy/TestParameterLoadStrategy.java |  4 +-
 .../impl/GitHubTestParameterLoadStrategy.java      |  6 +-
 .../impl/LocalFileTestParameterLoadStrategy.java   |  6 +-
 .../loader/summary/AssertableFileSummary.java      |  2 +-
 .../test}/loader/summary/FileSummary.java          |  2 +-
 17 files changed, 166 insertions(+), 91 deletions(-)

diff --git 
a/sql-parser/dialect/mysql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/mysql/external/ExternalMySQLParserIT.java
 
b/sql-parser/dialect/mysql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/mysql/external/ExternalMySQLParserIT.java
index bde03a3a4a5..d377c211c2e 100644
--- 
a/sql-parser/dialect/mysql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/mysql/external/ExternalMySQLParserIT.java
+++ 
b/sql-parser/dialect/mysql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/mysql/external/ExternalMySQLParserIT.java
@@ -18,9 +18,9 @@
 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.ExternalSQLParserITSettings;
+import org.apache.shardingsphere.test.loader.ExternalCaseSettings;
 
-@ExternalSQLParserITSettings(value = "MySQL", caseURL = 
ExternalMySQLParserIT.CASE_URL, resultURL = ExternalMySQLParserIT.RESULT_URL)
+@ExternalCaseSettings(value = "MySQL", caseURL = 
ExternalMySQLParserIT.CASE_URL, resultURL = ExternalMySQLParserIT.RESULT_URL)
 class ExternalMySQLParserIT extends ExternalSQLParserIT {
     
     static final String CASE_URL = 
"https://github.com/mysql/mysql-server/tree/8.0/mysql-test/t";;
diff --git 
a/sql-parser/dialect/postgresql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/postgresql/external/ExternalPostgreSQLParserIT.java
 
b/sql-parser/dialect/postgresql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/postgresql/external/ExternalPostgreSQLParserIT.java
index 6916dade58f..74acd54b101 100644
--- 
a/sql-parser/dialect/postgresql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/postgresql/external/ExternalPostgreSQLParserIT.java
+++ 
b/sql-parser/dialect/postgresql/src/test/java/org/apache/shardingsphere/test/it/sql/parser/it/postgresql/external/ExternalPostgreSQLParserIT.java
@@ -18,9 +18,9 @@
 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.ExternalSQLParserITSettings;
+import org.apache.shardingsphere.test.loader.ExternalCaseSettings;
 
-@ExternalSQLParserITSettings(value = "PostgreSQL", caseURL = 
ExternalPostgreSQLParserIT.CASE_URL, resultURL = 
ExternalPostgreSQLParserIT.RESULT_URL)
+@ExternalCaseSettings(value = "PostgreSQL", caseURL = 
ExternalPostgreSQLParserIT.CASE_URL, resultURL = 
ExternalPostgreSQLParserIT.RESULT_URL)
 class ExternalPostgreSQLParserIT extends ExternalSQLParserIT {
     
     static final String CASE_URL = 
"https://github.com/postgres/postgres/tree/master/src/test/regress/sql";;
diff --git a/test/it/parser/pom.xml b/test/it/parser/pom.xml
index be6e1f0eace..0849ef8da31 100644
--- a/test/it/parser/pom.xml
+++ b/test/it/parser/pom.xml
@@ -30,7 +30,6 @@
     <properties>
         <maven.deploy.skip>true</maven.deploy.skip>
         
-        <json-path.version>2.4.0</json-path.version>
         <commons-csv.version>1.9.0</commons-csv.version>
     </properties>
     
@@ -121,6 +120,12 @@
             <version>${project.version}</version>
         </dependency>
         
+        <dependency>
+            <groupId>org.apache.shardingsphere</groupId>
+            <artifactId>shardingsphere-test-util</artifactId>
+            <version>${project.version}</version>
+            <scope>compile</scope>
+        </dependency>
         <dependency>
             <groupId>org.junit.jupiter</groupId>
             <artifactId>junit-jupiter-api</artifactId>
@@ -152,12 +157,6 @@
             <version>${mockito.version}</version>
             <scope>compile</scope>
         </dependency>
-        
-        <dependency>
-            <groupId>com.jayway.jsonpath</groupId>
-            <artifactId>json-path</artifactId>
-            <version>${json-path.version}</version>
-        </dependency>
         <dependency>
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-csv</artifactId>
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 fcc6dc2078d..bbe5ab55a71 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
@@ -26,9 +26,10 @@ 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.loader.strategy.impl.GitHubTestParameterLoadStrategy;
 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.ExternalCaseSettings;
+import 
org.apache.shardingsphere.test.loader.strategy.impl.GitHubTestParameterLoadStrategy;
 import org.junit.jupiter.api.condition.EnabledIf;
 import org.junit.jupiter.api.extension.ExtensionContext;
 import org.junit.jupiter.params.ParameterizedTest;
@@ -48,7 +49,9 @@ public abstract class ExternalSQLParserIT {
     @ArgumentsSource(TestCaseArgumentsProvider.class)
     void assertParseSQL(final String sqlCaseId, final String databaseType, 
final String sql, final String reportType) throws IOException {
         boolean isSuccess = true;
-        try (SQLParseResultReporter resultReporter = 
TypedSPILoader.getService(SQLParseResultReporterCreator.class, 
reportType).create(databaseType)) {
+        try (
+                SQLParseResultReporter resultReporter = 
TypedSPILoader.getService(SQLParseResultReporterCreator.class, reportType)
+                        .create(databaseType, 
SQLParserExternalITEnvironment.getInstance().getResultPath())) {
             try {
                 ParseASTNode parseASTNode = new SQLParserEngine(databaseType, 
new CacheOption(128, 1024L)).parse(sql, false);
                 new SQLStatementVisitorEngine(databaseType, 
true).visit(parseASTNode);
@@ -67,12 +70,12 @@ public abstract class ExternalSQLParserIT {
         
         @Override
         public Stream<? extends Arguments> provideArguments(final 
ExtensionContext extensionContext) {
-            ExternalSQLParserITSettings settings = 
extensionContext.getRequiredTestClass().getAnnotation(ExternalSQLParserITSettings.class);
+            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 ExternalSQLParserITSettings settings) {
+        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());
         }
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/ExternalSQLParserTestParameterLoader.java
index 7306b003fc3..39450ec4522 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/ExternalSQLParserTestParameterLoader.java
@@ -17,69 +17,36 @@
 
 package org.apache.shardingsphere.test.it.sql.parser.external.loader;
 
-import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import 
org.apache.shardingsphere.test.it.sql.parser.external.ExternalSQLParserTestParameter;
-import 
org.apache.shardingsphere.test.it.sql.parser.external.loader.strategy.TestParameterLoadStrategy;
-import 
org.apache.shardingsphere.test.it.sql.parser.external.loader.summary.FileSummary;
+import org.apache.shardingsphere.test.loader.AbstractTestParameterLoader;
+import 
org.apache.shardingsphere.test.loader.strategy.TestParameterLoadStrategy;
 
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.net.URI;
 import java.util.Collection;
 import java.util.LinkedList;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.stream.Collectors;
 
 /**
  * External SQL parser test parameter loader.
  */
-@RequiredArgsConstructor
 @Slf4j
-public final class ExternalSQLParserTestParameterLoader {
+public final class ExternalSQLParserTestParameterLoader extends 
AbstractTestParameterLoader<ExternalSQLParserTestParameter> {
     
-    private final TestParameterLoadStrategy loadStrategy;
+    public ExternalSQLParserTestParameterLoader(final 
TestParameterLoadStrategy loadStrategy) {
+        super(loadStrategy);
+    }
     
     /**
-     * Load SQL parser test parameters.
-     *
-     * @param sqlCaseURI SQL case URI
-     * @param resultURI result URI
+     * 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 loaded test parameters
+     * @return external SQL parser test parameters
      */
-    public Collection<ExternalSQLParserTestParameter> load(final URI 
sqlCaseURI, final URI resultURI, final String databaseType, final String 
reportType) {
-        Collection<ExternalSQLParserTestParameter> 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> entry : 
sqlCaseFileSummaries.entrySet()) {
-            String fileName = entry.getKey();
-            String sqlCaseFileContent = 
loadContent(URI.create(entry.getValue().getAccessURI()));
-            String resultFileContent = 
resultFileSummaries.containsKey(fileName) ? 
loadContent(URI.create(resultFileSummaries.get(fileName).getAccessURI())) : "";
-            result.addAll(createTestParameters(fileName, sqlCaseFileContent, 
resultFileContent, databaseType, reportType));
-        }
-        if (result.isEmpty()) {
-            result.add(new ExternalSQLParserTestParameter("", databaseType, 
"", reportType));
-        }
-        return result;
-    }
-    
-    private 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()));
-        } catch (final IOException ex) {
-            log.warn("Load failed, reason is: ", ex);
-            return "";
-        }
-    }
-    
-    private Collection<ExternalSQLParserTestParameter> 
createTestParameters(final String sqlCaseFileName,
-                                                                            
final String sqlCaseFileContent, final String resultFileContent, final String 
databaseType, final String reportType) {
+    public Collection<ExternalSQLParserTestParameter> 
createTestParameters(final String sqlCaseFileName,
+                                                                           
final String sqlCaseFileContent, final String resultFileContent, final String 
databaseType, final String reportType) {
         Collection<ExternalSQLParserTestParameter> result = new LinkedList<>();
         String[] rawCaseLines = sqlCaseFileContent.split("\n");
         String[] rawResultLines = resultFileContent.split("\n");
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/result/SQLParseResultReporterCreator.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/result/SQLParseResultReporterCreator.java
index ed40b99bcbf..4d47982eb3f 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/result/SQLParseResultReporterCreator.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/result/SQLParseResultReporterCreator.java
@@ -28,7 +28,8 @@ public interface SQLParseResultReporterCreator extends 
TypedSPI {
      * Create SQL parse result reporter.
      * 
      * @param databaseType database type
+     * @param resultPath result path
      * @return created SQL parse result reporter
      */
-    SQLParseResultReporter create(String databaseType);
+    SQLParseResultReporter create(String databaseType, String resultPath);
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/result/type/csv/CsvSQLParseResultReporter.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/result/type/csv/CsvSQLParseResultReporter.java
index 9c7cc608760..b07d88f9b7d 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/result/type/csv/CsvSQLParseResultReporter.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/result/type/csv/CsvSQLParseResultReporter.java
@@ -20,7 +20,6 @@ package 
org.apache.shardingsphere.test.it.sql.parser.external.result.type.csv;
 import lombok.SneakyThrows;
 import org.apache.commons.csv.CSVFormat;
 import org.apache.commons.csv.CSVPrinter;
-import 
org.apache.shardingsphere.test.it.sql.parser.external.env.SQLParserExternalITEnvironment;
 import 
org.apache.shardingsphere.test.it.sql.parser.external.result.SQLParseResultReporter;
 
 import java.io.File;
@@ -37,8 +36,8 @@ public final class CsvSQLParseResultReporter implements 
SQLParseResultReporter {
     private final CSVPrinter printer;
     
     @SneakyThrows(IOException.class)
-    public CsvSQLParseResultReporter(final String databaseType) {
-        File csvFile = new 
File(SQLParserExternalITEnvironment.getInstance().getResultPath() + 
databaseType + "-result.csv");
+    public CsvSQLParseResultReporter(final String databaseType, final String 
resultPath) {
+        File csvFile = new File(resultPath + databaseType + "-result.csv");
         printHeader(csvFile);
         printer = new 
CSVPrinter(Files.newBufferedWriter(Paths.get(csvFile.toURI()), 
StandardOpenOption.APPEND), 
CSVFormat.DEFAULT.builder().setSkipHeaderRecord(true).build());
     }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/result/type/csv/CsvSQLParseResultReporterCreator.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/result/type/csv/CsvSQLParseResultReporterCreator.java
index e9694bab3cd..c061e8c8a5c 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/result/type/csv/CsvSQLParseResultReporterCreator.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/result/type/csv/CsvSQLParseResultReporterCreator.java
@@ -26,8 +26,8 @@ import 
org.apache.shardingsphere.test.it.sql.parser.external.result.SQLParseResu
 public final class CsvSQLParseResultReporterCreator implements 
SQLParseResultReporterCreator {
     
     @Override
-    public SQLParseResultReporter create(final String databaseType) {
-        return new CsvSQLParseResultReporter(databaseType);
+    public SQLParseResultReporter create(final String databaseType, final 
String resultPath) {
+        return new CsvSQLParseResultReporter(databaseType, resultPath);
     }
     
     @Override
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/result/type/log/LogSQLParseResultReporterCreator.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/result/type/log/LogSQLParseResultReporterCreator.java
index 12d2490ebdf..47008dc045c 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/result/type/log/LogSQLParseResultReporterCreator.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/result/type/log/LogSQLParseResultReporterCreator.java
@@ -26,7 +26,7 @@ import 
org.apache.shardingsphere.test.it.sql.parser.external.result.SQLParseResu
 public final class LogSQLParseResultReporterCreator implements 
SQLParseResultReporterCreator {
     
     @Override
-    public SQLParseResultReporter create(final String databaseType) {
+    public SQLParseResultReporter create(final String databaseType, final 
String resultPath) {
         return new LogSQLParseResultReporter();
     }
     
diff --git a/test/util/pom.xml b/test/util/pom.xml
index beb04274dd6..07bebac403b 100644
--- a/test/util/pom.xml
+++ b/test/util/pom.xml
@@ -27,10 +27,25 @@
     <artifactId>shardingsphere-test-util</artifactId>
     <name>${project.artifactId}</name>
     
+    <properties>
+        <json-path.version>2.4.0</json-path.version>
+    </properties>
+    
     <dependencies>
         <dependency>
-            <groupId>org.junit.jupiter</groupId>
-            <artifactId>junit-jupiter-api</artifactId>
+            <groupId>org.hamcrest</groupId>
+            <artifactId>hamcrest</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-core</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-junit-jupiter</artifactId>
+            <version>${mockito.version}</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
@@ -39,19 +54,19 @@
             <scope>compile</scope>
         </dependency>
         <dependency>
-            <groupId>org.hamcrest</groupId>
-            <artifactId>hamcrest</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-params</artifactId>
             <scope>compile</scope>
         </dependency>
         <dependency>
-            <groupId>org.mockito</groupId>
-            <artifactId>mockito-core</artifactId>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-api</artifactId>
             <scope>compile</scope>
         </dependency>
         <dependency>
-            <groupId>org.mockito</groupId>
-            <artifactId>mockito-junit-jupiter</artifactId>
-            <scope>compile</scope>
+            <groupId>com.jayway.jsonpath</groupId>
+            <artifactId>json-path</artifactId>
+            <version>${json-path.version}</version>
         </dependency>
     </dependencies>
 </project>
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
new file mode 100644
index 00000000000..7cd4fc414a7
--- /dev/null
+++ 
b/test/util/src/main/java/org/apache/shardingsphere/test/loader/AbstractTestParameterLoader.java
@@ -0,0 +1,91 @@
+/*
+ * 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.loader;
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import 
org.apache.shardingsphere.test.loader.strategy.TestParameterLoadStrategy;
+import org.apache.shardingsphere.test.loader.summary.FileSummary;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.URI;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.stream.Collectors;
+
+/**
+ * Test parameter loader.
+ * 
+ * @param <T> type of test parameter
+ */
+@RequiredArgsConstructor
+@Slf4j
+public abstract class AbstractTestParameterLoader<T> {
+    
+    private final TestParameterLoadStrategy loadStrategy;
+    
+    /**
+     * Load test parameters.
+     *
+     * @param sqlCaseURI SQL case URI
+     * @param resultURI result URI
+     * @param databaseType database type
+     * @param reportType report type
+     * @return loaded test parameters
+     */
+    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()) {
+            String fileName = each.getKey();
+            String sqlCaseFileContent = 
loadContent(URI.create(each.getValue().getAccessURI()));
+            String resultFileContent = 
resultFileSummaries.containsKey(fileName) ? 
loadContent(URI.create(resultFileSummaries.get(fileName).getAccessURI())) : "";
+            result.addAll(createTestParameters(fileName, sqlCaseFileContent, 
resultFileContent, databaseType, reportType));
+        }
+        return result;
+    }
+    
+    /**
+     * Create 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 test parameters
+     */
+    public abstract Collection<T> createTestParameters(String sqlCaseFileName, 
String sqlCaseFileContent,
+                                                       String 
resultFileContent, String databaseType, String reportType);
+    
+    private 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()));
+        } catch (final IOException ex) {
+            log.warn("Load failed, reason is: ", ex);
+            return "";
+        }
+    }
+}
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/ExternalSQLParserITSettings.java
 
b/test/util/src/main/java/org/apache/shardingsphere/test/loader/ExternalCaseSettings.java
similarity index 90%
rename from 
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/ExternalSQLParserITSettings.java
rename to 
test/util/src/main/java/org/apache/shardingsphere/test/loader/ExternalCaseSettings.java
index f550e93bcac..3100f78cbf0 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/ExternalSQLParserITSettings.java
+++ 
b/test/util/src/main/java/org/apache/shardingsphere/test/loader/ExternalCaseSettings.java
@@ -15,18 +15,18 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.it.sql.parser.external;
+package org.apache.shardingsphere.test.loader;
 
 import java.lang.annotation.Inherited;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 
 /**
- * External SQL parser integrate test settings.
+ * External SQL case test settings.
  */
 @Inherited
 @Retention(RetentionPolicy.RUNTIME)
-public @interface ExternalSQLParserITSettings {
+public @interface ExternalCaseSettings {
     
     /**
      * Get to be tested database types.
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/strategy/TestParameterLoadStrategy.java
 
b/test/util/src/main/java/org/apache/shardingsphere/test/loader/strategy/TestParameterLoadStrategy.java
similarity index 87%
rename from 
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/strategy/TestParameterLoadStrategy.java
rename to 
test/util/src/main/java/org/apache/shardingsphere/test/loader/strategy/TestParameterLoadStrategy.java
index 78dc5c06771..7f9282bf0e9 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/strategy/TestParameterLoadStrategy.java
+++ 
b/test/util/src/main/java/org/apache/shardingsphere/test/loader/strategy/TestParameterLoadStrategy.java
@@ -15,9 +15,9 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.it.sql.parser.external.loader.strategy;
+package org.apache.shardingsphere.test.loader.strategy;
 
-import 
org.apache.shardingsphere.test.it.sql.parser.external.loader.summary.FileSummary;
+import org.apache.shardingsphere.test.loader.summary.FileSummary;
 
 import java.net.URI;
 import java.util.Collection;
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/strategy/impl/GitHubTestParameterLoadStrategy.java
 
b/test/util/src/main/java/org/apache/shardingsphere/test/loader/strategy/impl/GitHubTestParameterLoadStrategy.java
similarity index 92%
rename from 
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/strategy/impl/GitHubTestParameterLoadStrategy.java
rename to 
test/util/src/main/java/org/apache/shardingsphere/test/loader/strategy/impl/GitHubTestParameterLoadStrategy.java
index 0dd27ff21a0..666675e22db 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/strategy/impl/GitHubTestParameterLoadStrategy.java
+++ 
b/test/util/src/main/java/org/apache/shardingsphere/test/loader/strategy/impl/GitHubTestParameterLoadStrategy.java
@@ -15,12 +15,12 @@
  * limitations under the License.
  */
 
-package 
org.apache.shardingsphere.test.it.sql.parser.external.loader.strategy.impl;
+package org.apache.shardingsphere.test.loader.strategy.impl;
 
 import com.jayway.jsonpath.JsonPath;
 import lombok.extern.slf4j.Slf4j;
-import 
org.apache.shardingsphere.test.it.sql.parser.external.loader.strategy.TestParameterLoadStrategy;
-import 
org.apache.shardingsphere.test.it.sql.parser.external.loader.summary.FileSummary;
+import 
org.apache.shardingsphere.test.loader.strategy.TestParameterLoadStrategy;
+import org.apache.shardingsphere.test.loader.summary.FileSummary;
 
 import java.io.BufferedReader;
 import java.io.IOException;
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/strategy/impl/LocalFileTestParameterLoadStrategy.java
 
b/test/util/src/main/java/org/apache/shardingsphere/test/loader/strategy/impl/LocalFileTestParameterLoadStrategy.java
similarity index 85%
rename from 
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/strategy/impl/LocalFileTestParameterLoadStrategy.java
rename to 
test/util/src/main/java/org/apache/shardingsphere/test/loader/strategy/impl/LocalFileTestParameterLoadStrategy.java
index 0f05d118292..774a711679d 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/strategy/impl/LocalFileTestParameterLoadStrategy.java
+++ 
b/test/util/src/main/java/org/apache/shardingsphere/test/loader/strategy/impl/LocalFileTestParameterLoadStrategy.java
@@ -15,11 +15,11 @@
  * limitations under the License.
  */
 
-package 
org.apache.shardingsphere.test.it.sql.parser.external.loader.strategy.impl;
+package org.apache.shardingsphere.test.loader.strategy.impl;
 
 import lombok.SneakyThrows;
-import 
org.apache.shardingsphere.test.it.sql.parser.external.loader.strategy.TestParameterLoadStrategy;
-import 
org.apache.shardingsphere.test.it.sql.parser.external.loader.summary.FileSummary;
+import 
org.apache.shardingsphere.test.loader.strategy.TestParameterLoadStrategy;
+import org.apache.shardingsphere.test.loader.summary.FileSummary;
 
 import java.net.URI;
 import java.nio.file.Files;
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/summary/AssertableFileSummary.java
 
b/test/util/src/main/java/org/apache/shardingsphere/test/loader/summary/AssertableFileSummary.java
similarity index 93%
rename from 
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/summary/AssertableFileSummary.java
rename to 
test/util/src/main/java/org/apache/shardingsphere/test/loader/summary/AssertableFileSummary.java
index 4368d61f8e1..c8425904dfb 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/summary/AssertableFileSummary.java
+++ 
b/test/util/src/main/java/org/apache/shardingsphere/test/loader/summary/AssertableFileSummary.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.it.sql.parser.external.loader.summary;
+package org.apache.shardingsphere.test.loader.summary;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/summary/FileSummary.java
 
b/test/util/src/main/java/org/apache/shardingsphere/test/loader/summary/FileSummary.java
similarity index 93%
rename from 
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/summary/FileSummary.java
rename to 
test/util/src/main/java/org/apache/shardingsphere/test/loader/summary/FileSummary.java
index 9774f6fbfb2..b07a2a53273 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/summary/FileSummary.java
+++ 
b/test/util/src/main/java/org/apache/shardingsphere/test/loader/summary/FileSummary.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.it.sql.parser.external.loader.summary;
+package org.apache.shardingsphere.test.loader.summary;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;

Reply via email to