}
@Test
public void testKilledSession() throws Exception
{
Timing timing = new Timing();
CuratorFramework client = null;
try
{
client = CuratorFrameworkFactory.newClient(server.getConnectString(), timing.session(), timing.connection(), new RetryOneTime(1));
client.start();
client.create().forPath("/test");
PathChildrenCache cache = new PathChildrenCache(client, "/test", true);
cache.start();
final CountDownLatch childAddedLatch = new CountDownLatch(1);
final CountDownLatch lostLatch = new CountDownLatch(1);
final CountDownLatch reconnectedLatch = new CountDownLatch(1);
final CountDownLatch removedLatch = new CountDownLatch(1);
cache.getListenable().addListener
(
new PathChildrenCacheListener()
{
@Override
public void childEvent(CuratorFramework client, PathChildrenCacheEvent event) throws Exception
{
if ( event.getType() == PathChildrenCacheEvent.Type.CHILD_ADDED )
{
childAddedLatch.countDown();
}
else if ( event.getType() == PathChildrenCacheEvent.Type.CONNECTION_LOST )
{
lostLatch.countDown();
}
else if ( event.getType() == PathChildrenCacheEvent.Type.CONNECTION_RECONNECTED )
{
reconnectedLatch.countDown();
}
else if ( event.getType() == PathChildrenCacheEvent.Type.CHILD_REMOVED )
{
removedLatch.countDown();
}
}
}
);
client.create().withMode(CreateMode.EPHEMERAL).forPath("/test/me", "data".getBytes());
Assert.assertTrue(timing.awaitLatch(childAddedLatch));
KillSession.kill(client.getZookeeperClient().getZooKeeper(), server.getConnectString());
Assert.assertTrue(timing.awaitLatch(lostLatch));
Assert.assertTrue(timing.awaitLatch(reconnectedLatch));
Assert.assertTrue(timing.awaitLatch(removedLatch));
}
finally
{
CloseableUtils.closeQuietly(client);
}