/** * */ package org.goldenorb.zookeeper; import static org.junit.Assert.*; import java.io.IOException; import java.util.List; import java.util.concurrent.CountDownLatch; import org.apache.zookeeper.CreateMode; import org.apache.zookeeper.KeeperException; import org.apache.zookeeper.ZooKeeper; import org.goldenorb.zookeeper.OrbZKFailure; import org.goldenorb.zookeeper.ZookeeperUtils; import org.junit.Test; public class TestWatchMemberData { private static ZooKeeper zk; private static String basePath = "/TestWatchMemberData"; private static TMember member = new TMember(); /** * */ @Test public void WatchMemberData() throws IOException, InterruptedException, OrbZKFailure, KeeperException { zk = ZookeeperUtils.connect("localhost:21810"); int data = 1; member.setData(data); ZookeeperUtils.tryToCreateNode(zk, basePath, CreateMode.PERSISTENT); CountDownLatch dataChangedCdl = new CountDownLatch(1); CountDownLatch startCdl = new CountDownLatch(1); CountDownLatch leaderChangeCdl = new CountDownLatch(1); CountDownLatch leaveCdl = new CountDownLatch(1); TTracker tt = new TTracker(zk, data, basePath, startCdl,leaderChangeCdl, leaveCdl, dataChangedCdl); tt.run(); startCdl.await(); int newData = 9999; tt.changeMemberData(newData); dataChangedCdl.await(); assertTrue(tt.getMemberData() == newData); tt.leave(); List<String> children = zk.getChildren(basePath, false); for(String node : children) { ZookeeperUtils.deleteNodeIfEmpty(zk, basePath+"/"+node); } ZookeeperUtils.deleteNodeIfEmpty(zk, basePath); } }