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