You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by su...@apache.org on 2022/11/08 06:59:46 UTC

[shardingsphere] branch master updated: Restructure DynamicLoadingSQLParserParameterizedTest with URI (#22005)

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

sunnianjun 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 00d866d75c9 Restructure DynamicLoadingSQLParserParameterizedTest with URI (#22005)
00d866d75c9 is described below

commit 00d866d75c9045ca0a0b1049ed06950c405a7cf6
Author: Junfeng <71...@qq.com>
AuthorDate: Tue Nov 8 14:59:35 2022 +0800

    Restructure DynamicLoadingSQLParserParameterizedTest with URI (#22005)
    
    * feat: restructure DynamicLoadingSQLParserParameterizedTest
    
    * feat: modify with URI
    
    Co-authored-by: Jacob953 <ja...@csu.edu.cn>
---
 .../DynamicLoadingMySQLParserParameterizedIT.java  |  3 +-
 ...amicLoadingPostgreSQLParserParameterizedIT.java |  6 +--
 .../DynamicLoadingSQLParserParameterizedTest.java  | 60 +++++++++++++---------
 3 files changed, 40 insertions(+), 29 deletions(-)

diff --git a/test/integration-test/sql-parser/src/test/java/org/apache/shardingsphere/sql/parser/mysql/DynamicLoadingMySQLParserParameterizedIT.java b/test/integration-test/sql-parser/src/test/java/org/apache/shardingsphere/sql/parser/mysql/DynamicLoadingMySQLParserParameterizedIT.java
index 0928b3554a9..5a081588d27 100644
--- a/test/integration-test/sql-parser/src/test/java/org/apache/shardingsphere/sql/parser/mysql/DynamicLoadingMySQLParserParameterizedIT.java
+++ b/test/integration-test/sql-parser/src/test/java/org/apache/shardingsphere/sql/parser/mysql/DynamicLoadingMySQLParserParameterizedIT.java
@@ -23,6 +23,7 @@ import org.apache.shardingsphere.test.sql.parser.parameterized.engine.DynamicLoa
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized.Parameters;
 
+import java.net.URI;
 import java.util.Collection;
 import java.util.Collections;
 
@@ -41,7 +42,7 @@ public final class DynamicLoadingMySQLParserParameterizedIT extends DynamicLoadi
     @Parameters(name = "{0} (MySQL) -> {1}")
     public static Collection<Object[]> getTestParameters() {
         if (IntegrationTestEnvironment.getInstance().isSqlParserITEnabled()) {
-            return DynamicLoadingSQLParserParameterizedTest.getTestParameters("https://github.com/mysql/mysql-server/tree/8.0/mysql-test/t");
+            return DynamicLoadingSQLParserParameterizedTest.getTestParameters("https://api.github.com/repos/", URI.create("https://github.com/mysql/mysql-server/tree/8.0/mysql-test/t"));
         }
         return Collections.emptyList();
     }
diff --git a/test/integration-test/sql-parser/src/test/java/org/apache/shardingsphere/sql/parser/postgresql/DynamicLoadingPostgreSQLParserParameterizedIT.java b/test/integration-test/sql-parser/src/test/java/org/apache/shardingsphere/sql/parser/postgresql/DynamicLoadingPostgreSQLParserParameterizedIT.java
index a3345a8587d..fc79e0b57fd 100644
--- a/test/integration-test/sql-parser/src/test/java/org/apache/shardingsphere/sql/parser/postgresql/DynamicLoadingPostgreSQLParserParameterizedIT.java
+++ b/test/integration-test/sql-parser/src/test/java/org/apache/shardingsphere/sql/parser/postgresql/DynamicLoadingPostgreSQLParserParameterizedIT.java
@@ -23,7 +23,7 @@ import org.apache.shardingsphere.test.sql.parser.parameterized.engine.DynamicLoa
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized.Parameters;
 
-import java.io.IOException;
+import java.net.URI;
 import java.util.Collection;
 import java.util.Collections;
 
@@ -40,9 +40,9 @@ public final class DynamicLoadingPostgreSQLParserParameterizedIT extends Dynamic
      * @return Test cases from GitHub.
      **/
     @Parameters(name = "{0} (PostgreSQL) -> {1}")
-    public static Collection<Object[]> getTestParameters() throws IOException {
+    public static Collection<Object[]> getTestParameters() {
         if (IntegrationTestEnvironment.getInstance().isSqlParserITEnabled()) {
-            return DynamicLoadingSQLParserParameterizedTest.getTestParameters("https://github.com/postgres/postgres/tree/master/src/test/regress/sql");
+            return DynamicLoadingSQLParserParameterizedTest.getTestParameters("https://api.github.com/repos/", URI.create("https://github.com/postgres/postgres/tree/master/src/test/regress/sql"));
         }
         return Collections.emptyList();
     }
diff --git a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/engine/DynamicLoadingSQLParserParameterizedTest.java b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/engine/DynamicLoadingSQLParserParameterizedTest.java
index 6454edf2aa6..57967a928df 100644
--- a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/engine/DynamicLoadingSQLParserParameterizedTest.java
+++ b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/engine/DynamicLoadingSQLParserParameterizedTest.java
@@ -33,7 +33,7 @@ import org.junit.Test;
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
-import java.net.URL;
+import java.net.URI;
 import java.util.Collection;
 import java.util.LinkedList;
 import java.util.Map;
@@ -52,45 +52,57 @@ public abstract class DynamicLoadingSQLParserParameterizedTest {
     
     private final String databaseType;
     
-    protected static Collection<Object[]> getTestParameters(final String sqlCaseURL) {
+    protected static Collection<Object[]> getTestParameters(final String sqlCaseApi, final URI sqlCaseURI) {
         Collection<Object[]> result = new LinkedList<>();
-        for (Map<String, String> each : getResponse(sqlCaseURL)) {
-            result.addAll(getSQLCases(each));
+        if (sqlCaseApi.isEmpty()) {
+            result.addAll(getSQLCases("localFile", getContent(sqlCaseURI).split("\n")));
+        } else {
+            for (Map<String, String> each : getResponse(sqlCaseApi, sqlCaseURI)) {
+                String sqlCaseFileName = each.get("name").split("\\.")[0];
+                String[] sqlCaseFileContent = getContent(URI.create(each.get("download_url"))).split("\n");
+                result.addAll(getSQLCases(sqlCaseFileName, sqlCaseFileContent));
+            }
+        }
+        if (result.isEmpty()) {
+            result.add(new Object[]{null, null});
         }
         return result;
     }
     
-    private static Collection<Map<String, String>> getResponse(final String sqlCaseURL) {
+    private static Collection<Map<String, String>> getResponse(final String sqlCaseApi, final URI sqlCaseURI) {
         Collection<Map<String, String>> result = new LinkedList<>();
-        String[] patches = sqlCaseURL.split("/", 8);
-        String casesOwner = patches[3];
-        String casesRepo = patches[4];
-        String casesDirectory = patches[7];
-        String casesGitHubApiURL = "https://api.github.com/repos/" + casesOwner + "/" + casesRepo + "/contents/" + casesDirectory;
-        String casesGitHubApiContent = getContent(casesGitHubApiURL);
-        if (casesGitHubApiContent.isEmpty()) {
-            result.add(ImmutableMap.of("name", "null", "download_url", "null"));
+        URI casesURI = getApiURL(sqlCaseApi, sqlCaseURI);
+        String caseContent = getContent(casesURI);
+        if (caseContent.isEmpty()) {
             return result;
         }
-        List<String> casesName = JsonPath.parse(casesGitHubApiContent).read("$..name");
-        List<String> casesDownloadURL = JsonPath.parse(casesGitHubApiContent).read("$..download_url");
-        List<String> casesHtmlURL = JsonPath.parse(casesGitHubApiContent).read("$..html_url");
-        IntStream.range(0, JsonPath.parse(casesGitHubApiContent).read("$.length()"))
+        List<String> casesName = JsonPath.parse(caseContent).read("$..name");
+        List<String> casesDownloadURL = JsonPath.parse(caseContent).read("$..download_url");
+        List<String> casesHtmlURL = JsonPath.parse(caseContent).read("$..html_url");
+        IntStream.range(0, JsonPath.parse(caseContent).read("$.length()"))
                 .forEach(each -> {
                     String eachName = casesName.get(each);
                     if (eachName.endsWith(".sql") || eachName.endsWith(".test")) {
                         result.add(ImmutableMap.of("name", eachName, "download_url", casesDownloadURL.get(each)));
                     } else if (!eachName.contains(".")) {
-                        result.addAll(getResponse(casesHtmlURL.get(each)));
+                        result.addAll(getResponse(sqlCaseApi, URI.create(casesHtmlURL.get(each))));
                     }
                 });
         return result;
     }
     
-    private static String getContent(final String url) {
+    private static URI getApiURL(final String sqlCaseApi, final URI sqlCaseURI) {
+        String[] patches = sqlCaseURI.toString().split("/", 8);
+        String casesOwner = patches[3];
+        String casesRepo = patches[4];
+        String casesDirectory = patches[7];
+        return URI.create(sqlCaseApi + casesOwner + "/" + casesRepo + "/contents/" + casesDirectory);
+    }
+    
+    private static String getContent(final URI casesURI) {
         String result = "";
         try {
-            InputStreamReader in = new InputStreamReader(new URL(url).openStream());
+            InputStreamReader in = new InputStreamReader(casesURI.toURL().openStream());
             result = new BufferedReader(in).lines().collect(Collectors.joining(System.lineSeparator()));
         } catch (IOException ingore) {
             log.warn("Error: GitHub API rate limit exceeded");
@@ -98,14 +110,12 @@ public abstract class DynamicLoadingSQLParserParameterizedTest {
         return result;
     }
     
-    private static Collection<Object[]> getSQLCases(final Map<String, String> elements) {
+    private static Collection<Object[]> getSQLCases(final String sqlCaseFileName, final String[] sqlCaseFileContent) {
         Collection<Object[]> result = new LinkedList<>();
-        String sqlCaseFileName = elements.get("name");
-        String[] lines = getContent(elements.get("download_url")).split("\n");
         int sqlCaseEnum = 1;
-        for (String each : lines) {
+        for (String each : sqlCaseFileContent) {
             if (!each.isEmpty() && Character.isLetter(each.charAt(0)) && each.charAt(each.length() - 1) == ';') {
-                String sqlCaseId = sqlCaseFileName.split("\\.")[0] + sqlCaseEnum;
+                String sqlCaseId = sqlCaseFileName + sqlCaseEnum;
                 result.add(new Object[]{sqlCaseId, each});
                 sqlCaseEnum++;
             }