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
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel