Github user timothyjward commented on a diff in the pull request:
https://github.com/apache/zookeeper/pull/529#discussion_r196731884
--- Diff: src/java/test/org/apache/zookeeper/test/WatcherTest.java ---
@@ -140,6 +142,55 @@ public void processResult(int rc, String path, Object
ctx) {
}
}
}
+
+ @Test
+ public void testWatcherDisconnectOnClose()
+ throws IOException, InterruptedException, KeeperException
+ {
+ ZooKeeper zk = null;
+ try {
+ final BlockingQueue<WatchedEvent> queue = new
LinkedBlockingQueue<>();
+
+ MyWatcher connWatcher = new MyWatcher();
+
+ Watcher watcher = new Watcher(){
+ @Override
+ public void process(WatchedEvent event) {
+ try {
+ queue.put(event);
+ } catch (InterruptedException e) {
+ // Oh well, never mind
+ }
+ }
+
+ };
+
+ zk = createClient(connWatcher, hostPort);
+
+ StatCallback scb = new StatCallback() {
+ public void processResult(int rc, String path, Object ctx,
+ Stat stat) {
+ // don't do anything
+ }
+ };
+
+ // Register a watch on the node
+ zk.exists("/missing", watcher, scb, null);
+
+ // Close the client without changing the node
+ zk.close();
+
+
+ WatchedEvent event = queue.poll(10, TimeUnit.SECONDS);
+ Assert.assertEquals(Event.EventType.None, event.getType());
--- End diff --
I've pushed updated assertions containing more human readable text.
---