package com.vip.saturn.it.utils; import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework.CuratorFrameworkFactory; import org.apache.curator.retry.RetryNTimes; import org.apache.curator.test.KillSession; import org.apache.curator.test.TestingServer; import org.apache.zookeeper.ZooKeeper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; import java.net.ServerSocket; /** * @author dylan.xue */ public class NestedZkUtils { static Logger log = LoggerFactory.getLogger(NestedZkUtils.class); private TestingServer testingServer; public int PORT = 3181; public void startServer() throws Exception { try (ServerSocket socket = new ServerSocket(0);) { PORT = socket.getLocalPort(); } catch (IOException e) { } System.err.println("zkTestServer starting. Port: " + PORT); log.error("zk starts at: {}", PORT); testingServer = new TestingServer(PORT); } public void stopServer() throws IOException { if(testingServer != null) { testingServer.stop(); } } public void startStoppedServer() throws Exception { testingServer.start(); } public void reStartServer() throws Exception { if(testingServer != null) { testingServer.restart(); } } public boolean isStarted() { return testingServer != null; } public String getZkString() { return "127.0.0.1:" + PORT; } public void killSession(ZooKeeper client) throws Exception { KillSession.kill(client, getZkString()); } public CuratorFramework createClient(String namespace) throws InterruptedException { CuratorFrameworkFactory.Builder builder = CuratorFrameworkFactory.builder(); CuratorFramework curatorFramework = builder.connectString("127.0.0.1:" + PORT) .sessionTimeoutMs(600 * 1000) // long long, could to debug .retryPolicy(new RetryNTimes(3, 1000)) .namespace(namespace) .build(); curatorFramework.start(); curatorFramework.blockUntilConnected(); return curatorFramework; } }