private void enode_test_1() throws IOException, InterruptedException, KeeperException { checkRoot(); String parentName = testDirOnZK; String nodeName = parentName + "/enode_abc"; ZooKeeper zk = new ZooKeeper(hostPort, 10000, this); Stat stat = zk.exists(parentName, false); if (stat == null) { try { zk.create(parentName, null, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); } catch (KeeperException ke) { fail("Creating node " + parentName + ke.getMessage()); } } try { zk.create(nodeName, null, Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL); } catch (KeeperException ke) { int code = ke.getCode(); boolean valid = code == KeeperException.Code.NodeExists; if (!valid) { fail("Unexpected exception code for createin: " + ke.getMessage()); } } stat = zk.exists(nodeName, false); if (stat == null) { fail("node " + nodeName + " should exist"); } System.out.println("Closing client with sessionid: 0x" + Long.toHexString(zk.getSessionId())); zk.close(); zk = new ZooKeeper(hostPort, 10000, this); for (int i = 0; i < 10; i++) { System.out.println("i = " + i); stat = zk.exists(nodeName, false); if (stat != null) { System.out.println("node " + nodeName + " should not exist after reconnection close"); } else { System.out.println("node " + nodeName + " is gone after reconnection close!"); break; } Thread.sleep(5000); } deleteZKDir(zk, nodeName); zk.close(); }
private void delete_create_get_set_test_1() throws IOException, InterruptedException, KeeperException { checkRoot(); ZooKeeper zk = new ZooKeeper(hostPort, 10000, this); String parentName = testDirOnZK; String nodeName = parentName + "/benwashere"; try { zk.delete(nodeName, -1); } catch (KeeperException ke) { int code = ke.getCode(); boolean valid = code == KeeperException.Code.NoNode || code == KeeperException.Code.NotEmpty; if (!valid) { fail("Unexpected exception code for delete: " + ke.getMessage()); } } try { zk.create(nodeName, null, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); } catch (KeeperException ke) { int code = ke.getCode(); boolean valid = code == KeeperException.Code.NodeExists; if (!valid) { fail("Unexpected exception code for create: " + ke.getMessage()); } } try { zk.setData(nodeName, "hi".getBytes(), 5700); fail("Should have gotten BadVersion exception"); } catch (KeeperException ke) { if (ke.getCode() != Code.BadVersion) { fail("Should have gotten BadVersion exception"); } } zk.setData(nodeName, "hi".getBytes(), -1); Stat st = new Stat(); byte[] bytes = zk.getData(nodeName, false, st); String retrieved = new String(bytes); if (!"hi".equals(retrieved)) { fail("The retrieved data [" + retrieved + "] is differented than the expected [hi]"); } try { zk.delete(nodeName, 6800); fail("Should have gotten BadVersion exception"); } catch (KeeperException ke) { int code = ke.getCode(); boolean valid = code == KeeperException.Code.NotEmpty || code == KeeperException.Code.BadVersion; if (!valid) { fail("Unexpected exception code for delete: " + ke.getMessage()); } } try { zk.delete(nodeName, -1); } catch (KeeperException ke) { int code = ke.getCode(); boolean valid = code == KeeperException.Code.NotEmpty; if (!valid) { fail("Unexpected exception code for delete: " + code); } } deleteZKDir(zk, nodeName); zk.close(); }
private void enode_test_2() throws IOException, InterruptedException, KeeperException { checkRoot(); String parentName = testDirOnZK; String nodeName = parentName + "/enode_abc"; ZooKeeper zk = new ZooKeeper(hostPort, 10000, this); ZooKeeper zk_1 = new ZooKeeper(hostPort, 10000, this); Stat stat = zk_1.exists(parentName, false); if (stat == null) { try { zk.create(parentName, null, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); } catch (KeeperException ke) { fail("Creating node " + parentName + ke.getMessage()); } } stat = zk_1.exists(nodeName, false); if (stat != null) { try { zk.delete(nodeName, -1); } catch (KeeperException ke) { int code = ke.getCode(); boolean valid = code == KeeperException.Code.NoNode || code == KeeperException.Code.NotEmpty; if (!valid) { fail("Unexpected exception code for delete: " + ke.getMessage()); } } } List<String> firstGen = zk_1.getChildren(parentName, true); try { zk.create(nodeName, null, Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL); } catch (KeeperException ke) { int code = ke.getCode(); boolean valid = code == KeeperException.Code.NodeExists; if (!valid) { fail("Unexpected exception code for createin: " + ke.getMessage()); } } Thread.sleep(5000); WatchedEvent event = events.poll(10, TimeUnit.SECONDS); if (event == null) { throw new IOException("No event was delivered promptly"); } if (event.getType() != EventType.NodeChildrenChanged || !event.getPath().equalsIgnoreCase(parentName)) { fail("Unexpected event was delivered: " + event.toString()); } stat = zk_1.exists(nodeName, false); if (stat == null) { fail("node " + nodeName + " should exist"); } try { zk.delete(parentName, -1); fail("Should be impossible to delete a non-empty node " + parentName); } catch (KeeperException ke) { int code = ke.getCode(); boolean valid = code == KeeperException.Code.NotEmpty; if (!valid) { fail("Unexpected exception code for delete: " + code); } } try { zk.create(nodeName + "/def", null, Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL); fail("Should be impossible to create child off Ephemeral node " + nodeName); } catch (KeeperException ke) { int code = ke.getCode(); boolean valid = code == KeeperException.Code.NoChildrenForEphemerals; if (!valid) { fail("Unexpected exception code for createin: " + code); } } try { List<String> children = zk.getChildren(nodeName, false); if (children.size() > 0) { fail("ephemeral node " + nodeName + " should not have children"); } } catch (KeeperException ke) { int code = ke.getCode(); boolean valid = code == KeeperException.Code.NoNode; if (!valid) { fail("Unexpected exception code for createin: " + code); } } firstGen = zk_1.getChildren(parentName, true); stat = zk_1.exists(nodeName, true); if (stat == null) { fail("node " + nodeName + " should exist"); } System.out.println("session id of zk: " + zk.getSessionId()); System.out.println("session id of zk_1: " + zk_1.getSessionId()); zk.close(); stat = zk_1.exists("nosuchnode", false); event = this.getEvent(10); if (event == null) { throw new AssertionFailedError("First event was not delivered promptly"); } if (!((event.getType() == EventType.NodeChildrenChanged && event.getPath().equalsIgnoreCase(parentName)) || (event.getType() == EventType.NodeDeleted && event.getPath().equalsIgnoreCase(nodeName)))) { System.out.print( parentName + " " + EventType.NodeChildrenChanged + " " + nodeName + " " + EventType.NodeDeleted); fail("Unexpected first event was delivered: " + event.toString()); } event = this.getEvent(10); if (event == null) { throw new AssertionFailedError("Second event was not delivered promptly"); } if (!((event.getType() == EventType.NodeChildrenChanged && event.getPath().equalsIgnoreCase(parentName)) || (event.getType() == EventType.NodeDeleted && event.getPath().equalsIgnoreCase(nodeName)))) { System.out.print( parentName + " " + EventType.NodeChildrenChanged + " " + nodeName + " " + EventType.NodeDeleted); fail("Unexpected second event was delivered: " + event.toString()); } firstGen = zk_1.getChildren(parentName, false); stat = zk_1.exists(nodeName, false); if (stat != null) { fail("node " + nodeName + " should have been deleted"); } if (firstGen.contains(nodeName)) { fail("node " + nodeName + " should not be a children"); } deleteZKDir(zk_1, nodeName); zk_1.close(); }