package com.taobao.tddl.qatest.group.selector;
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import com.taobao.diamond.mockserver.MockServer;
import com.taobao.tddl.common.GroupDataSourceRouteHelper;
import com.taobao.tddl.qatest.group.GroupTestCase;
/**
* Comment for GroupSelectDbUseWeightTest
* <p/>
* Created Date: 2010-12-9 上午11:38:16
*/
@SuppressWarnings("rawtypes")
public class GroupUpdateDbUseWeightTest extends GroupTestCase {
private int operationCnt = 1000;
@BeforeClass
public static void setUp() throws Exception {
}
@Before
public void init() throws Exception {
super.setUp();
super.init();
}
@Test
public void updateDBWithoutRWTest() throws Exception {
// 跳过本用例测试
if (SOME_SHOULD_NOT_BE_TEST) {
return;
}
// 将3个库全部设置为只读(确保推送成功)
for (int i = 0; i < 2; i++) {
MockServer.setConfigInfo(tds.getFullDbGroupKey(), "qatest_normal_0,qatest_normal_0_bac,qatest_normal_1_bac");
TimeUnit.SECONDS.sleep(SLEEP_TIME);
}
int firstCnt = 0;
int secondCnt = 0;
int thirdCnt = 0;
for (int i = 0; i < operationCnt; i++) {
// 插入数据
int rs = tddlJT.update("insert into normaltbl_0001 (pk,gmt_create) values (?,?)", new Object[] { RANDOM_ID,
time });
Assert.assertTrue(rs > 0);
GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(0);
List list = tddlJT.queryForList("select * from normaltbl_0001 where pk=?", new Object[] { RANDOM_ID });
if (list.size() == 1) {
firstCnt++;
GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(0);
clearData(tddlJT, "delete from normaltbl_0001 where pk=?", new Object[] { RANDOM_ID });
} else {
GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(1);
list = tddlJT.queryForList("select * from normaltbl_0001 where pk=?", new Object[] { RANDOM_ID });
if (list.size() == 1) {
secondCnt++;
GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(1);
clearData(tddlJT, "delete from normaltbl_0001 where pk=?", new Object[] { RANDOM_ID });
} else {
GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(2);
list = tddlJT.queryForList("select * from normaltbl_0001 where pk=?", new Object[] { RANDOM_ID });
if (list.size() == 1) {
thirdCnt++;
GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(2);
clearData(tddlJT, "delete from normaltbl_0001 where pk=?", new Object[] { RANDOM_ID });
} else {
Assert.fail("查不到数据。");
}
}
}
}
Assert.assertEquals(operationCnt, firstCnt + secondCnt + thirdCnt);
System.err.println("firstCnt=" + firstCnt + ", secondCnt=" + secondCnt + ", thirdCnt=" + thirdCnt);
checkWeight(operationCnt, firstCnt, 1.0 / 3);
checkWeight(operationCnt, secondCnt, 1.0 / 3);
checkWeight(operationCnt, thirdCnt, 1.0 / 3);
}
@Test
public void updateDBUseBalanceWeightTest() throws Exception {
// 跳过本用例测试
if (SOME_SHOULD_NOT_BE_TEST) {
return;
}
// 设置权重(确保推送成功)
for (int i = 0; i < 2; i++) {
MockServer.setConfigInfo(tds.getFullDbGroupKey(),
"qatest_normal_0:w1r10,qatest_normal_0_bac:w1r10,qatest_normal_1_bac:w1r10");
TimeUnit.SECONDS.sleep(SLEEP_TIME);
}
int operationCnt = 1000;
int firstCnt = 0;
int secondCnt = 0;
int thirdCnt = 0;
for (int i = 0; i < operationCnt; i++) {
// 插入数据
int rs = tddlJT.update("insert into normaltbl_0001 (pk,gmt_create) values (?,?)", new Object[] { RANDOM_ID,
time });
Assert.assertTrue(rs > 0);
// 确认更新的atomDS
GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(0);
List list = tddlJT.queryForList("select * from normaltbl_0001 where pk=?", new Object[] { RANDOM_ID });
if (list.size() == 1) {
firstCnt++;
GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(0);
clearData(tddlJT, "delete from normaltbl_0001 where pk=?", new Object[] { RANDOM_ID });
} else {
GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(1);
list = tddlJT.queryForList("select * from normaltbl_0001 where pk=?", new Object[] { RANDOM_ID });
if (list.size() == 1) {
secondCnt++;
GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(1);
clearData(tddlJT, "delete from normaltbl_0001 where pk=?", new Object[] { RANDOM_ID });
} else {
GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(2);
list = tddlJT.queryForList("select * from normaltbl_0001 where pk=?", new Object[] { RANDOM_ID });
if (list.size() == 1) {
thirdCnt++;
GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(2);
clearData(tddlJT, "delete from normaltbl_0001 where pk=?", new Object[] { RANDOM_ID });
} else {
Assert.fail("查不到数据。");
}
}
}
}
Assert.assertEquals(operationCnt, firstCnt + secondCnt + thirdCnt);
System.err.println("firstCnt=" + firstCnt + ", secondCnt=" + secondCnt + ", thirdCnt=" + thirdCnt);
checkWeight(operationCnt, firstCnt, 1.0 / 3);
checkWeight(operationCnt, secondCnt, 1.0 / 3);
checkWeight(operationCnt, thirdCnt, 1.0 / 3);
}
@Test
public void updateDBUseImbalanceWeightTest() throws Exception {
// 跳过本用例测试
if (SOME_SHOULD_NOT_BE_TEST) {
return;
}
// 设置权重(确保推送成功)
for (int i = 0; i < 2; i++) {
MockServer.setConfigInfo(tds.getFullDbGroupKey(),
"qatest_normal_0:w1r10,qatest_normal_0_bac:w2r10,qatest_normal_1_bac:w3r10");
TimeUnit.SECONDS.sleep(SLEEP_TIME);
}
int operationCnt = 1000;
int firstCnt = 0;
int secondCnt = 0;
int thirdCnt = 0;
for (int i = 0; i < operationCnt; i++) {
// 插入数据
int rs = tddlJT.update("insert into normaltbl_0001 (pk,gmt_create) values (?,?)", new Object[] { RANDOM_ID,
time });
Assert.assertTrue(rs > 0);
// 确认更新的atomDS
GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(0);
List list = tddlJT.queryForList("select * from normaltbl_0001 where pk=?", new Object[] { RANDOM_ID });
if (list.size() == 1) {
firstCnt++;
GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(0);
clearData(tddlJT, "delete from normaltbl_0001 where pk=?", new Object[] { RANDOM_ID });
} else {
GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(1);
list = tddlJT.queryForList("select * from normaltbl_0001 where pk=?", new Object[] { RANDOM_ID });
if (list.size() == 1) {
secondCnt++;
GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(1);
clearData(tddlJT, "delete from normaltbl_0001 where pk=?", new Object[] { RANDOM_ID });
} else {
GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(2);
list = tddlJT.queryForList("select * from normaltbl_0001 where pk=?", new Object[] { RANDOM_ID });
if (list.size() == 1) {
thirdCnt++;
GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(2);
clearData(tddlJT, "delete from normaltbl_0001 where pk=?", new Object[] { RANDOM_ID });
} else {
Assert.fail("查不到数据。");
}
}
}
}
Assert.assertEquals(operationCnt, firstCnt + secondCnt + thirdCnt);
System.err.println("firstCnt=" + firstCnt + ", secondCnt=" + secondCnt + ", thirdCnt=" + thirdCnt);
checkWeight(operationCnt, firstCnt, 1.0 / 6);
checkWeight(operationCnt, secondCnt, 2.0 / 6);
checkWeight(operationCnt, thirdCnt, 3.0 / 6);
}
@Test
public void updateDBUseDefaultWeightTest() throws InterruptedException {
// 跳过本用例测试
if (SOME_SHOULD_NOT_BE_TEST) {
return;
}
/* 默认权重(确保推送成功) */
for (int i = 0; i < 2; i++) {
MockServer.setConfigInfo(tds.getFullDbGroupKey(),
"qatest_normal_0:wr10,qatest_normal_0_bac:wr10,qatest_normal_1_bac:wr10");
TimeUnit.SECONDS.sleep(SLEEP_TIME);
}
int operationCnt = 1000;
int firstCnt = 0;
int secondCnt = 0;
int thirdCnt = 0;
for (int i = 0; i < operationCnt; i++) {
// 插入数据
int rs = tddlJT.update("insert into normaltbl_0001 (pk,gmt_create) values (?,?)", new Object[] { RANDOM_ID,
time });
Assert.assertTrue(rs > 0);
// 确认更新的atomDS
GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(0);
List list = tddlJT.queryForList("select * from normaltbl_0001 where pk=?", new Object[] { RANDOM_ID });
if (list.size() == 1) {
firstCnt++;
GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(0);
clearData(tddlJT, "delete from normaltbl_0001 where pk=?", new Object[] { RANDOM_ID });
} else {
GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(1);
list = tddlJT.queryForList("select * from normaltbl_0001 where pk=?", new Object[] { RANDOM_ID });
if (list.size() == 1) {
secondCnt++;
GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(1);
clearData(tddlJT, "delete from normaltbl_0001 where pk=?", new Object[] { RANDOM_ID });
} else {
GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(2);
list = tddlJT.queryForList("select * from normaltbl_0001 where pk=?", new Object[] { RANDOM_ID });
if (list.size() == 1) {
thirdCnt++;
GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(2);
clearData(tddlJT, "delete from normaltbl_0001 where pk=?", new Object[] { RANDOM_ID });
} else {
Assert.fail("查不到数据。");
}
}
}
}
Assert.assertEquals(operationCnt, firstCnt + secondCnt + thirdCnt);
System.err.println("firstCnt=" + firstCnt + ", secondCnt=" + secondCnt + ", thirdCnt=" + thirdCnt);
checkWeight(operationCnt, firstCnt, 1.0 / 3);
checkWeight(operationCnt, secondCnt, 1.0 / 3);
checkWeight(operationCnt, thirdCnt, 1.0 / 3);
}
@Test
public void someOfTheDssWeightAreZeroTest() throws InterruptedException {
// 跳过本用例测试
if (SOME_SHOULD_NOT_BE_TEST) {
return;
}
// 设置权重(确保推送成功)
for (int i = 0; i < 2; i++) {
MockServer.setConfigInfo(tds.getFullDbGroupKey(),
"qatest_normal_0:w1r10,qatest_normal_0_bac:w0r10,qatest_normal_1_bac:w3r10");
TimeUnit.SECONDS.sleep(SLEEP_TIME);
}
int operationCnt = 1000;
int firstCnt = 0;
int secondCnt = 0;
int thirdCnt = 0;
for (int i = 0; i < operationCnt; i++) {
// 插入数据
int rs = tddlJT.update("insert into normaltbl_0001 (pk,gmt_create) values (?,?)", new Object[] { RANDOM_ID,
time });
Assert.assertTrue(rs > 0);
// 确认更新的atomDS
GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(0);
List list = tddlJT.queryForList("select * from normaltbl_0001 where pk=?", new Object[] { RANDOM_ID });
if (list.size() == 1) {
firstCnt++;
GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(0);
clearData(tddlJT, "delete from normaltbl_0001 where pk=?", new Object[] { RANDOM_ID });
} else {
GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(1);
list = tddlJT.queryForList("select * from normaltbl_0001 where pk=?", new Object[] { RANDOM_ID });
if (list.size() == 1) {
secondCnt++;
GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(1);
clearData(tddlJT, "delete from normaltbl_0001 where pk=?", new Object[] { RANDOM_ID });
} else {
GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(2);
list = tddlJT.queryForList("select * from normaltbl_0001 where pk=?", new Object[] { RANDOM_ID });
if (list.size() == 1) {
thirdCnt++;
GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(2);
clearData(tddlJT, "delete from normaltbl_0001 where pk=?", new Object[] { RANDOM_ID });
} else {
Assert.fail("查不到数据。");
}
}
}
}
System.err.println("firstCnt=" + firstCnt + ", secondCnt=" + secondCnt + ", thirdCnt=" + thirdCnt);
Assert.assertEquals(operationCnt, firstCnt + secondCnt + thirdCnt);
Assert.assertEquals(0, secondCnt);
checkWeight(operationCnt, firstCnt, 1.0 / 4);
checkWeight(operationCnt, thirdCnt, 3.0 / 4);
}
}