package com.vip.saturn.job.sharding;
import static org.assertj.core.api.Assertions.assertThat;
import java.io.IOException;
import org.apache.curator.framework.CuratorFramework;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.vip.saturn.job.sharding.node.SaturnExecutorsNode;
import com.vip.saturn.job.utils.NestedZkUtils;
/**
* Created by xiaopeng.he on 2016/7/6.
*/
public class NamespaceShardingServiceTest {
private NestedZkUtils nestedZkUtils;
@Before
public void setUp() throws Exception {
nestedZkUtils = new NestedZkUtils();
nestedZkUtils.startServer();
}
@After
public void tearDown() throws IOException {
if(nestedZkUtils != null) {
nestedZkUtils.stopServer();
}
}
@Test
public void leadershipElectionTest() throws Exception {
String namespace = "MyNamespace";
CuratorFramework curatorFramework = nestedZkUtils.createClient(namespace);
// 启动第一个
String ip1 = "127.0.0.1";
CuratorFramework curatorFramework1 = nestedZkUtils.createClient(namespace);
NamespaceShardingManager namespaceShardingManager1 = new NamespaceShardingManager(curatorFramework1, namespace, ip1, null);
namespaceShardingManager1.start();
Thread.sleep(1000);
// 验证leadership
assertThat(new String(curatorFramework.getData().forPath(SaturnExecutorsNode.LEADER_HOSTNODE_PATH), "UTF-8")).isEqualTo(ip1);
// 启动第二个
String ip2 = "127.0.0.2";
CuratorFramework curatorFramework2 = nestedZkUtils.createClient(namespace);
NamespaceShardingManager namespaceShardingManager2 = new NamespaceShardingManager(curatorFramework2, namespace, ip2, null);
namespaceShardingManager2.start();
Thread.sleep(1000);
// 验证leadership
assertThat(new String(curatorFramework.getData().forPath(SaturnExecutorsNode.LEADER_HOSTNODE_PATH), "UTF-8")).isEqualTo(ip1);
// 启动第三个
String ip3 = "127.0.0.3";
CuratorFramework curatorFramework3 = nestedZkUtils.createClient(namespace);
NamespaceShardingManager namespaceShardingManager3 = new NamespaceShardingManager(curatorFramework3,namespace, ip3, null);
namespaceShardingManager3.start();
Thread.sleep(1000);
// 验证leadership
assertThat(new String(curatorFramework.getData().forPath(SaturnExecutorsNode.LEADER_HOSTNODE_PATH), "UTF-8")).isEqualTo(ip1);
// 停止第一个
namespaceShardingManager1.stop();
namespaceShardingManager1.getCuratorFramework().close();
Thread.sleep(1000);
// 验证leadership
assertThat(new String(curatorFramework.getData().forPath(SaturnExecutorsNode.LEADER_HOSTNODE_PATH), "UTF-8")).isIn(ip2, ip3);
// 停止第二个
namespaceShardingManager2.stop();
namespaceShardingManager2.getCuratorFramework().close();
Thread.sleep(1000);
// 验证leadership
assertThat(new String(curatorFramework.getData().forPath(SaturnExecutorsNode.LEADER_HOSTNODE_PATH), "UTF-8")).isEqualTo(ip3);
}
}