package com.alipay.zdal.test.rw;
import static com.alipay.ats.internal.domain.ATS.Step;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.orm.ibatis.SqlMapClientCallback;
import org.springframework.orm.ibatis.SqlMapClientTemplate;
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.test.common.ConstantsTest;
import com.alipay.zdal.test.common.ZdalTestCommon;
import com.alipay.zdal.test.common.AllTestSuit;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapExecutor;
@RunWith(ATSJUnitRunner.class)
@Feature("��������")
public class SR952140 {
public TestAssertion Assert = new TestAssertion();
private SqlMapClient sqlMap;
private SqlMapClientTemplate sqlMapClientTemplate;
private TransactionTemplate tt;
String url;
String user;
String psd;
String url2;
@Before
public void beforeTestCase(){
String delStr="delete from master_0";
ZdalTestCommon.dataUpdateJDBC(delStr, url, psd, user);
ZdalTestCommon.dataUpdateJDBC(delStr, url2, psd, user);
url = ConstantsTest.mysq112UrlFail0;
url2=ConstantsTest.mysq112UrlFail1;
user = ConstantsTest.mysq112User;
psd = ConstantsTest.mysq112Psd;
sqlMap = (SqlMapClient) ZdalRwSuite.context
.getBean("zdalTransactionManagerTwo");
tt = (TransactionTemplate) ZdalRwSuite.context
.getBean("transactionTwoTemplate1");
sqlMapClientTemplate=new SqlMapClientTemplate(sqlMap);
}
@After
public void afterTestCase(){
String delStr="delete from master_0";
ZdalTestCommon.dataUpdateJDBC(delStr, url, psd, user);
ZdalTestCommon.dataUpdateJDBC(delStr, url2, psd, user);
}
@Subject("������������,��ͨ������ģ��")
@Priority(PriorityLevel.HIGHEST)
@Test
public void TC952141(){
Step("������������");
try{
inserts(getTestData(3));
}catch(Exception ex){
ex.printStackTrace();
}
Step("��֤����");
assertLineCount();
}
@Subject("����ģ��,��������ѯ�� Ȼ����ɾ��")
@Priority(PriorityLevel.HIGHEST)
@Test
public void TC952142(){
Step("������");
ZdalTestCommon.dataPrepareForFail0();
try {
tt.execute(new TransactionCallback() {
public Object doInTransaction(TransactionStatus status) {
Step("������ѯ");
List<Map<String,Object>> paramList = getTestData(1);
selects(paramList);
Step("ɾ������");
String deleteSql = "rw-Delete";
try {
Step("������ɾ������");
int res_2 = sqlMap.delete(deleteSql);
Assert.areEqual(1, res_2, "��֤delete�ɹ�");
} catch (SQLException e) {
throw new RuntimeException(e);
}
return null;
}
});
} catch (Exception ex) {
ex.printStackTrace();
}
}
@Subject("����ģ��,���������룬 Ȼ��������ѯ")
@Priority(PriorityLevel.HIGHEST)
@Test
public void TC952143(){
try {
tt.execute(new TransactionCallback() {
public Object doInTransaction(TransactionStatus status) {
Step("��������");
List<Map<String,Object>> ls=getTestData(3);
inserts(ls);
Step("������ѯ");
List<Map<String,Object>> paramList = getTestData(1);
selects(paramList);
return null;
}
});
} catch (Exception ex) {
ex.printStackTrace();
}
//��֤����
assertLineCount();
}
/**��������Ч
@Subject("����ģ��,��delete ����������")
@Priority(PriorityLevel.HIGHEST)
@Test
public void TC951232(){
// ������
ZdalTestCommon.dataPrepareForFail0();
try {
tt.execute(new TransactionCallback() {
public Object doInTransaction(TransactionStatus status) {
String deleteSql = "rw-Delete";
try {
Step("������ɾ������");
int res_2 = sqlMap.delete(deleteSql);
Assert.areEqual(1, res_2, "��֤delete�ɹ�");
} catch (SQLException e) {
throw new RuntimeException(e);
}
//��������
List<Map<String,Object>> ls=getTestData(3);
inserts(ls);
return null;
}
});
} catch (Exception ex) {
ex.printStackTrace();
}
//��֤����
//assertLineCount();
}
*/
/**
* ��֯����map��LIST
* @param num
* @return
*/
private List<Map<String,Object>> getTestData(int num){
List<Map<String, Object>> dataList = new ArrayList<Map<String,Object>>();
for(int i=0;i<num;i++){
Map<String, Object> params = new HashMap<String, Object>();
params.put("user_id", i);
params.put("age", Integer.valueOf(10));
params.put("name", "a");
params.put("content", "s");
dataList.add(params);
}
return dataList;
}
/**
* ��������
* @param paramList
*/
private void inserts( final List<Map<String,Object>> paramList){
sqlMapClientTemplate.execute(new SqlMapClientCallback(){
@Override
public Object doInSqlMapClient(SqlMapExecutor executor) throws SQLException {
executor.startBatch();
for(Map<String,Object> param:paramList){
executor.insert("rw-insert-withParam",param);
}
return executor.executeBatch();
}
});
}
/**
* ������ѯ
* @param paramList
*/
public void selects(final List<Map<String,Object>> paramList){
sqlMapClientTemplate.execute(new SqlMapClientCallback(){
@Override
public Object doInSqlMapClient(SqlMapExecutor executor) throws SQLException {
executor.startBatch();
for(Map<String,Object> param:paramList){
executor.queryForList("rw-Select-withParam",param);
}
return executor.executeBatch();
}
});
}
/**
* ��֤����
*/
private void assertLineCount(){
Step("��֤����");
String sqlStr1="select count(*) from master_0 where age=10";
ResultSet rs = ZdalTestCommon.dataCheckFromJDBC(sqlStr1, url, psd, user);
try {
Assert.areEqual(true, rs.next(), "���ݳɹ�");
Assert.areEqual(3, rs.getInt(1), "��֤������:"+rs.getInt(1));
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}