@Test
public void testLeaderNodeDeleteOnInterrupt() throws Exception
{

    Timing2 timing = new Timing2();
    LeaderSelector selector = null;
    CuratorFramework client = null;
    try
    {
        client = CuratorFrameworkFactory.newClient(server.getConnectString(), timing.session(), timing.connection(), new RetryOneTime(1));
        final CountDownLatch reconnectedLatch = new CountDownLatch(1);
        ConnectionStateListener connectionStateListener = new ConnectionStateListener()
        {
            @Override
            public void stateChanged(CuratorFramework client, ConnectionState newState)
            {
                if ( newState == ConnectionState.RECONNECTED )
                {
                    reconnectedLatch.countDown();
                }
            }
        };
        client.getConnectionStateListenable().addListener(connectionStateListener);
        client.start();
        final BlockingQueue<Thread> queue = new ArrayBlockingQueue<Thread>(1);
        LeaderSelectorListener listener = new LeaderSelectorListener()
        {
            @Override
            public void takeLeadership(CuratorFramework client) throws Exception
            {
                queue.add(Thread.currentThread());
                try
                {
                    Thread.currentThread().join();
                }
                catch ( InterruptedException e )
                {
                    Thread.currentThread().interrupt();
                }
            }
            @Override
            public void stateChanged(CuratorFramework client, ConnectionState newState)
            {
            }
        };
        selector = new LeaderSelector(client, "/leader", listener);
        selector.start();
        Thread leaderThread = timing.takeFromQueue(queue);
        server.stop();
        leaderThread.interrupt();
        server.restart();
        Assert.assertTrue(timing.awaitLatch(reconnectedLatch));
        timing.sleepABit();
        Assert.assertEquals(client.getChildren().forPath("/leader").size(), 0);
    }
    finally
    {
        CloseableUtils.closeQuietly(selector);
        CloseableUtils.closeQuietly(client);
    }
}