71 lines
1.8 KiB
Java
71 lines
1.8 KiB
Java
package redis.clients.jedis.tests.utils;
|
|
|
|
import redis.clients.jedis.Jedis;
|
|
import redis.clients.jedis.exceptions.JedisException;
|
|
|
|
public class JedisClusterTestUtil {
|
|
public static void waitForClusterReady(Jedis...nodes) throws InterruptedException {
|
|
boolean clusterOk = false;
|
|
while (!clusterOk) {
|
|
boolean isOk = true;
|
|
for (Jedis node : nodes) {
|
|
if (!node.clusterInfo().split("\n")[0].contains("ok")) {
|
|
isOk = false;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (isOk) {
|
|
clusterOk = true;
|
|
}
|
|
|
|
Thread.sleep(50);
|
|
}
|
|
}
|
|
|
|
public static String getNodeId(String infoOutput) {
|
|
for (String infoLine : infoOutput.split("\n")) {
|
|
if (infoLine.contains("myself")) {
|
|
return infoLine.split(" ")[0];
|
|
}
|
|
}
|
|
return "";
|
|
}
|
|
|
|
public static void assertNodeIsKnown(Jedis node, String targetNodeId, int timeoutMs) {
|
|
assertNodeRecognizedStatus(node, targetNodeId, true, timeoutMs);
|
|
}
|
|
|
|
public static void assertNodeIsUnknown(Jedis node, String targetNodeId, int timeoutMs) {
|
|
assertNodeRecognizedStatus(node, targetNodeId, false, timeoutMs);
|
|
}
|
|
|
|
private static void assertNodeRecognizedStatus(Jedis node, String targetNodeId, boolean shouldRecognized, int timeoutMs) {
|
|
int sleepInterval = 100;
|
|
for (int sleepTime = 0 ; sleepTime <= timeoutMs ; sleepTime += sleepInterval) {
|
|
boolean known = isKnownNode(node, targetNodeId);
|
|
if (shouldRecognized == known)
|
|
return;
|
|
|
|
try {
|
|
Thread.sleep(sleepInterval);
|
|
} catch (InterruptedException e) {
|
|
}
|
|
}
|
|
|
|
throw new JedisException("Node recognize check error");
|
|
}
|
|
|
|
private static boolean isKnownNode(Jedis node, String nodeId) {
|
|
String infoOutput = node.clusterNodes();
|
|
for (String infoLine : infoOutput.split("\n")) {
|
|
if (infoLine.contains(nodeId)) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
|
|
}
|