package com.alipay.zdal.test.shardrw;
import java.sql.ResultSet;
import static com.alipay.ats.internal.domain.ATS.Step;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
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+rw ,ֱ���ƹ��ֿ�ֱ�����·��")
public class SR954100 {
public TestAssertion Assert = new TestAssertion();;
private SqlMapClient sqlMap;
private TransactionTemplate tt;
private String dburl0;
private String dbpsd;
private String dbuser;
@Before
public void beforeTestCase() {
dburl0 = ConstantsTest.mysql12UrlTranation0;
dbpsd = ConstantsTest.mysq112Psd;
dbuser = ConstantsTest.mysq112User;
sqlMap = (SqlMapClient) ZdalShardrwSuite.context
.getBean("zdalShardrwShardDbShardTable");
tt = (TransactionTemplate) ZdalShardrwSuite.context
.getBean("shardrwtransactionTemplate1");
}
@After
public void afterTestCase() {
ThreadLocalMap.reset();
}
@Subject("shard+rw���ƹ��ֿ�ֱ�����·��")
@Priority(PriorityLevel.HIGHEST)
@Test
public void TC954101() {
insertData();
Step("���ݼ��");
testCheckData(dburl0);
Step("�������");
testDeleData(dburl0);
}
@Subject("shard+rw�����ƹ��ֿ�ֱ�����·��")
@Priority(PriorityLevel.HIGHEST)
@Test
public void TC954102() {
try {
tt.execute(new TransactionCallback() {
public Object doInTransaction(TransactionStatus status) {
insertData();
return null;
}
});
} catch (Exception ex) {
ex.printStackTrace();
}
Step("�������");
testCheckData(dburl0);
Step("�������");
testDeleData(dburl0);
}
@Subject("shard+rw���ƹ��ֿ�ֱ�����·��,����һ���ֿ�����������쳣")
@Priority(PriorityLevel.HIGHEST)
@Test
public void TC954103() {
Map<String, Object> params = new HashMap<String, Object>();
params.put("user_id", Integer.valueOf("11"));
params.put("age", Integer.valueOf("11"));
params.put("name", "test_ROUTE_CONDITION");
Step("�ı�·�ɣ���һ���ֿ������");
SimpleCondition simpleCondition = new SimpleCondition();
simpleCondition.setVirtualTableName("user");
simpleCondition.put("age", 10);
ThreadLocalMap.put(ThreadLocalString.ROUTE_CONDITION, simpleCondition);
try {
sqlMap.insert("insertShardrwMysql", params);
} catch (Exception ex) {
ex.printStackTrace();
Assert.areEqual(NestedSQLException.class, ex.getClass(), "�쳣��֤");
}
}
/**
* ��������
*/
private void insertData() {
Map<String, Object> params = new HashMap<String, Object>();
params.put("user_id", Integer.valueOf("11"));
params.put("age", Integer.valueOf("11"));
params.put("name", "test_ROUTE_CONDITION");
Step("�ı�·��");
SimpleCondition simpleCondition = new SimpleCondition();
simpleCondition.setVirtualTableName("user");
simpleCondition.put("user_id", 10);
simpleCondition.put("age", 10);
ThreadLocalMap.put(ThreadLocalString.ROUTE_CONDITION, simpleCondition);
try {
sqlMap.insert("insertShardrwMysql", params);
} catch (Exception ex) {
ex.printStackTrace();
}
}
/**
* �����������
*
* @param dburl
*/
private void testCheckData(String dburl) {
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();
}
}
/**
* ��������
*/
private void testDeleData(String dburl) {
String delStr = "delete from user_0";
ZdalTestCommon.dataUpdateJDBC(delStr, dburl, dbpsd, dbuser);
}
}