You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zookeeper.apache.org by ph...@apache.org on 2009/03/12 01:42:14 UTC

svn commit: r752729 - in /hadoop/zookeeper/branches/branch-3.1: CHANGES.txt src/c/src/zookeeper.c src/c/tests/TestClient.cc

Author: phunt
Date: Thu Mar 12 00:42:14 2009
New Revision: 752729

URL: http://svn.apache.org/viewvc?rev=752729&view=rev
Log:
ZOOKEEPER-309. core dump using zoo_get_acl()

Modified:
    hadoop/zookeeper/branches/branch-3.1/CHANGES.txt
    hadoop/zookeeper/branches/branch-3.1/src/c/src/zookeeper.c
    hadoop/zookeeper/branches/branch-3.1/src/c/tests/TestClient.cc

Modified: hadoop/zookeeper/branches/branch-3.1/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/branches/branch-3.1/CHANGES.txt?rev=752729&r1=752728&r2=752729&view=diff
==============================================================================
--- hadoop/zookeeper/branches/branch-3.1/CHANGES.txt (original)
+++ hadoop/zookeeper/branches/branch-3.1/CHANGES.txt Thu Mar 12 00:42:14 2009
@@ -25,6 +25,8 @@
   ZOOKEEPER-333. helgrind thread issues identified in mt c client code
   (mahadev via phunt)
 
+  ZOOKEEPER-309. core dump using zoo_get_acl() (mahadev via phunt)
+
 IMPROVEMENTS:
 
   ZOOKEEPER-279. Allow specialization of quorum config parsing

Modified: hadoop/zookeeper/branches/branch-3.1/src/c/src/zookeeper.c
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/branches/branch-3.1/src/c/src/zookeeper.c?rev=752729&r1=752728&r2=752729&view=diff
==============================================================================
--- hadoop/zookeeper/branches/branch-3.1/src/c/src/zookeeper.c (original)
+++ hadoop/zookeeper/branches/branch-3.1/src/c/src/zookeeper.c Thu Mar 12 00:42:14 2009
@@ -1680,7 +1680,6 @@
                     if (rc == 0) {
                         struct GetACLResponse res;
                         deserialize_GetACLResponse(ia, "reply", &res);
-                        cptr->c.acl_result(rc, &res.acl, &res.stat, cptr->data);
                         sc->u.acl.acl = res.acl;
                         sc->u.acl.stat = res.stat;
                         /* We don't deallocate since we are passing it back */

Modified: hadoop/zookeeper/branches/branch-3.1/src/c/tests/TestClient.cc
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/branches/branch-3.1/src/c/tests/TestClient.cc?rev=752729&r1=752728&r2=752729&view=diff
==============================================================================
--- hadoop/zookeeper/branches/branch-3.1/src/c/tests/TestClient.cc (original)
+++ hadoop/zookeeper/branches/branch-3.1/src/c/tests/TestClient.cc Thu Mar 12 00:42:14 2009
@@ -159,6 +159,7 @@
 #ifdef THREADED
     CPPUNIT_TEST(testPathValidation);
     CPPUNIT_TEST(testPing);
+    CPPUNIT_TEST(testAcl);
     CPPUNIT_TEST(testWatcherAutoResetWithGlobal);
     CPPUNIT_TEST(testWatcherAutoResetWithLocal);
 #endif
@@ -222,7 +223,7 @@
         sprintf(cmd, "%s stop %s", ZKSERVER_CMD, getHostPorts());
         CPPUNIT_ASSERT(system(cmd) == 0);
     }
-
+    
     void testPing()
     {
         watchctx_t ctxIdle;
@@ -296,6 +297,53 @@
           path, "", 0, &ZOO_OPEN_ACL_UNSAFE, 0, 0, 0));
     }
     
+            
+    /**
+       returns false if the vectors dont match
+    **/
+    bool compareAcl(struct ACL_vector acl1, struct ACL_vector acl2) {
+        if (acl1.count != acl2.count) {
+            return false;
+        }
+        struct ACL *aclval1 = acl1.data;
+        struct ACL *aclval2 = acl2.data;
+        if (aclval1->perms != aclval2->perms) {
+            return false;
+        }
+        struct Id id1 = aclval1->id;
+        struct Id id2 = aclval2->id;
+        if (strcmp(id1.scheme, id2.scheme) != 0) {
+            return false;
+        }
+        if (strcmp(id1.id, id2.id) != 0) {
+            return false;
+        }
+        return true;
+    }
+
+    void testAcl() {
+        int rc;
+        struct String_vector strings;
+        struct ACL_vector aclvec;
+        struct Stat stat;
+        watchctx_t ctx;
+        zhandle_t *zk = createClient(&ctx);
+        rc = zoo_create(zk, "/acl", "", 0, 
+                        &ZOO_OPEN_ACL_UNSAFE, 0, 0, 0);
+        CPPUNIT_ASSERT_EQUAL((int)ZOK, rc);
+        rc = zoo_get_acl(zk, "/acl", &aclvec, &stat  );
+        CPPUNIT_ASSERT_EQUAL((int) ZOK, rc);
+        bool cmp = compareAcl(ZOO_OPEN_ACL_UNSAFE, aclvec);
+        CPPUNIT_ASSERT_EQUAL(true, cmp);
+        rc = zoo_set_acl(zk, "/acl", -1, &ZOO_READ_ACL_UNSAFE);
+        CPPUNIT_ASSERT_EQUAL((int) ZOK, rc);
+        rc = zoo_get_acl(zk, "/acl", &aclvec, &stat);
+        CPPUNIT_ASSERT_EQUAL((int) ZOK, rc);
+        cmp = compareAcl(ZOO_READ_ACL_UNSAFE, aclvec);
+        CPPUNIT_ASSERT_EQUAL(true, cmp);
+    }
+
+
     void testPathValidation() {
         watchctx_t ctx;
         zhandle_t *zk = createClient(&ctx);
@@ -376,7 +424,7 @@
             rc = zoo_acreate(zk, path, "", 0,  &ZOO_OPEN_ACL_UNSAFE, 0, stringCompletion, strdup(path));
             CPPUNIT_ASSERT_EQUAL((int)ZOK, rc);
         }
-
+        
         yield(zk, 1);
         stopServer();
         CPPUNIT_ASSERT(ctx.waitForDisconnected(zk));
@@ -409,6 +457,7 @@
         rc = zoo_create(zk, "/watchtest/child", "", 0,
                         &ZOO_OPEN_ACL_UNSAFE, ZOO_EPHEMERAL, 0, 0);
         CPPUNIT_ASSERT_EQUAL((int)ZOK, rc);
+
         if (isGlobal) {
             testName = "GlobalTest";
             rc = zoo_get_children(zk, "/watchtest", 1, &strings);