You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by ji...@apache.org on 2023/05/11 15:25:19 UTC

[shardingsphere] branch master updated: Optimize the code for testing sqlParser using MySQL Test Suite. (#25585)

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

jianglongtao 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 07c5f534759 Optimize the code for testing sqlParser using MySQL Test Suite. (#25585)
07c5f534759 is described below

commit 07c5f5347594d01d00d13866c77b95164a6ce501
Author: Cong Hu <ia...@qq.com>
AuthorDate: Thu May 11 23:25:02 2023 +0800

    Optimize the code for testing sqlParser using MySQL Test Suite. (#25585)
    
    * Optimize the code for testing sqlParser using MySQL Test Suite.
    
    * retrigger checks
    
    * fix CheckStyle error.
---
 .../it/mysql/external/ExternalMySQLParserIT.java   | 10 ++----
 .../external/ExternalPostgreSQLParserIT.java       | 10 ++----
 .../sql/parser/external/ExternalSQLParserIT.java   | 36 ++++++++++++++--------
 .../loader/ExternalMySQLTestParameterLoader.java   |  2 +-
 .../ExternalPostgreSQLTestParameterLoader.java     |  2 +-
 .../test/loader/ExternalCaseSettings.java          |  7 +++++
 .../loader}/ExternalSQLParserTestParameter.java    |  2 +-
 7 files changed, 38 insertions(+), 31 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 f937457df3c..98d1181f899 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,21 +18,15 @@
 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)
+@ExternalCaseSettings(value = "MySQL", caseURL = ExternalMySQLParserIT.CASE_URL, resultURL = ExternalMySQLParserIT.RESULT_URL,
+        testParameterLoader = ExternalMySQLTestParameterLoader.class)
 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 c8f547538f2..e6282ca1866 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,21 +18,15 @@
 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)
+@ExternalCaseSettings(value = "PostgreSQL", caseURL = ExternalPostgreSQLParserIT.CASE_URL, resultURL = ExternalPostgreSQLParserIT.RESULT_URL,
+        testParameterLoader = ExternalPostgreSQLTestParameterLoader.class)
 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 ec4efec15c3..e1260fc618d 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
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.test.it.sql.parser.external;
 
 import com.google.common.base.Preconditions;
+import lombok.SneakyThrows;
 import org.apache.shardingsphere.infra.util.exception.external.ShardingSphereExternalException;
 import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.sql.parser.api.CacheOption;
@@ -29,22 +30,26 @@ import org.apache.shardingsphere.test.it.sql.parser.external.result.SQLParseResu
 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.junit.jupiter.api.TestInstance;
+import org.apache.shardingsphere.test.loader.ExternalSQLParserTestParameter;
+import org.apache.shardingsphere.test.loader.strategy.TestParameterLoadStrategy;
+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;
 import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.MethodSource;
+import org.junit.jupiter.params.provider.ArgumentsProvider;
+import org.junit.jupiter.params.provider.ArgumentsSource;
 
 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")
-    @MethodSource("provideArguments")
+    @ArgumentsSource(TestCaseArgumentsProvider.class)
     void assertParseSQL(final String sqlCaseId, final String databaseType, final String sql, final String reportType) throws IOException {
         boolean isSuccess = true;
         try (
@@ -64,13 +69,20 @@ public abstract class ExternalSQLParserIT {
         return SQLParserExternalITEnvironment.getInstance().isSqlParserITEnabled();
     }
     
-    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()));
+    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()));
+        }
+        
+        @SneakyThrows
+        private Collection<ExternalSQLParserTestParameter> getTestParameters(final ExternalCaseSettings settings) {
+            AbstractTestParameterLoader<ExternalSQLParserTestParameter> loader = settings.testParameterLoader().getConstructor(TestParameterLoadStrategy.class)
+                    .newInstance(new GitHubTestParameterLoadStrategy());
+            return loader.load(URI.create(settings.caseURL()), URI.create(settings.resultURL()), settings.value(), settings.reportType());
+        }
     }
-    
-    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
index 59dfab2548d..afd52d15320 100644
--- 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
@@ -17,7 +17,7 @@
 
 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.ExternalSQLParserTestParameter;
 import org.apache.shardingsphere.test.loader.AbstractTestParameterLoader;
 import org.apache.shardingsphere.test.loader.strategy.TestParameterLoadStrategy;
 
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/ExternalPostgreSQLTestParameterLoader.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/ExternalPostgreSQLTestParameterLoader.java
index eb59c9fb6f5..ba7944136eb 100644
--- a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/ExternalPostgreSQLTestParameterLoader.java
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/loader/ExternalPostgreSQLTestParameterLoader.java
@@ -17,7 +17,7 @@
 
 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.ExternalSQLParserTestParameter;
 import org.apache.shardingsphere.test.loader.AbstractTestParameterLoader;
 import org.apache.shardingsphere.test.loader.strategy.TestParameterLoadStrategy;
 
diff --git a/test/util/src/main/java/org/apache/shardingsphere/test/loader/ExternalCaseSettings.java b/test/util/src/main/java/org/apache/shardingsphere/test/loader/ExternalCaseSettings.java
index 3100f78cbf0..6a90ee7724e 100644
--- a/test/util/src/main/java/org/apache/shardingsphere/test/loader/ExternalCaseSettings.java
+++ b/test/util/src/main/java/org/apache/shardingsphere/test/loader/ExternalCaseSettings.java
@@ -55,4 +55,11 @@ public @interface ExternalCaseSettings {
      * @return get report type
      */
     String reportType() default "CSV";
+    
+    /**
+     * Get test parameter loader.
+     *
+     * @return test parameter loader
+     */
+    Class<? extends AbstractTestParameterLoader<ExternalSQLParserTestParameter>> testParameterLoader();
 }
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/ExternalSQLParserTestParameter.java b/test/util/src/main/java/org/apache/shardingsphere/test/loader/ExternalSQLParserTestParameter.java
similarity index 94%
rename from test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/ExternalSQLParserTestParameter.java
rename to test/util/src/main/java/org/apache/shardingsphere/test/loader/ExternalSQLParserTestParameter.java
index f6b30720f46..051e7aef64a 100644
--- a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/external/ExternalSQLParserTestParameter.java
+++ b/test/util/src/main/java/org/apache/shardingsphere/test/loader/ExternalSQLParserTestParameter.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.it.sql.parser.external;
+package org.apache.shardingsphere.test.loader;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;