package com.alipay.zdal.test.shardrw; import java.sql.ResultSet; import java.sql.SQLException; import java.util.HashMap; import java.util.List; import java.util.Map; import static com.alipay.ats.internal.domain.ATS.Step; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.support.TransactionCallback; import org.springframework.transaction.support.TransactionTemplate; import com.alipay.ats.annotation.Feature; import com.alipay.ats.annotation.Priority; import com.alipay.ats.annotation.Subject; import com.alipay.ats.assertion.TestAssertion; import com.alipay.ats.enums.PriorityLevel; import com.alipay.ats.junit.ATSJUnitRunner; import com.ibatis.common.jdbc.exception.NestedSQLException; import com.alipay.zdal.test.common.ConstantsTest; import com.alipay.zdal.test.common.ZdalTestCommon; import com.ibatis.sqlmap.client.SqlMapClient; @RunWith(ATSJUnitRunner.class) @Feature("shard+rw����ķ���") public class SR954130 { public TestAssertion Assert = new TestAssertion(); private TransactionTemplate tt; private SqlMapClient sqlMap; private String dburl ; private String dburl2; private String dbpsd ; private String dbuser ; @Before public void beforeTestCase() { dburl = ConstantsTest.mysql12UrlTranation0; dburl2=ConstantsTest.mysql12UrlTranation1; dbpsd = ConstantsTest.mysq112Psd; dbuser = ConstantsTest.mysq112User; sqlMap = (SqlMapClient) ZdalShardrwSuite.context .getBean("zdalShardrwShardDbShardTable"); tt = (TransactionTemplate) ZdalShardrwSuite.context .getBean("shardrwtransactionTemplate1"); } @Subject("shard+rw:zdal����������룬Ԥ��д��group_0��ds0��0��IJ��ԣ�ʵ���ڶ�ȡʱ��ds0��0��") @Priority(PriorityLevel.HIGHEST) @Test public void TC954131() { testTransactionInsertSelect(); Step("������֤���������"); testCheckData(); } @Subject("shard+rw:zdal����������룬Ԥ��д��group_0��ds0��0��IJ��ԣ�ʵ���ڶ�ȡʱ��ds0��1��") @Priority(PriorityLevel.HIGHEST) @Test public void TC954132() { testTransactionInsertSelectOther(); Step("������֤���������"); testCheckData(); } @Subject("shard+rw:zdal����������룬Ԥ��д��group_0��ds0��0��IJ��ԣ�����ʱ������group_1�����ʱ����group_1��д��") @Priority(PriorityLevel.HIGHEST) @Test public void TC954133() { testTransactionInsertSelectOther2(); Step("������֤���������"); testCheckData(); } @Subject("shard+rw:zdal����������룬����д���group��ͬ") @Priority(PriorityLevel.HIGHEST) @Test public void TC954134() { Step("shard+rw:zdal����������룬����д���group��ͬ"); testTransactionInsertInsert(); String delSql="delete from user_0"; ZdalTestCommon.dataUpdateJDBC(delSql, dburl, dbpsd, dbuser); ZdalTestCommon.dataUpdateJDBC(delSql, dburl2, dbpsd, dbuser); } /** * ��insert��select�������������еĶ������������ֵ�ͬһ��group��ʱ�������ǵ�ǰд�� */ private void testTransactionInsertSelect() { try { tt.execute(new TransactionCallback() { @SuppressWarnings("unchecked") public Object doInTransaction(TransactionStatus status) { Map<String, Object> params = new HashMap<String, Object>(); params.put("user_id", 10); params.put("age", 10); params.put("name", "test"); String insertSql = "insertShardrwMysql"; String selectSql = "selectShardrwMysql"; try { sqlMap.insert(insertSql, params); List<Object> res_1 = sqlMap.queryForList(selectSql); Assert.areEqual(1, res_1.size(), "��֤select����ǿ�"); } catch (SQLException e) { status.setRollbackOnly(); e.printStackTrace(); } return null; } }); } catch (Exception ex) { ex.printStackTrace(); } } /** * д�⵽group��user_0����ȡͬһ��group��user_1�� */ private void testTransactionInsertSelectOther() { try { tt.execute(new TransactionCallback() { @SuppressWarnings("unchecked") public Object doInTransaction(TransactionStatus status) { Map<String, Object> params = new HashMap<String, Object>(); params.put("user_id", 10); params.put("age", 10); params.put("name", "test"); String insertSql = "insertShardrwMysql"; String selectSql = "selectShardrwMysqlOther"; try { sqlMap.insert(insertSql, params); List<Object> res_1 = sqlMap.queryForList(selectSql); Step("��ʱ��ȡ����ds0��user_1��"); Assert.areEqual(0, res_1.size(), "��֤select����ǿ�"); } catch (SQLException e) { status.setRollbackOnly(); e.printStackTrace(); } return null; } }); } catch (Exception ex) { ex.printStackTrace(); } } /** * д�⵽group��user_0����ȡ��ͬ��group��user_0�� */ private void testTransactionInsertSelectOther2() { try { tt.execute(new TransactionCallback() { @SuppressWarnings("unchecked") public Object doInTransaction(TransactionStatus status) { Map<String, Object> params = new HashMap<String, Object>(); params.put("user_id", 10); params.put("age", 10); params.put("name", "test"); String insertSql = "insertShardrwMysql"; String selectSql = "selectShardrwMysqlOther2"; try { sqlMap.insert(insertSql, params); List<Object> res_1 = sqlMap.queryForList(selectSql); Assert.areEqual(0, res_1.size(), "��֤select����ǿ�,"+res_1.size()); } catch (SQLException e) { status.setRollbackOnly(); e.printStackTrace(); } return null; } }); } catch (Exception ex) { ex.printStackTrace(); } } /** * ǰ�����β����sql�����ֿ���򣬹����ڲ�ͬ��group�� */ private void testTransactionInsertInsert() { try { tt.execute(new TransactionCallback() { @SuppressWarnings("unchecked") public Object doInTransaction(TransactionStatus status) { Map<String, Object> params = new HashMap<String, Object>(); Map<String, Object> params2 = new HashMap<String, Object>(); params.put("user_id", 10); params.put("age", 10); params.put("name", "testA"); params2.put("user_id", 11); params2.put("age", 10); params.put("name", "testB"); String insertSql = "insertShardrwMysql"; try { sqlMap.insert(insertSql, params); sqlMap.insert(insertSql, params2); } catch (Exception e) { status.setRollbackOnly(); e.printStackTrace(); Assert.areEqual(NestedSQLException.class, e.getClass(), "�쳣"); } return null; } }); } catch (Exception ex) { ex.printStackTrace(); } } /** * �����������,֮��ɾ������ * * @param dburl */ private void testCheckData() { String sql = "select count(*) from user_0"; ResultSet rs = ZdalTestCommon.dataCheckFromJDBC(sql, dburl, dbpsd, dbuser); try { rs.next(); Assert.areEqual(1, rs.getInt(1), "���ݼ��"); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } String delStr = "delete from user_0"; ZdalTestCommon.dataUpdateJDBC(delStr, dburl, dbpsd, dbuser); } }