package com.taobao.tddl.qatest.group;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.junit.Assert;
import org.junit.Ignore;
import org.junit.Test;
import com.taobao.tddl.common.GroupDataSourceRouteHelper;
import com.taobao.tddl.qatest.util.DateUtil;
/**
* Comment for GroupTransNormalTest
* <p/>
* Created Date: 2010-12-10 下午07:48:14
*/
public class GroupTransNormalTest extends GroupTestCase {
@Test
public void oneConnCommitTest() throws SQLException {
Connection conn = tds.getConnection();
conn.setAutoCommit(false);
Statement stat = conn.createStatement();
String sql = "insert into normaltbl_0001 (pk,gmt_create) values (" + RANDOM_ID + ",'" + time + "')";
stat.executeUpdate(sql);
// 没提交之前使用同一个连接肯定查得到
GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(0);
String sqlx = "select * from normaltbl_0001 where pk=" + RANDOM_ID;
ResultSet rs = stat.executeQuery(sqlx);
while (rs.next()) {
Assert.assertEquals(time, DateUtil.formatDate(rs.getDate("gmt_create"), DateUtil.DATE_FULLHYPHEN));
}
// 提交
conn.commit();
GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(0);
ResultSet rs2 = stat.executeQuery(sqlx);
while (rs2.next()) {
// 肯定相同
Assert.assertEquals(time, DateUtil.formatDate(rs2.getDate("gmt_create"), DateUtil.DATE_FULLHYPHEN));
}
// 多次提交或者回滚
try {
conn.commit();
conn.commit();
conn.rollback();
conn.rollback();
} catch (Exception e) {
Assert.fail(e.toString());
}
}
@Ignore("事务被锁跑的时间太久,暂时屏蔽")
@Test
public void severalConnCommitTest() throws SQLException {
Connection conn = tds.getConnection();
conn.setAutoCommit(false);
Statement stat = conn.createStatement();
String sql = "insert into normaltbl_0001 (pk,gmt_create) values (" + RANDOM_ID + ",'" + time + "')";
stat.executeUpdate(sql);
// 未提交,使用同一个连接肯定查得到
GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(0);
sql = "select * from normaltbl_0001 where pk=" + RANDOM_ID;
ResultSet rs = stat.executeQuery(sql);
while (rs.next()) {
Assert.assertEquals(time, DateUtil.formatDate(rs.getDate("gmt_create"), DateUtil.DATE_FULLHYPHEN));
}
// 未提交,使用不同连接失败
Connection otherConn = tds.getConnection();
otherConn.setAutoCommit(false);
Statement otherStat = otherConn.createStatement();
sql = "insert into normaltbl_0001 (pk,gmt_create) values (" + RANDOM_ID + ",'" + time + "')";
try {
otherStat.executeUpdate(sql);
Assert.fail();
} catch (Exception e) {
// Lock wait timeout exceeded; try restarting transaction
}
// 提交
conn.commit();
sql = "select * from normaltbl_0001 where pk=" + RANDOM_ID;
GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(0);
rs = stat.executeQuery(sql);
while (rs.next()) {
// 肯定相同
Assert.assertEquals(time, DateUtil.formatDate(rs.getDate("gmt_create"), DateUtil.DATE_FULLHYPHEN));
}
}
@Test
public void oneConnRollbackTest() throws SQLException {
Connection conn = tds.getConnection();
conn.setAutoCommit(false);
Statement stat = conn.createStatement();
String sql = "insert into normaltbl_0001 (pk,gmt_create) values (" + RANDOM_ID + ",'" + time + "')";
stat.executeUpdate(sql);
// 没提交之前使用同一个连接肯定查得到
GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(0);
String sqlx = "select * from normaltbl_0001 where pk=" + RANDOM_ID;
ResultSet rs = stat.executeQuery(sqlx);
while (rs.next()) {
Assert.assertEquals(time, DateUtil.formatDate(rs.getDate("gmt_create"), DateUtil.DATE_FULLHYPHEN));
}
// 回滚
conn.rollback();
GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(0);
rs = stat.executeQuery(sqlx);
while (rs.next()) {
// 肯定不相等
Assert.assertNotSame(time, DateUtil.formatDate(rs.getDate("gmt_create"), DateUtil.DATE_FULLHYPHEN));
}
// 多次提交或者回滚
try {
conn.commit();
conn.commit();
conn.rollback();
conn.rollback();
} catch (Exception e) {
Assert.fail(e.toString());
}
}
@Ignore("事务被锁跑的时间太久,暂时屏蔽")
@Test
public void severalConnRollbackTest() throws SQLException {
Connection conn = tds.getConnection();
conn.setAutoCommit(false);
Statement stat = conn.createStatement();
String sql = "insert into normaltbl_0001 (pk,gmt_create) values (" + RANDOM_ID + ",'" + time + "')";
stat.executeUpdate(sql);
// 未提交,使用同一个连接肯定查得到
GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(0);
String sqlx = "select * from normaltbl_0001 where pk=" + RANDOM_ID;
ResultSet rs = stat.executeQuery(sqlx);
while (rs.next()) {
Assert.assertEquals(time, DateUtil.formatDate(rs.getDate("gmt_create"), DateUtil.DATE_FULLHYPHEN));
}
// 未提交,使用不同连接失败
Connection otherConn = tds.getConnection();
otherConn.setAutoCommit(false);
Statement otherStat = otherConn.createStatement();
sql = "insert into normaltbl_0001 (pk,gmt_create) values (" + RANDOM_ID + ",'" + time + "')";
try {
otherStat.executeUpdate(sql);
Assert.fail();
} catch (Exception e) {
// Lock wait timeout exceeded; try restarting transaction
}
// 回滚
conn.rollback();
GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(0);
rs = stat.executeQuery(sqlx);
while (rs.next()) {
// 肯定不相等
Assert.assertNotSame(time, DateUtil.formatDate(rs.getDate("gmt_create"), DateUtil.DATE_FULLHYPHEN));
}
// 多次提交或者回滚
try {
conn.commit();
conn.commit();
conn.rollback();
conn.rollback();
} catch (Exception e) {
Assert.fail(e.toString());
}
}
}