tests/immsv/implementer/test_cleanup.c               |    1 +
 tests/immsv/implementer/test_saImmOiImplementerSet.c |  336 +++++++++++++++++++
 2 files changed, 337 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,332 @@ 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");
+}
+
+void saImmOiImplementerSet_10(void)
+{
+       SaImmHandleT immHandle;
+       SaImmOiHandleT immOiHandle;
+       SaImmAdminOwnerHandleT ownerHandle;
+       SaAisErrorT err;
+       SaImmOiCallbacksT_2 configImmOiCallbacks = { NULL , NULL , NULL , NULL 
, NULL , NULL , saImmOiImplementerSet_ModifyCallback , NULL };
+
+       const SaNameT immObj = { 
strlen("opensafImm=opensafImm,safApp=safImmService"),
+                       "opensafImm=opensafImm,safApp=safImmService" };
+       const SaNameT *immObjs[2] = { &immObj, NULL };
+       SaUint32T paramVal = 16;
+       SaImmAdminOperationParamsT_2 param = { "opensafImmNostdFlags", 
SA_IMM_ATTR_SAUINT32T, &paramVal };
+       const SaImmAdminOperationParamsT_2 *params[2] = { &param, NULL };
+       SaNameT obj1 = { 5, "obj=1" };
+
+
+       safassert(saImmOmInitialize(&immHandle, NULL, &immVersion), SA_AIS_OK);
+
+       // Disable OpenSAF 4.5 features
+       safassert(saImmOmAdminOwnerInitialize(immHandle, "safImmService", 
SA_FALSE, &ownerHandle), SA_AIS_OK);
+       safassert(saImmOmAdminOwnerSet(ownerHandle, immObjs, SA_IMM_ONE), 
SA_AIS_OK);
+       safassert(saImmOmAdminOperationInvoke_2(ownerHandle, &immObj, 1, 2, 
params, &err, 100), SA_AIS_OK);
+       safassert(saImmOmAdminOwnerFinalize(ownerHandle), SA_AIS_OK);
+
+       safassert(saImmOmAdminOwnerInitialize(immHandle, (const 
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(setenv("IMMA_OI_CALLBACK_TIMEOUT", "15", 1) == 0);
+
+       safassert(saImmOiInitialize_2(&immOiHandle, &configImmOiCallbacks, 
&immVersion), SA_AIS_OK);
+       test_validate(saImmOiImplementerSet(immOiHandle, (const 
SaImmOiImplementerNameT)__FUNCTION__), SA_AIS_ERR_NO_RESOURCES);
+       safassert(saImmOiFinalize(immOiHandle), SA_AIS_OK);
+
+       safassert(object_delete(ownerHandle, &obj1, 0), SA_AIS_OK);
+       config_class_delete(immHandle);
+       safassert(saImmOmAdminOwnerFinalize(ownerHandle), SA_AIS_OK);
+
+       // Enable OpenSAF 4.5 features
+       safassert(saImmOmAdminOwnerInitialize(immHandle, "safImmService", 
SA_FALSE, &ownerHandle), SA_AIS_OK);
+       safassert(saImmOmAdminOwnerSet(ownerHandle, immObjs, SA_IMM_ONE), 
SA_AIS_OK);
+       safassert(saImmOmAdminOperationInvoke_2(ownerHandle, &immObj, 1, 1, 
params, &err, 100), SA_AIS_OK);
+       safassert(saImmOmAdminOwnerFinalize(ownerHandle), SA_AIS_OK);
+
+       safassert(saImmOmFinalize(immHandle), SA_AIS_OK);
+}
+
+
 extern void saImmOiImplementerClear_01(void);
 extern void saImmOiImplementerClear_02(void);
 extern void saImmOiClassImplementerSet_01(void);
@@ -129,6 +459,12 @@ 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");
+    test_case_add(2, saImmOiImplementerSet_10, "saImmOiImplementerSet - 
SA_AIS_ERR_NO_RESOURCES - OpenSAF 4.5 features disabled");
 }
 
 

------------------------------------------------------------------------------
Learn Graph Databases - Download FREE O'Reilly Book
"Graph Databases" is the definitive new guide to graph databases and their 
applications. Written by three acclaimed leaders in the field, 
this first edition is now available. Download your free book today!
http://p.sf.net/sfu/NeoTech
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to