Ack,
Mathi.

> -----Original Message-----
> From: Zoran Milinkovic [mailto:[email protected]]
> Sent: Friday, August 26, 2016 7:39 PM
> To: Mathivanan Naickan Palanivelu
> Cc: [email protected]
> Subject: [PATCH 1 of 1] clm: add clm tests for testing long RDN support in clm
> [#1906]
> 
>  tests/clmsv/Makefile.am      |    4 +-
>  tests/clmsv/tet_ClmLongRdn.c |  480
> +++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 483 insertions(+), 1 deletions(-)
> 
> 
> The patch contains tests for testing long RDN support in CLM.
> Long DN allowed must be allowed in IMM to pass new CLM tests. Otherwise,
> all tests will be skipped.
> A test node with CLM node name "safNode=PL-
> 123456789012345678901234567890123456789012345678901234567890,safClus
> ter=myClmCluster"
> must be added to the cluster to pass all tests, otherwise tests that use the
> test node will be skipped.
> 
> diff --git a/tests/clmsv/Makefile.am b/tests/clmsv/Makefile.am
> --- a/tests/clmsv/Makefile.am
> +++ b/tests/clmsv/Makefile.am
> @@ -41,9 +41,11 @@ clmtest_SOURCES = \
>       tet_ClmOiOps.c \
>       tet_saClmDispatch.c \
>       tet_saClmSelectionObjectGet.c \
> -     tet_saClmFinalize.c
> +     tet_saClmFinalize.c \
> +     tet_ClmLongRdn.c
> 
>  clmtest_LDADD = \
>       $(top_builddir)/osaf/libs/saf/libSaClm/libSaClm.la \
> +     $(top_builddir)/osaf/libs/saf/libSaImm/libSaImmOm.la \
>       $(top_builddir)/osaf/libs/core/libopensaf_core.la \
>       $(top_builddir)/tests/unit_test_fw/src/libutest.la
> diff --git a/tests/clmsv/tet_ClmLongRdn.c b/tests/clmsv/tet_ClmLongRdn.c
> new file mode 100644
> --- /dev/null
> +++ b/tests/clmsv/tet_ClmLongRdn.c
> @@ -0,0 +1,480 @@
> +/*      -*- OpenSAF  -*-
> + *
> + * (C) Copyright 2016 The OpenSAF Foundation
> + *
> + * This program is distributed in the hope that it will be useful, but
> + * WITHOUT ANY WARRANTY; without even the implied warranty of
> +MERCHANTABILITY
> + * or FITNESS FOR A PARTICULAR PURPOSE. This file and program are
> +licensed
> + * under the GNU Lesser General Public License Version 2.1, February 1999.
> + * The complete license can be accessed from the following location:
> + * http://opensource.org/licenses/lgpl-license.php
> + * See the Copying file included with the OpenSAF distribution for full
> + * licensing terms.
> + *
> + * Author(s): Ericsson AB
> + *
> + */
> +
> +#include <sys/types.h>
> +#include <sys/wait.h>
> +#include <pthread.h>
> +#include <saImm.h>
> +#include <saImmOm.h>
> +#include <saImmOi.h>
> +#include <saAis.h>
> +#include "clmtest.h"
> +
> +
> +static char *s_clmTrackCallback_node;                        // Node
> name that will be compared in clmTrackCallback callback
> +static SaAisErrorT s_clmTrackCallback_err;   // Error code from
> clmTrackCallback callback
> +static int s_existTestNode;                                  // 0 = not
> tested, -1 = doesn't exist, 1 = exists
> +static int s_longDnAllowed;                                  // 0 = not
> tested, -1 = not allowed, 1 = allowed
> +static char *s_testNodeName = "safNode=PL-
> 123456789012345678901234567890"
> +
>       "123456789012345678901234567890,safCluster=myClmCluster";
> +
> +static int testNodeExist() {
> +     SaAisErrorT rc;
> +     SaImmHandleT immHandle;
> +     SaImmAccessorHandleT accessorHandle;
> +     SaVersionT version = { 'A', 2, 15 };
> +     const SaImmAttrNameT attributeNames[1] = { NULL };
> +
> +     if(s_existTestNode) {
> +             return s_existTestNode;
> +     }
> +
> +     safassert(saImmOmInitialize(&immHandle, NULL, &version),
> SA_AIS_OK);
> +     safassert(saImmOmAccessorInitialize(immHandle,
> &accessorHandle),
> +SA_AIS_OK);
> +
> +     rc = saImmOmAccessorGet_o3(accessorHandle, s_testNodeName,
> attributeNames, NULL);
> +     assert(rc == SA_AIS_OK || rc == SA_AIS_ERR_NOT_EXIST);
> +     if(rc == SA_AIS_ERR_NOT_EXIST) {
> +             s_existTestNode = -1;
> +     } else if(rc == SA_AIS_OK) {
> +             s_existTestNode = 1;
> +     }
> +
> +     saImmOmAccessorFinalize(accessorHandle);
> +     saImmOmFinalize(immHandle);
> +
> +     return s_existTestNode;
> +}
> +
> +static SaClmNodeIdT getClmNodeId(char *nodeName) {
> +     SaImmHandleT immHandle;
> +     SaImmAccessorHandleT accessorHandle;
> +     SaVersionT version = { 'A', 2, 15 };
> +     SaImmAttrNameT attrNodeId = "saClmNodeID";
> +     SaImmAttrNameT attrNames[2] = { attrNodeId, NULL };
> +     SaImmAttrValuesT_2 **attributes = NULL;
> +     SaClmNodeIdT ret = 0;
> +     int i;
> +
> +     safassert(saImmOmInitialize(&immHandle, NULL, &version),
> SA_AIS_OK);
> +     safassert(saImmOmAccessorInitialize(immHandle,
> &accessorHandle), SA_AIS_OK);
> +     safassert(saImmOmAccessorGet_o3(accessorHandle,
> +(SaConstStringT)nodeName, attrNames, &attributes), SA_AIS_OK);
> +
> +     for(i=0; attributes[i]; ++i) {
> +             if(!strcmp(attrNodeId, attributes[i]->attrName)
> +                             && attributes[i]->attrValuesNumber == 1
> +                             && attributes[i]->attrValueType ==
> SA_IMM_ATTR_SAUINT32T) {
> +                     ret = *(SaClmNodeIdT *)attributes[i]->attrValues[0];
> +                     break;
> +             }
> +     }
> +
> +     saImmOmAccessorFinalize(accessorHandle);
> +     saImmOmFinalize(immHandle);
> +
> +     return ret;
> +}
> +
> +static SaClmNodeIdT isLongDNAllowed() {
> +     SaImmHandleT immHandle;
> +     SaImmAccessorHandleT accessorHandle;
> +     SaVersionT version = { 'A', 2, 15 };
> +     SaImmAttrNameT attrName = "longDnsAllowed";
> +     SaImmAttrNameT attrNames[2] = { attrName, NULL };
> +     SaImmAttrValuesT_2 **attributes = NULL;
> +     SaConstStringT immObjectName =
> "opensafImm=opensafImm,safApp=safImmService";
> +     int i;
> +
> +     if(s_longDnAllowed) {
> +             return s_longDnAllowed;
> +     }
> +
> +     safassert(saImmOmInitialize(&immHandle, NULL, &version),
> SA_AIS_OK);
> +     safassert(saImmOmAccessorInitialize(immHandle,
> &accessorHandle), SA_AIS_OK);
> +     safassert(saImmOmAccessorGet_o3(accessorHandle,
> immObjectName,
> +attrNames, &attributes), SA_AIS_OK);
> +
> +     for(i=0; attributes[i]; ++i) {
> +             if(!strcmp(attrName, attributes[i]->attrName)
> +                             && attributes[i]->attrValuesNumber == 1
> +                             && attributes[i]->attrValueType ==
> SA_IMM_ATTR_SAUINT32T) {
> +                     s_longDnAllowed = *(SaClmNodeIdT *)attributes[i]-
> >attrValues[0];
> +                     break;
> +             }
> +     }
> +
> +     saImmOmAccessorFinalize(accessorHandle);
> +     saImmOmFinalize(immHandle);
> +
> +     return s_longDnAllowed;
> +}
> +
> +static void skipTest(void) {
> +     printf("       SKIPPED");
> +}
> +
> +static void nodeGetCallBack(SaInvocationT invocation,
> +             const SaClmClusterNodeT *clusterNode,
> +             SaAisErrorT error) {
> +}
> +
> +static void nodeGetCallBack4(SaInvocationT invocation,
> +             const SaClmClusterNodeT_4 *clusterNode,
> +             SaAisErrorT error) {
> +}
> +
> +static void clmTrackCallback(const SaClmClusterNotificationBufferT
> *notificationBuffer,
> +                     SaUint32T numberOfMembers,
> +                     SaAisErrorT error)
> +{
> +     SaUint32T i;
> +     char nodename[1024];
> +
> +     for(i=0;i<notificationBuffer->numberOfItems;i++){
> +             memcpy(nodename,
> +                             notificationBuffer-
> >notification[i].clusterNode.nodeName.value,
> +                             notificationBuffer-
> >notification[i].clusterNode.nodeName.length);
> +
> +nodename[notificationBuffer->notification[i].clusterNode.nodeName.lengt
> +h] = 0;
> +
> +             // Found node name
> +             if(!strcmp(nodename, s_clmTrackCallback_node)) {
> +                     s_clmTrackCallback_err = SA_AIS_OK;
> +                     break;
> +             }
> +     }
> +}
> +
> +
> +static void clmTrackCallback4(const SaClmClusterNotificationBufferT_4
> *notificationBuffer,
> +             SaUint32T numberOfMembers,
> +             SaInvocationT invocation,
> +             const SaNameT *rootCauseEntity,
> +             const SaNtfCorrelationIdsT *correlationIds,
> +             SaClmChangeStepT step,
> +             SaTimeT timeSupervision,
> +             SaAisErrorT error)
> +{
> +     SaUint32T i;
> +     char nodename[1024];
> +
> +     for(i=0;i<notificationBuffer->numberOfItems;i++){
> +             memcpy(nodename,
> +                             notificationBuffer-
> >notification[i].clusterNode.nodeName.value,
> +                             notificationBuffer-
> >notification[i].clusterNode.nodeName.length);
> +
> +nodename[notificationBuffer->notification[i].clusterNode.nodeName.lengt
> +h] = 0;
> +
> +             // Found node name
> +             if(!strcmp(nodename, s_clmTrackCallback_node)) {
> +                     s_clmTrackCallback_err = SA_AIS_OK;
> +                     break;
> +             }
> +     }
> +}
> +
> +static SaClmCallbacksT_4 clmCallback4 = { nodeGetCallBack4,
> +clmTrackCallback4 }; static SaClmCallbacksT clmCallback = {
> +nodeGetCallBack, clmTrackCallback };
> +
> +static void unlock_node(char *nodename) {
> +     char command[1024];
> +
> +     // Unlock the node
> +     sprintf(command, "immadm -o 1 %s", nodename);
> +     system(command);
> +}
> +
> +static void lock_node(char *nodename) {
> +     char command[1024];
> +
> +     // Lock the node
> +     sprintf(command, "immadm -o 2 %s", nodename);
> +     system(command);
> +}
> +
> +static void remove_node(char *nodename) {
> +     int rc;
> +     char command[1024];
> +
> +     // Lock the node
> +     sprintf(command, "immadm -o 2 %s", nodename);
> +     system(command);
> +
> +     // Remove the node
> +     sprintf(command, "immcfg -d %s", nodename);
> +     assert((rc = system(command)) != -1);
> +}
> +
> +static void saClmLongRdn_01(void) {
> +     SaImmHandleT immHandle;
> +     SaImmAdminOwnerHandleT ownerHandle;
> +     SaImmCcbHandleT ccbHandle;
> +     SaImmAdminOwnerNameT ownerName =
> (SaImmAdminOwnerNameT)__FUNCTION__;
> +     SaConstStringT parent = "safCluster=myClmCluster";
> +     SaConstStringT parentNames[] = { parent, NULL };
> +     // hostname is 63 character long
> +     SaConstStringT nodeName = "safNode=PL-
> ABCDEFGHIJ12345678901234567890123456789012345678901234567890,safClu
> ster=myClmCluster";
> +     SaVersionT version = { 'A', 2, 15 };
> +     int rc;
> +
> +     if(isLongDNAllowed() != 1) {
> +             skipTest();
> +             return;
> +     }
> +
> +     safassert(saImmOmInitialize(&immHandle, NULL, &version),
> SA_AIS_OK);
> +     safassert(saImmOmAdminOwnerInitialize(immHandle, ownerName,
> SA_TRUE, &ownerHandle), SA_AIS_OK);
> +     safassert(saImmOmAdminOwnerSet_o3(ownerHandle,
> parentNames, SA_IMM_ONE), SA_AIS_OK);
> +     safassert(saImmOmCcbInitialize(ownerHandle, 0, &ccbHandle),
> +SA_AIS_OK);
> +
> +     // Create a node with long RDN
> +     safassert(saImmOmCcbObjectCreate_o3(ccbHandle, "SaClmNode",
> nodeName,
> +NULL), SA_AIS_OK);
> +
> +     rc = saImmOmCcbApply(ccbHandle);
> +     test_validate(rc, SA_AIS_OK);
> +
> +     saImmOmCcbFinalize(ccbHandle);
> +     saImmOmAdminOwnerFinalize(ownerHandle);
> +     saImmOmFinalize(immHandle);
> +
> +     // Remove new created node
> +     remove_node((char *)nodeName);
> +}
> +
> +void saClmLongRdn_02(void) {
> +     struct pollfd fds[1];
> +     int rc;
> +     char *nodeName = s_testNodeName;
> +     SaUint8T trackFlags = SA_TRACK_CHANGES;
> +
> +     if(isLongDNAllowed() != 1) {
> +             skipTest();
> +             return;
> +     }
> +
> +     // Test node does not exist. Skip the test
> +     if(testNodeExist() != 1) {
> +             skipTest();
> +             return;
> +     }
> +
> +     safassert(saClmInitialize_4(&clmHandle, &clmCallback4,
> &clmVersion_4), SA_AIS_OK);
> +     safassert(saClmSelectionObjectGet(clmHandle,
> &selectionObject),SA_AIS_OK);
> +     rc = saClmClusterTrack_4(clmHandle, trackFlags, NULL);
> +     if(rc != SA_AIS_OK) {
> +             safassert(saClmFinalize(clmHandle), SA_AIS_OK);
> +             // Failed at saClmClusterTrack_4
> +             test_validate(rc, SA_AIS_OK);
> +             return;
> +     }
> +
> +     fds[0].fd = (int) selectionObject;
> +     fds[0].events = POLLIN;
> +
> +     // Set failed error code
> +     s_clmTrackCallback_err = 0;
> +     // Set node name that will be compared in CLM callback
> +     s_clmTrackCallback_node = nodeName;
> +
> +     lock_node(nodeName);
> +
> +     while (1){
> +             rc = poll(fds, 1, 2000);
> +             assert(rc == 1);
> +             if (fds[0].revents & POLLIN)
> +                     break;
> +     }
> +
> +     safassert(saClmDispatch(clmHandle, SA_DISPATCH_ALL),
> SA_AIS_OK);
> +     safassert(saClmClusterTrackStop(clmHandle), SA_AIS_OK);
> +     safassert(saClmFinalize(clmHandle), SA_AIS_OK);
> +     test_validate(s_clmTrackCallback_err, SA_AIS_OK);
> +
> +     unlock_node(nodeName);
> +}
> +
> +void saClmLongRdn_03(void) {
> +     struct pollfd fds[1];
> +     int rc;
> +     char *nodeName = s_testNodeName;
> +     SaUint8T trackFlags = SA_TRACK_CHANGES;
> +
> +     if(isLongDNAllowed() != 1) {
> +             skipTest();
> +             return;
> +     }
> +
> +     // Test node does not exist. Skip the test
> +     if(testNodeExist() != 1) {
> +             skipTest();
> +             return;
> +     }
> +
> +     safassert(saClmInitialize(&clmHandle, &clmCallback, &clmVersion_1),
> SA_AIS_OK);
> +     safassert(saClmSelectionObjectGet(clmHandle,
> &selectionObject),SA_AIS_OK);
> +     rc = saClmClusterTrack(clmHandle, trackFlags, NULL);
> +     if(rc != SA_AIS_OK) {
> +             safassert(saClmFinalize(clmHandle), SA_AIS_OK);
> +             // Failed at saClmClusterTrack
> +             test_validate(rc, SA_AIS_OK);
> +             return;
> +     }
> +
> +     fds[0].fd = (int) selectionObject;
> +     fds[0].events = POLLIN;
> +
> +     // Set failed error code
> +     s_clmTrackCallback_err = 0;
> +     // Set node name that will be compared in CLM callback
> +     s_clmTrackCallback_node = nodeName;
> +
> +     lock_node(nodeName);
> +
> +     while (1){
> +             rc = poll(fds, 1, 2000);
> +             assert(rc == 1);
> +             if (fds[0].revents & POLLIN)
> +                     break;
> +     }
> +
> +     safassert(saClmDispatch(clmHandle, SA_DISPATCH_ALL),
> SA_AIS_OK);
> +     safassert(saClmClusterTrackStop(clmHandle), SA_AIS_OK);
> +     safassert(saClmFinalize(clmHandle), SA_AIS_OK);
> +     test_validate(s_clmTrackCallback_err, SA_AIS_OK);
> +
> +     unlock_node(nodeName);
> +}
> +
> +void saClmLongRdn_04(void) {
> +     SaImmHandleT immHandle;
> +     SaImmAdminOwnerHandleT ownerHandle;
> +     SaImmCcbHandleT ccbHandle;
> +     SaImmAdminOwnerNameT ownerName =
> (SaImmAdminOwnerNameT)__FUNCTION__;
> +     int rc;
> +     SaConstStringT parent = "safCluster=myClmCluster";
> +     SaConstStringT parentNames[] = { parent, NULL };
> +     SaVersionT version = { 'A', 2, 15 };
> +     // Length of nodeName == 256
> +     char *nodeName = "safNode=PL-
> 123456789012345678901234567890123456789012345678901234567890"
> +
>       "12345678901234567890123456789012345678901234567890123456789
> 0"
> +
>       "12345678901234567890123456789012345678901234567890123456789
> 0"
> +
>       "12345678901234567890123456789012345678901,safCluster=myClmCl
> uster";
> +
> +     if(isLongDNAllowed() != 1) {
> +             skipTest();
> +             return;
> +     }
> +
> +     // Create a test node
> +     safassert(saImmOmInitialize(&immHandle, NULL, &version),
> SA_AIS_OK);
> +     safassert(saImmOmAdminOwnerInitialize(immHandle, ownerName,
> SA_TRUE, &ownerHandle), SA_AIS_OK);
> +     safassert(saImmOmAdminOwnerSet_o3(ownerHandle,
> parentNames, SA_IMM_ONE), SA_AIS_OK);
> +     safassert(saImmOmCcbInitialize(ownerHandle, 0, &ccbHandle),
> +SA_AIS_OK);
> +
> +     // Create a node with long RDN
> +     // If long DN is enabled on client side, ccbObjectCreate will return
> SA_AIS_ERR_FAILED_OPERATION
> +     // Otherwise ccbObjectCreate will return
> SA_AIS_ERR_INVALID_PARAM
> +     rc = saImmOmCcbObjectCreate_o3(ccbHandle, "SaClmNode",
> nodeName, NULL);
> +     if(rc == SA_AIS_ERR_INVALID_PARAM) {
> +             test_validate(rc, SA_AIS_ERR_INVALID_PARAM);
> +     } else {
> +             test_validate(rc, SA_AIS_ERR_FAILED_OPERATION);
> +     }
> +
> +     saImmOmCcbFinalize(ccbHandle);
> +     saImmOmAdminOwnerFinalize(ownerHandle);
> +     saImmOmFinalize(immHandle);
> +}
> +
> +void saClmLongRdn_05(void) {
> +     int rc;
> +     char *nodeName = s_testNodeName;
> +     SaClmNodeIdT nodeId;
> +     SaClmClusterNodeT_4 clusterNode;
> +
> +     if(isLongDNAllowed() != 1) {
> +             skipTest();
> +             return;
> +     }
> +
> +     // Test node does not exist. Skip the test
> +     if(testNodeExist() != 1) {
> +             skipTest();
> +             return;
> +     }
> +
> +     nodeId = getClmNodeId(nodeName);
> +     assert(nodeId != 0);
> +
> +     safassert(saClmInitialize_4(&clmHandle, NULL, &clmVersion_4),
> +SA_AIS_OK);
> +
> +     rc = saClmClusterNodeGet_4(clmHandle, nodeId, 10000000000ll,
> +&clusterNode);
> +
> +     // SaNameT value cannot be longer than 255, so we don't need to
> use saAisNameBorrow
> +     if(strcmp((char *)clusterNode.nodeName.value, nodeName)) {
> +             printf(" (node name is not the same) ");
> +             rc = SA_AIS_ERR_FAILED_OPERATION;
> +     }
> +
> +     test_validate(rc, SA_AIS_OK);
> +
> +     saClmFinalize(clmHandle);
> +}
> +
> +void saClmLongRdn_06(void) {
> +     int rc;
> +     char *nodeName = s_testNodeName;
> +     SaClmNodeIdT nodeId;
> +     SaClmClusterNodeT clusterNode;
> +
> +     if(isLongDNAllowed() != 1) {
> +             skipTest();
> +             return;
> +     }
> +
> +     // Test node does not exist. Skip the test
> +     if(testNodeExist() != 1) {
> +             skipTest();
> +             return;
> +     }
> +
> +     nodeId = getClmNodeId(nodeName);
> +     assert(nodeId != 0);
> +
> +     safassert(saClmInitialize(&clmHandle, NULL, &clmVersion_1),
> +SA_AIS_OK);
> +
> +     rc = saClmClusterNodeGet(clmHandle, nodeId, 10000000000ll,
> +&clusterNode);
> +
> +     // SaNameT value cannot be longer than 255, so we don't need to
> use saAisNameBorrow
> +     if(strcmp((char *)clusterNode.nodeName.value, nodeName)) {
> +             printf(" (node name is not the same) ");
> +             rc = SA_AIS_ERR_FAILED_OPERATION;
> +     }
> +
> +     test_validate(rc, SA_AIS_OK);
> +
> +     saClmFinalize(clmHandle);
> +}
> +
> +__attribute__ ((constructor)) static void
> +saClmLongRdn_constructor(void) {
> +     test_suite_add(11, "CLM Long RDN (long DN support must be
> allowed)");
> +     test_case_add(11, saClmLongRdn_01, "SA_AIS_OK - Create CLM
> node with long RDN");
> +     test_case_add(11, saClmLongRdn_02, "SA_AIS_OK -
> saClmClusterTrack_4 and callback with long RDN");
> +     test_case_add(11, saClmLongRdn_03, "SA_AIS_OK -
> saClmClusterTrack and callback with long RDN");
> +     test_case_add(11, saClmLongRdn_04,
> "SA_AIS_ERR_INVALID_PARAM or SA_AIS_ERR_FAILED_OPERATION - Long
> DN is not supported");
> +     test_case_add(11, saClmLongRdn_05, "SA_AIS_OK -
> saClmClusterNodeGet_4 with long DN");
> +     test_case_add(11, saClmLongRdn_06, "SA_AIS_OK -
> saClmClusterNodeGet
> +with long DN"); }
> +

------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to