tests/immsv/implementer/test_cleanup.c | 1 + tests/immsv/implementer/test_saImmOiImplementerSet.c | 287 +++++++++++++++++++ 2 files changed, 288 insertions(+), 0 deletions(-)
Test cases cover OI callback timeout and timeout on searching for an object with RTA diff --git a/tests/immsv/implementer/test_cleanup.c b/tests/immsv/implementer/test_cleanup.c --- a/tests/immsv/implementer/test_cleanup.c +++ b/tests/immsv/implementer/test_cleanup.c @@ -31,6 +31,7 @@ static char *objects[] = { "123456789012345678901234567890123456789012345678901234567890123,123456789012345678901234567890123456789012345678901234567890123,123456789012345678901234567890123456789012345678901234567890123,rdn=root", "Test,rdn=root", "rdn=root", + "obj=1", NULL }; diff --git a/tests/immsv/implementer/test_saImmOiImplementerSet.c b/tests/immsv/implementer/test_saImmOiImplementerSet.c --- a/tests/immsv/implementer/test_saImmOiImplementerSet.c +++ b/tests/immsv/implementer/test_saImmOiImplementerSet.c @@ -16,6 +16,10 @@ */ #include "immtest.h" +#include <unistd.h> +#include <pthread.h> +#include <poll.h> +#include <stdlib.h> void saImmOiImplementerSet_01(void) { @@ -70,6 +74,284 @@ void saImmOiImplementerSet_05(void) safassert(saImmOiFinalize(immOiHandle), SA_AIS_OK); } +int saImmOiImplementerSet_callback_wait = 15; +SaImmClassNameT saImmOiImplementerSet_className = NULL; + +static SaAisErrorT saImmOiImplementerSet_ModifyCallback(SaImmOiHandleT immOiHandle, SaImmOiCcbIdT ccbId, + const SaNameT *objectName, const SaImmAttrModificationT_2 **attrMods) { + + sleep(saImmOiImplementerSet_callback_wait); + return SA_AIS_OK; +} + +static SaAisErrorT saImmOiImplementerSet_RtAttrUpdateCallbackT(SaImmOiHandleT immOiHandle, const SaNameT *objectName, const SaImmAttrNameT *attributeNames) { + SaUint32T attrVal = (SaUint32T)random(); + SaImmAttrValueT attrValues[1] = { &attrVal }; + SaImmAttrModificationT_2 attrMod = { SA_IMM_ATTR_VALUES_REPLACE, { "attr1", SA_IMM_ATTR_SAUINT32T, 1, attrValues } }; + const SaImmAttrModificationT_2 *attrMods[2] = { &attrMod, NULL }; + + sleep(saImmOiImplementerSet_callback_wait); + + saImmOiRtObjectUpdate_2(immOiHandle, objectName, attrMods); + + return SA_AIS_OK; +} + +void *saImmOiImplementerSet_modify_thread(void *arg) { + int *ready = (int *)arg; + SaImmOiHandleT immOiHandle; + SaSelectionObjectT selObj; + SaImmOiCallbacksT_2 configImmOiCallbacks = { NULL , NULL , NULL , NULL , NULL , NULL , saImmOiImplementerSet_ModifyCallback , NULL }; + SaImmOiCallbacksT_2 rtImmOiCallbacks = { NULL , NULL , NULL , NULL , NULL , NULL , NULL , saImmOiImplementerSet_RtAttrUpdateCallbackT }; + SaNameT rdn = { 5, "obj=1" }; + struct pollfd pfd; + int rc = 1; + int config = 1; + + assert(saImmOiImplementerSet_className != NULL); + + if(!strcmp(saImmOiImplementerSet_className, runtimeClassName)) { + SaImmAttrValueT attrVal[1] = { &rdn }; + SaImmAttrValuesT_2 rdnVal = { "rdn", SA_IMM_ATTR_SANAMET, 1, attrVal }; + const SaImmAttrValuesT_2 *attrValues[2] = { &rdnVal, NULL }; + + safassert(saImmOiInitialize_2(&immOiHandle, &rtImmOiCallbacks, &immVersion), SA_AIS_OK); + safassert(saImmOiSelectionObjectGet(immOiHandle, &selObj), SA_AIS_OK); + safassert(saImmOiImplementerSet(immOiHandle, (SaImmOiImplementerNameT)__FUNCTION__), SA_AIS_OK); + safassert(saImmOiRtObjectCreate_2(immOiHandle, runtimeClassName, NULL, attrValues), SA_AIS_OK); + config = 0; + } else { + safassert(saImmOiInitialize_2(&immOiHandle, &configImmOiCallbacks, &immVersion), SA_AIS_OK); + safassert(saImmOiSelectionObjectGet(immOiHandle, &selObj), SA_AIS_OK); + safassert(saImmOiImplementerSet(immOiHandle, (SaImmOiImplementerNameT)__FUNCTION__), SA_AIS_OK); + safassert(saImmOiClassImplementerSet(immOiHandle, saImmOiImplementerSet_className), SA_AIS_OK); + } + + *ready = 1; + + while((!rc || rc == 1) && *ready) { + pfd.fd = selObj; + pfd.events = POLLIN; + rc = poll(&pfd, 1, 100); + + safassert(saImmOiDispatch(immOiHandle, SA_DISPATCH_ONE), SA_AIS_OK); + } + + if(!config) { + safassert(saImmOiRtObjectDelete(immOiHandle, &rdn), SA_AIS_OK); + } else { + safassert(saImmOiClassImplementerRelease(immOiHandle, saImmOiImplementerSet_className), SA_AIS_OK); + } + + safassert(saImmOiImplementerClear(immOiHandle), SA_AIS_OK); + safassert(saImmOiFinalize(immOiHandle), SA_AIS_OK); + + *ready = 1; + + return NULL; +} + +void saImmOiImplementerSet_06(void) +{ + SaImmHandleT immHandle; + SaImmAdminOwnerHandleT ownerHandle; + SaImmCcbHandleT ccbHandle; + SaNameT obj1 = { 5, "obj=1" }; + pthread_t threadid; + int ready = 0; + SaUint32T val = 123; + SaImmAttrValueT attrVal[1] = { &val }; + SaImmAttrModificationT_2 attrMod = { SA_IMM_ATTR_VALUES_REPLACE, { "attr1" , SA_IMM_ATTR_SAUINT32T, 1, attrVal } }; + SaImmAttrModificationT_2 *attrMods[2] = { &attrMod, NULL }; + + saImmOiImplementerSet_callback_wait = 13; + saImmOiImplementerSet_className = configClassName; + + assert(setenv("IMMA_SYNCR_TIMEOUT", "2000", 1) == 0); + assert(setenv("IMMA_OI_CALLBACK_TIMEOUT", "15", 1) == 0); + + safassert(saImmOmInitialize(&immHandle, NULL, &immVersion), SA_AIS_OK); + safassert(saImmOmAdminOwnerInitialize(immHandle, (SaImmAdminOwnerNameT)__FUNCTION__, SA_TRUE, &ownerHandle), SA_AIS_OK); + config_class_create(immHandle); + safassert(object_create(immHandle, ownerHandle, configClassName, &obj1, NULL, NULL), SA_AIS_OK); + + assert(!pthread_create(&threadid, NULL, saImmOiImplementerSet_modify_thread, &ready)); + + while(!ready) { + usleep(100000); + } + + safassert(saImmOmCcbInitialize(ownerHandle, SA_IMM_CCB_REGISTERED_OI, &ccbHandle), SA_AIS_OK); + + SaAisErrorT rc = saImmOmCcbObjectModify_2(ccbHandle, &obj1, (const SaImmAttrModificationT_2 **)attrMods); + test_validate(rc, SA_AIS_OK); + + safassert(saImmOmCcbFinalize(ccbHandle), SA_AIS_OK); + + ready = 0; + + while(!ready) { + usleep(100000); + } + + safassert(object_delete(ownerHandle, &obj1, 0), SA_AIS_OK); + config_class_delete(immHandle); + + safassert(saImmOmAdminOwnerFinalize(ownerHandle), SA_AIS_OK); + safassert(saImmOmFinalize(immHandle), SA_AIS_OK); + + unsetenv("IMMA_SYNCR_TIMEOUT"); + unsetenv("IMMA_OI_CALLBACK_TIMEOUT"); +} + +void saImmOiImplementerSet_07(void) +{ + SaImmHandleT immHandle; + SaImmAdminOwnerHandleT ownerHandle; + SaImmCcbHandleT ccbHandle; + SaNameT obj1 = { 5, "obj=1" }; + pthread_t threadid; + int ready = 0; + SaUint32T val = 123; + SaImmAttrValueT attrVal[1] = { &val }; + SaImmAttrModificationT_2 attrMod = { SA_IMM_ATTR_VALUES_REPLACE, { "attr1" , SA_IMM_ATTR_SAUINT32T, 1, attrVal } }; + SaImmAttrModificationT_2 *attrMods[2] = { &attrMod, NULL }; + + saImmOiImplementerSet_callback_wait = 18; + saImmOiImplementerSet_className = configClassName; + + assert(setenv("IMMA_SYNCR_TIMEOUT", "2000", 1) == 0); + assert(setenv("IMMA_OI_CALLBACK_TIMEOUT", "15", 1) == 0); + + safassert(saImmOmInitialize(&immHandle, NULL, &immVersion), SA_AIS_OK); + safassert(saImmOmAdminOwnerInitialize(immHandle, (SaImmAdminOwnerNameT)__FUNCTION__, SA_TRUE, &ownerHandle), SA_AIS_OK); + config_class_create(immHandle); + safassert(object_create(immHandle, ownerHandle, configClassName, &obj1, NULL, NULL), SA_AIS_OK); + + assert(!pthread_create(&threadid, NULL, saImmOiImplementerSet_modify_thread, &ready)); + + while(!ready) { + usleep(100000); + } + + safassert(saImmOmCcbInitialize(ownerHandle, SA_IMM_CCB_REGISTERED_OI, &ccbHandle), SA_AIS_OK); + + SaAisErrorT rc = saImmOmCcbObjectModify_2(ccbHandle, &obj1, (const SaImmAttrModificationT_2 **)attrMods); + test_validate(rc, SA_AIS_ERR_TIMEOUT); + + safassert(saImmOmCcbFinalize(ccbHandle), SA_AIS_OK); + safassert(saImmOmAdminOwnerFinalize(ownerHandle), SA_AIS_OK); + safassert(saImmOmFinalize(immHandle), SA_AIS_OK); + + ready = 0; + + while(!ready) { + usleep(100000); + } + + const SaNameT *objectNames[2] = { &obj1, NULL }; + safassert(saImmOmInitialize(&immHandle, NULL, &immVersion), SA_AIS_OK); + safassert(saImmOmAdminOwnerInitialize(immHandle, (SaImmAdminOwnerNameT)__FUNCTION__, SA_TRUE, &ownerHandle), SA_AIS_OK); + safassert(saImmOmAdminOwnerSet(ownerHandle, objectNames, SA_IMM_ONE), SA_AIS_OK); + safassert(object_delete(ownerHandle, &obj1, 0), SA_AIS_OK); + config_class_delete(immHandle); + + safassert(saImmOmAdminOwnerFinalize(ownerHandle), SA_AIS_OK); + safassert(saImmOmFinalize(immHandle), SA_AIS_OK); + + unsetenv("IMMA_SYNCR_TIMEOUT"); + unsetenv("IMMA_OI_CALLBACK_TIMEOUT"); +} + +void saImmOiImplementerSet_08(void) +{ + SaImmHandleT immHandle; + SaNameT obj1 = { 5, "obj=1" }; + pthread_t threadid; + int ready = 0; + SaImmAccessorHandleT accessorHandle; + SaImmAttrValuesT_2 **attributes; + + saImmOiImplementerSet_callback_wait = 13; + saImmOiImplementerSet_className = runtimeClassName; + + assert(setenv("IMMA_SYNCR_TIMEOUT", "2000", 1) == 0); + assert(setenv("IMMA_OI_CALLBACK_TIMEOUT", "15", 1) == 0); + + safassert(saImmOmInitialize(&immHandle, NULL, &immVersion), SA_AIS_OK); + runtime_class_create(immHandle); + + assert(!pthread_create(&threadid, NULL, saImmOiImplementerSet_modify_thread, &ready)); + + while(!ready) { + usleep(100000); + } + + safassert(saImmOmAccessorInitialize(immHandle, &accessorHandle), SA_AIS_OK); + rc = saImmOmAccessorGet_2(accessorHandle, &obj1, NULL, &attributes); + test_validate(rc, SA_AIS_OK); + + safassert(saImmOmAccessorFinalize(accessorHandle), SA_AIS_OK); + + ready = 0; + + while(!ready) { + usleep(100000); + } + + runtime_class_delete(immHandle); + + safassert(saImmOmFinalize(immHandle), SA_AIS_OK); + + unsetenv("IMMA_SYNCR_TIMEOUT"); + unsetenv("IMMA_OI_CALLBACK_TIMEOUT"); +} + +void saImmOiImplementerSet_09(void) +{ + SaImmHandleT immHandle; + SaNameT obj1 = { 5, "obj=1" }; + pthread_t threadid; + int ready = 0; + SaImmAccessorHandleT accessorHandle; + SaImmAttrValuesT_2 **attributes; + + saImmOiImplementerSet_callback_wait = 18; + saImmOiImplementerSet_className = runtimeClassName; + + assert(setenv("IMMA_SYNCR_TIMEOUT", "2000", 1) == 0); + assert(setenv("IMMA_OI_CALLBACK_TIMEOUT", "15", 1) == 0); + + safassert(saImmOmInitialize(&immHandle, NULL, &immVersion), SA_AIS_OK); + runtime_class_create(immHandle); + + assert(!pthread_create(&threadid, NULL, saImmOiImplementerSet_modify_thread, &ready)); + + while(!ready) { + usleep(100000); + } + + safassert(saImmOmAccessorInitialize(immHandle, &accessorHandle), SA_AIS_OK); + rc = saImmOmAccessorGet_2(accessorHandle, &obj1, NULL, &attributes); + test_validate(rc, SA_AIS_ERR_TIMEOUT); + + safassert(saImmOmAccessorFinalize(accessorHandle), SA_AIS_OK); + + ready = 0; + + while(!ready) { + usleep(100000); + } + + runtime_class_delete(immHandle); + + safassert(saImmOmFinalize(immHandle), SA_AIS_OK); + + unsetenv("IMMA_SYNCR_TIMEOUT"); + unsetenv("IMMA_OI_CALLBACK_TIMEOUT"); +} + + extern void saImmOiImplementerClear_01(void); extern void saImmOiImplementerClear_02(void); extern void saImmOiClassImplementerSet_01(void); @@ -129,6 +411,11 @@ extern void saImmOiObjectImplementerRele test_case_add(2, saImmOiImplementerSet_05, "saImmOiImplementerSet - SA_AIS_ERR_INVALID_PARAM - Bad implementer name"); test_case_add(2, saImmOiObjectImplementerSet_07, "saImmOiObjectImplementerSet - SA_AIS_ERR_INVALID_PARAM - empty object name with wrong size"); + + test_case_add(2, saImmOiImplementerSet_06, "saImmOiImplementerSet - SA_AIS_OK - OI callback timeout"); + test_case_add(2, saImmOiImplementerSet_07, "saImmOiImplementerSet - SA_AIS_ERR_TIMEOUT - OI callback timeout"); + test_case_add(2, saImmOiImplementerSet_08, "saImmOiImplementerSet - SA_AIS_OK - RTA update callback timeout"); + test_case_add(2, saImmOiImplementerSet_09, "saImmOiImplementerSet - SA_AIS_ERR_TIMEOUT - RTA update callback timeout"); } ------------------------------------------------------------------------------ Is your legacy SCM system holding you back? Join Perforce May 7 to find out: • 3 signs your SCM is hindering your productivity • Requirements for releasing software faster • Expert tips and advice for migrating your SCM now http://p.sf.net/sfu/perforce _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel