Skip to content

Commit

Permalink
Refactor E2E environment setup code. (#32355)
Browse files Browse the repository at this point in the history
  • Loading branch information
iamhucong authored Aug 2, 2024
1 parent 876816e commit 232bd7a
Show file tree
Hide file tree
Showing 17 changed files with 624 additions and 537 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,9 @@
import java.util.stream.Collectors;

@Getter
public class SingleE2EContext {
public class E2ETestContext {

public static final String NOT_VERIFY_FLAG = "NOT_VERIFY";

private final String sql;

Expand All @@ -40,7 +42,7 @@ public class SingleE2EContext {

private final DataSet dataSet;

public SingleE2EContext(final AssertionTestParameter testParam) {
public E2ETestContext(final AssertionTestParameter testParam) {
sql = testParam.getTestCaseContext().getTestCase().getSql();
sqlExecuteType = testParam.getSqlExecuteType();
assertion = testParam.getAssertion();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,18 +18,17 @@
package org.apache.shardingsphere.test.e2e.engine.type;

import org.apache.shardingsphere.infra.util.datetime.DateTimeFormatterFactory;
import org.apache.shardingsphere.test.e2e.engine.context.SingleE2EContext;
import org.apache.shardingsphere.test.e2e.env.container.atomic.enums.AdapterMode;
import org.apache.shardingsphere.test.e2e.env.container.atomic.enums.AdapterType;
import org.apache.shardingsphere.test.e2e.framework.type.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.env.E2EEnvironmentAware;
import org.apache.shardingsphere.test.e2e.env.E2EEnvironmentEngine;
import org.apache.shardingsphere.test.e2e.engine.arg.E2ETestCaseArgumentsProvider;
import org.apache.shardingsphere.test.e2e.engine.arg.E2ETestCaseSettings;
import org.apache.shardingsphere.test.e2e.engine.composer.E2EContainerComposer;
import org.apache.shardingsphere.test.e2e.engine.context.E2ETestContext;
import org.apache.shardingsphere.test.e2e.framework.param.array.E2ETestParameterFactory;
import org.apache.shardingsphere.test.e2e.framework.param.model.AssertionTestParameter;
import org.apache.shardingsphere.test.e2e.framework.type.SQLCommandType;
import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ArgumentsSource;
Expand All @@ -49,7 +48,14 @@
import static org.junit.jupiter.api.Assertions.assertTrue;

@E2ETestCaseSettings(SQLCommandType.DAL)
class DALE2EIT {
class DALE2EIT implements E2EEnvironmentAware {

private E2EEnvironmentEngine environmentSetupEngine;

@Override
public void setEnvironmentEngine(final E2EEnvironmentEngine environmentEngine) {
this.environmentSetupEngine = environmentEngine;
}

@ParameterizedTest(name = "{0}")
@EnabledIf("isEnabled")
Expand All @@ -59,42 +65,40 @@ void assertExecute(final AssertionTestParameter testParam) throws SQLException {
if (null == testParam.getTestCaseContext()) {
return;
}
E2EContainerComposer containerComposer = new E2EContainerComposer(testParam.getKey(), testParam.getScenario(), testParam.getDatabaseType(),
AdapterMode.valueOf(testParam.getMode().toUpperCase()), AdapterType.valueOf(testParam.getAdapter().toUpperCase()));
SingleE2EContext singleE2EContext = new SingleE2EContext(testParam);
assertExecute(containerComposer, singleE2EContext);
E2ETestContext context = new E2ETestContext(testParam);
assertExecute(context);
}

private void assertExecute(final E2EContainerComposer containerComposer, final SingleE2EContext singleE2EContext) throws SQLException {
try (Connection connection = containerComposer.getTargetDataSource().getConnection()) {
private void assertExecute(final E2ETestContext context) throws SQLException {
try (Connection connection = this.environmentSetupEngine.getTargetDataSource().getConnection()) {
try (Statement statement = connection.createStatement()) {
statement.execute(singleE2EContext.getSQL());
assertExecuteResult(singleE2EContext, statement);
statement.execute(context.getSQL());
assertExecuteResult(context, statement);
}
}
}

private void assertExecuteResult(final SingleE2EContext singleE2EContext, final Statement statement) throws SQLException {
private void assertExecuteResult(final E2ETestContext context, final Statement statement) throws SQLException {
try (ResultSet resultSet = statement.getResultSet()) {
if (null == singleE2EContext.getAssertion().getAssertionSQL()) {
assertResultSet(singleE2EContext, resultSet);
if (null == context.getAssertion().getAssertionSQL()) {
assertResultSet(context, resultSet);
} else {
statement.execute(singleE2EContext.getAssertion().getAssertionSQL().getSql());
statement.execute(context.getAssertion().getAssertionSQL().getSql());
try (ResultSet assertionSQLResultSet = statement.getResultSet()) {
assertResultSet(singleE2EContext, assertionSQLResultSet);
assertResultSet(context, assertionSQLResultSet);
}
}
}
}

private void assertResultSet(final SingleE2EContext singleE2EContext, final ResultSet resultSet) throws SQLException {
assertMetaData(resultSet.getMetaData(), getExpectedColumns(singleE2EContext));
assertRows(resultSet, singleE2EContext.getDataSet().getRows());
private void assertResultSet(final E2ETestContext context, final ResultSet resultSet) throws SQLException {
assertMetaData(resultSet.getMetaData(), getExpectedColumns(context));
assertRows(resultSet, context.getDataSet().getRows());
}

private Collection<DataSetColumn> getExpectedColumns(final SingleE2EContext singleE2EContext) {
private Collection<DataSetColumn> getExpectedColumns(final E2ETestContext context) {
Collection<DataSetColumn> result = new LinkedList<>();
for (DataSetMetaData each : singleE2EContext.getDataSet().getMetaDataList()) {
for (DataSetMetaData each : context.getDataSet().getMetaDataList()) {
result.addAll(each.getColumns());
}
return result;
Expand Down Expand Up @@ -133,7 +137,7 @@ private void assertRow(final ResultSet actual, final ResultSetMetaData actualMet
}

private void assertDateValue(final ResultSet actual, final int columnIndex, final String columnLabel, final String expected) throws SQLException {
if (E2EContainerComposer.NOT_VERIFY_FLAG.equals(expected)) {
if (E2ETestContext.NOT_VERIFY_FLAG.equals(expected)) {
return;
}
assertThat(DateTimeFormatterFactory.getTimeFormatter().format(actual.getDate(columnIndex).toLocalDate()), is(expected));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,18 +17,17 @@

package org.apache.shardingsphere.test.e2e.engine.type;

import org.apache.shardingsphere.test.e2e.engine.context.SingleE2EContext;
import org.apache.shardingsphere.test.e2e.env.container.atomic.enums.AdapterMode;
import org.apache.shardingsphere.test.e2e.env.container.atomic.enums.AdapterType;
import org.apache.shardingsphere.test.e2e.framework.type.SQLCommandType;
import org.apache.shardingsphere.test.e2e.framework.type.SQLExecuteType;
import org.apache.shardingsphere.test.e2e.env.E2EEnvironmentAware;
import org.apache.shardingsphere.test.e2e.env.E2EEnvironmentEngine;
import org.apache.shardingsphere.test.e2e.engine.arg.E2ETestCaseArgumentsProvider;
import org.apache.shardingsphere.test.e2e.engine.arg.E2ETestCaseSettings;
import org.apache.shardingsphere.test.e2e.engine.composer.E2EContainerComposer;
import org.apache.shardingsphere.test.e2e.engine.context.E2ETestContext;
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.array.E2ETestParameterFactory;
import org.apache.shardingsphere.test.e2e.framework.param.model.AssertionTestParameter;
import org.apache.shardingsphere.test.e2e.framework.type.SQLCommandType;
import org.apache.shardingsphere.test.e2e.framework.type.SQLExecuteType;
import org.junit.jupiter.api.condition.EnabledIf;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ArgumentsSource;
Expand All @@ -41,7 +40,14 @@
import java.sql.Statement;

@E2ETestCaseSettings(SQLCommandType.DCL)
class DCLE2EIT {
class DCLE2EIT implements E2EEnvironmentAware {

private E2EEnvironmentEngine environmentSetupEngine;

@Override
public void setEnvironmentEngine(final E2EEnvironmentEngine environmentEngine) {
this.environmentSetupEngine = environmentEngine;
}

@ParameterizedTest(name = "{0}")
@EnabledIf("isEnabled")
Expand All @@ -51,20 +57,18 @@ void assertExecuteUpdate(final AssertionTestParameter testParam) throws SQLExcep
if (null == testParam.getTestCaseContext()) {
return;
}
E2EContainerComposer containerComposer = new E2EContainerComposer(testParam.getKey(), testParam.getScenario(), testParam.getDatabaseType(),
AdapterMode.valueOf(testParam.getMode().toUpperCase()), AdapterType.valueOf(testParam.getAdapter().toUpperCase()));
SingleE2EContext singleE2EContext = new SingleE2EContext(testParam);
E2ETestContext context = new E2ETestContext(testParam);
try (
AuthorityEnvironmentManager ignored = new AuthorityEnvironmentManager(
new ScenarioCommonPath(testParam.getScenario()).getAuthorityFile(), containerComposer.getActualDataSourceMap(), testParam.getDatabaseType())) {
assertExecuteUpdate(containerComposer, singleE2EContext);
new ScenarioCommonPath(testParam.getScenario()).getAuthorityFile(), environmentSetupEngine.getActualDataSourceMap(), testParam.getDatabaseType())) {
assertExecuteUpdate(context);
}
}

private void assertExecuteUpdate(final E2EContainerComposer containerComposer, final SingleE2EContext singleE2EContext) throws SQLException {
String sql = singleE2EContext.getSQL();
try (Connection connection = containerComposer.getTargetDataSource().getConnection()) {
if (SQLExecuteType.Literal == singleE2EContext.getSqlExecuteType()) {
private void assertExecuteUpdate(final E2ETestContext context) throws SQLException {
String sql = context.getSQL();
try (Connection connection = this.environmentSetupEngine.getTargetDataSource().getConnection()) {
if (SQLExecuteType.Literal == context.getSqlExecuteType()) {
try (Statement statement = connection.createStatement()) {
statement.executeUpdate(sql);
}
Expand All @@ -84,20 +88,18 @@ void assertExecute(final AssertionTestParameter testParam) throws SQLException,
if (null == testParam.getTestCaseContext()) {
return;
}
E2EContainerComposer containerComposer = new E2EContainerComposer(testParam.getKey(), testParam.getScenario(), testParam.getDatabaseType(),
AdapterMode.valueOf(testParam.getMode().toUpperCase()), AdapterType.valueOf(testParam.getAdapter().toUpperCase()));
SingleE2EContext singleE2EContext = new SingleE2EContext(testParam);
E2ETestContext context = new E2ETestContext(testParam);
try (
AuthorityEnvironmentManager ignored = new AuthorityEnvironmentManager(
new ScenarioCommonPath(testParam.getScenario()).getAuthorityFile(), containerComposer.getActualDataSourceMap(), testParam.getDatabaseType())) {
assertExecute(containerComposer, singleE2EContext);
new ScenarioCommonPath(testParam.getScenario()).getAuthorityFile(), environmentSetupEngine.getActualDataSourceMap(), testParam.getDatabaseType())) {
assertExecute(context);
}
}

private void assertExecute(final E2EContainerComposer containerComposer, final SingleE2EContext singleE2EContext) throws SQLException {
String sql = singleE2EContext.getSQL();
try (Connection connection = containerComposer.getTargetDataSource().getConnection()) {
if (SQLExecuteType.Literal == singleE2EContext.getSqlExecuteType()) {
private void assertExecute(final E2ETestContext context) throws SQLException {
String sql = context.getSQL();
try (Connection connection = environmentSetupEngine.getTargetDataSource().getConnection()) {
if (SQLExecuteType.Literal == context.getSqlExecuteType()) {
try (Statement statement = connection.createStatement()) {
statement.execute(sql);
}
Expand Down
Loading

0 comments on commit 232bd7a

Please sign in to comment.