package org.cheva.curator;

import java.util.LinkedList;
import java.util.List;

import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.framework.state.ConnectionState;
import org.apache.curator.framework.state.ConnectionStateListener;
import org.apache.curator.retry.RetryOneTime;
import org.apache.curator.test.InstanceSpec;
import org.apache.curator.test.QuorumConfigBuilder;
import org.apache.curator.test.TestingZooKeeperServer;




public class CuratorFails {

	/**
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		
		TestingZooKeeperServer server = getServer();
		server.start();
		
		CuratorFramework zkClient = CuratorFrameworkFactory.newClient("localhost:40000", new RetryOneTime(1000));
		
		ConnectionStateListener listener = new ConnectionStateListener() {
			@Override
			public void stateChanged(CuratorFramework client,
					ConnectionState newState) {
				System.out.println("NEw state " + newState);
				// TODO Auto-generated method stub
				
			}
		};
		zkClient.getConnectionStateListenable().addListener(listener);
		zkClient.start();
		Thread.sleep(2000);
		zkClient.create().forPath("/pedro", "juan".getBytes());
		//cs.start();
		
		Thread.sleep(10000);
		server.close();
		Thread.sleep(10000);
		
		server = getServer();
		server.start();

		Thread.sleep(10000);
		zkClient.close();
		server.close();
	}

	private static TestingZooKeeperServer getServer() {
		InstanceSpec spec = new InstanceSpec(null, 40000, 20000, 3000, true, 0);
		List<InstanceSpec> specsList = new LinkedList<InstanceSpec>();
		specsList.add(spec);
		
		QuorumConfigBuilder qcb = new QuorumConfigBuilder(specsList);
		TestingZooKeeperServer server = new TestingZooKeeperServer(qcb,0 );
		return server;
	}

}
