示例#1
0
        public async Task testUpdateConflict()
        {
            var zk = await createClient();

            Assert.assertNull(await zk.existsAsync("/multi", null));

            try
            {
                await multiAsync(zk, Arrays.asList(
                                     Op.create("/multi", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT),
                                     Op.setData("/multi", "X".UTF8getBytes(), 0),
                                     Op.setData("/multi", "Y".UTF8getBytes(), 0)
                                     ));

                Assert.fail("Should have thrown a KeeperException for invalid version");
            }
            catch (KeeperException e)
            {
                //PASS
                LOG.error("STACKTRACE: " + e);
            }

            Assert.assertNull(await zk.existsAsync("/multi", null));

            //Updating version solves conflict -- order matters
            await multiAsync(zk, Arrays.asList(
                                 Op.create("/multi", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT),
                                 Op.setData("/multi", "X".UTF8getBytes(), 0),
                                 Op.setData("/multi", "Y".UTF8getBytes(), 1)
                                 ));

            Assert.assertEquals((await zk.getDataAsync("/multi", false)).Data, "Y".UTF8getBytes());
        }
示例#2
0
        public async Task testChRootCreateDelete()
        {
            var zk = await createClient();

            // creating the subtree for chRoot clients.
            string chRoot = await createNameSpace();

            // Creating child using chRoot client.
            var zk_chroot = await createClient(chRoot);

            Op createChild = Op.create("/myid", new byte[0],
                                       ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);

            await multiAsync(zk_chroot, Arrays.asList(createChild));

            Assert.assertNotNull("zNode is not created under chroot:" + chRoot, await zk
                                 .existsAsync(chRoot + "/myid", false));
            Assert.assertNotNull("zNode is not created under chroot:" + chRoot, await
                                 zk_chroot.existsAsync("/myid", false));
            Assert.assertNull("zNode is created directly under '/', ignored configured chroot",
                              await zk.existsAsync("/myid", false));

            // Deleting child using chRoot client.
            Op deleteChild = Op.delete("/myid", 0);

            await multiAsync(zk_chroot, Arrays.asList(deleteChild));

            Assert.assertNull("zNode exists under chroot:" + chRoot, await zk.existsAsync(
                                  chRoot + "/myid", false));
            Assert.assertNull("zNode exists under chroot:" + chRoot, await zk_chroot
                              .existsAsync("/myid", false));
        }
示例#3
0
        public async Task testCreateDelete()
        {
            var zk = await createClient();

            await multiAsync(zk, Arrays.asList(
                                 Op.create("/multi", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT),
                                 Op.delete("/multi", 0)
                                 ));

            // '/multi' should have been deleted
            Assert.assertNull(await zk.existsAsync("/multi", null));
        }
示例#4
0
        public async Task testNestedCreate()
        {
            var zk = await createClient();

            await multiAsync(zk, Arrays.asList(
                                 /* Create */
                                 Op.create("/multi", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT),
                                 Op.create("/multi/a", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT),
                                 Op.create("/multi/a/1", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT),

                                 /* Delete */
                                 Op.delete("/multi/a/1", 0),
                                 Op.delete("/multi/a", 0),
                                 Op.delete("/multi", 0)
                                 ));

            //Verify tree deleted
            Assert.assertNull(await zk.existsAsync("/multi/a/1", null));
            Assert.assertNull(await zk.existsAsync("/multi/a", null));
            Assert.assertNull(await zk.existsAsync("/multi", null));
        }
示例#5
0
        public async Task testChRootTransaction()
        {
            var zk = await createClient();

            // creating the subtree for chRoot clients.
            string chRoot = await createNameSpace();

            // checking the child version using chRoot client.
            var zk_chroot = await createClient(chRoot);

            const string childPath   = "/myid";
            Transaction  transaction = zk_chroot.transaction();

            transaction.create(childPath, new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE,
                               CreateMode.PERSISTENT);
            transaction.check(childPath, 0);
            transaction.setData(childPath, childPath.UTF8getBytes(), 0);
            await commitAsync(transaction);

            Assert.assertNotNull("zNode is not created under chroot:" + chRoot, await zk
                                 .existsAsync(chRoot + childPath, false));
            Assert.assertNotNull("zNode is not created under chroot:" + chRoot, await
                                 zk_chroot.existsAsync(childPath, false));
            Assert.assertNull("zNode is created directly under '/', ignored configured chroot",
                              await zk.existsAsync(childPath, false));
            Assert.assertEquals("zNode data not matching", childPath
                                .UTF8getBytes(), (await zk_chroot.getDataAsync(childPath, false)).Data);

            transaction = zk_chroot.transaction();
            // Deleting child using chRoot client.
            transaction.delete(childPath, 1);
            await commitAsync(transaction);

            Assert.assertNull("chroot:" + chRoot + " exists after delete", await zk
                              .existsAsync(chRoot + "/myid", false));
            Assert.assertNull("chroot:" + chRoot + " exists after delete", await
                              zk_chroot.existsAsync("/myid", false));
        }
示例#6
0
        public async Task TestDeleteUpdateConflict()
        {
            var zk = await createClient();

            /* Delete of a node folowed by an update of the (now) deleted node */
            try
            {
                await multiAsync(zk, Arrays.asList(
                                     Op.create("/multi", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT),
                                     Op.delete("/multi", 0),
                                     Op.setData("/multi", "Y".UTF8getBytes(), 0)
                                     ));

                Assert.fail("/multi should have been deleted so setData should have failed");
            }
            catch (KeeperException)
            {
                /* PASS */
            }

            // '/multi' should never have been created as entire op should fail
            Assert.assertNull(await zk.existsAsync("/multi", null));
        }
示例#7
0
        public async Task TestGetResults()
        {
            var zk = await createClient();

            /* Delete of a node folowed by an update of the (now) deleted node */
            var ops = Arrays.asList(
                Op.create("/multi", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT),
                Op.delete("/multi", 0),
                Op.setData("/multi", "Y".UTF8getBytes(), 0),
                Op.create("/foo", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT)
                );
            List <OpResult> results = null;

            try
            {
                await zk.multiAsync(ops);

                Assert.fail("/multi should have been deleted so setData should have failed");
            }
            catch (KeeperException e)
            {
                // '/multi' should never have been created as entire op should fail
                Assert.assertNull(await zk.existsAsync("/multi", null));
                results = e.getResults();
            }

            Assert.assertNotNull(results);
            foreach (OpResult r in results)
            {
                LOG.info("RESULT==> " + r);
                if (r is OpResult.ErrorResult)
                {
                    OpResult.ErrorResult er = (OpResult.ErrorResult)r;
                    LOG.info("ERROR RESULT: " + er + " ERR=>" + EnumUtil <KeeperException.Code> .DefinedCast(er.getErr()));
                }
            }
        }
示例#8
0
        public async Task testTransactionBuilder()
        {
            var zk = await createClient();

            List <OpResult> results = await commitAsync(zk.transaction()
                                                        .create("/t1", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT)
                                                        .create("/t1/child", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT)
                                                        .create("/t2", null, ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL));

            Assert.assertEquals(3, results.Count);
            foreach (OpResult r in results)
            {
                OpResult.CreateResult c = (OpResult.CreateResult)r;
                Assert.assertTrue(c.getPath().StartsWith("/t"));
                Assert.assertNotNull(c.ToString());
            }
            Assert.assertNotNull(await zk.existsAsync("/t1", false));
            Assert.assertNotNull(await zk.existsAsync("/t1/child", false));
            Assert.assertNotNull(await zk.existsAsync("/t2", false));

            results = await commitAsync(zk.transaction()
                                        .check("/t1", 0)
                                        .check("/t1/child", 0)
                                        .check("/t2", 0));

            Assert.assertEquals(3, results.Count);
            foreach (OpResult r in results)
            {
                OpResult.CheckResult c = (OpResult.CheckResult)r;
                Assert.assertNotNull(c.ToString());
            }

            try
            {
                await commitAsync(zk.transaction()
                                  .check("/t1", 0)
                                  .check("/t1/child", 0)
                                  .check("/t2", 1));

                Assert.fail();
            }
            catch (KeeperException.BadVersionException)
            {
                // expected
            }

            results = await commitAsync(zk.transaction()
                                        .check("/t1", 0)
                                        .setData("/t1", new byte[0], 0));

            Assert.assertEquals(2, results.Count);
            foreach (OpResult r in results)
            {
                Assert.assertNotNull(r.ToString());
            }

            try
            {
                results = await commitAsync(zk.transaction()
                                            .check("/t1", 1)
                                            .setData("/t1", new byte[0], 2));

                Assert.fail();
            }
            catch (KeeperException.BadVersionException)
            {
                // expected
            }

            results = await commitAsync(zk.transaction()
                                        .check("/t1", 1)
                                        .check("/t1/child", 0)
                                        .check("/t2", 0));

            Assert.assertEquals(3, results.Count);

            results = await commitAsync(zk.transaction()
                                        .delete("/t2", -1)
                                        .delete("/t1/child", -1));

            Assert.assertEquals(2, results.Count);
            foreach (OpResult r in results)
            {
                OpResult.DeleteResult d = (OpResult.DeleteResult)r;
                Assert.assertNotNull(d.ToString());
            }
            Assert.assertNotNull(await zk.existsAsync("/t1", false));
            Assert.assertNull(await zk.existsAsync("/t1/child", false));
            Assert.assertNull(await zk.existsAsync("/t2", false));
        }