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 812c0d5 Refactor parallel runner executor (#9469)
812c0d5 is described below
commit 812c0d51046028b6a1f01e3bb246c6d1aa9d0d8e
Author: AlphaPo <[email protected]>
AuthorDate: Tue Feb 23 17:50:33 2021 +0800
Refactor parallel runner executor (#9469)
* merge untracked file
* Simplify test class constructors
Tuning an embedded database singleton instance
Add case run time policy
Lazy load case executors
* add license
* Refactor runtime strategy
remove disruptor
---
pom.xml | 7 -
.../shardingsphere-integration-test-suite/pom.xml | 4 -
.../test/integration/engine/it/BaseIT.java | 4 +-
.../test/integration/engine/it/BatchIT.java | 15 +-
.../ParallelLevel.java} | 15 +-
.../RuntimeStrategy.java} | 28 ++-
.../test/integration/engine/it/SingleIT.java | 15 +-
.../test/integration/engine/it/dal/BaseDALIT.java | 9 +-
.../integration/engine/it/dal/GeneralDALIT.java | 11 +-
.../test/integration/engine/it/dcl/BaseDCLIT.java | 11 +-
.../integration/engine/it/dcl/GeneralDCLIT.java | 11 +-
.../test/integration/engine/it/ddl/BaseDDLIT.java | 11 +-
.../integration/engine/it/ddl/GeneralDDLIT.java | 11 +-
.../integration/engine/it/dml/AdditionalDMLIT.java | 11 +-
.../test/integration/engine/it/dml/BaseDMLIT.java | 11 +-
.../test/integration/engine/it/dml/BatchDMLIT.java | 9 +-
.../integration/engine/it/dml/GeneralDMLIT.java | 11 +-
.../integration/engine/it/dql/AdditionalDQLIT.java | 16 +-
.../test/integration/engine/it/dql/BaseDQLIT.java | 8 +-
.../integration/engine/it/dql/GeneralDQLIT.java | 11 +-
...llelParameterized.java => ITParameterized.java} | 15 +-
.../junit/parallel/ParallelRunnerScheduler.java | 93 +++++++---
.../parallel/impl/CaseParallelRunnerExecutor.java | 25 ++-
.../impl/ScenarioParallelRunnerExecutor.java | 202 ++++++++++-----------
.../env/IntegrationTestEnvironment.java | 29 ++-
.../EmbeddedDatabaseDistributionProperties.java | 10 +
.../database/embedded/EmbeddedDatabaseManager.java | 9 +-
.../resources/env/embedded-databases.properties | 2 +
28 files changed, 323 insertions(+), 291 deletions(-)
diff --git a/pom.xml b/pom.xml
index 5f325e4..b289ec9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -107,7 +107,6 @@
<calcite.version>1.26.0</calcite.version>
<embedded-mysql.version>4.6.1</embedded-mysql.version>
<embedded-postgresql.version>2.10</embedded-postgresql.version>
- <disruptor.version>3.4.2</disruptor.version>
<!-- Plugin versions -->
<apache-rat-plugin.version>0.12</apache-rat-plugin.version>
@@ -470,12 +469,6 @@
<version>${embedded-postgresql.version}</version>
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>com.lmax</groupId>
- <artifactId>disruptor</artifactId>
- <version>${disruptor.version}</version>
- <scope>test</scope>
- </dependency>
</dependencies>
</dependencyManagement>
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/pom.xml
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/pom.xml
index f1d9c0f..9fe5c7f 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/pom.xml
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/pom.xml
@@ -79,10 +79,6 @@
<artifactId>postgresql-embedded</artifactId>
</dependency>
<dependency>
- <groupId>com.lmax</groupId>
- <artifactId>disruptor</artifactId>
- </dependency>
- <dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<scope>test</scope>
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/BaseIT.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/BaseIT.java
index a202296..6e07d6c 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/BaseIT.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/BaseIT.java
@@ -22,7 +22,7 @@ import lombok.Getter;
import
org.apache.shardingsphere.driver.api.yaml.YamlShardingSphereDataSourceFactory;
import
org.apache.shardingsphere.driver.jdbc.core.datasource.ShardingSphereDataSource;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import
org.apache.shardingsphere.test.integration.engine.junit.parallel.ParallelParameterized;
+import org.apache.shardingsphere.test.integration.engine.junit.ITParameterized;
import org.apache.shardingsphere.test.integration.env.EnvironmentPath;
import org.apache.shardingsphere.test.integration.env.EnvironmentType;
import
org.apache.shardingsphere.test.integration.env.IntegrationTestEnvironment;
@@ -41,7 +41,7 @@ import java.sql.SQLException;
import java.util.Map;
import java.util.TimeZone;
-@RunWith(ParallelParameterized.class)
+@RunWith(ITParameterized.class)
@Getter(AccessLevel.PROTECTED)
public abstract class BaseIT {
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/BatchIT.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/BatchIT.java
index 4853655..c118d54 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/BatchIT.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/BatchIT.java
@@ -19,7 +19,6 @@ package org.apache.shardingsphere.test.integration.engine.it;
import lombok.AccessLevel;
import lombok.Getter;
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.datanode.DataNode;
import
org.apache.shardingsphere.sharding.algorithm.sharding.inline.InlineExpressionParser;
import
org.apache.shardingsphere.test.integration.cases.IntegrationTestCaseContext;
@@ -29,6 +28,7 @@ import
org.apache.shardingsphere.test.integration.cases.dataset.DataSetLoader;
import
org.apache.shardingsphere.test.integration.cases.dataset.metadata.DataSetColumn;
import
org.apache.shardingsphere.test.integration.cases.dataset.metadata.DataSetMetadata;
import org.apache.shardingsphere.test.integration.cases.dataset.row.DataSetRow;
+import
org.apache.shardingsphere.test.integration.engine.param.model.CaseParameterizedArray;
import org.apache.shardingsphere.test.integration.env.EnvironmentPath;
import
org.apache.shardingsphere.test.integration.env.dataset.DataSetEnvironmentManager;
import org.junit.After;
@@ -66,16 +66,15 @@ public abstract class BatchIT extends BaseIT {
@Getter(AccessLevel.NONE)
private final DataSetEnvironmentManager dataSetEnvironmentManager;
- protected BatchIT(final IntegrationTestCaseContext testCaseContext,
- final String adapter, final String scenario, final
DatabaseType databaseType, final String sql) throws IOException, JAXBException,
SQLException {
- super(adapter, scenario, databaseType);
- this.testCaseContext = testCaseContext;
- this.sql = sql;
+ protected BatchIT(final CaseParameterizedArray parameterizedArray) throws
IOException, JAXBException, SQLException {
+ super(parameterizedArray.getAdapter(),
parameterizedArray.getScenario(), parameterizedArray.getDatabaseType());
+ this.testCaseContext = parameterizedArray.getTestCaseContext();
+ this.sql =
parameterizedArray.getTestCaseContext().getTestCase().getSql();
dataSets = new LinkedList<>();
for (IntegrationTestCaseAssertion each :
testCaseContext.getTestCase().getAssertions()) {
- dataSets.add(DataSetLoader.load(testCaseContext.getParentPath(),
scenario, databaseType, each.getExpectedDataFile()));
+ dataSets.add(DataSetLoader.load(testCaseContext.getParentPath(),
parameterizedArray.getScenario(), parameterizedArray.getDatabaseType(),
each.getExpectedDataFile()));
}
- dataSetEnvironmentManager = new
DataSetEnvironmentManager(EnvironmentPath.getDataSetFile(scenario),
getActualDataSources());
+ dataSetEnvironmentManager = new
DataSetEnvironmentManager(EnvironmentPath.getDataSetFile(parameterizedArray.getScenario()),
getActualDataSources());
}
@Before
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/junit/parallel/ParallelParameterized.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/ParallelLevel.java
similarity index 66%
copy from
shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/junit/parallel/ParallelParameterized.java
copy to
shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/ParallelLevel.java
index acd5729..5376e4e 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/junit/parallel/ParallelParameterized.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/ParallelLevel.java
@@ -15,19 +15,12 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.test.integration.engine.junit.parallel;
-
-import org.junit.runners.Parameterized;
+package org.apache.shardingsphere.test.integration.engine.it;
/**
- * Parallel parameterized.
+ * Case runtime parallel level.
*/
-public final class ParallelParameterized extends Parameterized {
+public enum ParallelLevel {
- //CHECKSTYLE:OFF
- public ParallelParameterized(final Class<?> klass) throws Throwable {
- //CHECKSTYLE:ON
- super(klass);
- setScheduler(new ParallelRunnerScheduler());
- }
+ CASE, SCENARIO
}
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/junit/parallel/ParallelParameterized.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/RuntimeStrategy.java
similarity index 58%
copy from
shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/junit/parallel/ParallelParameterized.java
copy to
shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/RuntimeStrategy.java
index acd5729..2753f8c 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/junit/parallel/ParallelParameterized.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/RuntimeStrategy.java
@@ -15,19 +15,27 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.test.integration.engine.junit.parallel;
+package org.apache.shardingsphere.test.integration.engine.it;
-import org.junit.runners.Parameterized;
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
/**
- * Parallel parameterized.
+ * Case runtime strategy.
*/
-public final class ParallelParameterized extends Parameterized {
+@Documented
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+@Inherited
+public @interface RuntimeStrategy {
- //CHECKSTYLE:OFF
- public ParallelParameterized(final Class<?> klass) throws Throwable {
- //CHECKSTYLE:ON
- super(klass);
- setScheduler(new ParallelRunnerScheduler());
- }
+ /**
+ * Set/Get parallel level.
+ * @return ParallelLevel parallel level
+ */
+ ParallelLevel parallelLevel();
}
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/SingleIT.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/SingleIT.java
index 19ae29d..62f4b44 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/SingleIT.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/SingleIT.java
@@ -19,13 +19,13 @@ package
org.apache.shardingsphere.test.integration.engine.it;
import lombok.AccessLevel;
import lombok.Getter;
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
import
org.apache.shardingsphere.test.integration.cases.assertion.IntegrationTestCaseAssertion;
import org.apache.shardingsphere.test.integration.engine.param.SQLExecuteType;
import org.apache.shardingsphere.test.integration.cases.value.SQLValue;
import org.apache.shardingsphere.test.integration.cases.dataset.DataSet;
import org.apache.shardingsphere.test.integration.cases.dataset.DataSetLoader;
import org.apache.shardingsphere.test.integration.engine.junit.ITWatcher;
+import
org.apache.shardingsphere.test.integration.engine.param.model.AssertionParameterizedArray;
import org.junit.Rule;
import javax.xml.bind.JAXBException;
@@ -52,14 +52,15 @@ public abstract class SingleIT extends BaseIT {
private final String sql;
- protected SingleIT(final String parentPath, final
IntegrationTestCaseAssertion assertion, final String adapter, final String
scenario,
- final DatabaseType databaseType, final SQLExecuteType
sqlExecuteType, final String sql) throws IOException, JAXBException,
SQLException, ParseException {
- super(adapter, scenario, databaseType);
+ protected SingleIT(final AssertionParameterizedArray parameterizedArray)
throws IOException, JAXBException, SQLException, ParseException {
+ super(parameterizedArray.getAdapter(),
parameterizedArray.getScenario(), parameterizedArray.getDatabaseType());
+ String sql =
parameterizedArray.getTestCaseContext().getTestCase().getSql();
caseIdentifier = sql;
- this.assertion = assertion;
- this.sqlExecuteType = sqlExecuteType;
+ this.assertion = parameterizedArray.getAssertion();
+ this.sqlExecuteType = parameterizedArray.getSqlExecuteType();
this.sql = sqlExecuteType == SQLExecuteType.Literal ?
getLiteralSQL(sql) : sql;
- dataSet = null == assertion ? null : DataSetLoader.load(parentPath,
scenario, databaseType, assertion.getExpectedDataFile());
+ dataSet = null == assertion ? null :
DataSetLoader.load(parameterizedArray.getTestCaseContext().getParentPath(),
parameterizedArray.getScenario(),
+ parameterizedArray.getDatabaseType(),
assertion.getExpectedDataFile());
}
private String getLiteralSQL(final String sql) throws ParseException {
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dal/BaseDALIT.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dal/BaseDALIT.java
index 29116b4..4499396 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dal/BaseDALIT.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dal/BaseDALIT.java
@@ -17,13 +17,11 @@
package org.apache.shardingsphere.test.integration.engine.it.dal;
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import
org.apache.shardingsphere.test.integration.cases.assertion.IntegrationTestCaseAssertion;
import
org.apache.shardingsphere.test.integration.cases.dataset.metadata.DataSetColumn;
import
org.apache.shardingsphere.test.integration.cases.dataset.metadata.DataSetMetadata;
import org.apache.shardingsphere.test.integration.cases.dataset.row.DataSetRow;
import org.apache.shardingsphere.test.integration.engine.it.SingleIT;
-import org.apache.shardingsphere.test.integration.engine.param.SQLExecuteType;
+import
org.apache.shardingsphere.test.integration.engine.param.model.AssertionParameterizedArray;
import javax.xml.bind.JAXBException;
import java.io.IOException;
@@ -43,9 +41,8 @@ import static org.junit.Assert.assertTrue;
public abstract class BaseDALIT extends SingleIT {
- protected BaseDALIT(final String parentPath, final
IntegrationTestCaseAssertion assertion, final String adapter, final String
scenario,
- final DatabaseType databaseType, final SQLExecuteType
sqlExecuteType, final String sql) throws IOException, JAXBException,
SQLException, ParseException {
- super(parentPath, assertion, adapter, scenario, databaseType,
sqlExecuteType, sql);
+ protected BaseDALIT(final AssertionParameterizedArray parameterizedArray)
throws IOException, JAXBException, SQLException, ParseException {
+ super(parameterizedArray);
}
protected final void assertResultSet(final ResultSet resultSet) throws
SQLException {
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dal/GeneralDALIT.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dal/GeneralDALIT.java
index d44d5f4..0a2b5d2 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dal/GeneralDALIT.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dal/GeneralDALIT.java
@@ -18,6 +18,8 @@
package org.apache.shardingsphere.test.integration.engine.it.dal;
import org.apache.shardingsphere.test.integration.cases.SQLCommandType;
+import org.apache.shardingsphere.test.integration.engine.it.ParallelLevel;
+import org.apache.shardingsphere.test.integration.engine.it.RuntimeStrategy;
import
org.apache.shardingsphere.test.integration.engine.param.ParameterizedArrayFactory;
import org.apache.shardingsphere.test.integration.engine.param.SQLExecuteType;
import
org.apache.shardingsphere.test.integration.engine.param.model.AssertionParameterizedArray;
@@ -38,16 +40,11 @@ import java.util.stream.Collectors;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
+@RuntimeStrategy(parallelLevel = ParallelLevel.SCENARIO)
public final class GeneralDALIT extends BaseDALIT {
public GeneralDALIT(final AssertionParameterizedArray parameterizedArray)
throws IOException, JAXBException, SQLException, ParseException {
- super(parameterizedArray.getTestCaseContext().getParentPath(),
- parameterizedArray.getAssertion(),
- parameterizedArray.getAdapter(),
- parameterizedArray.getScenario(),
- parameterizedArray.getDatabaseType(),
- parameterizedArray.getSqlExecuteType(),
-
parameterizedArray.getTestCaseContext().getTestCase().getSql());
+ super(parameterizedArray);
}
@Parameters(name = "{0}")
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dcl/BaseDCLIT.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dcl/BaseDCLIT.java
index a4f381b..8ab251c 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dcl/BaseDCLIT.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dcl/BaseDCLIT.java
@@ -19,10 +19,8 @@ package
org.apache.shardingsphere.test.integration.engine.it.dcl;
import org.apache.shardingsphere.infra.database.metadata.DataSourceMetaData;
import
org.apache.shardingsphere.infra.database.metadata.MemorizedDataSourceMetaData;
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import
org.apache.shardingsphere.test.integration.cases.assertion.IntegrationTestCaseAssertion;
import org.apache.shardingsphere.test.integration.engine.it.SingleIT;
-import org.apache.shardingsphere.test.integration.engine.param.SQLExecuteType;
+import
org.apache.shardingsphere.test.integration.engine.param.model.AssertionParameterizedArray;
import org.apache.shardingsphere.test.integration.env.EnvironmentPath;
import
org.apache.shardingsphere.test.integration.env.authority.AuthorityEnvironmentManager;
import org.junit.After;
@@ -45,11 +43,10 @@ public abstract class BaseDCLIT extends SingleIT {
private final AuthorityEnvironmentManager authorityEnvironmentManager;
- protected BaseDCLIT(final String parentPath, final
IntegrationTestCaseAssertion assertion, final String adapter, final String
scenario,
- final DatabaseType databaseType, final SQLExecuteType
sqlExecuteType, final String sql) throws IOException, JAXBException,
SQLException, ParseException {
- super(parentPath, assertion, adapter, scenario, databaseType,
sqlExecuteType, sql);
+ protected BaseDCLIT(final AssertionParameterizedArray parameterizedArray)
throws IOException, JAXBException, SQLException, ParseException {
+ super(parameterizedArray);
authorityEnvironmentManager = new AuthorityEnvironmentManager(
- EnvironmentPath.getAuthorityFile(scenario), null ==
getActualDataSources() ? null : createInstanceDataSourceMap(), databaseType);
+
EnvironmentPath.getAuthorityFile(parameterizedArray.getScenario()), null ==
getActualDataSources() ? null : createInstanceDataSourceMap(),
parameterizedArray.getDatabaseType());
}
private Map<String, DataSource> createInstanceDataSourceMap() throws
SQLException {
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dcl/GeneralDCLIT.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dcl/GeneralDCLIT.java
index c6ac86b..ceb311c 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dcl/GeneralDCLIT.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dcl/GeneralDCLIT.java
@@ -18,6 +18,8 @@
package org.apache.shardingsphere.test.integration.engine.it.dcl;
import org.apache.shardingsphere.test.integration.cases.SQLCommandType;
+import org.apache.shardingsphere.test.integration.engine.it.ParallelLevel;
+import org.apache.shardingsphere.test.integration.engine.it.RuntimeStrategy;
import
org.apache.shardingsphere.test.integration.engine.param.ParameterizedArrayFactory;
import org.apache.shardingsphere.test.integration.engine.param.SQLExecuteType;
import
org.apache.shardingsphere.test.integration.engine.param.model.AssertionParameterizedArray;
@@ -31,16 +33,11 @@ import java.sql.SQLException;
import java.text.ParseException;
import java.util.Collection;
+@RuntimeStrategy(parallelLevel = ParallelLevel.SCENARIO)
public final class GeneralDCLIT extends BaseDCLIT {
public GeneralDCLIT(final AssertionParameterizedArray parameterizedArray)
throws IOException, JAXBException, SQLException, ParseException {
- super(parameterizedArray.getTestCaseContext().getParentPath(),
- parameterizedArray.getAssertion(),
- parameterizedArray.getAdapter(),
- parameterizedArray.getScenario(),
- parameterizedArray.getDatabaseType(),
- parameterizedArray.getSqlExecuteType(),
-
parameterizedArray.getTestCaseContext().getTestCase().getSql());
+ super(parameterizedArray);
}
@Parameters(name = "{0}")
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/ddl/BaseDDLIT.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/ddl/BaseDDLIT.java
index 4e1dbeb..38fe542 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/ddl/BaseDDLIT.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/ddl/BaseDDLIT.java
@@ -18,7 +18,6 @@
package org.apache.shardingsphere.test.integration.engine.it.ddl;
import com.google.common.base.Splitter;
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.datanode.DataNode;
import
org.apache.shardingsphere.sharding.algorithm.sharding.inline.InlineExpressionParser;
import
org.apache.shardingsphere.sharding.route.engine.exception.NoSuchTableException;
@@ -27,7 +26,7 @@ import
org.apache.shardingsphere.test.integration.cases.dataset.metadata.DataSet
import
org.apache.shardingsphere.test.integration.cases.dataset.metadata.DataSetIndex;
import
org.apache.shardingsphere.test.integration.cases.dataset.metadata.DataSetMetadata;
import org.apache.shardingsphere.test.integration.engine.it.SingleIT;
-import org.apache.shardingsphere.test.integration.engine.param.SQLExecuteType;
+import
org.apache.shardingsphere.test.integration.engine.param.model.AssertionParameterizedArray;
import org.apache.shardingsphere.test.integration.env.EnvironmentPath;
import
org.apache.shardingsphere.test.integration.env.dataset.DataSetEnvironmentManager;
import org.junit.After;
@@ -57,10 +56,10 @@ public abstract class BaseDDLIT extends SingleIT {
private final DataSetEnvironmentManager dataSetEnvironmentManager;
- protected BaseDDLIT(final String parentPath, final
IntegrationTestCaseAssertion assertion, final String adapter, final String
scenario,
- final DatabaseType databaseType, final SQLExecuteType
sqlExecuteType, final String sql) throws IOException, JAXBException,
SQLException, ParseException {
- super(parentPath, assertion, adapter, scenario, databaseType,
sqlExecuteType, sql);
- dataSetEnvironmentManager = new
DataSetEnvironmentManager(EnvironmentPath.getDataSetFile(scenario),
getActualDataSources());
+ protected BaseDDLIT(final AssertionParameterizedArray parameterizedArray)
throws IOException, JAXBException, SQLException, ParseException {
+ super(parameterizedArray);
+ dataSetEnvironmentManager = new
DataSetEnvironmentManager(EnvironmentPath.getDataSetFile(parameterizedArray.getScenario()),
getActualDataSources());
+ IntegrationTestCaseAssertion assertion =
parameterizedArray.getAssertion();
assertNotNull("Expected affected table is required",
assertion.getInitialSQL());
assertNotNull("Expected affected table is required",
assertion.getInitialSQL().getAffectedTable());
}
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/ddl/GeneralDDLIT.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/ddl/GeneralDDLIT.java
index 89ee6fd..73cd9c8 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/ddl/GeneralDDLIT.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/ddl/GeneralDDLIT.java
@@ -18,6 +18,8 @@
package org.apache.shardingsphere.test.integration.engine.it.ddl;
import org.apache.shardingsphere.test.integration.cases.SQLCommandType;
+import org.apache.shardingsphere.test.integration.engine.it.ParallelLevel;
+import org.apache.shardingsphere.test.integration.engine.it.RuntimeStrategy;
import
org.apache.shardingsphere.test.integration.engine.param.ParameterizedArrayFactory;
import org.apache.shardingsphere.test.integration.engine.param.SQLExecuteType;
import
org.apache.shardingsphere.test.integration.engine.param.model.AssertionParameterizedArray;
@@ -31,16 +33,11 @@ import java.sql.SQLException;
import java.text.ParseException;
import java.util.Collection;
+@RuntimeStrategy(parallelLevel = ParallelLevel.SCENARIO)
public final class GeneralDDLIT extends BaseDDLIT {
public GeneralDDLIT(final AssertionParameterizedArray parameterizedArray)
throws IOException, JAXBException, SQLException, ParseException {
- super(parameterizedArray.getTestCaseContext().getParentPath(),
- parameterizedArray.getAssertion(),
- parameterizedArray.getAdapter(),
- parameterizedArray.getScenario(),
- parameterizedArray.getDatabaseType(),
- parameterizedArray.getSqlExecuteType(),
-
parameterizedArray.getTestCaseContext().getTestCase().getSql());
+ super(parameterizedArray);
}
@Parameters(name = "{0}")
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dml/AdditionalDMLIT.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dml/AdditionalDMLIT.java
index 8ceacb4..78dbd6b 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dml/AdditionalDMLIT.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dml/AdditionalDMLIT.java
@@ -20,6 +20,8 @@ package
org.apache.shardingsphere.test.integration.engine.it.dml;
import org.apache.shardingsphere.test.integration.cases.SQLCommandType;
import
org.apache.shardingsphere.test.integration.cases.assertion.IntegrationTestCaseAssertion;
import org.apache.shardingsphere.test.integration.cases.value.SQLValue;
+import org.apache.shardingsphere.test.integration.engine.it.ParallelLevel;
+import org.apache.shardingsphere.test.integration.engine.it.RuntimeStrategy;
import
org.apache.shardingsphere.test.integration.engine.param.ParameterizedArrayFactory;
import org.apache.shardingsphere.test.integration.engine.param.SQLExecuteType;
import
org.apache.shardingsphere.test.integration.engine.param.model.AssertionParameterizedArray;
@@ -39,18 +41,13 @@ import java.util.Collections;
import static org.junit.Assert.assertFalse;
+@RuntimeStrategy(parallelLevel = ParallelLevel.SCENARIO)
public final class AdditionalDMLIT extends BaseDMLIT {
private final IntegrationTestCaseAssertion assertion;
public AdditionalDMLIT(final AssertionParameterizedArray
parameterizedArray) throws IOException, JAXBException, SQLException,
ParseException {
- super(parameterizedArray.getTestCaseContext().getParentPath(),
- parameterizedArray.getAssertion(),
- parameterizedArray.getAdapter(),
- parameterizedArray.getScenario(),
- parameterizedArray.getDatabaseType(),
- parameterizedArray.getSqlExecuteType(),
-
parameterizedArray.getTestCaseContext().getTestCase().getSql());
+ super(parameterizedArray);
assertion = parameterizedArray.getAssertion();
}
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dml/BaseDMLIT.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dml/BaseDMLIT.java
index 1b7e6e7..60d1795 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dml/BaseDMLIT.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dml/BaseDMLIT.java
@@ -17,16 +17,14 @@
package org.apache.shardingsphere.test.integration.engine.it.dml;
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
import
org.apache.shardingsphere.infra.database.type.dialect.PostgreSQLDatabaseType;
import org.apache.shardingsphere.infra.datanode.DataNode;
import
org.apache.shardingsphere.sharding.algorithm.sharding.inline.InlineExpressionParser;
-import
org.apache.shardingsphere.test.integration.cases.assertion.IntegrationTestCaseAssertion;
import
org.apache.shardingsphere.test.integration.cases.dataset.metadata.DataSetColumn;
import
org.apache.shardingsphere.test.integration.cases.dataset.metadata.DataSetMetadata;
import org.apache.shardingsphere.test.integration.cases.dataset.row.DataSetRow;
import org.apache.shardingsphere.test.integration.engine.it.SingleIT;
-import org.apache.shardingsphere.test.integration.engine.param.SQLExecuteType;
+import
org.apache.shardingsphere.test.integration.engine.param.model.AssertionParameterizedArray;
import org.apache.shardingsphere.test.integration.env.EnvironmentPath;
import
org.apache.shardingsphere.test.integration.env.dataset.DataSetEnvironmentManager;
import org.junit.After;
@@ -53,10 +51,9 @@ public abstract class BaseDMLIT extends SingleIT {
private final DataSetEnvironmentManager dataSetEnvironmentManager;
- protected BaseDMLIT(final String parentPath, final
IntegrationTestCaseAssertion assertion, final String adapter, final String
scenario,
- final DatabaseType databaseType, final SQLExecuteType
sqlExecuteType, final String sql) throws IOException, JAXBException,
SQLException, ParseException {
- super(parentPath, assertion, adapter, scenario, databaseType,
sqlExecuteType, sql);
- dataSetEnvironmentManager = new
DataSetEnvironmentManager(EnvironmentPath.getDataSetFile(scenario),
getActualDataSources());
+ protected BaseDMLIT(final AssertionParameterizedArray parameterizedArray)
throws IOException, JAXBException, SQLException, ParseException {
+ super(parameterizedArray);
+ dataSetEnvironmentManager = new
DataSetEnvironmentManager(EnvironmentPath.getDataSetFile(parameterizedArray.getScenario()),
getActualDataSources());
}
@Before
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dml/BatchDMLIT.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dml/BatchDMLIT.java
index c6b31b5..1c25b37 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dml/BatchDMLIT.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dml/BatchDMLIT.java
@@ -22,6 +22,8 @@ import
org.apache.shardingsphere.test.integration.cases.SQLCommandType;
import
org.apache.shardingsphere.test.integration.cases.assertion.IntegrationTestCaseAssertion;
import org.apache.shardingsphere.test.integration.cases.value.SQLValue;
import org.apache.shardingsphere.test.integration.engine.it.BatchIT;
+import org.apache.shardingsphere.test.integration.engine.it.ParallelLevel;
+import org.apache.shardingsphere.test.integration.engine.it.RuntimeStrategy;
import
org.apache.shardingsphere.test.integration.engine.param.ParameterizedArrayFactory;
import
org.apache.shardingsphere.test.integration.engine.param.model.CaseParameterizedArray;
import org.junit.Test;
@@ -38,16 +40,13 @@ import java.util.Collection;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
+@RuntimeStrategy(parallelLevel = ParallelLevel.SCENARIO)
public final class BatchDMLIT extends BatchIT {
private final IntegrationTestCaseContext testCaseContext;
public BatchDMLIT(final CaseParameterizedArray parameterizedArray) throws
IOException, JAXBException, SQLException {
- super(parameterizedArray.getTestCaseContext(),
- parameterizedArray.getAdapter(),
- parameterizedArray.getScenario(),
- parameterizedArray.getDatabaseType(),
-
parameterizedArray.getTestCaseContext().getTestCase().getSql());
+ super(parameterizedArray);
testCaseContext = parameterizedArray.getTestCaseContext();
}
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dml/GeneralDMLIT.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dml/GeneralDMLIT.java
index 95c7c28..5f636f5 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dml/GeneralDMLIT.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dml/GeneralDMLIT.java
@@ -20,6 +20,8 @@ package
org.apache.shardingsphere.test.integration.engine.it.dml;
import org.apache.shardingsphere.test.integration.cases.SQLCommandType;
import
org.apache.shardingsphere.test.integration.cases.assertion.IntegrationTestCaseAssertion;
import org.apache.shardingsphere.test.integration.cases.value.SQLValue;
+import org.apache.shardingsphere.test.integration.engine.it.ParallelLevel;
+import org.apache.shardingsphere.test.integration.engine.it.RuntimeStrategy;
import
org.apache.shardingsphere.test.integration.engine.param.ParameterizedArrayFactory;
import org.apache.shardingsphere.test.integration.engine.param.SQLExecuteType;
import
org.apache.shardingsphere.test.integration.engine.param.model.AssertionParameterizedArray;
@@ -37,18 +39,13 @@ import java.util.Collection;
import static org.junit.Assert.assertFalse;
+@RuntimeStrategy(parallelLevel = ParallelLevel.SCENARIO)
public final class GeneralDMLIT extends BaseDMLIT {
private final IntegrationTestCaseAssertion assertion;
public GeneralDMLIT(final AssertionParameterizedArray parameterizedArray)
throws IOException, JAXBException, SQLException, ParseException {
- super(parameterizedArray.getTestCaseContext().getParentPath(),
- parameterizedArray.getAssertion(),
- parameterizedArray.getAdapter(),
- parameterizedArray.getScenario(),
- parameterizedArray.getDatabaseType(),
- parameterizedArray.getSqlExecuteType(),
-
parameterizedArray.getTestCaseContext().getTestCase().getSql());
+ super(parameterizedArray);
assertion = parameterizedArray.getAssertion();
}
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dql/AdditionalDQLIT.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dql/AdditionalDQLIT.java
index 3ffa29a..0c9cf60 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dql/AdditionalDQLIT.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dql/AdditionalDQLIT.java
@@ -20,6 +20,8 @@ package
org.apache.shardingsphere.test.integration.engine.it.dql;
import org.apache.shardingsphere.test.integration.cases.SQLCommandType;
import
org.apache.shardingsphere.test.integration.cases.assertion.IntegrationTestCaseAssertion;
import org.apache.shardingsphere.test.integration.cases.value.SQLValue;
+import org.apache.shardingsphere.test.integration.engine.it.ParallelLevel;
+import org.apache.shardingsphere.test.integration.engine.it.RuntimeStrategy;
import
org.apache.shardingsphere.test.integration.engine.param.ParameterizedArrayFactory;
import org.apache.shardingsphere.test.integration.engine.param.SQLExecuteType;
import
org.apache.shardingsphere.test.integration.engine.param.model.AssertionParameterizedArray;
@@ -40,18 +42,13 @@ import java.util.Collections;
import static org.junit.Assert.assertTrue;
+@RuntimeStrategy(parallelLevel = ParallelLevel.CASE)
public final class AdditionalDQLIT extends BaseDQLIT {
private final IntegrationTestCaseAssertion assertion;
public AdditionalDQLIT(final AssertionParameterizedArray
parameterizedArray) throws IOException, JAXBException, SQLException,
ParseException {
- super(parameterizedArray.getTestCaseContext().getParentPath(),
- parameterizedArray.getAssertion(),
- parameterizedArray.getAdapter(),
- parameterizedArray.getScenario(),
- parameterizedArray.getDatabaseType(),
- parameterizedArray.getSqlExecuteType(),
-
parameterizedArray.getTestCaseContext().getTestCase().getSql());
+ super(parameterizedArray);
assertion = parameterizedArray.getAssertion();
}
@@ -72,9 +69,8 @@ public final class AdditionalDQLIT extends BaseDQLIT {
}
private void
assertExecuteQueryForStatementWithResultSetTypeAndResultSetConcurrency(final
Connection connection) throws SQLException, ParseException {
- try (
- Statement statement =
connection.createStatement(ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY);
- ResultSet resultSet =
statement.executeQuery(String.format(getSql(),
assertion.getSQLValues().toArray()))) {
+ try (Statement statement =
connection.createStatement(ResultSet.TYPE_FORWARD_ONLY,
ResultSet.CONCUR_READ_ONLY);
+ ResultSet resultSet =
statement.executeQuery(String.format(getSql(),
assertion.getSQLValues().toArray()))) {
assertResultSet(resultSet);
}
}
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dql/BaseDQLIT.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dql/BaseDQLIT.java
index 6375b8a..1cfea31 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dql/BaseDQLIT.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dql/BaseDQLIT.java
@@ -18,12 +18,11 @@
package org.apache.shardingsphere.test.integration.engine.it.dql;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import
org.apache.shardingsphere.test.integration.cases.assertion.IntegrationTestCaseAssertion;
import
org.apache.shardingsphere.test.integration.cases.dataset.metadata.DataSetColumn;
import
org.apache.shardingsphere.test.integration.cases.dataset.metadata.DataSetMetadata;
import org.apache.shardingsphere.test.integration.cases.dataset.row.DataSetRow;
import org.apache.shardingsphere.test.integration.engine.it.SingleIT;
-import org.apache.shardingsphere.test.integration.engine.param.SQLExecuteType;
+import
org.apache.shardingsphere.test.integration.engine.param.model.AssertionParameterizedArray;
import org.apache.shardingsphere.test.integration.env.EnvironmentPath;
import
org.apache.shardingsphere.test.integration.env.IntegrationTestEnvironment;
import
org.apache.shardingsphere.test.integration.env.dataset.DataSetEnvironmentManager;
@@ -48,9 +47,8 @@ import static org.junit.Assert.assertTrue;
public abstract class BaseDQLIT extends SingleIT {
- protected BaseDQLIT(final String parentPath, final
IntegrationTestCaseAssertion assertion, final String adapter, final String
scenario,
- final DatabaseType databaseType, final SQLExecuteType
sqlExecuteType, final String sql) throws IOException, JAXBException,
SQLException, ParseException {
- super(parentPath, assertion, adapter, scenario, databaseType,
sqlExecuteType, sql);
+ protected BaseDQLIT(final AssertionParameterizedArray parameterizedArray)
throws IOException, JAXBException, SQLException, ParseException {
+ super(parameterizedArray);
}
@BeforeClass
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dql/GeneralDQLIT.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dql/GeneralDQLIT.java
index 6ade722..1266648 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dql/GeneralDQLIT.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/it/dql/GeneralDQLIT.java
@@ -20,6 +20,8 @@ package
org.apache.shardingsphere.test.integration.engine.it.dql;
import org.apache.shardingsphere.test.integration.cases.SQLCommandType;
import
org.apache.shardingsphere.test.integration.cases.assertion.IntegrationTestCaseAssertion;
import org.apache.shardingsphere.test.integration.cases.value.SQLValue;
+import org.apache.shardingsphere.test.integration.engine.it.ParallelLevel;
+import org.apache.shardingsphere.test.integration.engine.it.RuntimeStrategy;
import
org.apache.shardingsphere.test.integration.engine.param.ParameterizedArrayFactory;
import org.apache.shardingsphere.test.integration.engine.param.SQLExecuteType;
import
org.apache.shardingsphere.test.integration.engine.param.model.AssertionParameterizedArray;
@@ -38,18 +40,13 @@ import java.util.Collection;
import static org.junit.Assert.assertTrue;
+@RuntimeStrategy(parallelLevel = ParallelLevel.CASE)
public final class GeneralDQLIT extends BaseDQLIT {
private final IntegrationTestCaseAssertion assertion;
public GeneralDQLIT(final AssertionParameterizedArray parameterizedArray)
throws IOException, JAXBException, SQLException, ParseException {
- super(parameterizedArray.getTestCaseContext().getParentPath(),
- parameterizedArray.getAssertion(),
- parameterizedArray.getAdapter(),
- parameterizedArray.getScenario(),
- parameterizedArray.getDatabaseType(),
- parameterizedArray.getSqlExecuteType(),
-
parameterizedArray.getTestCaseContext().getTestCase().getSql());
+ super(parameterizedArray);
assertion = parameterizedArray.getAssertion();
}
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/junit/parallel/ParallelParameterized.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/junit/ITParameterized.java
similarity index 61%
rename from
shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/junit/parallel/ParallelParameterized.java
rename to
shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/junit/ITParameterized.java
index acd5729..6288c64 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/junit/parallel/ParallelParameterized.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/junit/ITParameterized.java
@@ -15,19 +15,24 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.test.integration.engine.junit.parallel;
+package org.apache.shardingsphere.test.integration.engine.junit;
+import org.apache.shardingsphere.test.integration.engine.it.RuntimeStrategy;
+import
org.apache.shardingsphere.test.integration.engine.junit.parallel.ParallelRunnerScheduler;
import org.junit.runners.Parameterized;
/**
- * Parallel parameterized.
+ * IT parameterized.
*/
-public final class ParallelParameterized extends Parameterized {
+public final class ITParameterized extends Parameterized {
//CHECKSTYLE:OFF
- public ParallelParameterized(final Class<?> klass) throws Throwable {
+ public ITParameterized(final Class<?> klass) throws Throwable {
//CHECKSTYLE:ON
super(klass);
- setScheduler(new ParallelRunnerScheduler());
+ RuntimeStrategy runtimeStrategy =
klass.getAnnotation(RuntimeStrategy.class);
+ if (null != runtimeStrategy) {
+ setScheduler(new ParallelRunnerScheduler(runtimeStrategy));
+ }
}
}
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/junit/parallel/ParallelRunnerScheduler.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/junit/parallel/ParallelRunnerScheduler.java
index 1523987..2b8712a 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/junit/parallel/ParallelRunnerScheduler.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/junit/parallel/ParallelRunnerScheduler.java
@@ -17,19 +17,21 @@
package org.apache.shardingsphere.test.integration.engine.junit.parallel;
+import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import org.apache.shardingsphere.test.integration.cases.SQLCommandType;
+import org.apache.shardingsphere.test.integration.engine.it.RuntimeStrategy;
import
org.apache.shardingsphere.test.integration.engine.junit.parallel.impl.CaseParallelRunnerExecutor;
import
org.apache.shardingsphere.test.integration.engine.junit.parallel.impl.ScenarioParallelRunnerExecutor;
import
org.apache.shardingsphere.test.integration.engine.param.model.ParameterizedArray;
-import
org.apache.shardingsphere.test.integration.env.IntegrationTestEnvironment;
import org.junit.runners.model.RunnerScheduler;
import org.junit.runners.parameterized.BlockJUnit4ClassRunnerWithParameters;
import java.lang.reflect.Field;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
/**
* Parallel runner scheduler.
@@ -38,13 +40,17 @@ public final class ParallelRunnerScheduler implements
RunnerScheduler {
private final Field parametersField;
- private final Map<String, ParallelRunnerExecutor> runnerExecutors;
+ private final ConcurrentMap<RunnerExecutorKey, ParallelRunnerExecutor>
runnerExecutors = new ConcurrentHashMap<>();
+
+ private final RuntimeStrategy runtimeStrategy;
private volatile Field runnerField;
- public ParallelRunnerScheduler() {
+ private final Lock lock = new ReentrantLock();
+
+ public ParallelRunnerScheduler(final RuntimeStrategy runtimeStrategy) {
+ this.runtimeStrategy = runtimeStrategy;
parametersField = getParametersField();
- runnerExecutors = getRunnerExecutors();
}
@SneakyThrows(NoSuchFieldException.class)
@@ -54,24 +60,11 @@ public final class ParallelRunnerScheduler implements
RunnerScheduler {
return result;
}
- private Map<String, ParallelRunnerExecutor> getRunnerExecutors() {
- Map<String, ParallelRunnerExecutor> result = new
HashMap<>(IntegrationTestEnvironment.getInstance().getDataSourceEnvironments().size()
* 2, 1);
- for (DatabaseType each :
IntegrationTestEnvironment.getInstance().getDataSourceEnvironments().keySet()) {
- result.put(getRunnerExecutorKey(each.getName(),
SQLCommandType.DQL.name()), new CaseParallelRunnerExecutor());
- result.put(getRunnerExecutorKey(each.getName(), ""), new
ScenarioParallelRunnerExecutor());
- }
- return result;
- }
-
- private String getRunnerExecutorKey(final String databaseType, final
String sqlCommandType) {
- return String.join("_", databaseType, sqlCommandType);
- }
-
@Override
public void schedule(final Runnable childStatement) {
Object[] parameters = getParameters(childStatement);
ParameterizedArray parameterizedArray = (ParameterizedArray)
parameters[0];
- getRunnerExecutor(parameterizedArray).execute(parameterizedArray,
childStatement);
+ getRunnerExecutor(new
RunnerExecutorKey(parameterizedArray.getDatabaseType())).execute(parameterizedArray,
childStatement);
}
@SneakyThrows(ReflectiveOperationException.class)
@@ -83,10 +76,34 @@ public final class ParallelRunnerScheduler implements
RunnerScheduler {
return (Object[]) parametersField.get(runnerField.get(childStatement));
}
- private ParallelRunnerExecutor getRunnerExecutor(final ParameterizedArray
parameterizedArray) {
- return SQLCommandType.DQL == parameterizedArray.getSqlCommandType()
- ?
runnerExecutors.get(getRunnerExecutorKey(parameterizedArray.getDatabaseType().getName(),
SQLCommandType.DQL.name()))
- :
runnerExecutors.get(getRunnerExecutorKey(parameterizedArray.getDatabaseType().getName(),
""));
+ private ParallelRunnerExecutor getRunnerExecutor(final RunnerExecutorKey
runnerExecutorKey) {
+ ParallelRunnerExecutor runnerExecutor =
this.runnerExecutors.get(runnerExecutorKey);
+ if (null != runnerExecutor) {
+ return runnerExecutor;
+ }
+ try {
+ lock.lock();
+ runnerExecutor = this.runnerExecutors.get(runnerExecutorKey);
+ if (null != runnerExecutor) {
+ return runnerExecutor;
+ }
+ runnerExecutor = getRunnerExecutor();
+ this.runnerExecutors.put(runnerExecutorKey, runnerExecutor);
+ return runnerExecutor;
+ } finally {
+ lock.unlock();
+ }
+ }
+
+ private ParallelRunnerExecutor getRunnerExecutor() {
+ switch (runtimeStrategy.parallelLevel()) {
+ case CASE:
+ return new CaseParallelRunnerExecutor();
+ case SCENARIO:
+ return new ScenarioParallelRunnerExecutor();
+ default:
+ throw new UnsupportedOperationException("Unsupported runtime
strategy.");
+ }
}
@Override
@@ -95,4 +112,30 @@ public final class ParallelRunnerScheduler implements
RunnerScheduler {
runnerExecutors.values().forEach(ParallelRunnerExecutor::finished);
}
}
+
+ /**
+ * Runner executor key.
+ */
+ @RequiredArgsConstructor
+ private static final class RunnerExecutorKey {
+
+ private final DatabaseType databaseType;
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ RunnerExecutorKey that = (RunnerExecutorKey) o;
+ return databaseType.getName().equals(that.databaseType.getName());
+ }
+
+ @Override
+ public int hashCode() {
+ return databaseType.hashCode();
+ }
+ }
}
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/junit/parallel/impl/CaseParallelRunnerExecutor.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/junit/parallel/impl/CaseParallelRunnerExecutor.java
index 7b0eb9d..eeabd10 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/junit/parallel/impl/CaseParallelRunnerExecutor.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/junit/parallel/impl/CaseParallelRunnerExecutor.java
@@ -17,31 +17,42 @@
package org.apache.shardingsphere.test.integration.engine.junit.parallel.impl;
+import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import
org.apache.shardingsphere.infra.executor.kernel.thread.ExecutorServiceManager;
import
org.apache.shardingsphere.test.integration.engine.junit.parallel.ParallelRunnerExecutor;
import
org.apache.shardingsphere.test.integration.engine.param.model.ParameterizedArray;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.TimeUnit;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
/**
* Parallel runner executor with case.
*/
+@RequiredArgsConstructor
public final class CaseParallelRunnerExecutor implements
ParallelRunnerExecutor {
private final ExecutorServiceManager executorServiceManager = new
ExecutorServiceManager(Runtime.getRuntime().availableProcessors() * 2 - 1);
+ private final List<Future<?>> caseTaskResults = new LinkedList<>();
+
@Override
public void execute(final ParameterizedArray parameterizedArray, final
Runnable childStatement) {
- executorServiceManager.getExecutorService().submit(childStatement);
+
caseTaskResults.add(executorServiceManager.getExecutorService().submit(() ->
childStatement.run()));
}
- @SneakyThrows(InterruptedException.class)
+ @SneakyThrows
@Override
public void finished() {
- ExecutorService executorService =
executorServiceManager.getExecutorService();
- executorService.shutdown();
- executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
+ caseTaskResults.forEach(future -> {
+ try {
+ future.get();
+ } catch (InterruptedException ignore) {
+ } catch (ExecutionException ignore) {
+ }
+ });
+ executorServiceManager.getExecutorService().shutdownNow();
}
}
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/junit/parallel/impl/ScenarioParallelRunnerExecutor.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/junit/parallel/impl/ScenarioParallelRunnerExecutor.java
index a61b2b8..31b950d 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/junit/parallel/impl/ScenarioParallelRunnerExecutor.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/engine/junit/parallel/impl/ScenarioParallelRunnerExecutor.java
@@ -17,30 +17,28 @@
package org.apache.shardingsphere.test.integration.engine.junit.parallel.impl;
-import com.google.common.base.Charsets;
-import com.google.common.hash.Hasher;
-import com.google.common.hash.Hashing;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
-import com.lmax.disruptor.BlockingWaitStrategy;
-import com.lmax.disruptor.EventFactory;
-import com.lmax.disruptor.EventHandler;
-import com.lmax.disruptor.RingBuffer;
-import com.lmax.disruptor.Sequence;
-import com.lmax.disruptor.SequenceReportingEventHandler;
-import com.lmax.disruptor.dsl.Disruptor;
-import com.lmax.disruptor.dsl.ProducerType;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
import
org.apache.shardingsphere.test.integration.engine.junit.parallel.ParallelRunnerExecutor;
import
org.apache.shardingsphere.test.integration.engine.param.model.ParameterizedArray;
-import
org.apache.shardingsphere.test.integration.env.IntegrationTestEnvironment;
-import java.util.Collection;
+import java.io.Closeable;
+import java.io.IOException;
import java.util.LinkedList;
-import java.util.concurrent.ThreadFactory;
-import java.util.stream.Collectors;
+import java.util.List;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Future;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
/**
* Parallel runner executor with scenario.
@@ -48,131 +46,121 @@ import java.util.stream.Collectors;
@Slf4j
public final class ScenarioParallelRunnerExecutor implements
ParallelRunnerExecutor {
- private final Disruptor<CaseEntryEvent> disruptor;
+ private final ConcurrentMap<ScenarioKey, ScenarioExecutorQueue>
scenarioExecutorQueues = new ConcurrentHashMap<>();
- private final RingBuffer<CaseEntryEvent> ringBuffer;
+ private final Lock lock = new ReentrantLock();
- public ScenarioParallelRunnerExecutor() {
- disruptor = createDisruptor();
- disruptor.handleEventsWith(createEventHandlers()).then(new
CleanupEventHandler());
- disruptor.start();
- ringBuffer = disruptor.getRingBuffer();
- }
+ private final List<Future<?>> scenarioTaskResults = new LinkedList<>();
- private Disruptor<CaseEntryEvent> createDisruptor() {
- EventFactory<CaseEntryEvent> eventFactory = CaseEntryEvent::new;
- ThreadFactory threadFactory = new ThreadFactoryBuilder()
-
.setDaemon(false).setNameFormat("disruptor-processors-%d").setUncaughtExceptionHandler((thread,
ex) -> log.error("Disruptor handler thread exception", ex)).build();
- return new Disruptor<>(eventFactory, 16384, threadFactory,
ProducerType.SINGLE, new BlockingWaitStrategy());
+ @Override
+ public void execute(final ParameterizedArray parameterizedArray, final
Runnable childStatement) {
+ scenarioTaskResults.add(getScenarioExecutorQueue(new
ScenarioKey(parameterizedArray.getAdapter(), parameterizedArray.getScenario(),
parameterizedArray.getDatabaseType().getName()))
+ .submit(childStatement));
}
- private CaseEventHandler[] createEventHandlers() {
- Collection<CaseEventHandler> result = new LinkedList<>();
- for (String each :
IntegrationTestEnvironment.getInstance().getAdapters()) {
- result.addAll(createEventHandlers(each,
IntegrationTestEnvironment.getInstance().getScenarios(),
IntegrationTestEnvironment.getInstance().getDataSourceEnvironments().keySet()));
+ private ScenarioExecutorQueue getScenarioExecutorQueue(final ScenarioKey
scenarioKey) {
+ ScenarioExecutorQueue scenarioExecutorQueue =
this.scenarioExecutorQueues.get(scenarioKey);
+ if (null != scenarioExecutorQueue) {
+ return scenarioExecutorQueue;
}
- return result.toArray(new CaseEventHandler[0]);
- }
-
- private Collection<CaseEventHandler> createEventHandlers(final String
adapter, final Collection<String> scenarios, final Collection<DatabaseType>
databaseTypes) {
- Collection<CaseEventHandler> result = new LinkedList<>();
- for (String each : scenarios) {
- result.addAll(createEventHandlers(adapter, each, databaseTypes));
+ try {
+ lock.lock();
+ scenarioExecutorQueue =
this.scenarioExecutorQueues.get(scenarioKey);
+ if (null != scenarioExecutorQueue) {
+ return scenarioExecutorQueue;
+ }
+ scenarioExecutorQueue = new ScenarioExecutorQueue(scenarioKey);
+ this.scenarioExecutorQueues.put(scenarioKey,
scenarioExecutorQueue);
+ return scenarioExecutorQueue;
+ } finally {
+ lock.unlock();
}
- return result;
- }
-
- private Collection<CaseEventHandler> createEventHandlers(final String
adapter, final String scenario, final Collection<DatabaseType> databaseTypes) {
- return databaseTypes.stream().map(each -> new CaseEventHandler(new
CaseKey(adapter, scenario,
each.getName()).hashCode())).collect(Collectors.toList());
- }
-
- @Override
- public void execute(final ParameterizedArray parameterizedArray, final
Runnable childStatement) {
- // TODO disruptor cannot shutdown gracefully, the test case will not
block and will next test cases (for example: DQL). Just use sync run, need to
FIXME here.
- childStatement.run();
-// ringBuffer.publishEvent((event, sequence) -> {
-// event.reset();
-// event.setCaseKey(new CaseKey(parameterizedArray.getAdapter(),
parameterizedArray.getScenario(),
parameterizedArray.getDatabaseType().getName()));
-// event.setChildStatement(childStatement);
-// });
}
@Override
public void finished() {
- if (null != disruptor) {
- disruptor.shutdown();
- }
+ scenarioTaskResults.forEach(future -> {
+ try {
+ future.get();
+ } catch (InterruptedException ignore) {
+ } catch (ExecutionException ignore) {
+ }
+ });
+ scenarioExecutorQueues.values().forEach(scenarioExecutorQueue -> {
+ try {
+ scenarioExecutorQueue.close();
+ } catch (IOException ignore) {
+ }
+ });
}
+ /**
+ * Scenario key.
+ */
@RequiredArgsConstructor
- private static final class CaseKey {
+ private static final class ScenarioKey {
private final String adapter;
private final String scenario;
private final String databaseTypeName;
-
+
@Override
- public int hashCode() {
- Hasher hasher = Hashing.murmur3_32().newHasher();
- hasher.putString(adapter, Charsets.UTF_8);
- hasher.putString(scenario, Charsets.UTF_8);
- hasher.putString(databaseTypeName, Charsets.UTF_8);
- return hasher.hash().asInt();
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ ScenarioKey that = (ScenarioKey) o;
+ if (!adapter.equals(that.adapter)) {
+ return false;
+ }
+ if (!scenario.equals(that.scenario)) {
+ return false;
+ }
+ return databaseTypeName.equals(that.databaseTypeName);
}
- }
- /**
- * Case entry event.
- */
- @Setter
- private static final class CaseEntryEvent {
-
- private CaseKey caseKey;
-
- private Runnable childStatement;
-
@Override
public int hashCode() {
- return caseKey.hashCode();
+ int result = adapter.hashCode();
+ result = 31 * result + scenario.hashCode();
+ result = 31 * result + databaseTypeName.hashCode();
+ return result;
}
-
- public void reset() {
- caseKey = null;
- childStatement = null;
+
+ @Override
+ public String toString() {
+ return String.join("-", adapter, scenario, databaseTypeName);
}
}
- @RequiredArgsConstructor
- private static final class CaseEventHandler implements
SequenceReportingEventHandler<CaseEntryEvent> {
-
- private final int hashCode;
-
- private Sequence reportingSequence;
+ /**
+ * Scenario executor queue.
+ */
+ @Setter
+ private static final class ScenarioExecutorQueue implements Closeable {
- @Override
- public void onEvent(final CaseEntryEvent event, final long sequence,
final boolean endOfBatch) {
- if (null == event.caseKey || event.hashCode() != hashCode) {
- return;
- }
- event.childStatement.run();
- if (null != reportingSequence) {
- reportingSequence.set(sequence);
- }
+ private final BlockingQueue<Runnable> executorQueue;
+
+ private final ExecutorService executorService;
+
+ ScenarioExecutorQueue(final ScenarioKey scenarioKey) {
+ this.executorQueue = new LinkedBlockingQueue<>();
+ this.executorService = new ThreadPoolExecutor(1, 1, 0L,
TimeUnit.MILLISECONDS,
+ this.executorQueue, new
ThreadFactoryBuilder().setNameFormat("ScenarioExecutor-" + scenarioKey +
"-pool-%d").build());
}
-
- @Override
- public void setSequenceCallback(final Sequence sequenceCallback) {
- reportingSequence = sequenceCallback;
+
+ public Future<?> submit(final Runnable childStatement) {
+ return this.executorService.submit(childStatement);
}
- }
- private static final class CleanupEventHandler implements
EventHandler<CaseEntryEvent> {
-
@Override
- public void onEvent(final CaseEntryEvent event, final long sequence,
final boolean endOfBatch) {
- event.reset();
+ public void close() throws IOException {
+ this.executorService.shutdownNow();
}
}
}
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/env/IntegrationTestEnvironment.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/env/IntegrationTestEnvironment.java
index ed84a7a..eb29c7a 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/env/IntegrationTestEnvironment.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/env/IntegrationTestEnvironment.java
@@ -40,6 +40,7 @@ import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
+import java.util.Set;
import java.util.stream.Collectors;
/**
@@ -58,7 +59,7 @@ public final class IntegrationTestEnvironment {
private final boolean runAdditionalTestCases;
- private final Map<DatabaseType, Map<String, DataSourceEnvironment>>
dataSourceEnvironments;
+ private Map<DatabaseType, Map<String, DataSourceEnvironment>>
dataSourceEnvironments;
private final Map<String, DataSourceEnvironment> proxyEnvironments;
@@ -71,7 +72,9 @@ public final class IntegrationTestEnvironment {
Map<String, DatabaseScenarioProperties> databaseProps =
getDatabaseScenarioProperties();
dataSourceEnvironments =
createDataSourceEnvironments(getDatabaseTypes(engineEnvProps), databaseProps);
if (EnvironmentType.EMBEDDED == envType) {
- createEmbeddedDatabases(new
EmbeddedDatabaseDistributionProperties(EnvironmentProperties.loadProperties("env/embedded-databases.properties")));
+ EmbeddedDatabaseDistributionProperties embeddedDatabaseProps = new
EmbeddedDatabaseDistributionProperties(EnvironmentProperties.loadProperties("env/embedded-databases.properties"));
+ dataSourceEnvironments =
mergeDataSourceEnvironments(embeddedDatabaseProps);
+ createEmbeddedDatabases(embeddedDatabaseProps);
}
proxyEnvironments = createProxyEnvironments(databaseProps);
if (EnvironmentType.DOCKER == envType) {
@@ -130,6 +133,28 @@ public final class IntegrationTestEnvironment {
databaseProps.getDatabasePort(databaseType),
databaseProps.getDatabaseUsername(databaseType),
databaseProps.getDatabasePassword(databaseType));
}
+ private Map<DatabaseType, Map<String, DataSourceEnvironment>>
mergeDataSourceEnvironments(final EmbeddedDatabaseDistributionProperties
embeddedDatabaseProps) {
+ Set<DatabaseType> databaseTypes = dataSourceEnvironments.keySet();
+ Map<DatabaseType, Map<String, DataSourceEnvironment>> result = new
LinkedHashMap<>(databaseTypes.size(), 1);
+ for (DatabaseType each : databaseTypes) {
+ Map<String, DataSourceEnvironment> dataSourceEnvs = new
LinkedHashMap<>(scenarios.size(), 1);
+ for (String scenario : scenarios) {
+ dataSourceEnvs.put(scenario,
mergeDataSourceEnvironment(dataSourceEnvironments.get(each).get(scenario),
embeddedDatabaseProps));
+ result.put(each, dataSourceEnvs);
+ }
+ }
+ return result;
+ }
+
+ private DataSourceEnvironment mergeDataSourceEnvironment(final
DataSourceEnvironment dataSourceEnvironment, final
EmbeddedDatabaseDistributionProperties embeddedDatabaseProps) {
+ DatabaseType databaseType = dataSourceEnvironment.getDatabaseType();
+ if (databaseType instanceof H2DatabaseType) {
+ return new DataSourceEnvironment(databaseType, "", 0, "sa", "");
+ }
+ return new DataSourceEnvironment(databaseType,
dataSourceEnvironment.getHost(),
+ embeddedDatabaseProps.getInstancePort(databaseType),
dataSourceEnvironment.getUsername(), dataSourceEnvironment.getPassword());
+ }
+
private void createEmbeddedDatabases(final
EmbeddedDatabaseDistributionProperties embeddedDatabaseProps) {
for (Entry<DatabaseType, Map<String, DataSourceEnvironment>> entry :
dataSourceEnvironments.entrySet()) {
createEmbeddedDatabases(entry.getKey(), entry.getValue(),
embeddedDatabaseProps);
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/env/database/embedded/EmbeddedDatabaseDistributionProperties.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/env/database/embedded/EmbeddedDatabaseDistributionProperties.java
index 5980210..6d1d6ed 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/env/database/embedded/EmbeddedDatabaseDistributionProperties.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/env/database/embedded/EmbeddedDatabaseDistributionProperties.java
@@ -49,4 +49,14 @@ public final class EmbeddedDatabaseDistributionProperties {
public String getVersion(final DatabaseType databaseType) {
return props.getProperty(String.format("it.%s.distribution.version",
databaseType.getName().toLowerCase()));
}
+
+ /**
+ * Get database port.
+ *
+ * @param databaseType database type
+ * @return database port
+ */
+ public int getInstancePort(final DatabaseType databaseType) {
+ return
Integer.parseInt(props.getProperty(String.format("it.%s.instance.port",
databaseType.getName().toLowerCase())));
+ }
}
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/env/database/embedded/EmbeddedDatabaseManager.java
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/env/database/embedded/EmbeddedDatabaseManager.java
index 21db9f3..77fe115 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/env/database/embedded/EmbeddedDatabaseManager.java
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/java/org/apache/shardingsphere/test/integration/env/database/embedded/EmbeddedDatabaseManager.java
@@ -22,7 +22,6 @@ import lombok.NoArgsConstructor;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.database.type.DatabaseTypeRegistry;
import org.apache.shardingsphere.infra.database.type.dialect.H2DatabaseType;
-import
org.apache.shardingsphere.infra.database.type.dialect.PostgreSQLDatabaseType;
import org.apache.shardingsphere.infra.spi.ShardingSphereServiceLoader;
import org.apache.shardingsphere.infra.spi.typed.TypedSPIRegistry;
@@ -59,13 +58,7 @@ public final class EmbeddedDatabaseManager {
if (databaseTypeImpl instanceof H2DatabaseType) {
return;
}
- // TODO This can be a single instance if the GitHub Action port has
been adjusted
- String embeddedDatabaseKey;
- if (databaseTypeImpl instanceof PostgreSQLDatabaseType) {
- embeddedDatabaseKey = databaseType;
- } else {
- embeddedDatabaseKey = String.join("_", databaseType, scenario);
- }
+ String embeddedDatabaseKey = databaseType;
if (EMBEDDED_DATABASES_CACHE.containsKey(embeddedDatabaseKey)) {
return;
}
diff --git
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/embedded-databases.properties
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/embedded-databases.properties
index a167cb9..6092c2b 100644
---
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/embedded-databases.properties
+++
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/embedded-databases.properties
@@ -27,6 +27,7 @@ it.mysql.distribution.url=https://dev.mysql.com/get/Downloads
# 10.13 v8_0_11
# 10.14|10.15 v5_7_27
it.mysql.distribution.version=
+it.mysql.instance.port=6033
it.postgresql.distribution.url=https://get.enterprisedb.com/postgresql/
# V11_1: on Mac OS X and Windows 64 bit
@@ -35,3 +36,4 @@
it.postgresql.distribution.url=https://get.enterprisedb.com/postgresql/
# 10.10-10.12 V9_6_11|V10_6
# 10.12-10.14 V11_1
it.postgresql.distribution.version=
+it.postgresql.instance.port=5432