Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package org.liptak.zookeeperissue;
- import java.io.IOException;
- import java.net.BindException;
- import java.net.InetSocketAddress;
- import java.net.ServerSocket;
- import java.net.Socket;
- import java.util.Properties;
- import org.apache.zookeeper.server.ServerConfig;
- import org.apache.zookeeper.server.ZooKeeperServerMain;
- import org.apache.zookeeper.server.quorum.QuorumPeerConfig;
- import org.apache.zookeeper.server.quorum.QuorumPeerConfig.ConfigException;
- import org.junit.Rule;
- import org.junit.Test;
- import org.junit.rules.TemporaryFolder;
- public class ZookeeperIssue
- {
- @Rule
- public TemporaryFolder temporaryFolder = new TemporaryFolder();
- @Test(expected=BindException.class)
- public void proveThatReCreatingTheSameServerSocketCanThrowBindException() throws IOException, ConfigException {
- ServerSocket ss = null;
- Socket s = null;
- ZooKeeperServerMain server = null;
- try {
- ss = new ServerSocket();
- ss.setSoTimeout(10000);
- ss.setReuseAddress(false);
- ss.bind( new InetSocketAddress("localhost", 0)); //using a random free port
- int port = ss.getLocalPort();
- s = new Socket();
- s.setSoTimeout(10000);
- InetSocketAddress address = new InetSocketAddress("localhost", port);
- s.connect( address);
- Socket accepted = ss.accept();
- s.getOutputStream().write( "Foo".getBytes() );
- accepted.getInputStream().read();
- ss.close();
- //I made a server socket and connected to it, then I closed the server socket.
- //Now it must be in native TIMED_WAIT state.
- server = new ZooKeeperServerMain();
- Properties properties = new Properties();
- properties.put("tickTime", "2000");
- properties.put("dataDir", temporaryFolder.getRoot().getAbsolutePath() );
- properties.put("clientPort", Integer.toString(port) );
- QuorumPeerConfig peerConfig = new QuorumPeerConfig();
- peerConfig.parseProperties( properties );
- ServerConfig serverConfig = new ServerConfig();
- serverConfig.readFrom(peerConfig);
- server.runFromConfig( serverConfig );
- }
- finally {
- if ( ss != null ) {
- try {
- ss.close();
- }
- catch( Exception e ) {
- e.printStackTrace();
- }
- }
- if ( s != null ) {
- try {
- s.close();
- }
- catch( Exception e ) {
- e.printStackTrace();
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement