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");
 }
 
 

------------------------------------------------------------------------------
Want fast and easy access to all the code in your enterprise? Index and
search up to 200,000 lines of code with a free copy of Black Duck
Code Sight - the same software that powers the world's largest code
search on Ohloh, the Black Duck Open Hub! Try it now.
http://p.sf.net/sfu/bds
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to