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
