You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2023/04/29 15:07:34 UTC
[shardingsphere] branch master updated: Refactor external test case loader (#25407)
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 <to...@apache.org>
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;