Skip to content

Commit a27c172

Browse files
committed
RedisService test
1 parent f29249a commit a27c172

File tree

16 files changed

+641
-14
lines changed

16 files changed

+641
-14
lines changed

core/src/test/java/com/ctrip/xpipe/simple/CatTest.java

+10-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package com.ctrip.xpipe.simple;
22

3+
import java.io.IOException;
4+
35
import org.junit.Test;
46

57
import com.ctrip.xpipe.AbstractTest;
8+
import com.ctrip.xpipe.monitor.CatConfig;
69
import com.dianping.cat.Cat;
710

811
/**
@@ -13,9 +16,13 @@
1316
public class CatTest extends AbstractTest{
1417

1518
@Test
16-
public void testLog(){
19+
public void testLog() throws IOException{
20+
21+
System.setProperty(CatConfig.CAT_ENABLED_KEY, "true");
1722

1823
Cat.getProducer().logError(new Exception());
24+
25+
waitForAnyKeyToExit();
1926
}
2027

2128
@Test
@@ -25,7 +32,8 @@ public void testEnable() {
2532

2633
@Test
2734
public void testDisable() {
28-
System.setProperty("cat.client.enabled", "false");
35+
36+
System.setProperty(CatConfig.CAT_ENABLED_KEY, "false");
2937
Cat.newTransaction("test", "test");
3038
}
3139

redis/redis-console/src/main/java/com/ctrip/xpipe/redis/console/dao/AbstractXpipeConsoleDAO.java

+4
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import com.ctrip.xpipe.redis.console.constant.XpipeConsoleConstant;
44
import com.ctrip.xpipe.redis.console.query.DalQueryHandler;
55
import com.ctrip.xpipe.redis.console.util.DataModifiedTimeGenerator;
6+
import org.slf4j.Logger;
7+
import org.slf4j.LoggerFactory;
68

79

810
/**
@@ -11,6 +13,8 @@
1113
* Aug 29, 2016
1214
*/
1315
public abstract class AbstractXpipeConsoleDAO {
16+
17+
protected Logger logger = LoggerFactory.getLogger(getClass());
1418
public static String DELETED_NAME_SPLIT_TAG = "-";
1519

1620
protected DalQueryHandler queryHandler = new DalQueryHandler();

redis/redis-console/src/main/java/com/ctrip/xpipe/redis/console/dao/RedisDao.java

+4
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
*/
3333
@Repository
3434
public class RedisDao extends AbstractXpipeConsoleDAO{
35+
3536
private RunidGenerator idGenerator = RunidGenerator.DEFAULT;
3637
private RedisTblDao redisTblDao;
3738
private DcClusterShardTblDao dcClusterShardTblDao;
@@ -94,14 +95,17 @@ public void updateBatch(List<RedisTbl> redises) throws DalException {
9495
@DalTransaction
9596
public void handleUpdate(List<RedisTbl> toCreate, List<RedisTbl> toDelete, List<RedisTbl> left) throws DalException {
9697
if(null != toCreate && toCreate.size() > 0) {
98+
logger.info("[handleUpdate][create]{}, {}", toCreate.size(), toCreate);
9799
createRedisesBatch(toCreate);
98100
}
99101

100102
if(null != toDelete && toDelete.size() > 0) {
103+
logger.info("[handleUpdate][delete]{}, {}", toDelete.size(), toDelete);
101104
deleteRedisesBatch(toDelete);
102105
}
103106

104107
if(null != left && left.size() > 0) {
108+
logger.info("[handleUpdate][left]{}, {}", left.size(), left);
105109
updateBatch(left);
106110
}
107111
}

redis/redis-console/src/main/java/com/ctrip/xpipe/redis/console/dao/ShardDao.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ public List<DcClusterTbl> doQuery() throws DalException {
8181
DcClusterShardTbl dcClusterShardProto = dcClusterShardTblDao.createLocal();
8282
dcClusterShardProto.setDcClusterId(dcCluster.getDcClusterId())
8383
.setShardId(result.getId());
84-
if(null != sentinels.get(dcCluster.getDcId())) {
84+
if(sentinels != null && null != sentinels.get(dcCluster.getDcId())) {
8585
dcClusterShardProto.setSetinelId(sentinels.get(dcCluster.getDcId()).getSetinelId());
8686
}
8787
dcClusterShards.add(dcClusterShardProto);

redis/redis-console/src/main/java/com/ctrip/xpipe/redis/console/model/ShardModel.java

+6-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,12 @@ public class ShardModel implements java.io.Serializable{
2222

2323
public ShardModel(){
2424
}
25-
25+
26+
public ShardModel(List<RedisTbl> m_redises){
27+
this.m_redises = m_redises;
28+
}
29+
30+
2631
public ShardModel addKeeper(RedisTbl keeper) {
2732
m_keepers.add(keeper);
2833
return this;

redis/redis-console/src/main/java/com/ctrip/xpipe/redis/console/util/SetOperationUtil.java

+6-6
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,15 @@ public <T> Collection<T> difference(Class<T> clazz,Collection<T> collection1, Co
3636
return difference;
3737
}
3838

39-
public <T> Collection<T> intersection(Class<T> clazz, Collection<T> collection1, Collection<T> collection2, Comparator<T> comparator) {
39+
public <T> Collection<T> intersection(Class<T> clazz, Collection<T> origin, Collection<T> target, Comparator<T> comparator) {
4040
List<T> interesction = new LinkedList<T>();
4141

42-
if(null != collection1) {
43-
for(T itemInFirst : collection1) {
44-
if(null != collection2) {
45-
for(T itemInSecond : collection2) {
42+
if(null != origin) {
43+
for(T itemInFirst : origin) {
44+
if(null != target) {
45+
for(T itemInSecond : target) {
4646
if(0 == comparator.compare(itemInFirst, itemInSecond)) {
47-
interesction.add(itemInFirst);
47+
interesction.add(itemInSecond);
4848
break;
4949
}
5050
}

redis/redis-console/src/test/java/com/ctrip/xpipe/redis/console/AbstractConsoleH2DbTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ private void executeSqlScript(String prepareSql) throws ComponentLookupException
9191
}
9292
}
9393

94-
protected String prepareDatas() {
94+
protected String prepareDatas() throws IOException {
9595
return "";
9696
}
9797

redis/redis-console/src/test/java/com/ctrip/xpipe/redis/console/AllTests.java

+3
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import com.ctrip.xpipe.redis.console.migration.status.MigrationStatTest;
1010
import com.ctrip.xpipe.redis.console.migration.status.MigrationStatusTest;
1111

12+
import com.ctrip.xpipe.redis.console.service.impl.RedisServiceImplTest;
1213
import org.junit.runners.Suite;
1314
import org.junit.runners.Suite.SuiteClasses;
1415

@@ -28,6 +29,8 @@
2829
*/
2930
@RunWith(Suite.class)
3031
@SuiteClasses({
32+
33+
RedisServiceImplTest.class,
3134
MigrationStatusTest.class,
3235
ClusterMetaServiceImplTest.class,
3336
ConcurrentDalTransactionTest.class,

redis/redis-console/src/test/java/com/ctrip/xpipe/redis/console/AppTest.java

+6-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* @author lepdou 2016-11-09
1515
*/
1616
@SpringBootApplication
17-
public class AppTest extends AbstractConsoleTest {
17+
public class AppTest extends AbstractConsoleH2DbTest {
1818

1919
@Before
2020
public void startUp() {
@@ -28,6 +28,11 @@ public void startConsole8080() throws IOException {
2828
start();
2929
}
3030

31+
@Override
32+
protected String prepareDatas() throws IOException {
33+
return prepareDatasFromFile("src/test/resources/apptest.sql");
34+
}
35+
3136
private void start() throws IOException {
3237
SpringApplication.run(AppTest.class);
3338

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
package com.ctrip.xpipe.redis.console.service.impl;
2+
3+
import com.ctrip.xpipe.redis.console.AbstractConsoleIntegrationTest;
4+
import com.ctrip.xpipe.redis.console.model.*;
5+
import com.ctrip.xpipe.redis.console.service.ClusterService;
6+
import com.ctrip.xpipe.redis.console.service.DcClusterService;
7+
import com.ctrip.xpipe.redis.console.service.RedisService;
8+
import com.ctrip.xpipe.redis.console.service.ShardService;
9+
import com.google.common.collect.Lists;
10+
import org.junit.Before;
11+
import org.springframework.beans.factory.annotation.Autowired;
12+
13+
import java.util.LinkedList;
14+
import java.util.List;
15+
import java.util.concurrent.atomic.AtomicLong;
16+
17+
/**
18+
* @author wenchao.meng
19+
* <p>
20+
* Mar 31, 2017
21+
*/
22+
public abstract class AbstractServiceImplTest extends AbstractConsoleIntegrationTest{
23+
24+
@Autowired
25+
private ClusterService clusterService;
26+
27+
@Autowired
28+
private DcClusterService dcClusterService;
29+
30+
@Autowired
31+
private ShardService shardService;
32+
33+
@Autowired
34+
private RedisService redisService;
35+
36+
protected String []dcNames = new String[]{"A", "B"};
37+
private Long []dcIds = new Long[]{1L, 2L};
38+
protected String clusterName = "cluster1";
39+
protected String []shardNames = new String[]{"shard1", "shard2"};
40+
41+
private final int initRedisPort = 6379;
42+
private final int initKeeperPort = 8000;
43+
44+
//TODO auto generate by h2
45+
private AtomicLong redisId = new AtomicLong(1);
46+
47+
@Before
48+
public void beforeAbstractServiceImpl(){
49+
50+
ClusterModel clusterModel = new ClusterModel();
51+
52+
clusterModel.setClusterTbl(new ClusterTbl().
53+
setClusterName(clusterName)
54+
.setActivedcId(dcIds[0])
55+
.setClusterDescription("desc"));
56+
57+
58+
clusterModel.setShards(createShards(shardNames));
59+
60+
DcTbl slaveDc = new DcTbl().setDcName(dcNames[1]);
61+
clusterModel.setSlaveDcs(Lists.newArrayList(slaveDc));
62+
63+
clusterService.createCluster(clusterModel);
64+
65+
createRedisAndKeepers();
66+
}
67+
68+
private void createRedisAndKeepers() {
69+
70+
int redisPort = initRedisPort;
71+
int keeperPort = initKeeperPort;
72+
73+
for(String dcName : dcNames){
74+
75+
String clusterName = this.clusterName;
76+
for(String shardName : shardNames){
77+
78+
ShardModel shardModel = new ShardModel();
79+
shardModel.addRedis(new RedisTbl().setId(redisId.incrementAndGet()).setRedisIp("127.0.0.1").setRedisPort(redisPort++).setMaster(true));
80+
shardModel.addRedis(new RedisTbl().setId(redisId.incrementAndGet()).setRedisIp("127.0.0.1").setRedisPort(redisPort++));
81+
shardModel.addKeeper(new RedisTbl().setId(redisId.incrementAndGet()).setKeepercontainerId(1).setRedisIp("127.0.0.1").setRedisPort(keeperPort++));
82+
shardModel.addKeeper(new RedisTbl().setId(redisId.incrementAndGet()).setKeepercontainerId(2).setRedisIp("127.0.0.1").setRedisPort(keeperPort++));
83+
redisService.updateRedises(clusterName, dcName, shardName, shardModel);
84+
85+
}
86+
}
87+
88+
}
89+
90+
private List<ShardModel> createShards(String[] shardNames) {
91+
92+
List<ShardModel> shards = new LinkedList<>();
93+
94+
for(String shardName : shardNames){
95+
ShardModel shardModel = new ShardModel();
96+
shardModel.setShardTbl(new ShardTbl().setShardName(shardName).setSetinelMonitorName(shardName));
97+
shards.add(shardModel);
98+
}
99+
100+
return shards;
101+
}
102+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package com.ctrip.xpipe.redis.console.service.impl;
2+
3+
import com.ctrip.xpipe.redis.console.constant.XpipeConsoleConstant;
4+
import com.ctrip.xpipe.redis.console.model.ClusterModel;
5+
import com.ctrip.xpipe.redis.console.model.RedisTbl;
6+
import com.ctrip.xpipe.redis.console.model.ShardModel;
7+
import com.ctrip.xpipe.redis.console.service.RedisService;
8+
import org.junit.Assert;
9+
import org.junit.Test;
10+
import org.springframework.beans.factory.annotation.Autowired;
11+
12+
import java.io.IOException;
13+
import java.util.LinkedList;
14+
import java.util.List;
15+
import java.util.stream.Stream;
16+
17+
/**
18+
* @author wenchao.meng
19+
* <p>
20+
* Mar 31, 2017
21+
*/
22+
public class RedisServiceImplTest extends AbstractServiceImplTest{
23+
24+
25+
@Autowired
26+
private RedisService redisService;
27+
28+
29+
@Test
30+
public void testUpdateRedises() throws IOException {
31+
32+
String dcName = dcNames[0];
33+
String shardName = shardNames[0];
34+
35+
List<RedisTbl> allByDcClusterShard = redisService.findAllByDcClusterShard(dcName, clusterName, shardName);
36+
37+
checkAllInstances(allByDcClusterShard);
38+
39+
boolean firstSlave = true;
40+
RedisTbl newMaster = null;
41+
42+
for(RedisTbl redisTbl : allByDcClusterShard){
43+
if(redisTbl.getRedisRole().equals(XpipeConsoleConstant.ROLE_REDIS)){
44+
45+
if(redisTbl.isMaster()){
46+
redisTbl.setMaster(false);
47+
}else if(!redisTbl.isMaster() && firstSlave){
48+
redisTbl.setMaster(true);
49+
newMaster = redisTbl;
50+
firstSlave = false;
51+
}
52+
53+
}
54+
}
55+
56+
checkAllInstances(allByDcClusterShard);
57+
58+
ShardModel shardModel = new ShardModel(allByDcClusterShard);
59+
redisService.updateRedises(clusterName, dcName, shardName, shardModel);
60+
61+
allByDcClusterShard = redisService.findAllByDcClusterShard(dcName, clusterName, shardName);
62+
checkAllInstances(allByDcClusterShard);
63+
64+
Stream<RedisTbl> redisTblStream = allByDcClusterShard.stream().filter(instance -> instance.isMaster());
65+
66+
RedisTbl currentMaster = redisTblStream.findFirst().get();
67+
68+
Assert.assertEquals(newMaster.getId(), currentMaster.getId());
69+
70+
}
71+
72+
private void checkAllInstances(List<RedisTbl> allByDcClusterShard) {
73+
74+
Assert.assertEquals(4, allByDcClusterShard.size());
75+
76+
int masterCount = 0;
77+
78+
for(RedisTbl redisTbl : allByDcClusterShard){
79+
logger.debug("{}", redisTbl);
80+
if(redisTbl.isMaster()){
81+
masterCount++;
82+
}
83+
}
84+
Assert.assertEquals(1, masterCount);
85+
86+
}
87+
88+
}

0 commit comments

Comments
 (0)