You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ch...@apache.org on 2014/07/11 22:43:51 UTC

svn commit: r1609828 - in /qpid/trunk/qpid/cpp/src: qpid/acl/AclLexer.cpp qpid/acl/AclLexer.h tests/Acl.cpp tests/CMakeLists.txt

Author: chug
Date: Fri Jul 11 20:43:51 2014
New Revision: 1609828

URL: http://svn.apache.org/r1609828
Log:
QPID-5890: Refactoring AclModule.h
* make single instances of strings associated with enums
* make more compact search functions
* make string definitions const
* return 'const string&' instead of copies of temporaries
* add self test as string defs sanity check
* export AclHelper to satisfy tests (!!)


Added:
    qpid/trunk/qpid/cpp/src/tests/Acl.cpp
Modified:
    qpid/trunk/qpid/cpp/src/qpid/acl/AclLexer.cpp
    qpid/trunk/qpid/cpp/src/qpid/acl/AclLexer.h
    qpid/trunk/qpid/cpp/src/tests/CMakeLists.txt

Modified: qpid/trunk/qpid/cpp/src/qpid/acl/AclLexer.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/acl/AclLexer.cpp?rev=1609828&r1=1609827&r2=1609828&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/acl/AclLexer.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/acl/AclLexer.cpp Fri Jul 11 20:43:51 2014
@@ -30,189 +30,107 @@
 namespace qpid {
 namespace acl {
 
+// ObjectType
+const std::string objectNames[OBJECTSIZE] = {
+    "queue", "exchange", "broker", "link", "method", "query" };
+
 ObjectType AclHelper::getObjectType(const std::string& str) {
-    if (str.compare("queue")    == 0) return OBJ_QUEUE;
-    if (str.compare("exchange") == 0) return OBJ_EXCHANGE;
-    if (str.compare("broker")   == 0) return OBJ_BROKER;
-    if (str.compare("link")     == 0) return OBJ_LINK;
-    if (str.compare("method")   == 0) return OBJ_METHOD;
-    if (str.compare("query")    == 0) return OBJ_QUERY;
+    for (int i=0; i< OBJECTSIZE; ++i) {
+        if (str.compare(objectNames[i]) == 0)
+            return ObjectType(i);
+    }
     throw qpid::Exception(str);
 }
-std::string AclHelper::getObjectTypeStr(const ObjectType o) {
-    switch (o) {
-    case OBJ_QUEUE:    return "queue";
-    case OBJ_EXCHANGE: return "exchange";
-    case OBJ_BROKER:   return "broker";
-    case OBJ_LINK:     return "link";
-    case OBJ_METHOD:   return "method";
-    case OBJ_QUERY:    return "query";
-    default: assert(false); // should never get here
-    }
-    return "";
+
+const std::string& AclHelper::getObjectTypeStr(const ObjectType o) {
+    return objectNames[o];
 }
+
+// Action
+const std::string actionNames[ACTIONSIZE] = {
+    "consume", "publish", "create", "access", "bind",
+    "unbind", "delete", "purge", "update", "move",
+    "redirect", "reroute" };
+
 Action AclHelper::getAction(const std::string& str) {
-    if (str.compare("consume")  == 0) return ACT_CONSUME;
-    if (str.compare("publish")  == 0) return ACT_PUBLISH;
-    if (str.compare("create")   == 0) return ACT_CREATE;
-    if (str.compare("access")   == 0) return ACT_ACCESS;
-    if (str.compare("bind")     == 0) return ACT_BIND;
-    if (str.compare("unbind")   == 0) return ACT_UNBIND;
-    if (str.compare("delete")   == 0) return ACT_DELETE;
-    if (str.compare("purge")    == 0) return ACT_PURGE;
-    if (str.compare("update")   == 0) return ACT_UPDATE;
-    if (str.compare("move")     == 0) return ACT_MOVE;
-    if (str.compare("redirect") == 0) return ACT_REDIRECT;
-    if (str.compare("reroute")  == 0) return ACT_REROUTE;
+    for (int i=0; i< ACTIONSIZE; ++i) {
+        if (str.compare(actionNames[i]) == 0)
+            return Action(i);
+    }
     throw qpid::Exception(str);
 }
-std::string AclHelper::getActionStr(const Action a) {
-    switch (a) {
-    case ACT_CONSUME:  return "consume";
-    case ACT_PUBLISH:  return "publish";
-    case ACT_CREATE:   return "create";
-    case ACT_ACCESS:   return "access";
-    case ACT_BIND:     return "bind";
-    case ACT_UNBIND:   return "unbind";
-    case ACT_DELETE:   return "delete";
-    case ACT_PURGE:    return "purge";
-    case ACT_UPDATE:   return "update";
-    case ACT_MOVE:     return "move";
-    case ACT_REDIRECT: return "redirect";
-    case ACT_REROUTE:  return "reroute";
-    default: assert(false); // should never get here
-    }
-    return "";
+
+const std::string& AclHelper::getActionStr(const Action a) {
+    return actionNames[a];
 }
+
+// Property
+// These are shared between broker and acl using code enums.
+const std::string propertyNames[PROPERTYSIZE] = {
+    "name", "durable", "owner", "routingkey", "autodelete", "exclusive", "type",
+    "alternate", "queuename", "exchangename", "schemapackage",
+    "schemaclass", "policytype", "paging",
+
+    "maxpages", "maxpagefactor",
+    "maxqueuesize", "maxqueuecount", "maxfilesize", "maxfilecount"};
+
 Property AclHelper::getProperty(const std::string& str) {
-    if (str.compare("name")          == 0) return PROP_NAME;
-    if (str.compare("durable")       == 0) return PROP_DURABLE;
-    if (str.compare("owner")         == 0) return PROP_OWNER;
-    if (str.compare("routingkey")    == 0) return PROP_ROUTINGKEY;
-    if (str.compare("autodelete")    == 0) return PROP_AUTODELETE;
-    if (str.compare("exclusive")     == 0) return PROP_EXCLUSIVE;
-    if (str.compare("type")          == 0) return PROP_TYPE;
-    if (str.compare("alternate")     == 0) return PROP_ALTERNATE;
-    if (str.compare("queuename")     == 0) return PROP_QUEUENAME;
-    if (str.compare("exchangename")  == 0) return PROP_EXCHANGENAME;
-    if (str.compare("schemapackage") == 0) return PROP_SCHEMAPACKAGE;
-    if (str.compare("schemaclass")   == 0) return PROP_SCHEMACLASS;
-    if (str.compare("policytype")    == 0) return PROP_POLICYTYPE;
-    if (str.compare("paging")        == 0) return PROP_PAGING;
-    if (str.compare("maxpages")      == 0) return PROP_MAXPAGES;
-    if (str.compare("maxpagefactor") == 0) return PROP_MAXPAGEFACTOR;
-    if (str.compare("maxqueuesize")  == 0) return PROP_MAXQUEUESIZE;
-    if (str.compare("maxqueuecount") == 0) return PROP_MAXQUEUECOUNT;
-    if (str.compare("maxfilesize")   == 0) return PROP_MAXFILESIZE;
-    if (str.compare("maxfilecount")  == 0) return PROP_MAXFILECOUNT;
+    for (int i=0; i< PROPERTYSIZE; ++i) {
+        if (str.compare(propertyNames[i]) == 0)
+            return Property(i);
+    }
     throw qpid::Exception(str);
 }
-std::string AclHelper::getPropertyStr(const Property p) {
-    switch (p) {
-    case PROP_NAME:          return "name";
-    case PROP_DURABLE:       return "durable";
-    case PROP_OWNER:         return "owner";
-    case PROP_ROUTINGKEY:    return "routingkey";
-    case PROP_AUTODELETE:    return "autodelete";
-    case PROP_EXCLUSIVE:     return "exclusive";
-    case PROP_TYPE:          return "type";
-    case PROP_ALTERNATE:     return "alternate";
-    case PROP_QUEUENAME:     return "queuename";
-    case PROP_EXCHANGENAME:  return "exchangename";
-    case PROP_SCHEMAPACKAGE: return "schemapackage";
-    case PROP_SCHEMACLASS:   return "schemaclass";
-    case PROP_POLICYTYPE:    return "policytype";
-    case PROP_PAGING:        return "paging";
-    case PROP_MAXPAGES:      return "maxpages";
-    case PROP_MAXPAGEFACTOR: return "maxpagefactor";
-    case PROP_MAXQUEUESIZE:  return "maxqueuesize";
-    case PROP_MAXQUEUECOUNT: return "maxqueuecount";
-    case PROP_MAXFILESIZE:   return "maxfilesize";
-    case PROP_MAXFILECOUNT:  return "maxfilecount";
-    default: assert(false); // should never get here
-    }
-    return "";
+
+const std::string& AclHelper::getPropertyStr(const Property p) {
+    return propertyNames[p];
 }
+
+// SpecProperty
+// These are shared between user acl files and acl using text.
+const std::string specPropertyNames[SPECPROPSIZE] = {
+    "name", "durable", "owner", "routingkey", "autodelete", "exclusive", "type",
+    "alternate", "queuename", "exchangename", "schemapackage",
+    "schemaclass", "policytype", "paging",
+
+     "queuemaxsizelowerlimit",  "queuemaxsizeupperlimit",
+    "queuemaxcountlowerlimit", "queuemaxcountupperlimit",
+      "filemaxsizelowerlimit",   "filemaxsizeupperlimit",
+     "filemaxcountlowerlimit",  "filemaxcountupperlimit",
+            "pageslowerlimit",         "pagesupperlimit",
+       "pagefactorlowerlimit",    "pagefactorupperlimit" };
+
 SpecProperty AclHelper::getSpecProperty(const std::string& str) {
-    if (str.compare("name")          == 0) return SPECPROP_NAME;
-    if (str.compare("durable")       == 0) return SPECPROP_DURABLE;
-    if (str.compare("owner")         == 0) return SPECPROP_OWNER;
-    if (str.compare("routingkey")    == 0) return SPECPROP_ROUTINGKEY;
-    if (str.compare("autodelete")    == 0) return SPECPROP_AUTODELETE;
-    if (str.compare("exclusive")     == 0) return SPECPROP_EXCLUSIVE;
-    if (str.compare("type")          == 0) return SPECPROP_TYPE;
-    if (str.compare("alternate")     == 0) return SPECPROP_ALTERNATE;
-    if (str.compare("queuename")     == 0) return SPECPROP_QUEUENAME;
-    if (str.compare("exchangename")  == 0) return SPECPROP_EXCHANGENAME;
-    if (str.compare("schemapackage") == 0) return SPECPROP_SCHEMAPACKAGE;
-    if (str.compare("schemaclass")   == 0) return SPECPROP_SCHEMACLASS;
-    if (str.compare("policytype")    == 0) return SPECPROP_POLICYTYPE;
-    if (str.compare("paging")        == 0) return SPECPROP_PAGING;
-    if (str.compare("queuemaxsizelowerlimit")   == 0) return SPECPROP_MAXQUEUESIZELOWERLIMIT;
-    if (str.compare("queuemaxsizeupperlimit")   == 0) return SPECPROP_MAXQUEUESIZEUPPERLIMIT;
-    if (str.compare("queuemaxcountlowerlimit")  == 0) return SPECPROP_MAXQUEUECOUNTLOWERLIMIT;
-    if (str.compare("queuemaxcountupperlimit")  == 0) return SPECPROP_MAXQUEUECOUNTUPPERLIMIT;
-    if (str.compare("filemaxsizelowerlimit")    == 0) return SPECPROP_MAXFILESIZELOWERLIMIT;
-    if (str.compare("filemaxsizeupperlimit")    == 0) return SPECPROP_MAXFILESIZEUPPERLIMIT;
-    if (str.compare("filemaxcountlowerlimit")   == 0) return SPECPROP_MAXFILECOUNTLOWERLIMIT;
-    if (str.compare("filemaxcountupperlimit")   == 0) return SPECPROP_MAXFILECOUNTUPPERLIMIT;
-    if (str.compare("pageslowerlimit")          == 0) return SPECPROP_MAXPAGESLOWERLIMIT;
-    if (str.compare("pagesupperlimit")          == 0) return SPECPROP_MAXPAGESUPPERLIMIT;
-    if (str.compare("pagefactorlowerlimit")     == 0) return SPECPROP_MAXPAGEFACTORLOWERLIMIT;
-    if (str.compare("pagefactorupperlimit")     == 0) return SPECPROP_MAXPAGEFACTORUPPERLIMIT;
+    for (int i=0; i< SPECPROPSIZE; ++i) {
+        if (str.compare(specPropertyNames[i]) == 0)
+            return SpecProperty(i);
+    }
     // Allow old names in ACL file as aliases for newly-named properties
-    if (str.compare("maxqueuesize")             == 0) return SPECPROP_MAXQUEUESIZEUPPERLIMIT;
-    if (str.compare("maxqueuecount")            == 0) return SPECPROP_MAXQUEUECOUNTUPPERLIMIT;
+    if (str.compare("maxqueuesize") == 0)
+        return SPECPROP_MAXQUEUESIZEUPPERLIMIT;
+    if (str.compare("maxqueuecount") == 0)
+        return SPECPROP_MAXQUEUECOUNTUPPERLIMIT;
     throw qpid::Exception(str);
 }
-std::string AclHelper::getPropertyStr(const SpecProperty p) {
-    switch (p) {
-        case SPECPROP_NAME:          return "name";
-        case SPECPROP_DURABLE:       return "durable";
-        case SPECPROP_OWNER:         return "owner";
-        case SPECPROP_ROUTINGKEY:    return "routingkey";
-        case SPECPROP_AUTODELETE:    return "autodelete";
-        case SPECPROP_EXCLUSIVE:     return "exclusive";
-        case SPECPROP_TYPE:          return "type";
-        case SPECPROP_ALTERNATE:     return "alternate";
-        case SPECPROP_QUEUENAME:     return "queuename";
-        case SPECPROP_EXCHANGENAME:  return "exchangename";
-        case SPECPROP_SCHEMAPACKAGE: return "schemapackage";
-        case SPECPROP_SCHEMACLASS:   return "schemaclass";
-        case SPECPROP_POLICYTYPE:    return "policytype";
-        case SPECPROP_PAGING:        return "paging";
-        case SPECPROP_MAXQUEUESIZELOWERLIMIT:  return "queuemaxsizelowerlimit";
-        case SPECPROP_MAXQUEUESIZEUPPERLIMIT:  return "queuemaxsizeupperlimit";
-        case SPECPROP_MAXQUEUECOUNTLOWERLIMIT: return "queuemaxcountlowerlimit";
-        case SPECPROP_MAXQUEUECOUNTUPPERLIMIT: return "queuemaxcountupperlimit";
-        case SPECPROP_MAXFILESIZELOWERLIMIT:   return "filemaxsizelowerlimit";
-        case SPECPROP_MAXFILESIZEUPPERLIMIT:   return "filemaxsizeupperlimit";
-        case SPECPROP_MAXFILECOUNTLOWERLIMIT:  return "filemaxcountlowerlimit";
-        case SPECPROP_MAXFILECOUNTUPPERLIMIT:  return "filemaxcountupperlimit";
-        case SPECPROP_MAXPAGESLOWERLIMIT:      return "pageslowerlimit";
-        case SPECPROP_MAXPAGESUPPERLIMIT:      return "pagesupperlimit";
-        case SPECPROP_MAXPAGEFACTORLOWERLIMIT: return "pagefactorlowerlimit";
-        case SPECPROP_MAXPAGEFACTORUPPERLIMIT: return "pagefactorupperlimit";
-        default: assert(false); // should never get here
-    }
-    return "";
+
+const std::string& AclHelper::getPropertyStr(const SpecProperty p) {
+    return specPropertyNames[p];
 }
+
+// AclResult
+const std::string resultNames[RESULTSIZE] = {
+    "allow", "allow-log", "deny", "deny-log" };
+
 AclResult AclHelper::getAclResult(const std::string& str) {
-    if (str.compare("allow")     == 0) return ALLOW;
-    if (str.compare("allow-log") == 0) return ALLOWLOG;
-    if (str.compare("deny")      == 0) return DENY;
-    if (str.compare("deny-log")  == 0) return DENYLOG;
+    for (int i=0; i< RESULTSIZE; ++i) {
+        if (str.compare(resultNames[i]) == 0)
+            return AclResult(i);
+    }
     throw qpid::Exception(str);
 }
-std::string AclHelper::getAclResultStr(const AclResult r) {
-    switch (r) {
-    case ALLOW:    return "allow";
-    case ALLOWLOG: return "allow-log";
-    case DENY:     return "deny";
-    case DENYLOG:  return "deny-log";
-    default: assert(false); // should never get here
-    }
-    return "";
+
+const std::string& AclHelper::getAclResultStr(const AclResult r) {
+    return resultNames[r];
 }
 
 // This map contains the legal combinations of object/action/properties

Modified: qpid/trunk/qpid/cpp/src/qpid/acl/AclLexer.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/acl/AclLexer.h?rev=1609828&r1=1609827&r2=1609828&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/acl/AclLexer.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/acl/AclLexer.h Fri Jul 11 20:43:51 2014
@@ -21,6 +21,7 @@
 
 
 #include "qpid/Exception.h"
+#include "qpid/broker/BrokerImportExport.h"
 #include <boost/shared_ptr.hpp>
 #include <iostream>
 #include <map>
@@ -121,30 +122,34 @@ namespace acl {
         SPECPROP_MAXPAGESLOWERLIMIT,
         SPECPROP_MAXPAGESUPPERLIMIT,
         SPECPROP_MAXPAGEFACTORLOWERLIMIT,
-        SPECPROP_MAXPAGEFACTORUPPERLIMIT };
+        SPECPROP_MAXPAGEFACTORUPPERLIMIT,
+        SPECPROPSIZE              // SPECPROPSIZE must be last
+    };
 
 // AclResult  shared between ACL spec and ACL authorise interface
     enum AclResult {
         ALLOW,
         ALLOWLOG,
         DENY,
-        DENYLOG };
+        DENYLOG,
+        RESULTSIZE
+    };
 
 
-    class AclHelper {
+    QPID_BROKER_CLASS_EXTERN class AclHelper {
     private:
         AclHelper(){}
     public:
-        static ObjectType getObjectType(const std::string& str);
-        static std::string getObjectTypeStr(const ObjectType o);
-        static Action getAction(const std::string& str);
-        static std::string getActionStr(const Action a);
-        static Property getProperty(const std::string& str);
-        static std::string getPropertyStr(const Property p);
-        static SpecProperty getSpecProperty(const std::string& str);
-        static std::string getPropertyStr(const SpecProperty p);
-        static AclResult getAclResult(const std::string& str);
-        static std::string getAclResultStr(const AclResult r);
+        static QPID_BROKER_EXTERN ObjectType            getObjectType(const std::string& str);
+        static QPID_BROKER_EXTERN const std::string& getObjectTypeStr(const ObjectType o);
+        static QPID_BROKER_EXTERN Action                    getAction(const std::string& str);
+        static QPID_BROKER_EXTERN const std::string&     getActionStr(const Action a);
+        static QPID_BROKER_EXTERN Property                getProperty(const std::string& str);
+        static QPID_BROKER_EXTERN const std::string&   getPropertyStr(const Property p);
+        static QPID_BROKER_EXTERN SpecProperty        getSpecProperty(const std::string& str);
+        static QPID_BROKER_EXTERN const std::string&   getPropertyStr(const SpecProperty p);
+        static QPID_BROKER_EXTERN AclResult              getAclResult(const std::string& str);
+        static QPID_BROKER_EXTERN const std::string&  getAclResultStr(const AclResult r);
 
         typedef std::set<Property>                  propSet;
         typedef boost::shared_ptr<propSet>          propSetPtr;

Added: qpid/trunk/qpid/cpp/src/tests/Acl.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/tests/Acl.cpp?rev=1609828&view=auto
==============================================================================
--- qpid/trunk/qpid/cpp/src/tests/Acl.cpp (added)
+++ qpid/trunk/qpid/cpp/src/tests/Acl.cpp Fri Jul 11 20:43:51 2014
@@ -0,0 +1,157 @@
+/*
+ *
+ * Copyright (c) 2014 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+
+#include "unit_test.h"
+#include "test_tools.h"
+#include "qpid/acl/AclLexer.h"
+#include <boost/assign.hpp>
+
+using namespace std;
+using namespace qpid;
+using namespace qpid::acl;
+using namespace boost::assign;
+
+namespace qpid {
+namespace tests {
+
+QPID_AUTO_TEST_SUITE(AclTestSuite)
+
+#define OBJ_ENUMS(e, s) \
+    BOOST_CHECK_EQUAL(AclHelper::getObjectTypeStr((e)),(s)); \
+    BOOST_CHECK_EQUAL(AclHelper::getObjectType((s)),(e))
+
+QPID_AUTO_TEST_CASE(TestLexerObjectEnums) {
+    OBJ_ENUMS(OBJ_QUEUE,    "queue");
+    OBJ_ENUMS(OBJ_EXCHANGE, "exchange");
+    OBJ_ENUMS(OBJ_BROKER,   "broker");
+    OBJ_ENUMS(OBJ_LINK,     "link");
+    OBJ_ENUMS(OBJ_METHOD,   "method");
+    OBJ_ENUMS(OBJ_QUERY,    "query");
+}
+
+#define ACT_ENUMS(e, s) \
+    BOOST_CHECK_EQUAL(AclHelper::getActionStr((e)),(s)); \
+    BOOST_CHECK_EQUAL(AclHelper::getAction((s)),(e))
+
+QPID_AUTO_TEST_CASE(TestLexerActionEnums) {
+    ACT_ENUMS(ACT_CONSUME,  "consume");
+    ACT_ENUMS(ACT_PUBLISH,  "publish");
+    ACT_ENUMS(ACT_CREATE,   "create");
+    ACT_ENUMS(ACT_ACCESS,   "access");
+    ACT_ENUMS(ACT_BIND,     "bind");
+    ACT_ENUMS(ACT_UNBIND,   "unbind");
+    ACT_ENUMS(ACT_DELETE,   "delete");
+    ACT_ENUMS(ACT_PURGE,    "purge");
+    ACT_ENUMS(ACT_UPDATE,   "update");
+    ACT_ENUMS(ACT_MOVE,     "move");
+    ACT_ENUMS(ACT_REDIRECT, "redirect");
+    ACT_ENUMS(ACT_REROUTE,  "reroute");
+}
+
+#define PROP_ENUMS(e, s) \
+    BOOST_CHECK_EQUAL(AclHelper::getPropertyStr((e)),(s)); \
+    BOOST_CHECK_EQUAL(AclHelper::getProperty((s)),(e))
+
+QPID_AUTO_TEST_CASE(TestLexerPropertyEnums) {
+    PROP_ENUMS(PROP_NAME,           "name");
+    PROP_ENUMS(PROP_DURABLE,        "durable");
+    PROP_ENUMS(PROP_OWNER,          "owner");
+    PROP_ENUMS(PROP_ROUTINGKEY,     "routingkey");
+    PROP_ENUMS(PROP_AUTODELETE,     "autodelete");
+    PROP_ENUMS(PROP_EXCLUSIVE,      "exclusive");
+    PROP_ENUMS(PROP_TYPE,           "type");
+    PROP_ENUMS(PROP_ALTERNATE,      "alternate");
+    PROP_ENUMS(PROP_QUEUENAME,      "queuename");
+    PROP_ENUMS(PROP_EXCHANGENAME,   "exchangename");
+    PROP_ENUMS(PROP_SCHEMAPACKAGE,  "schemapackage");
+    PROP_ENUMS(PROP_SCHEMACLASS,    "schemaclass");
+    PROP_ENUMS(PROP_POLICYTYPE,     "policytype");
+    PROP_ENUMS(PROP_PAGING,         "paging");
+    PROP_ENUMS(PROP_MAXPAGES,       "maxpages");
+    PROP_ENUMS(PROP_MAXPAGEFACTOR,  "maxpagefactor");
+    PROP_ENUMS(PROP_MAXQUEUESIZE,   "maxqueuesize");
+    PROP_ENUMS(PROP_MAXQUEUECOUNT,  "maxqueuecount");
+    PROP_ENUMS(PROP_MAXFILESIZE,    "maxfilesize");
+    PROP_ENUMS(PROP_MAXFILECOUNT,   "maxfilecount");
+
+}
+
+#define SPECPROP_ENUMS(e, s) \
+    BOOST_CHECK_EQUAL(AclHelper::getPropertyStr((e)),(s)); \
+    BOOST_CHECK_EQUAL(AclHelper::getSpecProperty((s)),(e))
+
+QPID_AUTO_TEST_CASE(TestLexerSpecPropertyEnums) {
+    SPECPROP_ENUMS(SPECPROP_NAME,          "name");
+    SPECPROP_ENUMS(SPECPROP_DURABLE,       "durable");
+    SPECPROP_ENUMS(SPECPROP_OWNER,         "owner");
+    SPECPROP_ENUMS(SPECPROP_ROUTINGKEY,    "routingkey");
+    SPECPROP_ENUMS(SPECPROP_AUTODELETE,    "autodelete");
+    SPECPROP_ENUMS(SPECPROP_EXCLUSIVE,     "exclusive");
+    SPECPROP_ENUMS(SPECPROP_TYPE,          "type");
+    SPECPROP_ENUMS(SPECPROP_ALTERNATE,     "alternate");
+    SPECPROP_ENUMS(SPECPROP_QUEUENAME,     "queuename");
+    SPECPROP_ENUMS(SPECPROP_EXCHANGENAME,  "exchangename");
+    SPECPROP_ENUMS(SPECPROP_SCHEMAPACKAGE, "schemapackage");
+    SPECPROP_ENUMS(SPECPROP_SCHEMACLASS,   "schemaclass");
+    SPECPROP_ENUMS(SPECPROP_POLICYTYPE,    "policytype");
+    SPECPROP_ENUMS(SPECPROP_PAGING,        "paging");
+    SPECPROP_ENUMS(SPECPROP_MAXQUEUESIZELOWERLIMIT,  "queuemaxsizelowerlimit");
+    SPECPROP_ENUMS(SPECPROP_MAXQUEUESIZEUPPERLIMIT,  "queuemaxsizeupperlimit");
+    SPECPROP_ENUMS(SPECPROP_MAXQUEUECOUNTLOWERLIMIT, "queuemaxcountlowerlimit");
+    SPECPROP_ENUMS(SPECPROP_MAXQUEUECOUNTUPPERLIMIT, "queuemaxcountupperlimit");
+    SPECPROP_ENUMS(SPECPROP_MAXFILESIZELOWERLIMIT,   "filemaxsizelowerlimit");
+    SPECPROP_ENUMS(SPECPROP_MAXFILESIZEUPPERLIMIT,   "filemaxsizeupperlimit");
+    SPECPROP_ENUMS(SPECPROP_MAXFILECOUNTLOWERLIMIT,  "filemaxcountlowerlimit");
+    SPECPROP_ENUMS(SPECPROP_MAXFILECOUNTUPPERLIMIT,  "filemaxcountupperlimit");
+    SPECPROP_ENUMS(SPECPROP_MAXPAGESLOWERLIMIT,      "pageslowerlimit");
+    SPECPROP_ENUMS(SPECPROP_MAXPAGESUPPERLIMIT,      "pagesupperlimit");
+    SPECPROP_ENUMS(SPECPROP_MAXPAGEFACTORLOWERLIMIT, "pagefactorlowerlimit");
+    SPECPROP_ENUMS(SPECPROP_MAXPAGEFACTORUPPERLIMIT, "pagefactorupperlimit");
+
+    BOOST_CHECK_EQUAL(AclHelper::getSpecProperty("maxqueuesize"),  SPECPROP_MAXQUEUESIZEUPPERLIMIT);
+    BOOST_CHECK_EQUAL(AclHelper::getSpecProperty("maxqueuecount"), SPECPROP_MAXQUEUECOUNTUPPERLIMIT);
+}
+
+#define RESULT_ENUMS(e, s) \
+    BOOST_CHECK_EQUAL(AclHelper::getAclResultStr((e)),(s)); \
+    BOOST_CHECK_EQUAL(AclHelper::getAclResult((s)),(e))
+
+QPID_AUTO_TEST_CASE(TestLexerResultEnums) {
+    RESULT_ENUMS(ALLOW,    "allow");
+    RESULT_ENUMS(ALLOWLOG, "allow-log");
+    RESULT_ENUMS(DENY,     "deny");
+    RESULT_ENUMS(DENYLOG,  "deny-log");
+}
+
+#define ENUM_ENUMS(enum, func, size) \
+    for (int i=0; i<(int)(size); i++) \
+        BOOST_CHECK((func)( (enum)(i) ).length() != 0 );
+
+QPID_AUTO_TEST_CASE(TextLexerEnumEnums) {
+    ENUM_ENUMS(ObjectType,   AclHelper::getObjectTypeStr, OBJECTSIZE);
+    ENUM_ENUMS(Action,       AclHelper::getActionStr,     ACTIONSIZE);
+    ENUM_ENUMS(Property,     AclHelper::getPropertyStr,   PROPERTYSIZE);
+    ENUM_ENUMS(SpecProperty, AclHelper::getPropertyStr,   SPECPROPSIZE);
+    ENUM_ENUMS(AclResult,    AclHelper::getAclResultStr,  RESULTSIZE);
+
+}
+
+QPID_AUTO_TEST_SUITE_END()
+
+}} // namespace qpid::tests

Modified: qpid/trunk/qpid/cpp/src/tests/CMakeLists.txt
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/tests/CMakeLists.txt?rev=1609828&r1=1609827&r2=1609828&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/tests/CMakeLists.txt (original)
+++ qpid/trunk/qpid/cpp/src/tests/CMakeLists.txt Fri Jul 11 20:43:51 2014
@@ -166,6 +166,7 @@ set (qpid_test_boost_libs
 
 set(all_unit_tests
     AccumulatedAckTest
+    Acl
     Array
     AsyncCompletion
     AtomicValue



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org