You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2023/03/21 05:20:04 UTC
[shardingsphere] branch master updated: Refactor SQL E2E (#24709)
This is an automated email from the ASF dual-hosted git repository.
panjuan 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 cf1af426977 Refactor SQL E2E (#24709)
cf1af426977 is described below
commit cf1af426977bd652f7fad0154e0b0b14ffd2933b
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Tue Mar 21 13:19:49 2023 +0800
Refactor SQL E2E (#24709)
---
.../authority/AuthorityEnvironmentManager.java | 28 ++---
.../dal/{BaseDALE2EIT.java => DALE2EIT.java} | 69 ++++++++++-
.../test/e2e/engine/dal/GeneralDALE2EIT.java | 92 --------------
.../test/e2e/engine/dcl/BaseDCLE2EIT.java | 56 ---------
.../dcl/{GeneralDCLE2EIT.java => DCLE2EIT.java} | 16 ++-
.../ddl/{BaseDDLE2EIT.java => DDLE2EIT.java} | 127 +++++++++++++++++---
.../test/e2e/engine/ddl/GeneralDDLE2EIT.java | 132 ---------------------
.../test/e2e/engine/ral/GeneralRALE2EIT.java | 96 ---------------
.../ral/{BaseRALE2EIT.java => RALE2EIT.java} | 111 ++++++++++++-----
.../test/e2e/engine/rdl/GeneralRDLE2EIT.java | 95 ---------------
.../rdl/{BaseRDLE2EIT.java => RDLE2EIT.java} | 101 ++++++++++++----
.../test/e2e/engine/rql/BaseRQLE2EIT.java | 83 -------------
.../test/e2e/engine/rql/GeneralRQLE2EIT.java | 80 -------------
.../{rdl/BaseRDLE2EIT.java => rql/RQLE2EIT.java} | 104 ++++++++--------
14 files changed, 404 insertions(+), 786 deletions(-)
diff --git a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/scenario/authority/AuthorityEnvironmentManager.java b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/scenario/authority/AuthorityEnvironmentManager.java
index 93ecbab5479..f8b53dace11 100644
--- a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/scenario/authority/AuthorityEnvironmentManager.java
+++ b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/scenario/authority/AuthorityEnvironmentManager.java
@@ -35,28 +35,24 @@ import java.util.Map;
* Authority environment manager.
*/
@Slf4j
-public final class AuthorityEnvironmentManager {
-
- private final AuthorityEnvironment authorityEnvironment;
+public final class AuthorityEnvironmentManager implements AutoCloseable {
private final Map<String, DataSource> instanceDataSourceMap;
private final DatabaseType databaseType;
- public AuthorityEnvironmentManager(final String path, final Map<String, DataSource> instanceDataSourceMap, final DatabaseType databaseType) throws IOException, JAXBException {
+ private final AuthorityEnvironment authorityEnvironment;
+
+ public AuthorityEnvironmentManager(final String path, final Map<String, DataSource> instanceDataSourceMap, final DatabaseType databaseType) throws IOException, JAXBException, SQLException {
+ this.instanceDataSourceMap = instanceDataSourceMap;
+ this.databaseType = databaseType;
try (FileReader reader = new FileReader(path)) {
authorityEnvironment = (AuthorityEnvironment) JAXBContext.newInstance(AuthorityEnvironment.class).createUnmarshaller().unmarshal(reader);
}
- this.instanceDataSourceMap = instanceDataSourceMap;
- this.databaseType = databaseType;
+ init();
}
- /**
- * Initialize data.
- *
- * @throws SQLException SQL exception
- */
- public void initialize() throws SQLException {
+ private void init() throws SQLException {
Collection<String> initSQLs = authorityEnvironment.getInitSQLs(databaseType);
if (initSQLs.isEmpty()) {
return;
@@ -66,12 +62,8 @@ public final class AuthorityEnvironmentManager {
}
}
- /**
- * Clean data.
- *
- * @throws SQLException SQL exception
- */
- public void clean() throws SQLException {
+ @Override
+ public void close() throws SQLException {
Collection<String> cleanSQLs = authorityEnvironment.getCleanSQLs(databaseType);
if (cleanSQLs.isEmpty()) {
return;
diff --git a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/dal/BaseDALE2EIT.java b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/dal/DALE2EIT.java
similarity index 57%
rename from test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/dal/BaseDALE2EIT.java
rename to test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/dal/DALE2EIT.java
index c8a26a365d3..4a889408f98 100644
--- a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/dal/BaseDALE2EIT.java
+++ b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/dal/DALE2EIT.java
@@ -17,28 +17,79 @@
package org.apache.shardingsphere.test.e2e.engine.dal;
+import org.apache.shardingsphere.test.e2e.cases.SQLCommandType;
import org.apache.shardingsphere.test.e2e.cases.dataset.metadata.DataSetColumn;
import org.apache.shardingsphere.test.e2e.cases.dataset.metadata.DataSetMetaData;
import org.apache.shardingsphere.test.e2e.cases.dataset.row.DataSetRow;
import org.apache.shardingsphere.test.e2e.engine.E2EContainerComposer;
import org.apache.shardingsphere.test.e2e.engine.SingleE2EITContainerComposer;
+import org.apache.shardingsphere.test.e2e.framework.E2EITExtension;
+import org.apache.shardingsphere.test.e2e.framework.param.array.E2ETestParameterFactory;
+import org.apache.shardingsphere.test.e2e.framework.param.model.AssertionTestParameter;
+import org.junit.jupiter.api.condition.EnabledIf;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.ArgumentsProvider;
+import org.junit.jupiter.params.provider.ArgumentsSource;
+import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
+import java.sql.Statement;
import java.sql.Types;
+import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
+import java.util.stream.Stream;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.jupiter.api.Assertions.assertTrue;
-public abstract class BaseDALE2EIT {
+@ExtendWith(E2EITExtension.class)
+public final class DALE2EIT {
- protected final void assertResultSet(final SingleE2EITContainerComposer containerComposer, final ResultSet resultSet) throws SQLException {
+ @ParameterizedTest(name = "{0}")
+ @EnabledIf("isEnabled")
+ @ArgumentsSource(TestCaseArgumentsProvider.class)
+ public void assertExecute(final AssertionTestParameter testParam) throws SQLException, ParseException {
+ // TODO make sure DCL test case can not be null
+ if (null == testParam.getTestCaseContext()) {
+ return;
+ }
+ try (SingleE2EITContainerComposer containerComposer = new SingleE2EITContainerComposer(testParam)) {
+ assertExecute(containerComposer);
+ }
+ }
+
+ private void assertExecute(final SingleE2EITContainerComposer containerComposer) throws SQLException, ParseException {
+ try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
+ try (Statement statement = connection.createStatement()) {
+ statement.execute(containerComposer.getSQL());
+ assertExecuteResult(containerComposer, statement);
+ }
+ }
+ }
+
+ private void assertExecuteResult(final SingleE2EITContainerComposer containerComposer, final Statement statement) throws SQLException {
+ try (ResultSet resultSet = statement.getResultSet()) {
+ if (null == containerComposer.getAssertion().getAssertionSQL()) {
+ assertResultSet(containerComposer, resultSet);
+ } else {
+ statement.execute(containerComposer.getAssertion().getAssertionSQL().getSql());
+ try (ResultSet assertionSQLResultSet = statement.getResultSet()) {
+ assertResultSet(containerComposer, assertionSQLResultSet);
+ }
+ }
+ }
+ }
+
+ private void assertResultSet(final SingleE2EITContainerComposer containerComposer, final ResultSet resultSet) throws SQLException {
assertMetaData(resultSet.getMetaData(), getExpectedColumns(containerComposer));
assertRows(resultSet, containerComposer.getDataSet().getRows());
}
@@ -96,4 +147,18 @@ public abstract class BaseDALE2EIT {
assertThat(String.valueOf(actual.getObject(columnIndex)), is(expected));
assertThat(String.valueOf(actual.getObject(columnLabel)), is(expected));
}
+
+ private static boolean isEnabled() {
+ return E2ETestParameterFactory.containsTestParameter();
+ }
+
+ private static class TestCaseArgumentsProvider implements ArgumentsProvider {
+
+ @Override
+ public Stream<? extends Arguments> provideArguments(final ExtensionContext extensionContext) {
+ Collection<AssertionTestParameter> result = E2ETestParameterFactory.getAssertionTestParameters(SQLCommandType.DAL);
+ // TODO make sure DAL test case can not be null
+ return result.isEmpty() ? Stream.of(Arguments.of(new AssertionTestParameter(null, null, null, null, null, null, null))) : result.stream().map(Arguments::of);
+ }
+ }
}
diff --git a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/dal/GeneralDALE2EIT.java b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/dal/GeneralDALE2EIT.java
deleted file mode 100644
index ab7c1ba3e2c..00000000000
--- a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/dal/GeneralDALE2EIT.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * 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.
- */
-
-package org.apache.shardingsphere.test.e2e.engine.dal;
-
-import org.apache.shardingsphere.test.e2e.cases.SQLCommandType;
-import org.apache.shardingsphere.test.e2e.engine.SingleE2EITContainerComposer;
-import org.apache.shardingsphere.test.e2e.framework.E2EITExtension;
-import org.apache.shardingsphere.test.e2e.framework.param.array.E2ETestParameterFactory;
-import org.apache.shardingsphere.test.e2e.framework.param.model.AssertionTestParameter;
-import org.junit.jupiter.api.condition.EnabledIf;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.junit.jupiter.api.extension.ExtensionContext;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.ArgumentsProvider;
-import org.junit.jupiter.params.provider.ArgumentsSource;
-
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.text.ParseException;
-import java.util.Collection;
-import java.util.stream.Stream;
-
-@ExtendWith(E2EITExtension.class)
-public final class GeneralDALE2EIT extends BaseDALE2EIT {
-
- @ParameterizedTest(name = "{0}")
- @EnabledIf("isEnabled")
- @ArgumentsSource(TestCaseArgumentsProvider.class)
- public void assertExecute(final AssertionTestParameter testParam) throws SQLException, ParseException {
- // TODO make sure DCL test case can not be null
- if (null == testParam.getTestCaseContext()) {
- return;
- }
- try (SingleE2EITContainerComposer containerComposer = new SingleE2EITContainerComposer(testParam)) {
- assertExecute(containerComposer);
- }
- }
-
- private void assertExecute(final SingleE2EITContainerComposer containerComposer) throws SQLException, ParseException {
- try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
- try (Statement statement = connection.createStatement()) {
- statement.execute(containerComposer.getSQL());
- assertExecuteResult(containerComposer, statement);
- }
- }
- }
-
- private void assertExecuteResult(final SingleE2EITContainerComposer containerComposer, final Statement statement) throws SQLException {
- try (ResultSet resultSet = statement.getResultSet()) {
- if (null == containerComposer.getAssertion().getAssertionSQL()) {
- assertResultSet(containerComposer, resultSet);
- } else {
- statement.execute(containerComposer.getAssertion().getAssertionSQL().getSql());
- try (ResultSet assertionSQLResultSet = statement.getResultSet()) {
- assertResultSet(containerComposer, assertionSQLResultSet);
- }
- }
- }
- }
-
- private static boolean isEnabled() {
- return E2ETestParameterFactory.containsTestParameter();
- }
-
- private static class TestCaseArgumentsProvider implements ArgumentsProvider {
-
- @Override
- public Stream<? extends Arguments> provideArguments(final ExtensionContext extensionContext) {
- Collection<AssertionTestParameter> result = E2ETestParameterFactory.getAssertionTestParameters(SQLCommandType.DAL);
- // TODO make sure DAL test case can not be null
- return result.isEmpty() ? Stream.of(Arguments.of(new AssertionTestParameter(null, null, null, null, null, null, null))) : result.stream().map(Arguments::of);
- }
- }
-}
diff --git a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/dcl/BaseDCLE2EIT.java b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/dcl/BaseDCLE2EIT.java
deleted file mode 100644
index d75f03c0286..00000000000
--- a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/dcl/BaseDCLE2EIT.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * 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.
- */
-
-package org.apache.shardingsphere.test.e2e.engine.dcl;
-
-import org.apache.shardingsphere.test.e2e.engine.SingleE2EITContainerComposer;
-import org.apache.shardingsphere.test.e2e.env.runtime.scenario.authority.AuthorityEnvironmentManager;
-import org.apache.shardingsphere.test.e2e.env.runtime.scenario.path.ScenarioCommonPath;
-import org.apache.shardingsphere.test.e2e.framework.param.model.AssertionTestParameter;
-import org.junit.jupiter.api.AfterEach;
-
-import javax.xml.bind.JAXBException;
-import java.io.IOException;
-import java.sql.SQLException;
-
-public abstract class BaseDCLE2EIT {
-
- private AuthorityEnvironmentManager authorityEnvironmentManager;
-
- /**
- * Init.
- *
- * @param testParam test parameter
- * @param containerComposer container composer
- * @throws JAXBException JAXB exception
- * @throws IOException IO exception
- * @throws SQLException SQL exception
- */
- public final void init(final AssertionTestParameter testParam, final SingleE2EITContainerComposer containerComposer) throws JAXBException, IOException, SQLException {
- authorityEnvironmentManager = new AuthorityEnvironmentManager(
- new ScenarioCommonPath(testParam.getScenario()).getAuthorityFile(), containerComposer.getContainerComposer().getActualDataSourceMap(), testParam.getDatabaseType());
- authorityEnvironmentManager.initialize();
- }
-
- @AfterEach
- public final void tearDown() throws Exception {
- // TODO make sure DCL test case can not be null
- if (null != authorityEnvironmentManager) {
- authorityEnvironmentManager.clean();
- }
- }
-}
diff --git a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/dcl/GeneralDCLE2EIT.java b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/dcl/DCLE2EIT.java
similarity index 83%
rename from test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/dcl/GeneralDCLE2EIT.java
rename to test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/dcl/DCLE2EIT.java
index 42144971713..81c18cdd394 100644
--- a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/dcl/GeneralDCLE2EIT.java
+++ b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/dcl/DCLE2EIT.java
@@ -20,6 +20,8 @@ package org.apache.shardingsphere.test.e2e.engine.dcl;
import org.apache.shardingsphere.test.e2e.cases.SQLCommandType;
import org.apache.shardingsphere.test.e2e.cases.SQLExecuteType;
import org.apache.shardingsphere.test.e2e.engine.SingleE2EITContainerComposer;
+import org.apache.shardingsphere.test.e2e.env.runtime.scenario.authority.AuthorityEnvironmentManager;
+import org.apache.shardingsphere.test.e2e.env.runtime.scenario.path.ScenarioCommonPath;
import org.apache.shardingsphere.test.e2e.framework.E2EITExtension;
import org.apache.shardingsphere.test.e2e.framework.param.array.E2ETestParameterFactory;
import org.apache.shardingsphere.test.e2e.framework.param.model.AssertionTestParameter;
@@ -42,7 +44,7 @@ import java.util.Collection;
import java.util.stream.Stream;
@ExtendWith(E2EITExtension.class)
-public final class GeneralDCLE2EIT extends BaseDCLE2EIT {
+public final class DCLE2EIT {
@ParameterizedTest(name = "{0}")
@EnabledIf("isEnabled")
@@ -52,8 +54,10 @@ public final class GeneralDCLE2EIT extends BaseDCLE2EIT {
if (null == testParam.getTestCaseContext()) {
return;
}
- try (SingleE2EITContainerComposer containerComposer = new SingleE2EITContainerComposer(testParam)) {
- init(testParam, containerComposer);
+ try (
+ SingleE2EITContainerComposer containerComposer = new SingleE2EITContainerComposer(testParam);
+ AuthorityEnvironmentManager ignored = new AuthorityEnvironmentManager(
+ new ScenarioCommonPath(testParam.getScenario()).getAuthorityFile(), containerComposer.getContainerComposer().getActualDataSourceMap(), testParam.getDatabaseType())) {
assertExecuteUpdate(containerComposer);
}
}
@@ -81,8 +85,10 @@ public final class GeneralDCLE2EIT extends BaseDCLE2EIT {
if (null == testParam.getTestCaseContext()) {
return;
}
- try (SingleE2EITContainerComposer containerComposer = new SingleE2EITContainerComposer(testParam)) {
- init(testParam, containerComposer);
+ try (
+ SingleE2EITContainerComposer containerComposer = new SingleE2EITContainerComposer(testParam);
+ AuthorityEnvironmentManager ignored = new AuthorityEnvironmentManager(
+ new ScenarioCommonPath(testParam.getScenario()).getAuthorityFile(), containerComposer.getContainerComposer().getActualDataSourceMap(), testParam.getDatabaseType())) {
assertExecute(containerComposer);
}
}
diff --git a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/ddl/BaseDDLE2EIT.java b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/ddl/DDLE2EIT.java
similarity index 63%
rename from test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/ddl/BaseDDLE2EIT.java
rename to test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/ddl/DDLE2EIT.java
index 4857c8992ec..68cc3b98134 100644
--- a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/ddl/BaseDDLE2EIT.java
+++ b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/ddl/DDLE2EIT.java
@@ -21,38 +21,119 @@ import com.google.common.base.Splitter;
import lombok.SneakyThrows;
import org.apache.shardingsphere.infra.datanode.DataNode;
import org.apache.shardingsphere.infra.util.expr.InlineExpressionParser;
+import org.apache.shardingsphere.test.e2e.cases.SQLCommandType;
+import org.apache.shardingsphere.test.e2e.cases.SQLExecuteType;
import org.apache.shardingsphere.test.e2e.cases.dataset.metadata.DataSetColumn;
import org.apache.shardingsphere.test.e2e.cases.dataset.metadata.DataSetIndex;
import org.apache.shardingsphere.test.e2e.cases.dataset.metadata.DataSetMetaData;
import org.apache.shardingsphere.test.e2e.engine.SingleE2EITContainerComposer;
+import org.apache.shardingsphere.test.e2e.framework.E2EITExtension;
+import org.apache.shardingsphere.test.e2e.framework.param.array.E2ETestParameterFactory;
import org.apache.shardingsphere.test.e2e.framework.param.model.AssertionTestParameter;
+import org.junit.jupiter.api.condition.EnabledIf;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.ArgumentsProvider;
+import org.junit.jupiter.params.provider.ArgumentsSource;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
+import java.sql.Statement;
+import java.text.ParseException;
import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
+import java.util.stream.Stream;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
-public abstract class BaseDDLE2EIT {
-
- /**
- * Init.
- *
- * @param containerComposer container composer
- * @throws SQLException SQL exception
- */
- public final void init(final SingleE2EITContainerComposer containerComposer) throws SQLException {
+@ExtendWith(E2EITExtension.class)
+public final class DDLE2EIT {
+
+ @ParameterizedTest(name = "{0}")
+ @EnabledIf("isEnabled")
+ @ArgumentsSource(TestCaseArgumentsProvider.class)
+ public void assertExecuteUpdate(final AssertionTestParameter testParam) throws SQLException, ParseException {
+ // TODO make sure DDL test case can not be null
+ if (null == testParam.getTestCaseContext()) {
+ return;
+ }
+ try (SingleE2EITContainerComposer containerComposer = new SingleE2EITContainerComposer(testParam)) {
+ init(containerComposer);
+ try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
+ if (SQLExecuteType.Literal == containerComposer.getSqlExecuteType()) {
+ executeUpdateForStatement(containerComposer, connection);
+ } else {
+ executeUpdateForPreparedStatement(containerComposer, connection);
+ }
+ assertTableMetaData(testParam, containerComposer);
+ }
+ tearDown(containerComposer);
+ }
+ }
+
+ private void executeUpdateForStatement(final SingleE2EITContainerComposer containerComposer, final Connection connection) throws SQLException, ParseException {
+ try (Statement statement = connection.createStatement()) {
+ assertFalse(statement.executeUpdate(containerComposer.getSQL()) > 0, "Not a DDL statement.");
+ }
+ waitCompleted();
+ }
+
+ private void executeUpdateForPreparedStatement(final SingleE2EITContainerComposer containerComposer, final Connection connection) throws SQLException, ParseException {
+ try (PreparedStatement preparedStatement = connection.prepareStatement(containerComposer.getSQL())) {
+ assertFalse(preparedStatement.executeUpdate() > 0, "Not a DDL statement.");
+ }
+ waitCompleted();
+ }
+
+ @ParameterizedTest(name = "{0}")
+ @EnabledIf("isEnabled")
+ @ArgumentsSource(TestCaseArgumentsProvider.class)
+ public void assertExecute(final AssertionTestParameter testParam) throws Exception {
+ // TODO make sure DDL test case can not be null
+ if (null == testParam.getTestCaseContext()) {
+ return;
+ }
+ try (SingleE2EITContainerComposer containerComposer = new SingleE2EITContainerComposer(testParam)) {
+ init(containerComposer);
+ try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
+ if (SQLExecuteType.Literal == containerComposer.getSqlExecuteType()) {
+ executeForStatement(containerComposer, connection);
+ } else {
+ executeForPreparedStatement(containerComposer, connection);
+ }
+ assertTableMetaData(testParam, containerComposer);
+ }
+ tearDown(containerComposer);
+ }
+ }
+
+ private void executeForStatement(final SingleE2EITContainerComposer containerComposer, final Connection connection) throws SQLException, ParseException {
+ try (Statement statement = connection.createStatement()) {
+ assertFalse(statement.execute(containerComposer.getSQL()), "Not a DDL statement.");
+ }
+ waitCompleted();
+ }
+
+ private void executeForPreparedStatement(final SingleE2EITContainerComposer containerComposer, final Connection connection) throws SQLException, ParseException {
+ try (PreparedStatement preparedStatement = connection.prepareStatement(containerComposer.getSQL())) {
+ assertFalse(preparedStatement.execute(), "Not a DDL statement.");
+ }
+ waitCompleted();
+ }
+
+ private void init(final SingleE2EITContainerComposer containerComposer) throws SQLException {
assertNotNull(containerComposer.getAssertion().getInitialSQL(), "Init SQL is required");
assertNotNull(containerComposer.getAssertion().getInitialSQL().getAffectedTable(), "Expected affected table is required");
try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
@@ -60,7 +141,7 @@ public abstract class BaseDDLE2EIT {
}
}
- private synchronized void executeInitSQLs(final SingleE2EITContainerComposer containerComposer, final Connection connection) throws SQLException {
+ private void executeInitSQLs(final SingleE2EITContainerComposer containerComposer, final Connection connection) throws SQLException {
if (null == containerComposer.getAssertion().getInitialSQL().getSql()) {
return;
}
@@ -72,13 +153,7 @@ public abstract class BaseDDLE2EIT {
}
}
- /**
- * Tear down.
- *
- * @param containerComposer container composer
- * @throws SQLException SQL exception
- */
- public final void tearDown(final SingleE2EITContainerComposer containerComposer) throws SQLException {
+ private void tearDown(final SingleE2EITContainerComposer containerComposer) throws SQLException {
if (null != containerComposer.getAssertion().getDestroySQL()) {
try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
executeDestroySQLs(containerComposer, connection);
@@ -98,7 +173,7 @@ public abstract class BaseDDLE2EIT {
}
}
- protected final void assertTableMetaData(final AssertionTestParameter testParam, final SingleE2EITContainerComposer containerComposer) throws SQLException {
+ private void assertTableMetaData(final AssertionTestParameter testParam, final SingleE2EITContainerComposer containerComposer) throws SQLException {
String tableName = containerComposer.getAssertion().getInitialSQL().getAffectedTable();
DataSetMetaData expected = containerComposer.getDataSet().findMetaData(tableName);
Collection<DataNode> dataNodes = new InlineExpressionParser(expected.getDataNodes()).splitAndEvaluate().stream().map(DataNode::new).collect(Collectors.toList());
@@ -211,7 +286,21 @@ public abstract class BaseDDLE2EIT {
}
@SneakyThrows(InterruptedException.class)
- protected void waitCompleted() {
+ private void waitCompleted() {
Thread.sleep(1500L);
}
+
+ private static boolean isEnabled() {
+ return E2ETestParameterFactory.containsTestParameter();
+ }
+
+ private static class TestCaseArgumentsProvider implements ArgumentsProvider {
+
+ @Override
+ public Stream<? extends Arguments> provideArguments(final ExtensionContext extensionContext) {
+ Collection<AssertionTestParameter> result = E2ETestParameterFactory.getAssertionTestParameters(SQLCommandType.DDL);
+ // TODO make sure DDL test case can not be null
+ return result.isEmpty() ? Stream.of(Arguments.of(new AssertionTestParameter(null, null, null, null, null, null, null))) : result.stream().map(Arguments::of);
+ }
+ }
}
diff --git a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/ddl/GeneralDDLE2EIT.java b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/ddl/GeneralDDLE2EIT.java
deleted file mode 100644
index 23f384fe0ef..00000000000
--- a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/ddl/GeneralDDLE2EIT.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * 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.
- */
-
-package org.apache.shardingsphere.test.e2e.engine.ddl;
-
-import org.apache.shardingsphere.test.e2e.cases.SQLCommandType;
-import org.apache.shardingsphere.test.e2e.cases.SQLExecuteType;
-import org.apache.shardingsphere.test.e2e.engine.SingleE2EITContainerComposer;
-import org.apache.shardingsphere.test.e2e.framework.E2EITExtension;
-import org.apache.shardingsphere.test.e2e.framework.param.array.E2ETestParameterFactory;
-import org.apache.shardingsphere.test.e2e.framework.param.model.AssertionTestParameter;
-import org.junit.jupiter.api.condition.EnabledIf;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.junit.jupiter.api.extension.ExtensionContext;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.ArgumentsProvider;
-import org.junit.jupiter.params.provider.ArgumentsSource;
-
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.text.ParseException;
-import java.util.Collection;
-import java.util.stream.Stream;
-
-import static org.junit.jupiter.api.Assertions.assertFalse;
-
-@ExtendWith(E2EITExtension.class)
-public final class GeneralDDLE2EIT extends BaseDDLE2EIT {
-
- @ParameterizedTest(name = "{0}")
- @EnabledIf("isEnabled")
- @ArgumentsSource(TestCaseArgumentsProvider.class)
- public void assertExecuteUpdate(final AssertionTestParameter testParam) throws SQLException, ParseException {
- // TODO make sure DDL test case can not be null
- if (null == testParam.getTestCaseContext()) {
- return;
- }
- try (SingleE2EITContainerComposer containerComposer = new SingleE2EITContainerComposer(testParam)) {
- init(containerComposer);
- try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
- if (SQLExecuteType.Literal == containerComposer.getSqlExecuteType()) {
- executeUpdateForStatement(containerComposer, connection);
- } else {
- executeUpdateForPreparedStatement(containerComposer, connection);
- }
- assertTableMetaData(testParam, containerComposer);
- }
- tearDown(containerComposer);
- }
- }
-
- private void executeUpdateForStatement(final SingleE2EITContainerComposer containerComposer, final Connection connection) throws SQLException, ParseException {
- try (Statement statement = connection.createStatement()) {
- assertFalse(statement.executeUpdate(containerComposer.getSQL()) > 0, "Not a DDL statement.");
- }
- waitCompleted();
- }
-
- private void executeUpdateForPreparedStatement(final SingleE2EITContainerComposer containerComposer, final Connection connection) throws SQLException, ParseException {
- try (PreparedStatement preparedStatement = connection.prepareStatement(containerComposer.getSQL())) {
- assertFalse(preparedStatement.executeUpdate() > 0, "Not a DDL statement.");
- }
- waitCompleted();
- }
-
- @ParameterizedTest(name = "{0}")
- @EnabledIf("isEnabled")
- @ArgumentsSource(TestCaseArgumentsProvider.class)
- public void assertExecute(final AssertionTestParameter testParam) throws Exception {
- // TODO make sure DDL test case can not be null
- if (null == testParam.getTestCaseContext()) {
- return;
- }
- try (SingleE2EITContainerComposer containerComposer = new SingleE2EITContainerComposer(testParam)) {
- init(containerComposer);
- try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
- if (SQLExecuteType.Literal == containerComposer.getSqlExecuteType()) {
- executeForStatement(containerComposer, connection);
- } else {
- executeForPreparedStatement(containerComposer, connection);
- }
- assertTableMetaData(testParam, containerComposer);
- }
- tearDown(containerComposer);
- }
- }
-
- private void executeForStatement(final SingleE2EITContainerComposer containerComposer, final Connection connection) throws SQLException, ParseException {
- try (Statement statement = connection.createStatement()) {
- assertFalse(statement.execute(containerComposer.getSQL()), "Not a DDL statement.");
- }
- waitCompleted();
- }
-
- private void executeForPreparedStatement(final SingleE2EITContainerComposer containerComposer, final Connection connection) throws SQLException, ParseException {
- try (PreparedStatement preparedStatement = connection.prepareStatement(containerComposer.getSQL())) {
- assertFalse(preparedStatement.execute(), "Not a DDL statement.");
- }
- waitCompleted();
- }
-
- private static boolean isEnabled() {
- return E2ETestParameterFactory.containsTestParameter();
- }
-
- private static class TestCaseArgumentsProvider implements ArgumentsProvider {
-
- @Override
- public Stream<? extends Arguments> provideArguments(final ExtensionContext extensionContext) {
- Collection<AssertionTestParameter> result = E2ETestParameterFactory.getAssertionTestParameters(SQLCommandType.DDL);
- // TODO make sure DDL test case can not be null
- return result.isEmpty() ? Stream.of(Arguments.of(new AssertionTestParameter(null, null, null, null, null, null, null))) : result.stream().map(Arguments::of);
- }
- }
-}
diff --git a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/ral/GeneralRALE2EIT.java b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/ral/GeneralRALE2EIT.java
deleted file mode 100644
index f7dc3773d60..00000000000
--- a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/ral/GeneralRALE2EIT.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * 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.
- */
-
-package org.apache.shardingsphere.test.e2e.engine.ral;
-
-import org.apache.shardingsphere.test.e2e.cases.SQLCommandType;
-import org.apache.shardingsphere.test.e2e.engine.SingleE2EITContainerComposer;
-import org.apache.shardingsphere.test.e2e.framework.E2EITExtension;
-import org.apache.shardingsphere.test.e2e.framework.param.array.E2ETestParameterFactory;
-import org.apache.shardingsphere.test.e2e.framework.param.model.AssertionTestParameter;
-import org.junit.jupiter.api.condition.EnabledIf;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.junit.jupiter.api.extension.ExtensionContext;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.ArgumentsProvider;
-import org.junit.jupiter.params.provider.ArgumentsSource;
-
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.text.ParseException;
-import java.util.Collection;
-import java.util.stream.Stream;
-
-@ExtendWith(E2EITExtension.class)
-public final class GeneralRALE2EIT extends BaseRALE2EIT {
-
- @ParameterizedTest(name = "{0}")
- @EnabledIf("isEnabled")
- @ArgumentsSource(TestCaseArgumentsProvider.class)
- public void assertExecute(final AssertionTestParameter testParam) throws SQLException, ParseException {
- // TODO make sure RAL test case can not be null
- if (null == testParam.getTestCaseContext()) {
- return;
- }
- try (SingleE2EITContainerComposer containerComposer = new SingleE2EITContainerComposer(testParam)) {
- init(containerComposer);
- assertExecute(containerComposer);
- tearDown(containerComposer);
- }
- }
-
- private void assertExecute(final SingleE2EITContainerComposer containerComposer) throws SQLException, ParseException {
- try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
- try (Statement statement = connection.createStatement()) {
- assertResultSet(containerComposer, statement);
- }
- }
- }
-
- private void assertResultSet(final SingleE2EITContainerComposer containerComposer, final Statement statement) throws SQLException, ParseException {
- if (null == containerComposer.getAssertion().getAssertionSQL()) {
- assertResultSet(containerComposer, statement, containerComposer.getSQL());
- } else {
- statement.execute(containerComposer.getSQL());
- sleep(2000);
- assertResultSet(containerComposer, statement, containerComposer.getAssertion().getAssertionSQL().getSql());
- }
- }
-
- private void assertResultSet(final SingleE2EITContainerComposer containerComposer, final Statement statement, final String sql) throws SQLException {
- try (ResultSet resultSet = statement.executeQuery(sql)) {
- assertResultSet(containerComposer, resultSet);
- }
- }
-
- private static boolean isEnabled() {
- return E2ETestParameterFactory.containsTestParameter() && !E2ETestParameterFactory.getAssertionTestParameters(SQLCommandType.RAL).isEmpty();
- }
-
- private static class TestCaseArgumentsProvider implements ArgumentsProvider {
-
- @Override
- public Stream<? extends Arguments> provideArguments(final ExtensionContext extensionContext) {
- Collection<AssertionTestParameter> result = E2ETestParameterFactory.getAssertionTestParameters(SQLCommandType.RAL);
- // TODO make sure RAL test case can not be null
- return result.isEmpty() ? Stream.of(Arguments.of(new AssertionTestParameter(null, null, null, null, null, null, null))) : result.stream().map(Arguments::of);
- }
- }
-}
diff --git a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/ral/BaseRALE2EIT.java b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/ral/RALE2EIT.java
similarity index 60%
rename from test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/ral/BaseRALE2EIT.java
rename to test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/ral/RALE2EIT.java
index 606fb1dae33..f6b34bcad82 100644
--- a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/ral/BaseRALE2EIT.java
+++ b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/ral/RALE2EIT.java
@@ -18,51 +18,70 @@
package org.apache.shardingsphere.test.e2e.engine.ral;
import com.google.common.base.Splitter;
+import lombok.SneakyThrows;
+import org.apache.shardingsphere.test.e2e.cases.SQLCommandType;
import org.apache.shardingsphere.test.e2e.cases.dataset.metadata.DataSetColumn;
import org.apache.shardingsphere.test.e2e.cases.dataset.metadata.DataSetMetaData;
import org.apache.shardingsphere.test.e2e.cases.dataset.row.DataSetRow;
import org.apache.shardingsphere.test.e2e.engine.SingleE2EITContainerComposer;
+import org.apache.shardingsphere.test.e2e.framework.E2EITExtension;
+import org.apache.shardingsphere.test.e2e.framework.param.array.E2ETestParameterFactory;
+import org.apache.shardingsphere.test.e2e.framework.param.model.AssertionTestParameter;
+import org.junit.jupiter.api.condition.EnabledIf;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.ArgumentsProvider;
+import org.junit.jupiter.params.provider.ArgumentsSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
+import java.sql.Statement;
+import java.text.ParseException;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;
+import java.util.stream.Stream;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.jupiter.api.Assertions.assertTrue;
-public abstract class BaseRALE2EIT {
-
- /**
- * Init.
- *
- * @param containerComposer container composer
- * @throws SQLException SQL exception
- */
- public final void init(final SingleE2EITContainerComposer containerComposer) throws SQLException {
- if (null != containerComposer.getAssertion().getInitialSQL()) {
- try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
- executeInitSQLs(containerComposer, connection);
+@ExtendWith(E2EITExtension.class)
+public final class RALE2EIT {
+
+ @ParameterizedTest(name = "{0}")
+ @EnabledIf("isEnabled")
+ @ArgumentsSource(TestCaseArgumentsProvider.class)
+ public void assertExecute(final AssertionTestParameter testParam) throws SQLException, ParseException {
+ // TODO make sure RAL test case can not be null
+ if (null == testParam.getTestCaseContext()) {
+ return;
+ }
+ try (SingleE2EITContainerComposer containerComposer = new SingleE2EITContainerComposer(testParam)) {
+ init(containerComposer);
+ assertExecute(containerComposer);
+ tearDown(containerComposer);
+ }
+ }
+
+ private void assertExecute(final SingleE2EITContainerComposer containerComposer) throws SQLException, ParseException {
+ try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
+ try (Statement statement = connection.createStatement()) {
+ assertResultSet(containerComposer, statement);
}
}
}
- /**
- * Tear down.
- *
- * @param containerComposer container composer
- * @throws SQLException SQL exception
- */
- public final void tearDown(final SingleE2EITContainerComposer containerComposer) throws SQLException {
- if (null != containerComposer.getAssertion().getDestroySQL()) {
+ private void init(final SingleE2EITContainerComposer containerComposer) throws SQLException {
+ if (null != containerComposer.getAssertion().getInitialSQL()) {
try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
- executeDestroySQLs(containerComposer, connection);
+ executeInitSQLs(containerComposer, connection);
}
}
}
@@ -76,7 +95,15 @@ public abstract class BaseRALE2EIT {
preparedStatement.executeUpdate();
}
}
- sleep(1000);
+ waitCompleted(1000L);
+ }
+
+ private void tearDown(final SingleE2EITContainerComposer containerComposer) throws SQLException {
+ if (null != containerComposer.getAssertion().getDestroySQL()) {
+ try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
+ executeDestroySQLs(containerComposer, connection);
+ }
+ }
}
private void executeDestroySQLs(final SingleE2EITContainerComposer containerComposer, final Connection connection) throws SQLException {
@@ -88,17 +115,26 @@ public abstract class BaseRALE2EIT {
preparedStatement.executeUpdate();
}
}
- sleep(1000L);
+ waitCompleted(1000L);
+ }
+
+ private void assertResultSet(final SingleE2EITContainerComposer containerComposer, final Statement statement) throws SQLException, ParseException {
+ if (null == containerComposer.getAssertion().getAssertionSQL()) {
+ assertResultSet(containerComposer, statement, containerComposer.getSQL());
+ } else {
+ statement.execute(containerComposer.getSQL());
+ waitCompleted(2000L);
+ assertResultSet(containerComposer, statement, containerComposer.getAssertion().getAssertionSQL().getSql());
+ }
}
- protected void sleep(final long timeoutMillis) {
- try {
- Thread.sleep(timeoutMillis);
- } catch (final InterruptedException ignored) {
+ private void assertResultSet(final SingleE2EITContainerComposer containerComposer, final Statement statement, final String sql) throws SQLException {
+ try (ResultSet resultSet = statement.executeQuery(sql)) {
+ assertResultSet(containerComposer, resultSet);
}
}
- protected final void assertResultSet(final SingleE2EITContainerComposer containerComposer, final ResultSet resultSet) throws SQLException {
+ private void assertResultSet(final SingleE2EITContainerComposer containerComposer, final ResultSet resultSet) throws SQLException {
assertMetaData(resultSet.getMetaData(), getExpectedColumns(containerComposer));
assertRows(resultSet, getNotAssertionColumns(containerComposer), containerComposer.getDataSet().getRows());
}
@@ -153,4 +189,23 @@ public abstract class BaseRALE2EIT {
assertThat(String.valueOf(actual.getObject(columnIndex)).trim(), is(expected));
assertThat(String.valueOf(actual.getObject(columnLabel)).trim(), is(expected));
}
+
+ @SneakyThrows(InterruptedException.class)
+ private void waitCompleted(final long timeoutMillis) {
+ Thread.sleep(timeoutMillis);
+ }
+
+ private static boolean isEnabled() {
+ return E2ETestParameterFactory.containsTestParameter() && !E2ETestParameterFactory.getAssertionTestParameters(SQLCommandType.RAL).isEmpty();
+ }
+
+ private static class TestCaseArgumentsProvider implements ArgumentsProvider {
+
+ @Override
+ public Stream<? extends Arguments> provideArguments(final ExtensionContext extensionContext) {
+ Collection<AssertionTestParameter> result = E2ETestParameterFactory.getAssertionTestParameters(SQLCommandType.RAL);
+ // TODO make sure RAL test case can not be null
+ return result.isEmpty() ? Stream.of(Arguments.of(new AssertionTestParameter(null, null, null, null, null, null, null))) : result.stream().map(Arguments::of);
+ }
+ }
}
diff --git a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rdl/GeneralRDLE2EIT.java b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rdl/GeneralRDLE2EIT.java
deleted file mode 100644
index 0ebda8f3704..00000000000
--- a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rdl/GeneralRDLE2EIT.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * 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.
- */
-
-package org.apache.shardingsphere.test.e2e.engine.rdl;
-
-import org.apache.shardingsphere.test.e2e.cases.SQLCommandType;
-import org.apache.shardingsphere.test.e2e.engine.SingleE2EITContainerComposer;
-import org.apache.shardingsphere.test.e2e.framework.E2EITExtension;
-import org.apache.shardingsphere.test.e2e.framework.param.array.E2ETestParameterFactory;
-import org.apache.shardingsphere.test.e2e.framework.param.model.AssertionTestParameter;
-import org.junit.jupiter.api.condition.EnabledIf;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.junit.jupiter.api.extension.ExtensionContext;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.ArgumentsProvider;
-import org.junit.jupiter.params.provider.ArgumentsSource;
-
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.text.ParseException;
-import java.util.Collection;
-import java.util.stream.Stream;
-
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-
-@ExtendWith(E2EITExtension.class)
-public final class GeneralRDLE2EIT extends BaseRDLE2EIT {
-
- @ParameterizedTest(name = "{0}")
- @EnabledIf("isEnabled")
- @ArgumentsSource(TestCaseArgumentsProvider.class)
- public void assertExecute(final AssertionTestParameter testParam) throws SQLException, ParseException {
- // TODO make sure RDL test case can not be null
- if (null == testParam.getTestCaseContext()) {
- return;
- }
- try (SingleE2EITContainerComposer containerComposer = new SingleE2EITContainerComposer(testParam)) {
- init(containerComposer);
- assertExecute(testParam, containerComposer);
- tearDown(containerComposer);
- }
- }
-
- private void assertExecute(final AssertionTestParameter testParam, final SingleE2EITContainerComposer containerComposer) throws SQLException, ParseException {
- assertNotNull(testParam.getAssertion().getAssertionSQL(), "Assertion SQL is required");
- try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
- try (Statement statement = connection.createStatement()) {
- executeSQLCase(containerComposer, statement);
- sleep();
- assertResultSet(containerComposer, statement);
- }
- }
- }
-
- private void executeSQLCase(final SingleE2EITContainerComposer containerComposer, final Statement statement) throws SQLException, ParseException {
- statement.execute(containerComposer.getSQL());
- }
-
- private void assertResultSet(final SingleE2EITContainerComposer containerComposer, final Statement statement) throws SQLException {
- try (ResultSet resultSet = statement.executeQuery(containerComposer.getAssertion().getAssertionSQL().getSql())) {
- assertResultSet(containerComposer, resultSet);
- }
- }
-
- private static boolean isEnabled() {
- return E2ETestParameterFactory.containsTestParameter() && !E2ETestParameterFactory.getAssertionTestParameters(SQLCommandType.RDL).isEmpty();
- }
-
- private static class TestCaseArgumentsProvider implements ArgumentsProvider {
-
- @Override
- public Stream<? extends Arguments> provideArguments(final ExtensionContext extensionContext) {
- Collection<AssertionTestParameter> result = E2ETestParameterFactory.getAssertionTestParameters(SQLCommandType.RDL);
- // TODO make sure RDL test case can not be null
- return result.isEmpty() ? Stream.of(Arguments.of(new AssertionTestParameter(null, null, null, null, null, null, null))) : result.stream().map(Arguments::of);
- }
- }
-}
diff --git a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rdl/BaseRDLE2EIT.java b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rdl/RDLE2EIT.java
similarity index 57%
copy from test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rdl/BaseRDLE2EIT.java
copy to test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rdl/RDLE2EIT.java
index 6864bfc73b7..501d7e9de66 100644
--- a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rdl/BaseRDLE2EIT.java
+++ b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rdl/RDLE2EIT.java
@@ -18,51 +18,86 @@
package org.apache.shardingsphere.test.e2e.engine.rdl;
import com.google.common.base.Splitter;
+import lombok.SneakyThrows;
+import org.apache.shardingsphere.test.e2e.cases.SQLCommandType;
import org.apache.shardingsphere.test.e2e.cases.dataset.metadata.DataSetColumn;
import org.apache.shardingsphere.test.e2e.cases.dataset.metadata.DataSetMetaData;
import org.apache.shardingsphere.test.e2e.cases.dataset.row.DataSetRow;
import org.apache.shardingsphere.test.e2e.engine.SingleE2EITContainerComposer;
+import org.apache.shardingsphere.test.e2e.framework.E2EITExtension;
+import org.apache.shardingsphere.test.e2e.framework.param.array.E2ETestParameterFactory;
+import org.apache.shardingsphere.test.e2e.framework.param.model.AssertionTestParameter;
+import org.junit.jupiter.api.condition.EnabledIf;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.ArgumentsProvider;
+import org.junit.jupiter.params.provider.ArgumentsSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
+import java.sql.Statement;
+import java.text.ParseException;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
+import java.util.stream.Stream;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
-public abstract class BaseRDLE2EIT {
-
- /**
- * Init.
- *
- * @param containerComposer container composer
- * @throws SQLException SQL exception
- */
- public final void init(final SingleE2EITContainerComposer containerComposer) throws SQLException {
+@ExtendWith(E2EITExtension.class)
+public final class RDLE2EIT {
+
+ @ParameterizedTest(name = "{0}")
+ @EnabledIf("isEnabled")
+ @ArgumentsSource(TestCaseArgumentsProvider.class)
+ public void assertExecute(final AssertionTestParameter testParam) throws SQLException, ParseException {
+ // TODO make sure RDL test case can not be null
+ if (null == testParam.getTestCaseContext()) {
+ return;
+ }
+ try (SingleE2EITContainerComposer containerComposer = new SingleE2EITContainerComposer(testParam)) {
+ init(containerComposer);
+ assertExecute(testParam, containerComposer);
+ tearDown(containerComposer);
+ }
+ }
+
+ private void assertExecute(final AssertionTestParameter testParam, final SingleE2EITContainerComposer containerComposer) throws SQLException, ParseException {
+ assertNotNull(testParam.getAssertion().getAssertionSQL(), "Assertion SQL is required");
+ try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
+ try (Statement statement = connection.createStatement()) {
+ executeSQLCase(containerComposer, statement);
+ waitCompleted();
+ assertResultSet(containerComposer, statement);
+ }
+ }
+ }
+
+ private void executeSQLCase(final SingleE2EITContainerComposer containerComposer, final Statement statement) throws SQLException, ParseException {
+ statement.execute(containerComposer.getSQL());
+ }
+
+ private void init(final SingleE2EITContainerComposer containerComposer) throws SQLException {
try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
executeInitSQLs(containerComposer, connection);
}
}
- /**
- * Tear down.
- *
- * @param containerComposer container composer
- * @throws SQLException SQL exception
- */
- public final void tearDown(final SingleE2EITContainerComposer containerComposer) throws SQLException {
+ private void tearDown(final SingleE2EITContainerComposer containerComposer) throws SQLException {
if (null != containerComposer.getAssertion().getDestroySQL()) {
try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
executeDestroySQLs(containerComposer, connection);
}
}
- sleep();
+ waitCompleted();
}
private void executeInitSQLs(final SingleE2EITContainerComposer containerComposer, final Connection connection) throws SQLException {
@@ -72,7 +107,7 @@ public abstract class BaseRDLE2EIT {
for (String each : Splitter.on(";").trimResults().splitToList(containerComposer.getAssertion().getInitialSQL().getSql())) {
try (PreparedStatement preparedStatement = connection.prepareStatement(each)) {
preparedStatement.executeUpdate();
- sleep();
+ waitCompleted();
}
}
}
@@ -84,19 +119,18 @@ public abstract class BaseRDLE2EIT {
for (String each : Splitter.on(";").trimResults().splitToList(containerComposer.getAssertion().getDestroySQL().getSql())) {
try (PreparedStatement preparedStatement = connection.prepareStatement(each)) {
preparedStatement.executeUpdate();
- sleep();
+ waitCompleted();
}
}
}
- protected void sleep() {
- try {
- Thread.sleep(2000L);
- } catch (final InterruptedException ignored) {
+ private void assertResultSet(final SingleE2EITContainerComposer containerComposer, final Statement statement) throws SQLException {
+ try (ResultSet resultSet = statement.executeQuery(containerComposer.getAssertion().getAssertionSQL().getSql())) {
+ assertResultSet(containerComposer, resultSet);
}
}
- protected final void assertResultSet(final SingleE2EITContainerComposer containerComposer, final ResultSet resultSet) throws SQLException {
+ private void assertResultSet(final SingleE2EITContainerComposer containerComposer, final ResultSet resultSet) throws SQLException {
assertMetaData(resultSet.getMetaData(), getExpectedColumns(containerComposer));
assertRows(resultSet, containerComposer.getDataSet().getRows());
}
@@ -141,4 +175,23 @@ public abstract class BaseRDLE2EIT {
assertThat(String.valueOf(actual.getObject(columnIndex)), is(expected));
assertThat(String.valueOf(actual.getObject(columnLabel)), is(expected));
}
+
+ @SneakyThrows(InterruptedException.class)
+ private void waitCompleted() {
+ Thread.sleep(2000L);
+ }
+
+ private static boolean isEnabled() {
+ return E2ETestParameterFactory.containsTestParameter() && !E2ETestParameterFactory.getAssertionTestParameters(SQLCommandType.RDL).isEmpty();
+ }
+
+ private static class TestCaseArgumentsProvider implements ArgumentsProvider {
+
+ @Override
+ public Stream<? extends Arguments> provideArguments(final ExtensionContext extensionContext) {
+ Collection<AssertionTestParameter> result = E2ETestParameterFactory.getAssertionTestParameters(SQLCommandType.RDL);
+ // TODO make sure RDL test case can not be null
+ return result.isEmpty() ? Stream.of(Arguments.of(new AssertionTestParameter(null, null, null, null, null, null, null))) : result.stream().map(Arguments::of);
+ }
+ }
}
diff --git a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rql/BaseRQLE2EIT.java b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rql/BaseRQLE2EIT.java
deleted file mode 100644
index 317d4b93dec..00000000000
--- a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rql/BaseRQLE2EIT.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * 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.
- */
-
-package org.apache.shardingsphere.test.e2e.engine.rql;
-
-import org.apache.shardingsphere.test.e2e.cases.dataset.metadata.DataSetColumn;
-import org.apache.shardingsphere.test.e2e.cases.dataset.metadata.DataSetMetaData;
-import org.apache.shardingsphere.test.e2e.cases.dataset.row.DataSetRow;
-import org.apache.shardingsphere.test.e2e.engine.SingleE2EITContainerComposer;
-
-import java.sql.ResultSet;
-import java.sql.ResultSetMetaData;
-import java.sql.SQLException;
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.List;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-public abstract class BaseRQLE2EIT {
-
- protected final void assertResultSet(final SingleE2EITContainerComposer containerComposer, final ResultSet resultSet) throws SQLException {
- assertMetaData(resultSet.getMetaData(), getExpectedColumns(containerComposer));
- assertRows(resultSet, containerComposer.getDataSet().getRows());
- }
-
- private Collection<DataSetColumn> getExpectedColumns(final SingleE2EITContainerComposer containerComposer) {
- Collection<DataSetColumn> result = new LinkedList<>();
- for (DataSetMetaData each : containerComposer.getDataSet().getMetaDataList()) {
- result.addAll(each.getColumns());
- }
- return result;
- }
-
- private void assertMetaData(final ResultSetMetaData actual, final Collection<DataSetColumn> expected) throws SQLException {
- assertThat(actual.getColumnCount(), is(expected.size()));
- int index = 1;
- for (DataSetColumn each : expected) {
- assertThat(actual.getColumnLabel(index++).toLowerCase(), is(each.getName().toLowerCase()));
- }
- }
-
- private void assertRows(final ResultSet actual, final List<DataSetRow> expected) throws SQLException {
- int rowCount = 0;
- ResultSetMetaData actualMetaData = actual.getMetaData();
- while (actual.next()) {
- assertTrue(rowCount < expected.size(), "Size of actual result set is different with size of expected data set rows.");
- assertRow(actual, actualMetaData, expected.get(rowCount));
- rowCount++;
- }
- assertThat("Size of actual result set is different with size of expected data set rows.", rowCount, is(expected.size()));
- }
-
- private void assertRow(final ResultSet actual, final ResultSetMetaData actualMetaData, final DataSetRow expected) throws SQLException {
- int columnIndex = 1;
- for (String each : expected.splitValues("|")) {
- String columnLabel = actualMetaData.getColumnLabel(columnIndex);
- assertObjectValue(actual, columnIndex, columnLabel, each);
- columnIndex++;
- }
- }
-
- private void assertObjectValue(final ResultSet actual, final int columnIndex, final String columnLabel, final String expected) throws SQLException {
- assertThat(String.valueOf(actual.getObject(columnIndex)), is(expected));
- assertThat(String.valueOf(actual.getObject(columnLabel)), is(expected));
- }
-}
diff --git a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rql/GeneralRQLE2EIT.java b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rql/GeneralRQLE2EIT.java
deleted file mode 100644
index 661dbc32bbb..00000000000
--- a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rql/GeneralRQLE2EIT.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * 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.
- */
-
-package org.apache.shardingsphere.test.e2e.engine.rql;
-
-import org.apache.shardingsphere.test.e2e.cases.SQLCommandType;
-import org.apache.shardingsphere.test.e2e.engine.SingleE2EITContainerComposer;
-import org.apache.shardingsphere.test.e2e.framework.E2EITExtension;
-import org.apache.shardingsphere.test.e2e.framework.param.array.E2ETestParameterFactory;
-import org.apache.shardingsphere.test.e2e.framework.param.model.AssertionTestParameter;
-import org.junit.jupiter.api.condition.EnabledIf;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.junit.jupiter.api.extension.ExtensionContext;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.ArgumentsProvider;
-import org.junit.jupiter.params.provider.ArgumentsSource;
-
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.text.ParseException;
-import java.util.Collection;
-import java.util.stream.Stream;
-
-@ExtendWith(E2EITExtension.class)
-public final class GeneralRQLE2EIT extends BaseRQLE2EIT {
-
- @ParameterizedTest(name = "{0}")
- @EnabledIf("isEnabled")
- @ArgumentsSource(TestCaseArgumentsProvider.class)
- public void assertExecute(final AssertionTestParameter testParam) throws SQLException, ParseException {
- // TODO make sure RQL test case can not be null
- if (null == testParam.getTestCaseContext()) {
- return;
- }
- try (SingleE2EITContainerComposer containerComposer = new SingleE2EITContainerComposer(testParam)) {
- assertExecute(containerComposer);
- }
- }
-
- private void assertExecute(final SingleE2EITContainerComposer containerComposer) throws SQLException, ParseException {
- try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
- try (
- Statement statement = connection.createStatement();
- ResultSet resultSet = statement.executeQuery(containerComposer.getSQL())) {
- assertResultSet(containerComposer, resultSet);
- }
- }
- }
-
- private static boolean isEnabled() {
- return E2ETestParameterFactory.containsTestParameter() && !E2ETestParameterFactory.getAssertionTestParameters(SQLCommandType.RQL).isEmpty();
- }
-
- private static class TestCaseArgumentsProvider implements ArgumentsProvider {
-
- @Override
- public Stream<? extends Arguments> provideArguments(final ExtensionContext extensionContext) {
- Collection<AssertionTestParameter> result = E2ETestParameterFactory.getAssertionTestParameters(SQLCommandType.RQL);
- // TODO make sure RQL test case can not be null
- return result.isEmpty() ? Stream.of(Arguments.of(new AssertionTestParameter(null, null, null, null, null, null, null))) : result.stream().map(Arguments::of);
- }
- }
-}
diff --git a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rdl/BaseRDLE2EIT.java b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rql/RQLE2EIT.java
similarity index 58%
rename from test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rdl/BaseRDLE2EIT.java
rename to test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rql/RQLE2EIT.java
index 6864bfc73b7..3012ea1f6a8 100644
--- a/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rdl/BaseRDLE2EIT.java
+++ b/test/e2e/suite/src/test/java/org/apache/shardingsphere/test/e2e/engine/rql/RQLE2EIT.java
@@ -15,88 +15,66 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.test.e2e.engine.rdl;
+package org.apache.shardingsphere.test.e2e.engine.rql;
-import com.google.common.base.Splitter;
+import org.apache.shardingsphere.test.e2e.cases.SQLCommandType;
import org.apache.shardingsphere.test.e2e.cases.dataset.metadata.DataSetColumn;
import org.apache.shardingsphere.test.e2e.cases.dataset.metadata.DataSetMetaData;
import org.apache.shardingsphere.test.e2e.cases.dataset.row.DataSetRow;
import org.apache.shardingsphere.test.e2e.engine.SingleE2EITContainerComposer;
+import org.apache.shardingsphere.test.e2e.framework.E2EITExtension;
+import org.apache.shardingsphere.test.e2e.framework.param.array.E2ETestParameterFactory;
+import org.apache.shardingsphere.test.e2e.framework.param.model.AssertionTestParameter;
+import org.junit.jupiter.api.condition.EnabledIf;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.ArgumentsProvider;
+import org.junit.jupiter.params.provider.ArgumentsSource;
import java.sql.Connection;
-import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
+import java.sql.Statement;
+import java.text.ParseException;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
+import java.util.stream.Stream;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.jupiter.api.Assertions.assertTrue;
-public abstract class BaseRDLE2EIT {
+@ExtendWith(E2EITExtension.class)
+public final class RQLE2EIT {
- /**
- * Init.
- *
- * @param containerComposer container composer
- * @throws SQLException SQL exception
- */
- public final void init(final SingleE2EITContainerComposer containerComposer) throws SQLException {
- try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
- executeInitSQLs(containerComposer, connection);
- }
- }
-
- /**
- * Tear down.
- *
- * @param containerComposer container composer
- * @throws SQLException SQL exception
- */
- public final void tearDown(final SingleE2EITContainerComposer containerComposer) throws SQLException {
- if (null != containerComposer.getAssertion().getDestroySQL()) {
- try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
- executeDestroySQLs(containerComposer, connection);
- }
- }
- sleep();
- }
-
- private void executeInitSQLs(final SingleE2EITContainerComposer containerComposer, final Connection connection) throws SQLException {
- if (null == containerComposer.getAssertion().getInitialSQL() || null == containerComposer.getAssertion().getInitialSQL().getSql()) {
+ @ParameterizedTest(name = "{0}")
+ @EnabledIf("isEnabled")
+ @ArgumentsSource(TestCaseArgumentsProvider.class)
+ public void assertExecute(final AssertionTestParameter testParam) throws SQLException, ParseException {
+ // TODO make sure RQL test case can not be null
+ if (null == testParam.getTestCaseContext()) {
return;
}
- for (String each : Splitter.on(";").trimResults().splitToList(containerComposer.getAssertion().getInitialSQL().getSql())) {
- try (PreparedStatement preparedStatement = connection.prepareStatement(each)) {
- preparedStatement.executeUpdate();
- sleep();
- }
+ try (SingleE2EITContainerComposer containerComposer = new SingleE2EITContainerComposer(testParam)) {
+ assertExecute(containerComposer);
}
}
- private void executeDestroySQLs(final SingleE2EITContainerComposer containerComposer, final Connection connection) throws SQLException {
- if (null == containerComposer.getAssertion().getDestroySQL().getSql()) {
- return;
- }
- for (String each : Splitter.on(";").trimResults().splitToList(containerComposer.getAssertion().getDestroySQL().getSql())) {
- try (PreparedStatement preparedStatement = connection.prepareStatement(each)) {
- preparedStatement.executeUpdate();
- sleep();
+ private void assertExecute(final SingleE2EITContainerComposer containerComposer) throws SQLException, ParseException {
+ try (Connection connection = containerComposer.getContainerComposer().getTargetDataSource().getConnection()) {
+ try (
+ Statement statement = connection.createStatement();
+ ResultSet resultSet = statement.executeQuery(containerComposer.getSQL())) {
+ assertResultSet(containerComposer, resultSet);
}
}
}
- protected void sleep() {
- try {
- Thread.sleep(2000L);
- } catch (final InterruptedException ignored) {
- }
- }
-
- protected final void assertResultSet(final SingleE2EITContainerComposer containerComposer, final ResultSet resultSet) throws SQLException {
+ private void assertResultSet(final SingleE2EITContainerComposer containerComposer, final ResultSet resultSet) throws SQLException {
assertMetaData(resultSet.getMetaData(), getExpectedColumns(containerComposer));
assertRows(resultSet, containerComposer.getDataSet().getRows());
}
@@ -121,11 +99,11 @@ public abstract class BaseRDLE2EIT {
int rowCount = 0;
ResultSetMetaData actualMetaData = actual.getMetaData();
while (actual.next()) {
- assertTrue(rowCount < expected.size(), "Size of actual result set is different with size of expected dat set rows.");
+ assertTrue(rowCount < expected.size(), "Size of actual result set is different with size of expected data set rows.");
assertRow(actual, actualMetaData, expected.get(rowCount));
rowCount++;
}
- assertThat("Size of actual result set is different with size of expected dat set rows.", rowCount, is(expected.size()));
+ assertThat("Size of actual result set is different with size of expected data set rows.", rowCount, is(expected.size()));
}
private void assertRow(final ResultSet actual, final ResultSetMetaData actualMetaData, final DataSetRow expected) throws SQLException {
@@ -141,4 +119,18 @@ public abstract class BaseRDLE2EIT {
assertThat(String.valueOf(actual.getObject(columnIndex)), is(expected));
assertThat(String.valueOf(actual.getObject(columnLabel)), is(expected));
}
+
+ private static boolean isEnabled() {
+ return E2ETestParameterFactory.containsTestParameter() && !E2ETestParameterFactory.getAssertionTestParameters(SQLCommandType.RQL).isEmpty();
+ }
+
+ private static class TestCaseArgumentsProvider implements ArgumentsProvider {
+
+ @Override
+ public Stream<? extends Arguments> provideArguments(final ExtensionContext extensionContext) {
+ Collection<AssertionTestParameter> result = E2ETestParameterFactory.getAssertionTestParameters(SQLCommandType.RQL);
+ // TODO make sure RQL test case can not be null
+ return result.isEmpty() ? Stream.of(Arguments.of(new AssertionTestParameter(null, null, null, null, null, null, null))) : result.stream().map(Arguments::of);
+ }
+ }
}