package com.alipay.zdal.test.shardfailover;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import static com.alipay.ats.internal.domain.ATS.Step;
import org.junit.After;
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.alipay.zdal.client.ThreadLocalString;
import com.alipay.zdal.client.util.ThreadLocalMap;
import com.alipay.zdal.client.util.condition.SimpleCondition;
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+Failover ,ֱ���ƹ��ֿ�ֱ�����·��")
public class SR953020 {
public TestAssertion Assert = new TestAssertion();;
private SqlMapClient sqlMap;
private TransactionTemplate tt;
private String dburl1;
private String dbpsd;
private String dbuser;
@Before
public void beforeTestCase() {
dburl1 = ConstantsTest.mysq112UrlTddl0;
dbpsd = ConstantsTest.mysq112Psd;
dbuser = ConstantsTest.mysq112User;
sqlMap = (SqlMapClient) ZdalShardfailoverSuite.context
.getBean("zdalShardfailoverShardDbShardTable");
tt = (TransactionTemplate) ZdalShardfailoverSuite.context
.getBean("shardfailovertransactionTemplate1");
}
@After
public void afterTestCase() {
ThreadLocalMap.reset();
}
@Subject("shard+failover���ƹ��ֿ�ֱ�����·��")
@Priority(PriorityLevel.HIGHEST)
@Test
public void TC953021() {
insertData();
Step("������֤");
testCheckData(dburl1);
Step("��������");
testDeleData(dburl1);
}
@Subject("shard+failover���ƹ��ֿ�ֱ�����·��,�������������쳣")
@Priority(PriorityLevel.HIGHEST)
@Test
public void TC953022() {
Map<String, Object> params = new HashMap<String, Object>();
params.put("user_id", Integer.valueOf("11"));
params.put("name", "test_ROUTE_CONDITION");
params.put("address", "test_ROUTE_CONDITION");
Step("�ı�·��");
SimpleCondition simpleCondition = new SimpleCondition();
simpleCondition.setVirtualTableName("users001");
simpleCondition.put("user_id", 10);
ThreadLocalMap.put(ThreadLocalString.ROUTE_CONDITION, simpleCondition);
try {
sqlMap.insert("insertShardfailoverMysql", params);
} catch (Exception ex) {
ex.printStackTrace();
Assert.areEqual(NestedSQLException.class, ex.getClass(), "�쳣��Ϣ");
}
}
@Subject("shard+failover�����ƹ��ֿ�ֱ�����·��")
@Priority(PriorityLevel.HIGHEST)
@Test
public void TC953023(){
try {
tt.execute(new TransactionCallback() {
public Object doInTransaction(TransactionStatus status) {
insertData();
return null;
}
});
} catch (Exception ex) {
ex.printStackTrace();
}
Step("������֤");
testCheckData(dburl1);
Step("��������");
testDeleData(dburl1);
}
/**
* ��������
*/
private void insertData() {
Map<String, Object> params = new HashMap<String, Object>();
params.put("user_id", Integer.valueOf("11"));
params.put("name", "test_ROUTE_CONDITION");
params.put("address", "test_ROUTE_CONDITION");
// �ı�·��
SimpleCondition simpleCondition = new SimpleCondition();
simpleCondition.setVirtualTableName("users");
simpleCondition.put("user_id", 10);
ThreadLocalMap.put(ThreadLocalString.ROUTE_CONDITION, simpleCondition);
try {
sqlMap.insert("insertShardfailoverMysql", params);
} catch (Exception ex) {
ex.printStackTrace();
}
}
/**
* �����������
*
* @param dburl
*/
private void testCheckData(String dburl) {
String sql = "select count(*) from users_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();
}
}
/**
* ��������
*/
private void testDeleData(String dburl) {
String delStr = "delete from users_0";
ZdalTestCommon.dataUpdateJDBC(delStr, dburl, dbpsd, dbuser);
}
}