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/12/01 05:57:52 UTC

[shardingsphere] branch master updated: Add TestKeyProvider (#22549)

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 7c548c86c01 Add TestKeyProvider (#22549)
7c548c86c01 is described below

commit 7c548c86c015175d85d9e27afeec1a4626fa7cd8
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Thu Dec 1 13:57:42 2022 +0800

    Add TestKeyProvider (#22549)
    
    * Add AbstractParallelRunnerScheduler
    
    * Add TestKeyProvider
---
 ...ShardingSphereIntegrationTestParameterized.java |  8 ++--
 ...nnerScheduler.java => CaseTestKeyProvider.java} | 24 +++++++-----
 ...Scheduler.java => ScenarioTestKeyProvider.java} | 23 +++++++-----
 ....shardingsphere.test.runner.key.TestKeyProvider | 19 ++++++++++
 .../test/runner/ParallelParameterized.java         |  4 +-
 .../TestKeyProvider.java}                          | 43 ++++++++++++----------
 .../TestKeyProviderFactory.java}                   | 41 ++++++++++++---------
 .../impl/NormalTestKeyProvider.java}               | 28 ++++++--------
 .../runner/scheduler/ParallelRunnerScheduler.java  | 13 ++++---
 ....shardingsphere.test.runner.key.TestKeyProvider | 18 +++++++++
 10 files changed, 137 insertions(+), 84 deletions(-)

diff --git a/test/integration-test/test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/runner/ShardingSphereIntegrationTestParameterized.java b/test/integration-test/test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/runner/ShardingSphereIntegrationTestParameterized.java
index 7077285424a..d770d9d4874 100644
--- a/test/integration-test/test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/runner/ShardingSphereIntegrationTestParameterized.java
+++ b/test/integration-test/test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/runner/ShardingSphereIntegrationTestParameterized.java
@@ -19,9 +19,9 @@ package org.apache.shardingsphere.test.integration.framework.runner;
 
 import org.apache.shardingsphere.test.integration.env.runtime.IntegrationTestEnvironment;
 import org.apache.shardingsphere.test.integration.env.runtime.cluster.ClusterEnvironment;
-import org.apache.shardingsphere.test.integration.framework.runner.parallel.ParameterizedParallelRunnerScheduler;
 import org.apache.shardingsphere.test.runner.ParallelRunningStrategy;
 import org.apache.shardingsphere.test.runner.executor.ParallelRunnerExecutors;
+import org.apache.shardingsphere.test.runner.scheduler.ParallelRunnerScheduler;
 import org.junit.runners.Parameterized;
 
 /**
@@ -34,9 +34,9 @@ public final class ShardingSphereIntegrationTestParameterized extends Parameteri
         // CHECKSTYLE:ON
         super(clazz);
         if (ClusterEnvironment.Type.DOCKER != IntegrationTestEnvironment.getInstance().getClusterEnvironment().getType()) {
-            ParallelRunningStrategy parallelRunningStrategy = clazz.getAnnotation(ParallelRunningStrategy.class);
-            if (null != parallelRunningStrategy) {
-                setScheduler(new ParameterizedParallelRunnerScheduler(parallelRunningStrategy.value(), new ParallelRunnerExecutors()));
+            ParallelRunningStrategy runningStrategy = clazz.getAnnotation(ParallelRunningStrategy.class);
+            if (null != runningStrategy) {
+                setScheduler(new ParallelRunnerScheduler(runningStrategy.value(), new ParallelRunnerExecutors()));
             }
         }
     }
diff --git a/test/integration-test/test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/runner/parallel/ParameterizedParallelRunnerScheduler.java b/test/integration-test/test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/runner/parallel/CaseTestKeyProvider.java
similarity index 60%
copy from test/integration-test/test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/runner/parallel/ParameterizedParallelRunnerScheduler.java
copy to test/integration-test/test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/runner/parallel/CaseTestKeyProvider.java
index 4593d890e73..35b97b1e269 100644
--- a/test/integration-test/test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/runner/parallel/ParameterizedParallelRunnerScheduler.java
+++ b/test/integration-test/test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/runner/parallel/CaseTestKeyProvider.java
@@ -19,23 +19,27 @@ package org.apache.shardingsphere.test.integration.framework.runner.parallel;
 
 import org.apache.shardingsphere.test.integration.framework.param.model.ITParameterizedArray;
 import org.apache.shardingsphere.test.runner.ParallelRunningStrategy.ParallelLevel;
-import org.apache.shardingsphere.test.runner.executor.ParallelRunnerExecutors;
+import org.apache.shardingsphere.test.runner.key.TestKeyProvider;
 import org.apache.shardingsphere.test.runner.param.RunnerParameters;
-import org.apache.shardingsphere.test.runner.scheduler.ParallelRunnerScheduler;
 
 /**
- * Parameterized parallel runner scheduler.
+ * Case test key provider.
  */
-public final class ParameterizedParallelRunnerScheduler extends ParallelRunnerScheduler {
+public final class CaseTestKeyProvider implements TestKeyProvider {
     
-    public ParameterizedParallelRunnerScheduler(final ParallelLevel parallelLevel, final ParallelRunnerExecutors executorEngine) {
-        super(parallelLevel, executorEngine);
+    @Override
+    public String getRunnerKey(final Runnable childStatement) {
+        ITParameterizedArray parameterizedArray = (ITParameterizedArray) new RunnerParameters(childStatement).getParameterizedArray();
+        return parameterizedArray.getDatabaseType().getType();
     }
     
     @Override
-    public void schedule(final Runnable childStatement) {
-        ITParameterizedArray parameterizedArray = (ITParameterizedArray) new RunnerParameters(childStatement).getParameterizedArray();
-        String key = String.join("-", parameterizedArray.getAdapter(), parameterizedArray.getScenario(), parameterizedArray.getDatabaseType().getType());
-        getExecutorEngine().getExecutor(parameterizedArray.getDatabaseType().getType()).execute(ParallelLevel.SCENARIO == getParallelLevel() ? key : "", childStatement);
+    public String getExecutorKey(final Runnable childStatement) {
+        return "";
+    }
+    
+    @Override
+    public ParallelLevel getParallelLevel() {
+        return ParallelLevel.CASE;
     }
 }
diff --git a/test/integration-test/test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/runner/parallel/ParameterizedParallelRunnerScheduler.java b/test/integration-test/test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/runner/parallel/ScenarioTestKeyProvider.java
similarity index 60%
rename from test/integration-test/test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/runner/parallel/ParameterizedParallelRunnerScheduler.java
rename to test/integration-test/test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/runner/parallel/ScenarioTestKeyProvider.java
index 4593d890e73..a10c715e62c 100644
--- a/test/integration-test/test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/runner/parallel/ParameterizedParallelRunnerScheduler.java
+++ b/test/integration-test/test-suite/src/test/java/org/apache/shardingsphere/test/integration/framework/runner/parallel/ScenarioTestKeyProvider.java
@@ -19,23 +19,28 @@ package org.apache.shardingsphere.test.integration.framework.runner.parallel;
 
 import org.apache.shardingsphere.test.integration.framework.param.model.ITParameterizedArray;
 import org.apache.shardingsphere.test.runner.ParallelRunningStrategy.ParallelLevel;
-import org.apache.shardingsphere.test.runner.executor.ParallelRunnerExecutors;
+import org.apache.shardingsphere.test.runner.key.TestKeyProvider;
 import org.apache.shardingsphere.test.runner.param.RunnerParameters;
-import org.apache.shardingsphere.test.runner.scheduler.ParallelRunnerScheduler;
 
 /**
- * Parameterized parallel runner scheduler.
+ * Scenario test key provider.
  */
-public final class ParameterizedParallelRunnerScheduler extends ParallelRunnerScheduler {
+public final class ScenarioTestKeyProvider implements TestKeyProvider {
     
-    public ParameterizedParallelRunnerScheduler(final ParallelLevel parallelLevel, final ParallelRunnerExecutors executorEngine) {
-        super(parallelLevel, executorEngine);
+    @Override
+    public String getRunnerKey(final Runnable childStatement) {
+        ITParameterizedArray parameterizedArray = (ITParameterizedArray) new RunnerParameters(childStatement).getParameterizedArray();
+        return parameterizedArray.getDatabaseType().getType();
     }
     
     @Override
-    public void schedule(final Runnable childStatement) {
+    public String getExecutorKey(final Runnable childStatement) {
         ITParameterizedArray parameterizedArray = (ITParameterizedArray) new RunnerParameters(childStatement).getParameterizedArray();
-        String key = String.join("-", parameterizedArray.getAdapter(), parameterizedArray.getScenario(), parameterizedArray.getDatabaseType().getType());
-        getExecutorEngine().getExecutor(parameterizedArray.getDatabaseType().getType()).execute(ParallelLevel.SCENARIO == getParallelLevel() ? key : "", childStatement);
+        return String.join("-", parameterizedArray.getAdapter(), parameterizedArray.getScenario(), parameterizedArray.getDatabaseType().getType());
+    }
+    
+    @Override
+    public ParallelLevel getParallelLevel() {
+        return ParallelLevel.SCENARIO;
     }
 }
diff --git a/test/integration-test/test-suite/src/test/resources/META-INF/services/org.apache.shardingsphere.test.runner.key.TestKeyProvider b/test/integration-test/test-suite/src/test/resources/META-INF/services/org.apache.shardingsphere.test.runner.key.TestKeyProvider
new file mode 100644
index 00000000000..b4f23ce7cd5
--- /dev/null
+++ b/test/integration-test/test-suite/src/test/resources/META-INF/services/org.apache.shardingsphere.test.runner.key.TestKeyProvider
@@ -0,0 +1,19 @@
+#
+# 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.
+#
+
+org.apache.shardingsphere.test.integration.framework.runner.parallel.CaseTestKeyProvider
+org.apache.shardingsphere.test.integration.framework.runner.parallel.ScenarioTestKeyProvider
diff --git a/test/runner/src/main/java/org/apache/shardingsphere/test/runner/ParallelParameterized.java b/test/runner/src/main/java/org/apache/shardingsphere/test/runner/ParallelParameterized.java
index 929abb68c36..a6cc666fb7f 100644
--- a/test/runner/src/main/java/org/apache/shardingsphere/test/runner/ParallelParameterized.java
+++ b/test/runner/src/main/java/org/apache/shardingsphere/test/runner/ParallelParameterized.java
@@ -35,7 +35,7 @@ public final class ParallelParameterized extends Parameterized {
     }
     
     private ParallelLevel getParallelLevel(final Class<?> clazz) {
-        ParallelRunningStrategy strategy = clazz.getAnnotation(ParallelRunningStrategy.class);
-        return null == strategy ? ParallelLevel.NORMAL : strategy.value();
+        ParallelRunningStrategy runningStrategy = clazz.getAnnotation(ParallelRunningStrategy.class);
+        return null == runningStrategy ? ParallelLevel.NORMAL : runningStrategy.value();
     }
 }
diff --git a/test/runner/src/main/java/org/apache/shardingsphere/test/runner/scheduler/ParallelRunnerScheduler.java b/test/runner/src/main/java/org/apache/shardingsphere/test/runner/key/TestKeyProvider.java
similarity index 55%
copy from test/runner/src/main/java/org/apache/shardingsphere/test/runner/scheduler/ParallelRunnerScheduler.java
copy to test/runner/src/main/java/org/apache/shardingsphere/test/runner/key/TestKeyProvider.java
index 5c921db2bdb..2687dd58547 100644
--- a/test/runner/src/main/java/org/apache/shardingsphere/test/runner/scheduler/ParallelRunnerScheduler.java
+++ b/test/runner/src/main/java/org/apache/shardingsphere/test/runner/key/TestKeyProvider.java
@@ -15,32 +15,35 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.runner.scheduler;
+package org.apache.shardingsphere.test.runner.key;
 
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.test.runner.ParallelRunningStrategy.ParallelLevel;
-import org.apache.shardingsphere.test.runner.executor.ParallelRunnerExecutors;
-import org.junit.runners.model.RunnerScheduler;
 
 /**
- * Parallel runner scheduler.
+ * Test key provider.
  */
-@RequiredArgsConstructor
-@Getter
-public class ParallelRunnerScheduler implements RunnerScheduler {
+public interface TestKeyProvider {
     
-    private final ParallelLevel parallelLevel;
+    /**
+     * Get runner key.
+     *
+     * @param childStatement child statement
+     * @return runner key
+     */
+    String getRunnerKey(Runnable childStatement);
     
-    private final ParallelRunnerExecutors executorEngine;
+    /**
+     * Get executor key.
+     * 
+     * @param childStatement child statement
+     * @return executor key
+     */
+    String getExecutorKey(Runnable childStatement);
     
-    @Override
-    public void schedule(final Runnable childStatement) {
-        executorEngine.getExecutor("").execute("", childStatement);
-    }
-    
-    @Override
-    public final void finished() {
-        executorEngine.finishAll();
-    }
+    /**
+     * Get parallel level.
+     * 
+     * @return parallel level
+     */
+    ParallelLevel getParallelLevel();
 }
diff --git a/test/runner/src/main/java/org/apache/shardingsphere/test/runner/scheduler/ParallelRunnerScheduler.java b/test/runner/src/main/java/org/apache/shardingsphere/test/runner/key/TestKeyProviderFactory.java
similarity index 52%
copy from test/runner/src/main/java/org/apache/shardingsphere/test/runner/scheduler/ParallelRunnerScheduler.java
copy to test/runner/src/main/java/org/apache/shardingsphere/test/runner/key/TestKeyProviderFactory.java
index 5c921db2bdb..d5f8112228b 100644
--- a/test/runner/src/main/java/org/apache/shardingsphere/test/runner/scheduler/ParallelRunnerScheduler.java
+++ b/test/runner/src/main/java/org/apache/shardingsphere/test/runner/key/TestKeyProviderFactory.java
@@ -15,32 +15,37 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.runner.scheduler;
+package org.apache.shardingsphere.test.runner.key;
 
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
 import org.apache.shardingsphere.test.runner.ParallelRunningStrategy.ParallelLevel;
-import org.apache.shardingsphere.test.runner.executor.ParallelRunnerExecutors;
-import org.junit.runners.model.RunnerScheduler;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.ServiceLoader;
 
 /**
- * Parallel runner scheduler.
+ * Test key provider factory.
  */
-@RequiredArgsConstructor
-@Getter
-public class ParallelRunnerScheduler implements RunnerScheduler {
-    
-    private final ParallelLevel parallelLevel;
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class TestKeyProviderFactory {
     
-    private final ParallelRunnerExecutors executorEngine;
+    private static final Map<ParallelLevel, TestKeyProvider> PROVIDERS = new HashMap<>();
     
-    @Override
-    public void schedule(final Runnable childStatement) {
-        executorEngine.getExecutor("").execute("", childStatement);
+    static {
+        for (TestKeyProvider each : ServiceLoader.load(TestKeyProvider.class)) {
+            PROVIDERS.put(each.getParallelLevel(), each);
+        }
     }
     
-    @Override
-    public final void finished() {
-        executorEngine.finishAll();
+    /**
+     * Create new instance of executor key provider.
+     * 
+     * @param parallelLevel parallel level
+     * @return created instance
+     */
+    public static TestKeyProvider newInstance(final ParallelLevel parallelLevel) {
+        return PROVIDERS.get(parallelLevel);
     }
 }
diff --git a/test/runner/src/main/java/org/apache/shardingsphere/test/runner/scheduler/ParallelRunnerScheduler.java b/test/runner/src/main/java/org/apache/shardingsphere/test/runner/key/impl/NormalTestKeyProvider.java
similarity index 58%
copy from test/runner/src/main/java/org/apache/shardingsphere/test/runner/scheduler/ParallelRunnerScheduler.java
copy to test/runner/src/main/java/org/apache/shardingsphere/test/runner/key/impl/NormalTestKeyProvider.java
index 5c921db2bdb..852dc5f912a 100644
--- a/test/runner/src/main/java/org/apache/shardingsphere/test/runner/scheduler/ParallelRunnerScheduler.java
+++ b/test/runner/src/main/java/org/apache/shardingsphere/test/runner/key/impl/NormalTestKeyProvider.java
@@ -15,32 +15,28 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.test.runner.scheduler;
+package org.apache.shardingsphere.test.runner.key.impl;
 
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.test.runner.ParallelRunningStrategy.ParallelLevel;
-import org.apache.shardingsphere.test.runner.executor.ParallelRunnerExecutors;
-import org.junit.runners.model.RunnerScheduler;
+import org.apache.shardingsphere.test.runner.key.TestKeyProvider;
 
 /**
- * Parallel runner scheduler.
+ * Normal test key provider.
  */
-@RequiredArgsConstructor
-@Getter
-public class ParallelRunnerScheduler implements RunnerScheduler {
+public final class NormalTestKeyProvider implements TestKeyProvider {
     
-    private final ParallelLevel parallelLevel;
-    
-    private final ParallelRunnerExecutors executorEngine;
+    @Override
+    public String getRunnerKey(final Runnable childStatement) {
+        return "";
+    }
     
     @Override
-    public void schedule(final Runnable childStatement) {
-        executorEngine.getExecutor("").execute("", childStatement);
+    public String getExecutorKey(final Runnable childStatement) {
+        return "";
     }
     
     @Override
-    public final void finished() {
-        executorEngine.finishAll();
+    public ParallelLevel getParallelLevel() {
+        return ParallelLevel.NORMAL;
     }
 }
diff --git a/test/runner/src/main/java/org/apache/shardingsphere/test/runner/scheduler/ParallelRunnerScheduler.java b/test/runner/src/main/java/org/apache/shardingsphere/test/runner/scheduler/ParallelRunnerScheduler.java
index 5c921db2bdb..9913205a860 100644
--- a/test/runner/src/main/java/org/apache/shardingsphere/test/runner/scheduler/ParallelRunnerScheduler.java
+++ b/test/runner/src/main/java/org/apache/shardingsphere/test/runner/scheduler/ParallelRunnerScheduler.java
@@ -21,6 +21,8 @@ import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.test.runner.ParallelRunningStrategy.ParallelLevel;
 import org.apache.shardingsphere.test.runner.executor.ParallelRunnerExecutors;
+import org.apache.shardingsphere.test.runner.key.TestKeyProvider;
+import org.apache.shardingsphere.test.runner.key.TestKeyProviderFactory;
 import org.junit.runners.model.RunnerScheduler;
 
 /**
@@ -28,19 +30,20 @@ import org.junit.runners.model.RunnerScheduler;
  */
 @RequiredArgsConstructor
 @Getter
-public class ParallelRunnerScheduler implements RunnerScheduler {
+public final class ParallelRunnerScheduler implements RunnerScheduler {
     
     private final ParallelLevel parallelLevel;
     
-    private final ParallelRunnerExecutors executorEngine;
+    private final ParallelRunnerExecutors runnerExecutors;
     
     @Override
     public void schedule(final Runnable childStatement) {
-        executorEngine.getExecutor("").execute("", childStatement);
+        TestKeyProvider provider = TestKeyProviderFactory.newInstance(parallelLevel);
+        runnerExecutors.getExecutor(provider.getRunnerKey(childStatement)).execute(provider.getExecutorKey(childStatement), childStatement);
     }
     
     @Override
-    public final void finished() {
-        executorEngine.finishAll();
+    public void finished() {
+        runnerExecutors.finishAll();
     }
 }
diff --git a/test/runner/src/main/resources/META-INF/services/org.apache.shardingsphere.test.runner.key.TestKeyProvider b/test/runner/src/main/resources/META-INF/services/org.apache.shardingsphere.test.runner.key.TestKeyProvider
new file mode 100644
index 00000000000..41e739efad3
--- /dev/null
+++ b/test/runner/src/main/resources/META-INF/services/org.apache.shardingsphere.test.runner.key.TestKeyProvider
@@ -0,0 +1,18 @@
+#
+# 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.
+#
+
+org.apache.shardingsphere.test.runner.key.impl.NormalTestKeyProvider