提交 f63013be 编写于 作者: H haocao

Refactor master slave integrate test cases 8th.

上级 7d4b2eb3
......@@ -128,7 +128,7 @@ public abstract class AbstractSQLAssertTest extends AbstractSQLTest {
}
}
private void executeAndAssertSQL(final boolean isPreparedStatement, final AbstractDataSourceAdapter shardingDataSource) throws MalformedURLException, SQLException, DatabaseUnitException {
private void executeAndAssertSQL(final boolean isPreparedStatement, final AbstractDataSourceAdapter abstractDataSourceAdapter) throws MalformedURLException, SQLException, DatabaseUnitException {
for (SQLShardingRule sqlShardingRule : shardingRules) {
if (!needAssert(sqlShardingRule)) {
continue;
......@@ -136,9 +136,9 @@ public abstract class AbstractSQLAssertTest extends AbstractSQLTest {
for (SQLAssertData each : sqlShardingRule.getData()) {
File expectedDataSetFile = getExpectedFile(each.getExpected());
if (sql.toUpperCase().startsWith("SELECT")) {
assertDqlSql(isPreparedStatement, shardingDataSource, each, expectedDataSetFile);
assertDqlSql(isPreparedStatement, abstractDataSourceAdapter, each, expectedDataSetFile);
} else {
assertDmlAndDdlSql(isPreparedStatement, shardingDataSource, each, expectedDataSetFile);
assertDmlAndDdlSql(isPreparedStatement, abstractDataSourceAdapter, each, expectedDataSetFile);
}
}
}
......@@ -157,24 +157,24 @@ public abstract class AbstractSQLAssertTest extends AbstractSQLTest {
return false;
}
private void assertDqlSql(final boolean isPreparedStatement, final AbstractDataSourceAdapter shardingDataSource, final SQLAssertData data, final File expectedDataSetFile)
private void assertDqlSql(final boolean isPreparedStatement, final AbstractDataSourceAdapter abstractDataSourceAdapter, final SQLAssertData data, final File expectedDataSetFile)
throws MalformedURLException, SQLException, DatabaseUnitException {
if (isPreparedStatement) {
executeQueryWithPreparedStatement(shardingDataSource, getParameters(data), expectedDataSetFile);
executeQueryWithPreparedStatement(abstractDataSourceAdapter, getParameters(data), expectedDataSetFile);
} else {
executeQueryWithStatement(shardingDataSource, getParameters(data), expectedDataSetFile);
executeQueryWithStatement(abstractDataSourceAdapter, getParameters(data), expectedDataSetFile);
}
}
private void assertDmlAndDdlSql(final boolean isPreparedStatement, final AbstractDataSourceAdapter shardingDataSource, final SQLAssertData data, final File expectedDataSetFile)
private void assertDmlAndDdlSql(final boolean isPreparedStatement, final AbstractDataSourceAdapter abstractDataSourceAdapter, final SQLAssertData data, final File expectedDataSetFile)
throws MalformedURLException, SQLException, DatabaseUnitException {
if (isPreparedStatement) {
executeWithPreparedStatement(shardingDataSource, getParameters(data));
executeWithPreparedStatement(abstractDataSourceAdapter, getParameters(data));
} else {
executeWithStatement(shardingDataSource, getParameters(data));
executeWithStatement(abstractDataSourceAdapter, getParameters(data));
}
try (Connection conn = shardingDataSource instanceof MasterSlaveDataSource ? shardingDataSource.getConnection()
: ((ShardingDataSource) shardingDataSource).getConnection().getConnection(getDataSourceName(data.getExpected()), getSqlType())) {
try (Connection conn = abstractDataSourceAdapter instanceof MasterSlaveDataSource ? abstractDataSourceAdapter.getConnection()
: ((ShardingDataSource) abstractDataSourceAdapter).getConnection().getConnection(getDataSourceName(data.getExpected()), getSqlType())) {
assertResult(conn, expectedDataSetFile);
}
}
......@@ -206,24 +206,24 @@ public abstract class AbstractSQLAssertTest extends AbstractSQLTest {
return Strings.isNullOrEmpty(data.getParameter()) ? Collections.<String>emptyList() : Lists.newArrayList(data.getParameter().split(","));
}
private void executeWithPreparedStatement(final AbstractDataSourceAdapter dataSource, final List<String> parameters) throws SQLException {
try (Connection connection = dataSource.getConnection();
private void executeWithPreparedStatement(final AbstractDataSourceAdapter abstractDataSourceAdapter, final List<String> parameters) throws SQLException {
try (Connection connection = abstractDataSourceAdapter.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement(replacePreparedStatement(sql))) {
setParameters(preparedStatement, parameters);
preparedStatement.execute();
}
}
private void executeWithStatement(final AbstractDataSourceAdapter dataSource, final List<String> parameters) throws SQLException {
try (Connection connection = dataSource.getConnection();
private void executeWithStatement(final AbstractDataSourceAdapter abstractDataSourceAdapter, final List<String> parameters) throws SQLException {
try (Connection connection = abstractDataSourceAdapter.getConnection();
Statement statement = connection.createStatement()) {
statement.execute(replaceStatement(sql, parameters.toArray()));
}
}
private void executeQueryWithPreparedStatement(final AbstractDataSourceAdapter dataSource, final List<String> parameters, final File file)
private void executeQueryWithPreparedStatement(final AbstractDataSourceAdapter abstractDataSourceAdapter, final List<String> parameters, final File file)
throws MalformedURLException, SQLException, DatabaseUnitException {
try (Connection conn = dataSource.getConnection();
try (Connection conn = abstractDataSourceAdapter.getConnection();
PreparedStatement preparedStatement = conn.prepareStatement(replacePreparedStatement(sql))) {
setParameters(preparedStatement, parameters);
ReplacementDataSet expectedDataSet = new ReplacementDataSet(new FlatXmlDataSetBuilder().build(file));
......@@ -248,9 +248,9 @@ public abstract class AbstractSQLAssertTest extends AbstractSQLTest {
}
}
private void executeQueryWithStatement(final AbstractDataSourceAdapter dataSource, final List<String> parameters, final File file)
private void executeQueryWithStatement(final AbstractDataSourceAdapter abstractDataSourceAdapter, final List<String> parameters, final File file)
throws MalformedURLException, SQLException, DatabaseUnitException {
try (Connection conn = dataSource.getConnection()) {
try (Connection conn = abstractDataSourceAdapter.getConnection()) {
String querySql = replaceStatement(sql, parameters.toArray());
ReplacementDataSet expectedDataSet = new ReplacementDataSet(new FlatXmlDataSetBuilder().build(file));
expectedDataSet.addReplacementObject("[null]", null);
......
......@@ -41,7 +41,6 @@ public class SQLAssertJAXBHelper {
} else {
result.addAll(dataParameters(assertFilePath));
}
return result;
}
......
///*
// * Copyright 1999-2015 dangdang.com.
// * <p>
// * Licensed 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.
// * </p>
// */
//
//package com.dangdang.ddframe.rdb.integrate.type.ms;
//
//import com.dangdang.ddframe.rdb.common.base.AbstractSQLAssertTest;
//import com.dangdang.ddframe.rdb.common.env.ShardingTestStrategy;
//import com.dangdang.ddframe.rdb.integrate.jaxb.SQLShardingRule;
//import com.dangdang.ddframe.rdb.sharding.api.strategy.slave.MasterSlaveLoadBalanceStrategyType;
//import com.dangdang.ddframe.rdb.sharding.constant.DatabaseType;
//import com.dangdang.ddframe.rdb.sharding.hint.HintManagerHolder;
//import com.dangdang.ddframe.rdb.sharding.jdbc.core.datasource.MasterSlaveDataSource;
//import org.junit.After;
//
//import javax.sql.DataSource;
//import java.io.File;
//import java.net.URL;
//import java.sql.SQLException;
//import java.util.Arrays;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//import java.util.Map.Entry;
//
//public class MasterSlaveOnlyTest extends AbstractSQLAssertTest {
//
// private static Map<DatabaseType, MasterSlaveDataSource> masterSlaveDataSources = new HashMap<>();
//
// public MasterSlaveOnlyTest(final String testCaseName, final String sql, final DatabaseType type, final List<SQLShardingRule> sqlShardingRules) {
// super(testCaseName, sql, type, sqlShardingRules);
// }
//
// @Override
// protected File getExpectedFile(final String expected) {
// String expectedFile = null == expected ? "integrate/dataset/EmptyTable.xml"
// : "integrate/dataset/masterslave/expect/" + expected;
// URL url = AbstractSQLAssertTest.class.getClassLoader().getResource(expectedFile);
// if (null == url) {
// throw new RuntimeException("Wrong expected file:" + expectedFile);
// }
// return new File(url.getPath());
// }
//
// @Override
// protected ShardingTestStrategy getShardingStrategy() {
// return ShardingTestStrategy.masterslaveonly;
// }
//
// @Override
// protected List<String> getInitDataSetFiles() {
// return Arrays.asList("integrate/dataset/masterslave/init/master_only.xml", "integrate/dataset/masterslave/init/slave_only.xml");
// }
//
// @Override
// protected final Map<DatabaseType, MasterSlaveDataSource> getDataSources() throws SQLException {
// Map<DatabaseType, Map<String, DataSource>> dataSourceMap = createDataSourceMap();
// for (Entry<DatabaseType, Map<String, DataSource>> each : dataSourceMap.entrySet()) {
// masterSlaveDataSources.put(each.getKey(), getMasterSlaveDataSource(each.getValue()));
// }
// return masterSlaveDataSources;
// }
//
// private MasterSlaveDataSource getMasterSlaveDataSource(final Map<String, DataSource> masterSlaveDataSourceMap) throws SQLException {
// Map<String, DataSource> slaveDs = new HashMap<>(1, 1);
// slaveDs.put("dataSource_slave_only", masterSlaveDataSourceMap.get("dataSource_slave_only"));
// return new MasterSlaveDataSource("ms_only", "dataSource_master_only", masterSlaveDataSourceMap.get("dataSource_master_only"), slaveDs, MasterSlaveLoadBalanceStrategyType.ROUND_ROBIN);
// }
//
// @After
// public final void clearFlag() {
// HintManagerHolder.clear();
// MasterSlaveDataSource.resetDMLFlag();
// }
//
//}
/*
* Copyright 1999-2015 dangdang.com.
* <p>
* Licensed 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.
* </p>
*/
package com.dangdang.ddframe.rdb.integrate.type.ms;
import com.dangdang.ddframe.rdb.common.base.AbstractSQLAssertTest;
import com.dangdang.ddframe.rdb.common.env.ShardingTestStrategy;
import com.dangdang.ddframe.rdb.integrate.jaxb.SQLShardingRule;
import com.dangdang.ddframe.rdb.sharding.api.strategy.slave.MasterSlaveLoadBalanceStrategyType;
import com.dangdang.ddframe.rdb.sharding.constant.DatabaseType;
import com.dangdang.ddframe.rdb.sharding.hint.HintManagerHolder;
import com.dangdang.ddframe.rdb.sharding.jdbc.core.datasource.MasterSlaveDataSource;
import org.junit.After;
import javax.sql.DataSource;
import java.io.File;
import java.net.URL;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
public class MasterSlaveOnlyTest extends AbstractSQLAssertTest {
private static Map<DatabaseType, MasterSlaveDataSource> masterSlaveDataSources = new HashMap<>();
public MasterSlaveOnlyTest(final String testCaseName, final String sql, final DatabaseType type, final List<SQLShardingRule> sqlShardingRules) {
super(testCaseName, sql, type, sqlShardingRules);
}
@Override
protected File getExpectedFile(final String expected) {
String expectedFile = null == expected ? "integrate/dataset/EmptyTable.xml"
: String.format("integrate/dataset/masterslave/expect/" + expected, getShardingStrategy());
URL url = AbstractSQLAssertTest.class.getClassLoader().getResource(expectedFile);
if (null == url) {
throw new RuntimeException("Wrong expected file:" + expectedFile);
}
return new File(url.getPath());
}
@Override
protected ShardingTestStrategy getShardingStrategy() {
return ShardingTestStrategy.masterslaveonly;
}
@Override
protected List<String> getInitDataSetFiles() {
return Arrays.asList("integrate/dataset/masterslave/init/master_only.xml", "integrate/dataset/masterslave/init/slave_only.xml");
}
@Override
protected final Map<DatabaseType, MasterSlaveDataSource> getDataSources() throws SQLException {
Map<DatabaseType, Map<String, DataSource>> dataSourceMap = createDataSourceMap();
for (Entry<DatabaseType, Map<String, DataSource>> each : dataSourceMap.entrySet()) {
masterSlaveDataSources.put(each.getKey(), getMasterSlaveDataSource(each.getValue()));
}
return masterSlaveDataSources;
}
private MasterSlaveDataSource getMasterSlaveDataSource(final Map<String, DataSource> masterSlaveDataSourceMap) throws SQLException {
Map<String, DataSource> slaveDs = new HashMap<>(1, 1);
slaveDs.put("dataSource_slave_only", masterSlaveDataSourceMap.get("dataSource_slave_only"));
return new MasterSlaveDataSource("ms_only", "dataSource_master_only", masterSlaveDataSourceMap.get("dataSource_master_only"), slaveDs, MasterSlaveLoadBalanceStrategyType.ROUND_ROBIN);
}
@After
public final void clearFlag() {
HintManagerHolder.clear();
MasterSlaveDataSource.resetDMLFlag();
}
}
<dataset>
<t_order order_id="1" user_id="1" status="insert" />
<t_order order_id="2" user_id="2" status="insert" />
<t_order order_id="3" user_id="3" status="insert" />
<t_order order_id="4" user_id="4" status="insert" />
<t_order order_id="5" user_id="5" status="insert" />
<t_order order_id="6" user_id="6" status="insert" />
<t_order order_id="7" user_id="7" status="insert" />
<t_order order_id="8" user_id="8" status="insert" />
<t_order order_id="9" user_id="9" status="insert" />
<t_order order_id="10" user_id="10" status="insert" />
</dataset>
<dataset>
<t_order order_id="1" user_id="1" status="insert" />
</dataset>
<dataset>
<t_order order_id="1" user_id="1" status="insert" />
<t_order order_id="2" user_id="2" status="insert" />
</dataset>
<dataset>
<t_order order_id="1" user_id="1" status="insert" />
<t_order order_id="2" user_id="2" status="insert" />
<t_order order_id="3" user_id="3" status="insert" />
</dataset>
<dataset>
<t_order order_id="1" user_id="1" status="insert" />
<t_order order_id="2" user_id="2" status="insert" />
<t_order order_id="3" user_id="3" status="insert" />
<t_order order_id="4" user_id="4" status="insert" />
</dataset>
<dataset>
<t_order order_id="1" user_id="1" status="insert" />
<t_order order_id="2" user_id="2" status="insert" />
<t_order order_id="3" user_id="3" status="insert" />
<t_order order_id="4" user_id="4" status="insert" />
<t_order order_id="5" user_id="5" status="insert" />
</dataset>
<dataset>
<t_order order_id="1" user_id="1" status="insert" />
<t_order order_id="2" user_id="2" status="insert" />
<t_order order_id="3" user_id="3" status="insert" />
<t_order order_id="4" user_id="4" status="insert" />
<t_order order_id="5" user_id="5" status="insert" />
<t_order order_id="6" user_id="6" status="insert" />
</dataset>
<dataset>
<t_order order_id="1" user_id="1" status="insert" />
<t_order order_id="2" user_id="2" status="insert" />
<t_order order_id="3" user_id="3" status="insert" />
<t_order order_id="4" user_id="4" status="insert" />
<t_order order_id="5" user_id="5" status="insert" />
<t_order order_id="6" user_id="6" status="insert" />
<t_order order_id="7" user_id="7" status="insert" />
</dataset>
<dataset>
<t_order order_id="1" user_id="1" status="insert" />
<t_order order_id="2" user_id="2" status="insert" />
<t_order order_id="3" user_id="3" status="insert" />
<t_order order_id="4" user_id="4" status="insert" />
<t_order order_id="5" user_id="5" status="insert" />
<t_order order_id="6" user_id="6" status="insert" />
<t_order order_id="7" user_id="7" status="insert" />
<t_order order_id="8" user_id="8" status="insert" />
</dataset>
<dataset>
<t_order order_id="1" user_id="1" status="insert" />
<t_order order_id="2" user_id="2" status="insert" />
<t_order order_id="3" user_id="3" status="insert" />
<t_order order_id="4" user_id="4" status="insert" />
<t_order order_id="5" user_id="5" status="insert" />
<t_order order_id="6" user_id="6" status="insert" />
<t_order order_id="7" user_id="7" status="insert" />
<t_order order_id="8" user_id="8" status="insert" />
<t_order order_id="9" user_id="9" status="insert" />
</dataset>
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册