Hi Praveen, The suite 35 requires IMM enables EXTENDED_NAME, so you need: - Enable SA_ENABLE_EXTENDED_NAMES=1 in immnd.conf - immcfg -m -a longDnsAllowed=1 opensafImm=opensafImm,safApp=safImmService
Thanks, Minh On 8/8/2014 7:49 PM, praveen malviya wrote: > > Hi Minh, > > Some how test cases of new suite 35 fails with > SA_AIS_ERR_FAILED_OPERATION. > Any prerequisite for executing them? > > -Praveen > > > On 08-Aug-14 12:28 PM, Minh Hon Chau wrote: >> tests/ntfsv/Makefile.am | 3 +- >> tests/ntfsv/test_ntf_imcn.c | 508 ++++++++++++++- >> tests/ntfsv/tet_longDnObject_notification.c | 972 >> ++++++++++++++++++++++++++++ >> tests/unit_test_fw/inc/util.h | 5 +- >> tests/unit_test_fw/src/Makefile.am | 1 + >> tests/unit_test_fw/src/util.c | 14 +- >> 6 files changed, 1483 insertions(+), 20 deletions(-) >> >> >> (1) Add testcase for AdditionInfo with extended name >> >> (2) Add testcase for create/modify/delete runtime&config object with >> extended name attribute >> >> diff --git a/tests/ntfsv/Makefile.am b/tests/ntfsv/Makefile.am >> --- a/tests/ntfsv/Makefile.am >> +++ b/tests/ntfsv/Makefile.am >> @@ -64,7 +64,8 @@ ntftest_SOURCES = \ >> tet_saNtfPtrValAllocate.c \ >> tet_saNtfArrayValGet.c \ >> tet_saNtfPtrValGet.c \ >> - test_ntfFilterVerification.c >> + test_ntfFilterVerification.c \ >> + tet_longDnObject_notification.c >> >> ntftest_LDADD = \ >> $(top_builddir)/tests/unit_test_fw/src/libutest.la >> diff --git a/tests/ntfsv/test_ntf_imcn.c b/tests/ntfsv/test_ntf_imcn.c >> --- a/tests/ntfsv/test_ntf_imcn.c >> +++ b/tests/ntfsv/test_ntf_imcn.c >> @@ -39,6 +39,12 @@ >> static SaNtfHandleT ntfHandle; >> static NotifData rec_notif_data; >> static SaImmOiHandleT immOiHnd = 0; >> +#define DEFAULT_EXT_NAME_LENGTH 300 >> +static char extended_name_string_01[DEFAULT_EXT_NAME_LENGTH]; >> +static char extended_name_string_02[DEFAULT_EXT_NAME_LENGTH]; >> + >> +extern void saAisNameLend(SaConstStringT value, SaNameT* name); >> +extern SaConstStringT saAisNameBorrow(const SaNameT* name); >> >> /** >> * Callback routine, called when subscribed notification arrives. >> @@ -976,6 +982,31 @@ static SaAisErrorT set_attr_buf(NotifDat >> return error; >> } >> >> +static SaAisErrorT set_attr_extended_name(NotifData* n_exp, >> SaUint16T idx, >> + SaNtfElementIdT attrId, SaNtfValueTypeT valType, void* >> attrValue) >> +{ >> + safassert(valType == SA_NTF_VALUE_LDAP_NAME, true); >> + SaAisErrorT error = SA_AIS_OK; >> + SaUint16T numAlloc = strlen(saAisNameBorrow((SaNameT*)attrValue)); >> + SaUint8T* temp = NULL; >> + SaUint8T* srcPtr = (SaUint8T*)saAisNameBorrow((SaNameT*)attrValue); >> + >> + if (n_exp->c_d_notif_ptr != NULL) { >> + error = saNtfPtrValAllocate(n_exp->nHandle, >> + numAlloc, >> + (void**) &temp, >> + &n_exp->c_d_notif_ptr->objectAttributes[idx].attributeValue); >> + if (error == SA_AIS_OK) { >> + memcpy(temp, srcPtr, numAlloc); >> + n_exp->c_d_notif_ptr->objectAttributes[idx].attributeId = attrId; >> + n_exp->c_d_notif_ptr->objectAttributes[idx].attributeType = valType; >> + } >> + } else { >> + error = SA_AIS_ERR_FAILED_OPERATION; >> + } >> + return error; >> +} >> + >> /** >> * Set an expected attribute value, type is string. >> */ >> @@ -1038,6 +1069,34 @@ static SaAisErrorT set_attr_change_buf(N >> return error; >> } >> >> +static SaAisErrorT set_attr_change_extended_name(NotifData* n_exp, >> SaUint16T idx, >> + SaNtfElementIdT attrId, SaNtfValueTypeT valType, const void* >> newValue) >> +{ >> + safassert(valType == SA_NTF_VALUE_LDAP_NAME, true); >> + SaAisErrorT error = SA_AIS_OK; >> + SaUint16T numAlloc = strlen(saAisNameBorrow((SaNameT*)newValue)); >> + SaUint8T* temp = NULL; >> + SaUint8T* srcPtr = (SaUint8T*)saAisNameBorrow((SaNameT*)newValue); >> + >> + if (n_exp->a_c_notif_ptr != NULL) { >> + n_exp->a_c_notif_ptr->changedAttributes[idx].oldAttributePresent = >> SA_FALSE; >> + error = saNtfPtrValAllocate(n_exp->nHandle, >> + numAlloc, >> + (void**) &temp, >> + &n_exp->a_c_notif_ptr->changedAttributes[idx].newAttributeValue); >> + if (error == SA_AIS_OK) { >> + memcpy(temp, srcPtr, numAlloc); >> + n_exp->a_c_notif_ptr->changedAttributes[idx].attributeId = attrId; >> + n_exp->a_c_notif_ptr->changedAttributes[idx].attributeType = valType; >> + } else { >> + error = SA_AIS_ERR_FAILED_OPERATION; >> + } >> + } else { >> + error = SA_AIS_ERR_FAILED_OPERATION; >> + } >> + return error; >> +} >> + >> /** >> * Set expected attribute change value, type is >> UINT32/INT32/UINT64/INT64/FLOAT/DOUBLE. >> */ >> @@ -4256,6 +4315,432 @@ void objectDeleteTest_3404(void) >> test_validate(error, SA_AIS_OK); >> } >> >> +/** >> + * Create a runtime test object with extended name attribute and >> verify correctness >> + * of generated notification. >> + */ >> +void objectCreateTest_3501(void) >> +{ >> + SaAisErrorT error = SA_AIS_OK; >> + safassert(init_ntf(), SA_AIS_OK); >> + safassert(subscribe_notifications(), SA_AIS_OK); >> + rec_notif_data.populated = SA_FALSE; >> + >> + /* create the runtime object */ >> + SaInt32T int32Var = INT32VAR1; >> + SaUint32T uint32Var = UINT32VAR1; >> + SaInt64T int64Var = INT64VAR1; >> + SaUint64T uint64Var = UINT64VAR1; >> + SaTimeT timeVar = TIMEVAR1; >> + SaNameT nameVar; >> + saAisNameLend((SaConstStringT)&extended_name_string_01, &nameVar); >> + SaFloatT floatVar = FLOATVAR1; >> + SaDoubleT doubleVar = DOUBLEVAR1; >> + SaStringT stringVar = STRINGVAR1; >> + SaAnyT anyVar = {.bufferSize = sizeof (BUF1), .bufferAddr = >> (SaUint8T*) BUF1}; >> + >> + /* >> + * Create the object in IMM. >> + */ >> + create_rt_test_object("OsafNtfCmTestRT", DNTESTRT, int32Var, >> uint32Var, int64Var, uint64Var, >> + &timeVar, &nameVar, floatVar, doubleVar, &stringVar, >> &anyVar); >> + >> + /* >> + * Wait for notification reception. >> + */ >> + int dwCnt = 0; >> + while (dwCnt++ < POLLWAIT && !rec_notif_data.populated) { >> + saNtfDispatch(ntfHandle, SA_DISPATCH_ALL); >> + if (!rec_notif_data.populated) usleep(100); >> + } >> + >> + if (rec_notif_data.populated) { >> + NotifData n_exp; >> + safassert(set_ntf(&n_exp, SA_NTF_OBJECT_CREATION, DNTESTRT, >> 12, 12), SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 0, 0, >> "SaImmAttrImplementerName"), SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 1, 1, "SaImmAttrClassName"), >> SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 2, 2, "testUint32"), SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 3, 3, "testInt32"), SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 4, 4, "testUint64"), SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 5, 5, "testInt64"), SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 6, 6, "testString"), SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 7, 7, "testFloat"), SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 8, 8, "testDouble"), SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 9, 9, "testName"), SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 10, 10, "testTime"), SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 11, 11, "testAny"), SA_AIS_OK); >> + safassert(set_attr_str(&n_exp, 0, 0, IMPLEMENTERNAME_RT), >> SA_AIS_OK); >> + safassert(set_attr_str(&n_exp, 1, 1, "OsafNtfCmTestRT"), >> SA_AIS_OK); >> + safassert(set_attr_scalar(&n_exp, 2, 2, SA_NTF_VALUE_UINT32, >> &uint32Var), SA_AIS_OK); >> + safassert(set_attr_scalar(&n_exp, 3, 3, SA_NTF_VALUE_INT32, >> &int32Var), SA_AIS_OK); >> + safassert(set_attr_scalar(&n_exp, 4, 4, SA_NTF_VALUE_UINT64, >> &uint64Var), SA_AIS_OK); >> + safassert(set_attr_scalar(&n_exp, 5, 5, SA_NTF_VALUE_INT64, >> &int64Var), SA_AIS_OK); >> + safassert(set_attr_str(&n_exp, 6, 6, stringVar), SA_AIS_OK); >> + safassert(set_attr_scalar(&n_exp, 7, 7, SA_NTF_VALUE_FLOAT, >> &floatVar), SA_AIS_OK); >> + safassert(set_attr_scalar(&n_exp, 8, 8, SA_NTF_VALUE_DOUBLE, >> &doubleVar), SA_AIS_OK); >> + safassert(set_attr_extended_name(&n_exp, 9, 9, >> SA_NTF_VALUE_LDAP_NAME, &nameVar), SA_AIS_OK); >> + safassert(set_attr_scalar(&n_exp, 10, 10, >> SA_NTF_VALUE_INT64, &timeVar), SA_AIS_OK); >> + safassert(set_attr_buf(&n_exp, 11, 11, SA_NTF_VALUE_BINARY, >> &anyVar), SA_AIS_OK); >> + >> + if (!compare_notifs(&n_exp, &rec_notif_data)) { >> + print_notif(&n_exp); >> + print_notif(&rec_notif_data); >> + error = SA_AIS_ERR_FAILED_OPERATION; >> + } >> + >> + safassert(saNtfNotificationFree(rec_notif_data.nHandle), SA_AIS_OK); >> + safassert(saNtfNotificationFree(n_exp.nHandle), SA_AIS_OK); >> + } else { >> + error = SA_AIS_ERR_FAILED_OPERATION; >> + } >> + safassert(unsub_notifications(), SA_AIS_OK); >> + safassert(saNtfFinalize(ntfHandle), SA_AIS_OK); >> + test_validate(error, SA_AIS_OK); >> +} >> + >> +/** >> + * Modify a runtime test object with extended name attribute and >> verify correctness >> + * of generated notification. >> + */ >> +void objectModifyTest_3502(void) >> +{ >> + SaAisErrorT error = SA_AIS_OK; >> + safassert(init_ntf(), SA_AIS_OK); >> + safassert(subscribe_notifications(), SA_AIS_OK); >> + rec_notif_data.populated = SA_FALSE; >> + >> + SaNameT var1; >> + saAisNameLend((SaConstStringT)&extended_name_string_02, &var1); >> + >> + SaAnyT var2 = {.bufferSize = sizeof (BUF2), .bufferAddr = >> (SaUint8T*) BUF2}; >> + void* v1[] = {&var1}; >> + void* v2[] = {&var2}; >> + TestAttributeValue att1 = { >> + .attrName = "testName", .attrType = SA_IMM_ATTR_SANAMET, >> .attrValues = v1 >> + }; >> + TestAttributeValue att2 = { >> + .attrName = "testAny", .attrType = SA_IMM_ATTR_SAANYT, >> .attrValues = v2 >> + }; >> + TestAttributeValue * attrs[] = {&att1, &att2, NULL}; >> + >> + /* >> + * Modify (REPLACE) the object in IMM. >> + */ >> + modify_rt_test_object(DNTESTRT, SA_IMM_ATTR_VALUES_REPLACE, attrs); >> + >> + /* >> + * Wait for notification reception. >> + */ >> + int dwCnt = 0; >> + while (dwCnt++ < POLLWAIT && !rec_notif_data.populated) { >> + saNtfDispatch(ntfHandle, SA_DISPATCH_ALL); >> + if (!rec_notif_data.populated) usleep(100); >> + } >> + >> + if (rec_notif_data.populated) { >> + NotifData n_exp; >> + safassert(set_ntf(&n_exp, SA_NTF_ATTRIBUTE_CHANGED, >> DNTESTRT, 4, 4), SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 0, 0, >> "SaImmAttrImplementerName"), SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 1, 1, "SaImmAttrClassName"), >> SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 2, 2, "testName"), SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 3, 3, "testAny"), SA_AIS_OK); >> + safassert(set_attr_change_str(&n_exp, 0, 0, >> IMPLEMENTERNAME_RT), SA_AIS_OK); >> + safassert(set_attr_change_str(&n_exp, 1, 1, >> "OsafNtfCmTestRT"), SA_AIS_OK); >> + safassert(set_attr_change_extended_name(&n_exp, 2, 2, >> SA_NTF_VALUE_LDAP_NAME, &var1), SA_AIS_OK); >> + safassert(set_attr_change_buf(&n_exp, 3, 3, >> SA_NTF_VALUE_BINARY, &var2), SA_AIS_OK); >> + >> + if (!compare_notifs(&n_exp, &rec_notif_data)) { >> + print_notif(&n_exp); >> + print_notif(&rec_notif_data); >> + error = SA_AIS_ERR_FAILED_OPERATION; >> + } >> + safassert(saNtfNotificationFree(rec_notif_data.nHandle), SA_AIS_OK); >> + safassert(saNtfNotificationFree(n_exp.nHandle), SA_AIS_OK); >> + } else { >> + error = SA_AIS_ERR_FAILED_OPERATION; >> + } >> + safassert(unsub_notifications(), SA_AIS_OK); >> + safassert(saNtfFinalize(ntfHandle), SA_AIS_OK); >> + test_validate(error, SA_AIS_OK); >> +} >> + >> + >> +/** >> + * Modify a runtime test object with extended name attribute and >> verify correctness >> + * of generated notification. >> + */ >> +void objectModifyTest_3503(void) >> +{ >> + SaAisErrorT error = SA_AIS_OK; >> + safassert(init_ntf(), SA_AIS_OK); >> + safassert(subscribe_notifications(), SA_AIS_OK); >> + rec_notif_data.populated = SA_FALSE; >> + >> + /* modify the runtime object */ >> + >> + SaNameT oldvar; >> + saAisNameLend((SaConstStringT)&extended_name_string_02, &oldvar); >> + SaNameT addvar; >> + saAisNameLend((SaConstStringT)&extended_name_string_01, &addvar); >> + void* v[] = {&addvar}; >> + TestAttributeValue att = { >> + .attrName = "testName", .attrType = SA_IMM_ATTR_SANAMET, >> .attrValues = v >> + }; >> + TestAttributeValue * attrs[] = {&att, NULL}; >> + >> + /* >> + * Modify (ADD) the object in IMM. >> + */ >> + modify_rt_test_object(DNTESTRT, SA_IMM_ATTR_VALUES_ADD, attrs); >> + >> + /* >> + * Wait for notification reception. >> + */ >> + int dwCnt = 0; >> + while (dwCnt++ < POLLWAIT && !rec_notif_data.populated) { >> + saNtfDispatch(ntfHandle, SA_DISPATCH_ALL); >> + if (!rec_notif_data.populated) usleep(100); >> + } >> + >> + if (rec_notif_data.populated) { >> + NotifData n_exp; >> + safassert(set_ntf(&n_exp, SA_NTF_ATTRIBUTE_CHANGED, >> DNTESTRT, 3, 4), SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 0, 0, >> "SaImmAttrImplementerName"), SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 1, 1, "SaImmAttrClassName"), >> SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 2, 2, "testName"), SA_AIS_OK); >> + safassert(set_attr_change_str(&n_exp, 0, 0, >> IMPLEMENTERNAME_RT), SA_AIS_OK); >> + safassert(set_attr_change_str(&n_exp, 1, 1, >> "OsafNtfCmTestRT"), SA_AIS_OK); >> + safassert(set_attr_change_extended_name(&n_exp, 2, 2, >> SA_NTF_VALUE_LDAP_NAME, &oldvar), SA_AIS_OK); >> + safassert(set_attr_change_extended_name(&n_exp, 3, 2, >> SA_NTF_VALUE_LDAP_NAME, &addvar), SA_AIS_OK); >> + >> + if (!compare_notifs(&n_exp, &rec_notif_data)) { >> + print_notif(&n_exp); >> + print_notif(&rec_notif_data); >> + error = SA_AIS_ERR_FAILED_OPERATION; >> + } >> + safassert(saNtfNotificationFree(rec_notif_data.nHandle), SA_AIS_OK); >> + safassert(saNtfNotificationFree(n_exp.nHandle), SA_AIS_OK); >> + } else { >> + error = SA_AIS_ERR_FAILED_OPERATION; >> + } >> + safassert(unsub_notifications(), SA_AIS_OK); >> + safassert(saNtfFinalize(ntfHandle), SA_AIS_OK); >> + test_validate(error, SA_AIS_OK); >> +} >> + >> + >> +/** >> + * Create a config object with extended name attribute and verify >> correctness of >> + * generated notification. >> + */ >> +void objectCreateTest_3505(void) >> +{ >> + char command[1024]; >> + SaAisErrorT error = SA_AIS_OK; >> + safassert(init_ntf(), SA_AIS_OK); >> + safassert(subscribe_notifications(), SA_AIS_OK); >> + rec_notif_data.populated = SA_FALSE; >> + >> + /* create an object */ >> + sprintf(command, "immcfg -t 20 -c OsafNtfCmTestCFG %s -a >> testNameCfg=%s -a testStringCfg=%s -a testAnyCfg=%s", >> + DNTESTCFG, extended_name_string_01, STRINGVAR1, BUF1); >> + assert(system(command) != -1); >> + >> + /* >> + * Wait for notification reception. >> + */ >> + int dwCnt = 0; >> + while (dwCnt++ < POLLWAIT && !rec_notif_data.populated) { >> + saNtfDispatch(ntfHandle, SA_DISPATCH_ALL); >> + if (!rec_notif_data.populated) usleep(100); >> + } >> + >> + if (rec_notif_data.populated) { >> + NotifData n_exp; >> + SaInt32T int32Var = INT32VAR1; >> + SaUint32T uint32Var = UINT32VAR1; >> + SaInt64T int64Var = INT64VAR1; >> + SaUint64T uint64Var = UINT64VAR1; >> + SaTimeT timeVar = TIMEVAR1; >> + SaNameT nameVar; >> + saAisNameLend((SaConstStringT)&extended_name_string_01, &nameVar); >> + SaFloatT floatVar = FLOATVAR1; >> + SaDoubleT doubleVar = DOUBLEVAR1; >> + SaStringT stringVar = STRINGVAR1; >> + SaAnyT anyVar = {.bufferSize = sizeof (BUF1), .bufferAddr = >> (SaUint8T*) BUF1}; >> + >> + safassert(set_ntf(&n_exp, SA_NTF_OBJECT_CREATION, DNTESTCFG, >> 14, 14), SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 0, 0, >> "SaImmAttrAdminOwnerName"), SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 1, 1, "SaImmAttrClassName"), >> SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 2, 2, "SaImmOiCcbIdT"), >> SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 3, 3, "ccbLast"), SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 4, 4, "testUint32Cfg"), >> SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 5, 5, "testInt32Cfg"), >> SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 6, 6, "testUint64Cfg"), >> SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 7, 7, "testInt64Cfg"), >> SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 8, 8, "testStringCfg"), >> SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 9, 9, "testFloatCfg"), >> SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 10, 10, "testDoubleCfg"), >> SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 11, 11, "testNameCfg"), >> SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 12, 12, "testTimeCfg"), >> SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 13, 13, "testAnyCfg"), >> SA_AIS_OK); >> + safassert(set_attr_str(&n_exp, 0, 0, "immcfg_xxx"), SA_AIS_OK); >> + safassert(set_attr_str(&n_exp, 1, 1, "OsafNtfCmTestCFG"), >> SA_AIS_OK); >> + SaUint64T ccidVar = 2; >> + safassert(set_attr_scalar(&n_exp, 2, 2, SA_NTF_VALUE_UINT64, >> &ccidVar), SA_AIS_OK); >> + SaUint32T ccbLast = 1; >> + safassert(set_attr_scalar(&n_exp, 3, 3, SA_NTF_VALUE_UINT32, >> &ccbLast), SA_AIS_OK); >> + safassert(set_attr_scalar(&n_exp, 4, 4, SA_NTF_VALUE_UINT32, >> &uint32Var), SA_AIS_OK); >> + safassert(set_attr_scalar(&n_exp, 5, 5, SA_NTF_VALUE_INT32, >> &int32Var), SA_AIS_OK); >> + safassert(set_attr_scalar(&n_exp, 6, 6, SA_NTF_VALUE_UINT64, >> &uint64Var), SA_AIS_OK); >> + safassert(set_attr_scalar(&n_exp, 7, 7, SA_NTF_VALUE_INT64, >> &int64Var), SA_AIS_OK); >> + safassert(set_attr_str(&n_exp, 8, 8, stringVar), SA_AIS_OK); >> + safassert(set_attr_scalar(&n_exp, 9, 9, SA_NTF_VALUE_FLOAT, >> &floatVar), SA_AIS_OK); >> + safassert(set_attr_scalar(&n_exp, 10, 10, >> SA_NTF_VALUE_DOUBLE, &doubleVar), SA_AIS_OK); >> + safassert(set_attr_extended_name(&n_exp, 11, 11, >> SA_NTF_VALUE_LDAP_NAME, &nameVar), SA_AIS_OK); >> + safassert(set_attr_scalar(&n_exp, 12, 12, >> SA_NTF_VALUE_INT64, &timeVar), SA_AIS_OK); >> + safassert(set_attr_buf(&n_exp, 13, 13, SA_NTF_VALUE_BINARY, >> &anyVar), SA_AIS_OK); >> + >> + if (!compare_notifs(&n_exp, &rec_notif_data)) { >> + print_notif(&n_exp); >> + print_notif(&rec_notif_data); >> + error = SA_AIS_ERR_FAILED_OPERATION; >> + } >> + safassert(saNtfNotificationFree(rec_notif_data.nHandle), SA_AIS_OK); >> + safassert(saNtfNotificationFree(n_exp.nHandle), SA_AIS_OK); >> + } else { >> + error = SA_AIS_ERR_FAILED_OPERATION; >> + } >> + safassert(unsub_notifications(), SA_AIS_OK); >> + safassert(saNtfFinalize(ntfHandle), SA_AIS_OK); >> + test_validate(error, SA_AIS_OK); >> +} >> + >> + >> +/** >> + * Modify a config object with extended name and verify correctness >> + * of generated notification. >> + */ >> +void objectModifyTest_3506(void) >> +{ >> + char command[1024]; >> + SaAisErrorT error = SA_AIS_OK; >> + safassert(init_ntf(), SA_AIS_OK); >> + safassert(subscribe_notifications(), SA_AIS_OK); >> + rec_notif_data.populated = SA_FALSE; >> + >> + SaNameT var1; >> + saAisNameLend((SaConstStringT)&extended_name_string_02, &var1); >> + >> + SaAnyT var2 = {.bufferSize = sizeof (BUF2), .bufferAddr = >> (SaUint8T*) BUF2}; >> + >> + /* modify an object */ >> + sprintf(command, "immcfg -t 20 -a testNameCfg=%s -a >> testAnyCfg=%s %s", >> + extended_name_string_02, BUF2, DNTESTCFG); >> + assert(system(command) != -1); >> + >> + /* >> + * Wait for notification reception. >> + */ >> + int dwCnt = 0; >> + while (dwCnt++ < POLLWAIT && !rec_notif_data.populated) { >> + saNtfDispatch(ntfHandle, SA_DISPATCH_ALL); >> + if (!rec_notif_data.populated) usleep(100); >> + } >> + >> + if (rec_notif_data.populated) { >> + NotifData n_exp; >> + safassert(set_ntf(&n_exp, SA_NTF_ATTRIBUTE_CHANGED, >> DNTESTCFG, 6, 6), SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 0, 0, >> "SaImmAttrAdminOwnerName"), SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 1, 1, "SaImmAttrClassName"), >> SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 2, 2, "SaImmOiCcbIdT"), >> SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 3, 3, "ccbLast"), SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 4, 4, "testNameCfg"), >> SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 5, 5, "testAnyCfg"), SA_AIS_OK); >> + safassert(set_attr_change_str(&n_exp, 0, 0, "immcfg_xxx"), >> SA_AIS_OK); >> + safassert(set_attr_change_str(&n_exp, 1, 1, >> "OsafNtfCmTestCFG"), SA_AIS_OK); >> + SaUint64T ccidVar = 3; >> + safassert(set_attr_change_scalar(&n_exp, 2, 2, >> SA_NTF_VALUE_UINT64, &ccidVar), SA_AIS_OK); >> + SaUint32T ccbLast = 1; >> + safassert(set_attr_change_scalar(&n_exp, 3, 3, >> SA_NTF_VALUE_UINT32, &ccbLast), SA_AIS_OK); >> + safassert(set_attr_change_extended_name(&n_exp, 4, 4, >> SA_NTF_VALUE_LDAP_NAME, &var1), SA_AIS_OK); >> + safassert(set_attr_change_buf(&n_exp, 5, 5, >> SA_NTF_VALUE_BINARY, &var2), SA_AIS_OK); >> + >> + if (!compare_notifs(&n_exp, &rec_notif_data)) { >> + print_notif(&n_exp); >> + print_notif(&rec_notif_data); >> + error = SA_AIS_ERR_FAILED_OPERATION; >> + } >> + safassert(saNtfNotificationFree(rec_notif_data.nHandle), SA_AIS_OK); >> + safassert(saNtfNotificationFree(n_exp.nHandle), SA_AIS_OK); >> + } else { >> + error = SA_AIS_ERR_FAILED_OPERATION; >> + } >> + safassert(unsub_notifications(), SA_AIS_OK); >> + safassert(saNtfFinalize(ntfHandle), SA_AIS_OK); >> + test_validate(error, SA_AIS_OK); >> +} >> + >> +/** >> + * Modify a config object with extended name attribute and verify >> correctness >> + * of generated notification. >> + */ >> +void objectModifyTest_3507(void) >> +{ >> + char command[1024]; >> + SaAisErrorT error = SA_AIS_OK; >> + safassert(init_ntf(), SA_AIS_OK); >> + safassert(subscribe_notifications(), SA_AIS_OK); >> + rec_notif_data.populated = SA_FALSE; >> + >> + /* modify an object */ >> + SaNameT oldvar; >> + saAisNameLend((SaConstStringT)&extended_name_string_02, &oldvar); >> + SaNameT addvar; >> + saAisNameLend((SaConstStringT)&extended_name_string_01, &addvar); >> + sprintf(command, "immcfg -a testNameCfg+=%s %s", >> extended_name_string_01, DNTESTCFG); >> + assert(system(command) != -1); >> + >> + /* >> + * Wait for notification reception. >> + */ >> + int dwCnt = 0; >> + while (dwCnt++ < POLLWAIT && !rec_notif_data.populated) { >> + saNtfDispatch(ntfHandle, SA_DISPATCH_ALL); >> + if (!rec_notif_data.populated) usleep(100); >> + } >> + >> + if (rec_notif_data.populated) { >> + NotifData n_exp; >> + safassert(set_ntf(&n_exp, SA_NTF_ATTRIBUTE_CHANGED, >> DNTESTCFG, 5, 6), SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 0, 0, >> "SaImmAttrAdminOwnerName"), SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 1, 1, "SaImmAttrClassName"), >> SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 2, 2, "SaImmOiCcbIdT"), >> SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 3, 3, "ccbLast"), SA_AIS_OK); >> + safassert(set_add_info(&n_exp, 4, 4, "testNameCfg"), >> SA_AIS_OK); >> + safassert(set_attr_change_str(&n_exp, 0, 0, "immcfg_xxx"), >> SA_AIS_OK); >> + safassert(set_attr_change_str(&n_exp, 1, 1, >> "OsafNtfCmTestCFG"), SA_AIS_OK); >> + SaUint64T ccidVar = 3; >> + safassert(set_attr_change_scalar(&n_exp, 2, 2, >> SA_NTF_VALUE_UINT64, &ccidVar), SA_AIS_OK); >> + SaUint32T ccbLast = 1; >> + safassert(set_attr_change_scalar(&n_exp, 3, 3, >> SA_NTF_VALUE_UINT32, &ccbLast), SA_AIS_OK); >> + safassert(set_attr_change_extended_name(&n_exp, 4, 4, >> SA_NTF_VALUE_LDAP_NAME, &oldvar), SA_AIS_OK); >> + safassert(set_attr_change_extended_name(&n_exp, 5, 4, >> SA_NTF_VALUE_LDAP_NAME, &addvar), SA_AIS_OK); >> + >> + if (!compare_notifs(&n_exp, &rec_notif_data)) { >> + print_notif(&n_exp); >> + print_notif(&rec_notif_data); >> + error = SA_AIS_ERR_FAILED_OPERATION; >> + } >> + safassert(saNtfNotificationFree(rec_notif_data.nHandle), SA_AIS_OK); >> + safassert(saNtfNotificationFree(n_exp.nHandle), SA_AIS_OK); >> + } else { >> + error = SA_AIS_ERR_FAILED_OPERATION; >> + } >> + safassert(unsub_notifications(), SA_AIS_OK); >> + safassert(saNtfFinalize(ntfHandle), SA_AIS_OK); >> + test_validate(error, SA_AIS_OK); >> +} >> >> __attribute__((constructor)) static void ntf_imcn_constructor(void) >> { >> @@ -4290,9 +4775,15 @@ void objectDeleteTest_3404(void) >> rc = system("immcfg -f //tmp//ntfsv_test_classes.xml"); >> } >> if (rc != 0) { >> - printf("ntfsv_test_classes.xml file not installed (see >> README)"); >> - return; >> - } >> + printf("ntfsv_test_classes.xml file not installed (see >> README)"); >> + return; >> + } >> + memset(&extended_name_string_01, 'C', DEFAULT_EXT_NAME_LENGTH - 1); >> + extended_name_string_01[DEFAULT_EXT_NAME_LENGTH - 1] = '\0'; >> + >> + memset(&extended_name_string_02, 'D', DEFAULT_EXT_NAME_LENGTH - 1); >> + extended_name_string_02[DEFAULT_EXT_NAME_LENGTH - 1] = '\0'; >> + >> test_suite_add(32, "CM notifications test"); >> test_case_add(32, objectCreateTest_01, "CREATE, runtime >> (OsafNtfCmTestRT) object"); >> test_case_add(32, objectModifyTest_02, "runtime, attr ch, >> REPLACE (UINT32, FLOAT)"); >> @@ -4334,10 +4825,21 @@ void objectDeleteTest_3404(void) >> test_case_add(32, objectMultiCcbTest_38, "config, multiple op >> in ccb, 2 REPLACE"); >> test_case_add(32, objectMultiCcbTest_39, "config, multiple op >> in ccb, ADD, REPLACE, DELETE"); >> test_case_add(32, objectDeleteTest_40, "DELETE, config >> (OsafNtfCmTestCFG) object"); >> + >> test_suite_add(34, "CM notifications test, persistent runtime"); >> test_case_add(34, objectCreateTest_3401, "CREATE, runtime >> (OsafNtfCmTestRT1) object"); >> test_case_add(34, objectModifyTest_3402, "runtime, attr ch, >> REPLACE (UINT32, FLOAT)"); >> test_case_add(34, objectModifyTest_3403, "runtime, attr ch, ADD >> (INT32)"); >> test_case_add(34, objectDeleteTest_3404, "DELETE, runtime >> (OsafNtfCmTestRT1) object"); >> + >> + test_suite_add(35, "CM notification test for extended name >> attribute"); >> + test_case_add(35, objectCreateTest_3501, "CREATE, runtime >> (OsafNtfCmTestRT) object, extended name attribute"); >> + test_case_add(35, objectModifyTest_3502, "runtime, attr ch, >> REPLACE (EXTENDED NAME, ANY)"); >> + test_case_add(35, objectModifyTest_3503, "runtime, attr ch, ADD >> (EXTENDED NAME)"); >> + test_case_add(35, objectDeleteTest_19, "DELETE, runtime >> (OsafNtfCmTestRT) object"); >> + test_case_add(35, objectCreateTest_3505, "CREATE, config >> (OsafNtfCmTestCFG) object, extended name attribute"); >> + test_case_add(35, objectModifyTest_3506, "config, attr ch, >> REPLACE (EXTENDED NAME, ANY)"); >> + test_case_add(35, objectModifyTest_3507, "config, attr ch, ADD >> (EXTENDED NAME)"); >> + test_case_add(35, objectDeleteTest_40, "DELETE, config >> (OsafNtfCmTestCFG) object"); >> } >> >> diff --git a/tests/ntfsv/tet_longDnObject_notification.c >> b/tests/ntfsv/tet_longDnObject_notification.c >> new file mode 100644 >> --- /dev/null >> +++ b/tests/ntfsv/tet_longDnObject_notification.c >> @@ -0,0 +1,972 @@ >> +/* -*- OpenSAF -*- >> + * >> + * (C) Copyright 2009 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 <utest.h> >> +#include <util.h> >> +#include "tet_ntf.h" >> +#include "tet_ntf_common.h" >> +//#include "util.h" >> +#define NOTIFYING_OBJECT_TEST "AVND" >> +#define NTF_REST_MAX_IDS 30 >> + >> +#define DEFAULT_EXT_NAME_LENGTH 300 >> +#define DEFAULT_UNEXT_NAME_STRING "This is unextended SaNameT string >> (<256)" >> +struct not_idsT { >> + int length; >> + SaNtfIdentifierT ids[NTF_REST_MAX_IDS]; >> +}; >> + >> +static struct not_idsT received_ids = {0,}; >> +static struct not_idsT ok_ids = {0,}; >> + >> +static char default_ext_notification_object[DEFAULT_EXT_NAME_LENGTH]; >> +static char default_ext_notifying_object[DEFAULT_EXT_NAME_LENGTH]; >> +static char test_longdn_object_1[DEFAULT_EXT_NAME_LENGTH]; >> +static char test_longdn_object_2[DEFAULT_EXT_NAME_LENGTH]; >> +static char test_longdn_object_3[DEFAULT_EXT_NAME_LENGTH]; >> + >> +static SaNtfNotificationTypeFilterHandlesT myNotificationFilterHandles; >> + >> +/* Used to keep track of which ntf we got */ >> +static SaNtfNotificationTypeFilterHandlesT ntfRecieved; >> + >> +static int errors; >> +static SaNtfSubscriptionIdT subscriptionId; >> +static SaNtfAlarmNotificationT myAlarmNotification; >> +static SaNtfObjectCreateDeleteNotificationT myObjCrDelNotification; >> +static SaNtfAttributeChangeNotificationT myAttrChangeNotification; >> +static SaNtfStateChangeNotificationT myStateChangeNotification; >> +static SaNtfSecurityAlarmNotificationT mySecAlarmNotification; >> + >> +extern void saAisNameLend(SaConstStringT value, SaNameT* name); >> +extern SaConstStringT saAisNameBorrow(const SaNameT* name); >> + >> +/** >> + * Init default long dn objects >> + */ >> +static void init_ext_object() >> +{ >> + safassert(setenv("SA_ENABLE_EXTENDED_NAMES", "1", 1), 0); >> + >> + memset(&default_ext_notification_object, 'A', >> DEFAULT_EXT_NAME_LENGTH - 1); >> + default_ext_notification_object[DEFAULT_EXT_NAME_LENGTH - 1] = >> '\0'; >> + >> + memset(&default_ext_notifying_object, 'B', >> DEFAULT_EXT_NAME_LENGTH - 1); >> + default_ext_notifying_object[DEFAULT_EXT_NAME_LENGTH - 1] = '\0'; >> + >> + memset(&test_longdn_object_1, 'C', DEFAULT_EXT_NAME_LENGTH - 1); >> + test_longdn_object_1[DEFAULT_EXT_NAME_LENGTH - 1] = '\0'; >> + >> + memset(&test_longdn_object_2, 'D', DEFAULT_EXT_NAME_LENGTH - 1); >> + test_longdn_object_2[DEFAULT_EXT_NAME_LENGTH - 1] = '\0'; >> + >> + memset(&test_longdn_object_3, 'E', DEFAULT_EXT_NAME_LENGTH - 1); >> + test_longdn_object_3[DEFAULT_EXT_NAME_LENGTH - 1] = '\0'; >> + >> +} >> + >> +/** >> + * Store all recieved notificationIds >> + */ >> +static void ntf_id_store(SaNtfIdentifierT n_id) >> +{ >> + assert(NTF_REST_MAX_IDS > received_ids.length); >> + received_ids.ids[received_ids.length++] = n_id; >> +} >> + >> +/** >> + * Post process all recived notificationIds towards the ids that >> + * are expected to be received. >> + */ >> +static SaAisErrorT check_errors() >> +{ >> + int i, j, found; >> + SaAisErrorT rc = SA_AIS_OK; >> + >> + for (i = 0; i< received_ids.length; i++) { >> + found=0; >> + for (j= 0; j< ok_ids.length; j++) { >> + if (received_ids.ids[i] == ok_ids.ids[j]){ >> + found = 1; >> + break; >> + } >> + } >> + if(!found) >> + errors++; >> + } >> + if(errors) >> + { >> + rc = SA_AIS_ERR_FAILED_OPERATION; >> + printf("num of failed notifications: %d\n", errors); >> + } >> + return rc; >> +} >> + >> +static void resetCounters() >> +{ >> + errors = 0; >> + received_ids.length = 0; >> + ok_ids.length = 0; >> + ntfRecieved.alarmFilterHandle = 0; >> + ntfRecieved.attributeChangeFilterHandle = 0; >> + ntfRecieved.objectCreateDeleteFilterHandle = 0; >> + ntfRecieved.securityAlarmFilterHandle = 0; >> + ntfRecieved.stateChangeFilterHandle = 0; >> +} >> + >> +/** >> + * Creates an ObjectCreateDeleteNotification with default values. >> + * >> + * @param ntfHandle >> + * @param myObjCreDelNotification >> + */ >> +void extCreateObjectCreateDeleteNotification(SaNtfHandleT ntfHandle, >> + SaNtfObjectCreateDeleteNotificationT *myObjCrDelNotification) >> +{ >> + SaNtfNotificationHeaderT *head; >> + >> + createObjectCreateDeleteNotification(ntfHandle, >> myObjCrDelNotification); >> + head = &myObjCrDelNotification->notificationHeader; >> + /* Overwrite with long dn object */ >> + saAisNameLend((SaConstStringT)&default_ext_notification_object, >> head->notificationObject); >> + saAisNameLend((SaConstStringT)&default_ext_notifying_object, >> head->notifyingObject); >> +} >> + >> +/** >> + * Creates an AttributeChangeNotification with default values. >> + * >> + * @param ntfhandle >> + * @param myAttrChangeNotification >> + */ >> +void extCreateAttributeChangeNotification(SaNtfHandleT ntfHandle, >> + SaNtfAttributeChangeNotificationT *myAttrChangeNotification) >> +{ >> + SaNtfNotificationHeaderT *head; >> + >> + createAttributeChangeNotification(ntfHandle, >> myAttrChangeNotification); >> + head = &myAttrChangeNotification->notificationHeader; >> + /* Overwrite with long dn object */ >> + saAisNameLend((SaConstStringT)&default_ext_notification_object, >> head->notificationObject); >> + saAisNameLend((SaConstStringT)&default_ext_notifying_object, >> head->notifyingObject); >> +} >> + >> +/** >> + * Create a StateChangeNotification with default values. >> + * >> + * @param ntfHandle >> + * @param myStateChangeNotification >> + */ >> +void extCreateStateChangeNotification(SaNtfHandleT ntfHandle, >> + SaNtfStateChangeNotificationT *myStateChangeNotification) >> +{ >> + SaNtfNotificationHeaderT *head; >> + >> + createStateChangeNotification(ntfHandle, >> myStateChangeNotification); >> + head = &myStateChangeNotification->notificationHeader; >> + /* Overwrite with long dn object */ >> + saAisNameLend((SaConstStringT)&default_ext_notification_object, >> head->notificationObject); >> + saAisNameLend((SaConstStringT)&default_ext_notifying_object, >> head->notifyingObject); >> +} >> + >> +/** >> + * Create a SecurityAlarmNotification with default values. >> + * >> + * @param ntfHandle >> + * @param mySecAlarmNotification >> + */ >> +void extCreateSecurityAlarmNotification(SaNtfHandleT ntfHandle, >> + SaNtfSecurityAlarmNotificationT *mySecAlarmNotification) >> +{ >> + SaNtfNotificationHeaderT *head; >> + >> + createSecurityAlarmNotification(ntfHandle, mySecAlarmNotification); >> + head = &mySecAlarmNotification->notificationHeader; >> + /* Overwrite with long dn object */ >> + saAisNameLend((SaConstStringT)&default_ext_notification_object, >> head->notificationObject); >> + saAisNameLend((SaConstStringT)&default_ext_notifying_object, >> head->notifyingObject); >> +} >> + >> +/** >> + * Verify the contents in the notification. >> + * We use the myNotificationFilterHandles to know which >> notifications to expect. >> + */ >> +static void saNtfNotificationCallbackT( >> + SaNtfSubscriptionIdT subscriptionId, >> + const SaNtfNotificationsT *notification) >> +{ >> + SaNtfNotificationHandleT notificationHandle = 0; >> + switch(notification->notificationType) >> + { >> + case SA_NTF_TYPE_OBJECT_CREATE_DELETE: >> + notificationHandle = >> notification->notification.objectCreateDeleteNotification.notificationHandle; >> + ntfRecieved.objectCreateDeleteFilterHandle += 1; >> + if(myNotificationFilterHandles.objectCreateDeleteFilterHandle == 0) >> + errors +=1; >> + else >> + >> ntf_id_store(*notification->notification.objectCreateDeleteNotification.notificationHeader.notificationId); >> + break; >> + >> + case SA_NTF_TYPE_ATTRIBUTE_CHANGE: >> + notificationHandle = >> notification->notification.attributeChangeNotification.notificationHandle; >> + ntfRecieved.attributeChangeFilterHandle += 1; >> + if(myNotificationFilterHandles.attributeChangeFilterHandle == 0) >> + errors += 1; >> + else >> + >> ntf_id_store(*notification->notification.attributeChangeNotification.notificationHeader.notificationId); >> + break; >> + >> + case SA_NTF_TYPE_STATE_CHANGE: >> + notificationHandle = >> notification->notification.stateChangeNotification.notificationHandle; >> + ntfRecieved.stateChangeFilterHandle += 1; >> + if(myNotificationFilterHandles.stateChangeFilterHandle == 0) >> + errors += 1; >> + else >> + >> ntf_id_store(*notification->notification.stateChangeNotification.notificationHeader.notificationId); >> + break; >> + >> + case SA_NTF_TYPE_ALARM: >> + notificationHandle = >> notification->notification.alarmNotification.notificationHandle; >> + ntfRecieved.alarmFilterHandle += 1; >> + if(myNotificationFilterHandles.alarmFilterHandle == 0) { >> + printf("alarmFilterHandle == 0\n"); >> + errors +=1; >> + } else >> + >> ntf_id_store(*notification->notification.alarmNotification.notificationHeader.notificationId); >> + break; >> + >> + case SA_NTF_TYPE_SECURITY_ALARM: >> + notificationHandle = >> notification->notification.securityAlarmNotification.notificationHandle; >> + ntfRecieved.securityAlarmFilterHandle += 1; >> + if(myNotificationFilterHandles.securityAlarmFilterHandle == 0) >> + errors += 1; >> + else >> + >> ntf_id_store(*notification->notification.securityAlarmNotification.notificationHeader.notificationId); >> + break; >> + >> + default: >> + errors +=1; >> + assert(0); >> + break; >> + } >> + last_not_id = get_ntf_id(notification); >> + if (notificationHandle != 0) >> + safassert(saNtfNotificationFree(notificationHandle), >> SA_AIS_OK); >> +} >> + >> + >> +static SaNtfCallbacksT ntfCbTest = { >> + saNtfNotificationCallbackT, >> + NULL >> +}; >> + >> +/** >> + * Fill the filter header with long dn objects >> + */ >> +void extFillFilterHeader(SaNtfNotificationFilterHeaderT *head) >> +{ >> + fillFilterHeader(head); >> + /* Overwrite the objects with long dn */ >> + saAisNameLend((SaConstStringT)&default_ext_notification_object, >> &head->notificationObjects[0]); >> + saAisNameLend((SaConstStringT)&default_ext_notifying_object, >> &head->notifyingObjects[0]); >> +} >> + >> +/** >> + * Fill the header with long dn objects >> + */ >> +void extFillHeader(SaNtfNotificationHeaderT *head) >> +{ >> + fillHeader(head); >> + /* Overwrite the objects with long dn */ >> + saAisNameLend((SaConstStringT)&default_ext_notification_object, >> head->notificationObject); >> + saAisNameLend((SaConstStringT)&default_ext_notifying_object, >> head->notifyingObject); >> +} >> + >> + >> +/** >> + * Fill header with extended SaNameT in additionalInfo >> + */ >> + void extFillHeaderAddInfo(SaNtfNotificationHeaderT *head, >> SaNtfNotificationHandleT notHandle) >> + { >> + int i; >> + SaStringT dest_ptr; >> + SaNameT name1, name2, name3, name4, name5; >> + *(head->eventType) = SA_NTF_ALARM_COMMUNICATION; >> + *(head->eventTime) = SA_TIME_UNKNOWN; >> + >> + saAisNameLend((SaConstStringT)&default_ext_notification_object, >> head->notificationObject); >> + saAisNameLend((SaConstStringT)&default_ext_notifying_object, >> head->notifyingObject); >> + >> + head->notificationClassId->vendorId = ERICSSON_VENDOR_ID; >> + head->notificationClassId->majorId = 92; >> + head->notificationClassId->minorId = 12; >> + >> + /* set additional text */ >> + (void)strncpy(head->additionalText, >> + DEFAULT_ADDITIONAL_TEXT, >> + (SaUint16T)(strlen(DEFAULT_ADDITIONAL_TEXT) + 1)); >> + >> + for (i = 0; i < head->numCorrelatedNotifications; i++) >> + head->correlatedNotifications[i] = (SaNtfIdentifierT) (i + >> 400); >> + >> + // Fill first additionalInfo as extended SaNameT including NULL >> character >> + head->additionalInfo[0].infoType = SA_NTF_VALUE_LDAP_NAME; >> + head->additionalInfo[0].infoId = 1; >> + saAisNameLend((SaConstStringT)&test_longdn_object_1, &name1); >> + >> + safassert(saNtfPtrValAllocate(notHandle, >> + strlen(saAisNameBorrow(&name1)) + 3, >> + (void**)&dest_ptr, >> + &(head->additionalInfo[0].infoValue)), SA_AIS_OK); >> + >> + saAisNameLend(saAisNameBorrow(&name1), (SaNameT*) dest_ptr); >> + >> + // Fill sencond additionalInfo as extended SaNameT excluding >> NULL character >> + head->additionalInfo[1].infoType = SA_NTF_VALUE_LDAP_NAME; >> + head->additionalInfo[1].infoId = 1; >> + saAisNameLend((SaConstStringT)&test_longdn_object_2, &name2); >> + >> + safassert(saNtfPtrValAllocate(notHandle, >> + strlen(saAisNameBorrow(&name2)) + 2, >> + (void**)&dest_ptr, >> + &(head->additionalInfo[1].infoValue)), SA_AIS_OK); >> + >> + saAisNameLend(saAisNameBorrow(&name2), (SaNameT*) dest_ptr); >> + >> + >> + //Fill third additionalInfo as extended SaNameT as legacy code >> -> object is truncated >> + head->additionalInfo[2].infoType = SA_NTF_VALUE_LDAP_NAME; >> + head->additionalInfo[2].infoId = 1; >> + saAisNameLend((SaConstStringT)&test_longdn_object_3, &name3); >> + safassert(saNtfPtrValAllocate(notHandle, >> + sizeof(name3) + 1, >> + (void**)&dest_ptr, >> + &(head->additionalInfo[2].infoValue)), SA_AIS_OK); >> + >> + memcpy(dest_ptr, &name3, sizeof(name3)); >> + >> + // Fill fourth additionalInfo as unextended SaNameT as legacy code >> + head->additionalInfo[3].infoType = SA_NTF_VALUE_LDAP_NAME; >> + head->additionalInfo[3].infoId = 1; >> + saAisNameLend(DEFAULT_UNEXT_NAME_STRING, &name4); >> + >> + safassert(saNtfPtrValAllocate(notHandle, >> + sizeof(name4) + 1, >> + (void**)&dest_ptr, >> + &(head->additionalInfo[3].infoValue)), SA_AIS_OK); >> + >> + memcpy(dest_ptr, &name4, sizeof(name4)); >> + >> + //Fill the fifth additionalInfo as unextended SaNameT as modern >> code >> + head->additionalInfo[4].infoType = SA_NTF_VALUE_LDAP_NAME; >> + head->additionalInfo[4].infoId = 1; >> + saAisNameLend(DEFAULT_UNEXT_NAME_STRING, &name5); >> + >> + safassert(saNtfPtrValAllocate(notHandle, >> + strlen(saAisNameBorrow(&name5)) + 3, >> + (void**)&dest_ptr, >> + &(head->additionalInfo[4].infoValue)), SA_AIS_OK); >> + >> + saAisNameLend(saAisNameBorrow(&name5), (SaNameT*) dest_ptr); >> + } >> + >> + /** >> + * Test AdditionalInfo with extended SaNameT type >> + */ >> + void extAdditionalInfoTest(void) >> + { >> + SaNtfAlarmNotificationFilterT myAlarmFilter; >> + subscriptionId = 1; >> + SaNtfNotificationHeaderT *head; >> + >> + rc = SA_AIS_OK; >> + >> + resetCounters(); >> + >> + safassert(saNtfInitialize(&ntfHandle, &ntfCbTest, &ntfVersion) , >> SA_AIS_OK); >> + safassert(saNtfSelectionObjectGet(ntfHandle, &selectionObject) , >> SA_AIS_OK); >> + >> + /* specify complex filter */ >> + safassert(saNtfAlarmNotificationFilterAllocate( >> + ntfHandle, >> + &myAlarmFilter, >> + 1, >> + 1, >> + 1, >> + 1, >> + 0, >> + 0, >> + 0), SA_AIS_OK); >> + /* set header filter specific fields */ >> + extFillFilterHeader(&myAlarmFilter.notificationFilterHeader); >> + >> + /* Initialize filter handles */ >> + myNotificationFilterHandles.alarmFilterHandle = >> + myAlarmFilter.notificationFilterHandle; >> + myNotificationFilterHandles.attributeChangeFilterHandle = 0; >> + myNotificationFilterHandles.objectCreateDeleteFilterHandle = 0; >> + myNotificationFilterHandles.securityAlarmFilterHandle = 0; >> + myNotificationFilterHandles.stateChangeFilterHandle = 0; >> + >> + safassert(saNtfNotificationSubscribe(&myNotificationFilterHandles, >> + subscriptionId), SA_AIS_OK); >> + >> + /* Create a notification and send it */ >> + safassert(saNtfAlarmNotificationAllocate( >> + ntfHandle, >> + &myAlarmNotification, >> + 0, >> + (SaUint16T)(strlen(DEFAULT_ADDITIONAL_TEXT) + 1), >> + 5, >> + 0, >> + 0, >> + 0, >> + SA_NTF_ALLOC_SYSTEM_LIMIT), SA_AIS_OK); >> + >> + head = &myAlarmNotification.notificationHeader; >> + extFillHeaderAddInfo(head, myAlarmNotification.notificationHandle); >> + /* These 3 fields is alarm filter items */ >> + *(myAlarmNotification.perceivedSeverity) = SA_NTF_SEVERITY_WARNING; >> + *(myAlarmNotification.probableCause) = SA_NTF_BANDWIDTH_REDUCED; >> + *myAlarmNotification.trend = SA_NTF_TREND_MORE_SEVERE; >> + >> + myAlarmNotification.thresholdInformation->thresholdValueType = >> SA_NTF_VALUE_UINT32; >> + myAlarmNotification.thresholdInformation->thresholdValue.uint32Val >> = 600; >> + >> myAlarmNotification.thresholdInformation->thresholdHysteresis.uint32Val >> = 100; >> + myAlarmNotification.thresholdInformation->observedValue.uint32Val = >> 567; >> + myAlarmNotification.thresholdInformation->armTime = >> SA_TIME_UNKNOWN; >> + >> + >> safassert(saNtfNotificationSend(myAlarmNotification.notificationHandle), >> SA_AIS_OK); >> + >> + /* only this notification should be caught */ >> + ok_ids.ids[ok_ids.length++] = >> *myAlarmNotification.notificationHeader.notificationId; >> + poll_until_received(ntfHandle, >> *myAlarmNotification.notificationHeader.notificationId); >> + >> + if(ntfRecieved.alarmFilterHandle != 1 || >> + ntfRecieved.attributeChangeFilterHandle != 0 || >> + ntfRecieved.objectCreateDeleteFilterHandle !=0 || >> + ntfRecieved.securityAlarmFilterHandle != 0 || >> + ntfRecieved.stateChangeFilterHandle != 0) >> safassert(SA_AIS_ERR_BAD_FLAGS, SA_AIS_OK); >> + >> + >> safassert(saNtfNotificationFree(myAlarmNotification.notificationHandle) >> , SA_AIS_OK); >> + >> safassert(saNtfNotificationFilterFree(myAlarmFilter.notificationFilterHandle), >> >> SA_AIS_OK); >> + safassert(saNtfNotificationUnsubscribe(subscriptionId), SA_AIS_OK); >> + >> + safassert(saNtfFinalize(ntfHandle), SA_AIS_OK); >> + rc = check_errors(); >> + test_validate(rc, SA_AIS_OK); >> + } >> + >> +/** >> + * Test all filter header fields >> + */ >> +void extFilterNotificationTest(void) >> +{ >> + SaNtfAlarmNotificationFilterT myAlarmFilter; >> + subscriptionId = 1; >> + SaNtfNotificationHeaderT *head; >> + >> + rc = SA_AIS_OK; >> + >> + resetCounters(); >> + >> + safassert(saNtfInitialize(&ntfHandle, &ntfCbTest, &ntfVersion) , >> SA_AIS_OK); >> + safassert(saNtfSelectionObjectGet(ntfHandle, &selectionObject) , >> SA_AIS_OK); >> + >> + /* specify complex filter */ >> + safassert(saNtfAlarmNotificationFilterAllocate( >> + ntfHandle, >> + &myAlarmFilter, >> + 1, >> + 1, >> + 1, >> + 1, >> + 0, >> + 0, >> + 0), SA_AIS_OK); >> + /* set header filter specific fields */ >> + extFillFilterHeader(&myAlarmFilter.notificationFilterHeader); >> + >> + /* Initialize filter handles */ >> + myNotificationFilterHandles.alarmFilterHandle = >> + myAlarmFilter.notificationFilterHandle; >> + myNotificationFilterHandles.attributeChangeFilterHandle = 0; >> + myNotificationFilterHandles.objectCreateDeleteFilterHandle = 0; >> + myNotificationFilterHandles.securityAlarmFilterHandle = 0; >> + myNotificationFilterHandles.stateChangeFilterHandle = 0; >> + >> + safassert(saNtfNotificationSubscribe(&myNotificationFilterHandles, >> + subscriptionId), SA_AIS_OK); >> + >> + /* Create a notification and send it */ >> + safassert(saNtfAlarmNotificationAllocate( >> + ntfHandle, >> + &myAlarmNotification, >> + 0, >> + (SaUint16T)(strlen(DEFAULT_ADDITIONAL_TEXT) + 1), >> + 0, >> + 0, >> + 0, >> + 0, >> + SA_NTF_ALLOC_SYSTEM_LIMIT), SA_AIS_OK); >> + >> + head = &myAlarmNotification.notificationHeader; >> + extFillHeader(head); >> + >> + /* These 3 fields is alarm filter items */ >> + *(myAlarmNotification.perceivedSeverity) = SA_NTF_SEVERITY_WARNING; >> + *(myAlarmNotification.probableCause) = SA_NTF_BANDWIDTH_REDUCED; >> + *myAlarmNotification.trend = SA_NTF_TREND_MORE_SEVERE; >> + >> + myAlarmNotification.thresholdInformation->thresholdValueType = >> SA_NTF_VALUE_UINT32; >> + myAlarmNotification.thresholdInformation->thresholdValue.uint32Val >> = 600; >> + >> myAlarmNotification.thresholdInformation->thresholdHysteresis.uint32Val >> = 100; >> + myAlarmNotification.thresholdInformation->observedValue.uint32Val = >> 567; >> + myAlarmNotification.thresholdInformation->armTime = >> SA_TIME_UNKNOWN; >> + >> + *(head->eventType) = SA_NTF_ALARM_EQUIPMENT; >> + >> safassert(saNtfNotificationSend(myAlarmNotification.notificationHandle), >> SA_AIS_OK); >> + >> + saAisNameLend((SaConstStringT)&test_longdn_object_1, >> head->notificationObject); >> + >> safassert(saNtfNotificationSend(myAlarmNotification.notificationHandle), >> SA_AIS_OK); >> + >> + extFillHeader(head); >> + saAisNameLend(NOTIFYING_OBJECT_TEST, head->notifyingObject); >> + >> safassert(saNtfNotificationSend(myAlarmNotification.notificationHandle), >> SA_AIS_OK); >> + >> + extFillHeader(head); >> + head->notificationClassId->vendorId = 199; >> + >> safassert(saNtfNotificationSend(myAlarmNotification.notificationHandle), >> SA_AIS_OK); >> + >> + extFillHeader(head); >> + head->notificationClassId->majorId = 89; >> + >> safassert(saNtfNotificationSend(myAlarmNotification.notificationHandle), >> SA_AIS_OK); >> + >> + extFillHeader(head); >> + head->notificationClassId->minorId = 24; >> + >> safassert(saNtfNotificationSend(myAlarmNotification.notificationHandle), >> SA_AIS_OK); >> + >> + extFillHeader(head); >> + >> safassert(saNtfNotificationSend(myAlarmNotification.notificationHandle), >> SA_AIS_OK); >> + >> + /* only this notification should be caught */ >> + ok_ids.ids[ok_ids.length++] = >> *myAlarmNotification.notificationHeader.notificationId; >> + poll_until_received(ntfHandle, >> *myAlarmNotification.notificationHeader.notificationId); >> + >> + if(ntfRecieved.alarmFilterHandle != 1 || >> + ntfRecieved.attributeChangeFilterHandle != 0 || >> + ntfRecieved.objectCreateDeleteFilterHandle !=0 || >> + ntfRecieved.securityAlarmFilterHandle != 0 || >> + ntfRecieved.stateChangeFilterHandle != 0) >> safassert(SA_AIS_ERR_BAD_FLAGS, SA_AIS_OK); >> + >> + >> safassert(saNtfNotificationFree(myAlarmNotification.notificationHandle) >> , SA_AIS_OK); >> + >> safassert(saNtfNotificationFilterFree(myAlarmFilter.notificationFilterHandle), >> >> SA_AIS_OK); >> + safassert(saNtfNotificationUnsubscribe(subscriptionId), SA_AIS_OK); >> + >> + safassert(saNtfFinalize(ntfHandle), SA_AIS_OK); >> + rc = check_errors(); >> + test_validate(rc, SA_AIS_OK); >> +} >> + >> +/** >> + * Test Alarm notification with long dn objects >> + */ >> +void extAlarmNotificationTest(void) >> +{ >> + SaNtfAlarmNotificationFilterT myAlarmFilter; >> + subscriptionId = 1; >> + >> + rc = SA_AIS_OK; >> + >> + resetCounters(); >> + >> + safassert(saNtfInitialize(&ntfHandle, &ntfCbTest, &ntfVersion) , >> SA_AIS_OK); >> + safassert(saNtfSelectionObjectGet(ntfHandle, &selectionObject) , >> SA_AIS_OK); >> + >> + safassert(saNtfAlarmNotificationFilterAllocate( >> + ntfHandle, >> + &myAlarmFilter, >> + 0, >> + 0, >> + 0, >> + 0, >> + 1, >> + 1, >> + 1), SA_AIS_OK); >> + /* Set perceived severities */ >> + myAlarmFilter.perceivedSeverities[0] = SA_NTF_SEVERITY_WARNING; >> + myAlarmFilter.probableCauses[0] = SA_NTF_BANDWIDTH_REDUCED; >> + myAlarmFilter.trends[0] = SA_NTF_TREND_MORE_SEVERE; >> + >> + /* Initialize filter handles */ >> + myNotificationFilterHandles.alarmFilterHandle = >> + myAlarmFilter.notificationFilterHandle; >> + myNotificationFilterHandles.attributeChangeFilterHandle = 0; >> + myNotificationFilterHandles.objectCreateDeleteFilterHandle = 0; >> + myNotificationFilterHandles.securityAlarmFilterHandle = 0; >> + myNotificationFilterHandles.stateChangeFilterHandle = 0; >> + >> + safassert(saNtfNotificationSubscribe(&myNotificationFilterHandles, >> + subscriptionId), SA_AIS_OK); >> + >> + /* Create a notification and send it */ >> + safassert(saNtfAlarmNotificationAllocate( >> + ntfHandle, >> + &myAlarmNotification, >> + 0, >> + (SaUint16T)(strlen(DEFAULT_ADDITIONAL_TEXT) + 1), >> + 0, >> + 0, >> + 0, >> + 0, >> + SA_NTF_ALLOC_SYSTEM_LIMIT), SA_AIS_OK); >> + extFillHeader(&myAlarmNotification.notificationHeader); >> + >> + *(myAlarmNotification.perceivedSeverity) = >> SA_NTF_SEVERITY_CRITICAL; >> + *(myAlarmNotification.probableCause) = >> SA_NTF_CALL_ESTABLISHMENT_ERROR; >> + *myAlarmNotification.trend = SA_NTF_TREND_NO_CHANGE; >> + >> safassert(saNtfNotificationSend(myAlarmNotification.notificationHandle), >> SA_AIS_OK); >> + >> + *(myAlarmNotification.perceivedSeverity) = SA_NTF_SEVERITY_WARNING; >> + *(myAlarmNotification.probableCause) = >> SA_NTF_PRESSURE_UNACCEPTABLE; >> + >> safassert(saNtfNotificationSend(myAlarmNotification.notificationHandle), >> SA_AIS_OK); >> + >> + *(myAlarmNotification.perceivedSeverity) = SA_NTF_SEVERITY_WARNING; >> + *(myAlarmNotification.probableCause) = SA_NTF_BANDWIDTH_REDUCED; >> + *myAlarmNotification.trend = SA_NTF_TREND_NO_CHANGE; >> + >> safassert(saNtfNotificationSend(myAlarmNotification.notificationHandle), >> SA_AIS_OK); >> + >> + extFillHeader(&myAlarmNotification.notificationHeader); >> + /* These 3 fields is filter items */ >> + *(myAlarmNotification.perceivedSeverity) = SA_NTF_SEVERITY_WARNING; >> + *(myAlarmNotification.probableCause) = SA_NTF_BANDWIDTH_REDUCED; >> + *myAlarmNotification.trend = SA_NTF_TREND_MORE_SEVERE; >> + myAlarmNotification.thresholdInformation->thresholdValueType = >> SA_NTF_VALUE_UINT32; >> + myAlarmNotification.thresholdInformation->thresholdValue.uint32Val >> = 600; >> + >> myAlarmNotification.thresholdInformation->thresholdHysteresis.uint32Val >> = 100; >> + myAlarmNotification.thresholdInformation->observedValue.uint32Val = >> 567; >> + myAlarmNotification.thresholdInformation->armTime = >> SA_TIME_UNKNOWN; >> + >> safassert(saNtfNotificationSend(myAlarmNotification.notificationHandle), >> SA_AIS_OK); >> + /* only this notification should be caught*/ >> + ok_ids.ids[ok_ids.length++] = >> *myAlarmNotification.notificationHeader.notificationId; >> + poll_until_received(ntfHandle, >> *myAlarmNotification.notificationHeader.notificationId); >> + if(ntfRecieved.alarmFilterHandle != 1 || >> + ntfRecieved.attributeChangeFilterHandle != 0 || >> + ntfRecieved.objectCreateDeleteFilterHandle !=0 || >> + ntfRecieved.securityAlarmFilterHandle != 0 || >> + ntfRecieved.stateChangeFilterHandle != 0) >> safassert(SA_AIS_ERR_BAD_FLAGS, SA_AIS_OK); >> + >> + >> safassert(saNtfNotificationFree(myAlarmNotification.notificationHandle) >> , SA_AIS_OK); >> + >> safassert(saNtfNotificationFilterFree(myAlarmFilter.notificationFilterHandle), >> >> SA_AIS_OK); >> + >> + safassert(saNtfNotificationUnsubscribe(subscriptionId), SA_AIS_OK); >> + safassert(saNtfFinalize(ntfHandle), SA_AIS_OK); >> + rc = check_errors(); >> + test_validate(rc, SA_AIS_OK); >> +} >> + >> +/** >> + * Test Object Create/Delete notification with long dn objects >> + */ >> +void extObjectCreateDeleteNotificationTest(void) >> +{ >> + SaNtfObjectCreateDeleteNotificationFilterT myFilter; >> + >> + subscriptionId = 2; >> + >> + resetCounters(); >> + >> + safassert(saNtfInitialize(&ntfHandle, &ntfCbTest, &ntfVersion) , >> SA_AIS_OK); >> + safassert(saNtfSelectionObjectGet(ntfHandle, &selectionObject) , >> SA_AIS_OK); >> + >> + safassert(saNtfObjectCreateDeleteNotificationFilterAllocate( >> + ntfHandle, >> + &myFilter, >> + 1, >> + 1, >> + 1, >> + 1, >> + 2), SA_AIS_OK); >> + myFilter.sourceIndicators[0] = SA_NTF_OBJECT_OPERATION; >> + myFilter.sourceIndicators[1] = SA_NTF_MANAGEMENT_OPERATION; >> + extFillFilterHeader(&myFilter.notificationFilterHeader); >> + myFilter.notificationFilterHeader.eventTypes[0] = >> SA_NTF_OBJECT_CREATION; >> + /* Initialize filter handles */ >> + myNotificationFilterHandles.alarmFilterHandle = 0; >> + myNotificationFilterHandles.attributeChangeFilterHandle = 0; >> + myNotificationFilterHandles.objectCreateDeleteFilterHandle = >> + myFilter.notificationFilterHandle; >> + myNotificationFilterHandles.securityAlarmFilterHandle = 0; >> + myNotificationFilterHandles.stateChangeFilterHandle = 0; >> + safassert(saNtfNotificationSubscribe(&myNotificationFilterHandles, >> + subscriptionId), SA_AIS_OK); >> + extCreateObjectCreateDeleteNotification(ntfHandle, >> &myObjCrDelNotification); >> + *(myObjCrDelNotification.sourceIndicator) = >> SA_NTF_OBJECT_OPERATION; >> + >> safassert(saNtfNotificationSend(myObjCrDelNotification.notificationHandle), >> SA_AIS_OK); >> + /* this notification should be caught*/ >> + ok_ids.ids[ok_ids.length++] = >> *myObjCrDelNotification.notificationHeader.notificationId; >> + >> + *(myObjCrDelNotification.sourceIndicator) = >> SA_NTF_UNKNOWN_OPERATION; >> + >> safassert(saNtfNotificationSend(myObjCrDelNotification.notificationHandle), >> SA_AIS_OK); >> + >> + *(myObjCrDelNotification.sourceIndicator) = >> SA_NTF_MANAGEMENT_OPERATION; >> + >> safassert(saNtfNotificationSend(myObjCrDelNotification.notificationHandle), >> SA_AIS_OK); >> + /* this notification should be caught*/ >> + ok_ids.ids[ok_ids.length++] = >> *myObjCrDelNotification.notificationHeader.notificationId; >> + poll_until_received(ntfHandle, >> *myObjCrDelNotification.notificationHeader.notificationId); >> + if(ntfRecieved.alarmFilterHandle != 0 || >> + ntfRecieved.attributeChangeFilterHandle != 0 || >> + ntfRecieved.objectCreateDeleteFilterHandle != >> ok_ids.length|| >> + ntfRecieved.securityAlarmFilterHandle != 0 || >> + ntfRecieved.stateChangeFilterHandle != 0) >> safassert(SA_AIS_ERR_BAD_FLAGS, SA_AIS_OK); >> + >> safassert(saNtfNotificationFree(myObjCrDelNotification.notificationHandle), >> SA_AIS_OK); >> + >> safassert(saNtfNotificationFilterFree(myFilter.notificationFilterHandle), >> SA_AIS_OK); >> + >> + safassert(saNtfNotificationUnsubscribe(subscriptionId), SA_AIS_OK); >> + safassert(saNtfFinalize(ntfHandle) , SA_AIS_OK); >> + rc = check_errors(); >> + test_validate(rc, SA_AIS_OK); >> +} >> + >> +/** >> + * Test Attribute Change notification with long dn objects >> + */ >> +void extAttributeChangeNotificationTest(void) >> +{ >> + SaNtfAttributeChangeNotificationFilterT myFilter; >> + >> + subscriptionId = 2; >> + >> + resetCounters(); >> + >> + safassert(saNtfInitialize(&ntfHandle, &ntfCbTest, &ntfVersion) , >> SA_AIS_OK); >> + safassert(saNtfSelectionObjectGet(ntfHandle, &selectionObject) , >> SA_AIS_OK); >> + >> + safassert(saNtfAttributeChangeNotificationFilterAllocate( >> + ntfHandle, >> + &myFilter, >> + 1, >> + 1, >> + 1, >> + 1, >> + 2), SA_AIS_OK); >> + >> + myFilter.sourceIndicators[0] = SA_NTF_OBJECT_OPERATION; >> + myFilter.sourceIndicators[1] = SA_NTF_MANAGEMENT_OPERATION; >> + extFillFilterHeader(&myFilter.notificationFilterHeader); >> + myFilter.notificationFilterHeader.eventTypes[0] = >> SA_NTF_ATTRIBUTE_CHANGED; >> + /* Initialize filter handles */ >> + myNotificationFilterHandles.alarmFilterHandle = 0; >> + myNotificationFilterHandles.attributeChangeFilterHandle = >> + myFilter.notificationFilterHandle; >> + myNotificationFilterHandles.objectCreateDeleteFilterHandle = 0; >> + myNotificationFilterHandles.securityAlarmFilterHandle = 0; >> + myNotificationFilterHandles.stateChangeFilterHandle = 0; >> + safassert(saNtfNotificationSubscribe(&myNotificationFilterHandles, >> + subscriptionId), SA_AIS_OK); >> + extCreateAttributeChangeNotification(ntfHandle, >> &myAttrChangeNotification); >> + *(myAttrChangeNotification.sourceIndicator) = >> SA_NTF_OBJECT_OPERATION; >> + >> safassert(saNtfNotificationSend(myAttrChangeNotification.notificationHandle), >> >> SA_AIS_OK); >> + /* this notification should be caught*/ >> + ok_ids.ids[ok_ids.length++] = >> *myAttrChangeNotification.notificationHeader.notificationId; >> + >> + *(myAttrChangeNotification.sourceIndicator) = >> SA_NTF_UNKNOWN_OPERATION; >> + >> safassert(saNtfNotificationSend(myAttrChangeNotification.notificationHandle), >> >> SA_AIS_OK); >> + >> + *(myAttrChangeNotification.sourceIndicator) = >> SA_NTF_MANAGEMENT_OPERATION; >> + >> safassert(saNtfNotificationSend(myAttrChangeNotification.notificationHandle), >> >> SA_AIS_OK); >> + /* this notification should be caught*/ >> + ok_ids.ids[ok_ids.length++] = >> *myAttrChangeNotification.notificationHeader.notificationId; >> + poll_until_received(ntfHandle, >> *myAttrChangeNotification.notificationHeader.notificationId); >> + if(ntfRecieved.alarmFilterHandle != 0 || >> + ntfRecieved.attributeChangeFilterHandle != ok_ids.length || >> + ntfRecieved.objectCreateDeleteFilterHandle != 0|| >> + ntfRecieved.securityAlarmFilterHandle != 0 || >> + ntfRecieved.stateChangeFilterHandle != 0) >> safassert(SA_AIS_ERR_BAD_FLAGS, SA_AIS_OK); >> + >> safassert(saNtfNotificationFree(myAttrChangeNotification.notificationHandle), >> >> SA_AIS_OK); >> + >> safassert(saNtfNotificationFilterFree(myFilter.notificationFilterHandle), >> SA_AIS_OK); >> + >> + >> + safassert(saNtfNotificationUnsubscribe(subscriptionId), SA_AIS_OK); >> + safassert(saNtfFinalize(ntfHandle) , SA_AIS_OK); >> + rc = check_errors(); >> + test_validate(rc, SA_AIS_OK); >> +} >> + >> +/** >> + * Test State Change notification with long dn objects >> + */ >> +void extStateChangeNotificationTest(void) >> +{ >> + SaNtfStateChangeNotificationFilterT myFilter; >> + >> + subscriptionId = 2; >> + >> + resetCounters(); >> + >> + safassert(saNtfInitialize(&ntfHandle, &ntfCbTest, &ntfVersion) , >> SA_AIS_OK); >> + safassert(saNtfSelectionObjectGet(ntfHandle, &selectionObject) , >> SA_AIS_OK); >> + >> + safassert(saNtfStateChangeNotificationFilterAllocate( >> + ntfHandle, >> + &myFilter, >> + 1, >> + 1, >> + 1, >> + 1, >> + 2, >> + 0), SA_AIS_OK); >> + >> + myFilter.sourceIndicators[0] = SA_NTF_OBJECT_OPERATION; >> + myFilter.sourceIndicators[1] = SA_NTF_MANAGEMENT_OPERATION; >> + extFillFilterHeader(&myFilter.notificationFilterHeader); >> + myFilter.notificationFilterHeader.eventTypes[0] = >> SA_NTF_OBJECT_STATE_CHANGE; >> + /* Initialize filter handles */ >> + myNotificationFilterHandles.alarmFilterHandle = 0; >> + myNotificationFilterHandles.attributeChangeFilterHandle = 0; >> + myNotificationFilterHandles.objectCreateDeleteFilterHandle = 0; >> + myNotificationFilterHandles.securityAlarmFilterHandle = 0; >> + myNotificationFilterHandles.stateChangeFilterHandle = >> myFilter.notificationFilterHandle; >> + safassert(saNtfNotificationSubscribe(&myNotificationFilterHandles, >> + subscriptionId), SA_AIS_OK); >> + >> + extCreateStateChangeNotification(ntfHandle, >> &myStateChangeNotification); >> + *(myStateChangeNotification.sourceIndicator) = >> SA_NTF_OBJECT_OPERATION; >> + >> safassert(saNtfNotificationSend(myStateChangeNotification.notificationHandle), >> >> SA_AIS_OK); >> + /* this notification should be caught*/ >> + ok_ids.ids[ok_ids.length++] = >> *myStateChangeNotification.notificationHeader.notificationId; >> + >> + *(myStateChangeNotification.sourceIndicator) = >> SA_NTF_UNKNOWN_OPERATION; >> + >> safassert(saNtfNotificationSend(myStateChangeNotification.notificationHandle), >> >> SA_AIS_OK); >> + >> + *(myStateChangeNotification.sourceIndicator) = >> SA_NTF_MANAGEMENT_OPERATION; >> + >> safassert(saNtfNotificationSend(myStateChangeNotification.notificationHandle), >> >> SA_AIS_OK); >> + /* this notification should be caught*/ >> + ok_ids.ids[ok_ids.length++] = >> *myStateChangeNotification.notificationHeader.notificationId; >> + poll_until_received(ntfHandle, >> *myStateChangeNotification.notificationHeader.notificationId); >> + if(ntfRecieved.alarmFilterHandle != 0 || >> + ntfRecieved.attributeChangeFilterHandle != 0 || >> + ntfRecieved.objectCreateDeleteFilterHandle != 0|| >> + ntfRecieved.securityAlarmFilterHandle != 0 || >> + ntfRecieved.stateChangeFilterHandle != ok_ids.length) >> safassert(SA_AIS_ERR_BAD_FLAGS, SA_AIS_OK); >> + >> safassert(saNtfNotificationFree(myStateChangeNotification.notificationHandle), >> >> SA_AIS_OK); >> + >> safassert(saNtfNotificationFilterFree(myFilter.notificationFilterHandle), >> SA_AIS_OK); >> + >> + safassert(saNtfNotificationUnsubscribe(subscriptionId), SA_AIS_OK); >> + safassert(saNtfFinalize(ntfHandle), SA_AIS_OK); >> + rc = check_errors(); >> + test_validate(rc, SA_AIS_OK); >> +} >> + >> +/** >> + * Test Security Alarm notification with long dn objects >> + */ >> +void extSecurityAlarmNotificationTest(void) >> +{ >> + SaNtfSecurityAlarmNotificationFilterT myFilter; >> + >> + subscriptionId = 5; >> + >> + resetCounters(); >> + safassert(saNtfInitialize(&ntfHandle, &ntfCbTest, &ntfVersion) , >> SA_AIS_OK); >> + safassert(saNtfSelectionObjectGet(ntfHandle, &selectionObject) , >> SA_AIS_OK); >> + >> + safassert(saNtfSecurityAlarmNotificationFilterAllocate( >> + ntfHandle, >> + &myFilter, >> + 0, >> + 0, >> + 0, >> + 0, >> + 3, >> + 0, >> + 0, >> + 0, >> + 0), SA_AIS_OK); >> + >> + /* Initialize filter handles */ >> + myNotificationFilterHandles.alarmFilterHandle = 0; >> + myNotificationFilterHandles.attributeChangeFilterHandle = 0; >> + myNotificationFilterHandles.objectCreateDeleteFilterHandle = 0; >> + myNotificationFilterHandles.securityAlarmFilterHandle = >> + myFilter.notificationFilterHandle; >> + myNotificationFilterHandles.stateChangeFilterHandle = 0; >> + myFilter.probableCauses[0] = SA_NTF_ADAPTER_ERROR; >> + myFilter.probableCauses[1] = SA_NTF_EQUIPMENT_MALFUNCTION; >> + myFilter.probableCauses[2] = SA_NTF_VERSION_MISMATCH; >> + >> + /* subscribe */ >> + safassert(saNtfNotificationSubscribe(&myNotificationFilterHandles, >> + subscriptionId), SA_AIS_OK); >> + extCreateSecurityAlarmNotification(ntfHandle, >> &mySecAlarmNotification); >> + >> safassert(saNtfNotificationSend(mySecAlarmNotification.notificationHandle), >> SA_AIS_OK); >> + >> + *mySecAlarmNotification.probableCause = SA_NTF_VERSION_MISMATCH; >> + >> safassert(saNtfNotificationSend(mySecAlarmNotification.notificationHandle), >> SA_AIS_OK); >> + ok_ids.ids[ok_ids.length++] = >> *mySecAlarmNotification.notificationHeader.notificationId; >> + >> + *mySecAlarmNotification.probableCause = >> SA_NTF_RESPONSE_TIME_EXCESSIVE; >> + >> safassert(saNtfNotificationSend(mySecAlarmNotification.notificationHandle), >> SA_AIS_OK); >> + >> + *mySecAlarmNotification.probableCause = >> SA_NTF_NON_REPUDIATION_FAILURE; >> + >> safassert(saNtfNotificationSend(mySecAlarmNotification.notificationHandle), >> SA_AIS_OK); >> + >> + *mySecAlarmNotification.probableCause = >> SA_NTF_EQUIPMENT_MALFUNCTION; >> + >> safassert(saNtfNotificationSend(mySecAlarmNotification.notificationHandle), >> SA_AIS_OK); >> + ok_ids.ids[ok_ids.length++] = >> *mySecAlarmNotification.notificationHeader.notificationId; >> + *mySecAlarmNotification.probableCause = >> SA_NTF_STORAGE_CAPACITY_PROBLEM; >> + >> safassert(saNtfNotificationSend(mySecAlarmNotification.notificationHandle), >> SA_AIS_OK); >> + *mySecAlarmNotification.probableCause = SA_NTF_DENIAL_OF_SERVICE; >> + >> safassert(saNtfNotificationSend(mySecAlarmNotification.notificationHandle), >> SA_AIS_OK); >> + *mySecAlarmNotification.probableCause = SA_NTF_ADAPTER_ERROR; >> + >> safassert(saNtfNotificationSend(mySecAlarmNotification.notificationHandle), >> SA_AIS_OK); >> + ok_ids.ids[ok_ids.length++] = >> *mySecAlarmNotification.notificationHeader.notificationId; >> + poll_until_received(ntfHandle, >> *mySecAlarmNotification.notificationHeader.notificationId); >> + if(ntfRecieved.alarmFilterHandle != 0 || >> + ntfRecieved.attributeChangeFilterHandle != 0 || >> + ntfRecieved.objectCreateDeleteFilterHandle !=0 || >> + ntfRecieved.securityAlarmFilterHandle != ok_ids.length || >> + ntfRecieved.stateChangeFilterHandle != 0) >> safassert(SA_AIS_ERR_BAD_FLAGS, SA_AIS_OK); >> + >> safassert(saNtfNotificationFree(mySecAlarmNotification.notificationHandle), >> SA_AIS_OK); >> + >> safassert(saNtfNotificationFilterFree(myFilter.notificationFilterHandle), >> SA_AIS_OK); >> + >> + safassert(saNtfNotificationUnsubscribe(subscriptionId), SA_AIS_OK); >> + safassert(saNtfFinalize(ntfHandle) , SA_AIS_OK); >> + rc = check_errors(); >> + test_validate(rc, SA_AIS_OK); >> +} >> + >> +__attribute__ ((constructor)) static void >> longDnObject_notification_constructor(void) >> +{ >> + init_ext_object(); >> + test_suite_add(36, "Long DNs Test"); >> + test_case_add(36, extAdditionalInfoTest >> + , "Test additional info with extended SaNameT >> type"); >> + test_case_add(36, extFilterNotificationTest >> + , "Test filter with longDn objects"); >> + test_case_add(36, extAlarmNotificationTest >> + , "Test Alarm notification with longDn objects"); >> + test_case_add(36, extObjectCreateDeleteNotificationTest >> + , "Test Object Create/Delete notification with >> longDn objects"); >> + test_case_add(36, extAttributeChangeNotificationTest >> + , "Test Attribute Change notification with >> longDn objects"); >> + test_case_add(36, extStateChangeNotificationTest >> + , "Test State Change notification with longDn >> objects"); >> + test_case_add(36, extSecurityAlarmNotificationTest >> + , "Test Security Alarm notification with longDn >> objects"); >> +} >> diff --git a/tests/unit_test_fw/inc/util.h >> b/tests/unit_test_fw/inc/util.h >> --- a/tests/unit_test_fw/inc/util.h >> +++ b/tests/unit_test_fw/inc/util.h >> @@ -19,11 +19,10 @@ >> #ifndef util_h >> #define util_h >> >> +#include <saAis.h> >> + >> extern SaTimeT getSaTimeT(void); >> -extern void create_dn(char *rdn, char *parent, SaNameT *dn); >> -extern void sa_namet_init(char *value, SaNameT *namet); >> extern const char *get_saf_error(SaAisErrorT rc); >> - >> extern void safassert_impl(const char* file, unsigned int line, >> SaAisErrorT actual, SaAisErrorT expected); >> >> /** >> diff --git a/tests/unit_test_fw/src/Makefile.am >> b/tests/unit_test_fw/src/Makefile.am >> --- a/tests/unit_test_fw/src/Makefile.am >> +++ b/tests/unit_test_fw/src/Makefile.am >> @@ -22,6 +22,7 @@ noinst_LTLIBRARIES = libutest.la >> >> libutest_la_CPPFLAGS = \ >> $(AM_CPPFLAGS) \ >> + -DSA_EXTENDED_NAME_SOURCE \ >> -I$(top_srcdir)/tests/unit_test_fw/inc \ >> -I$(top_srcdir)/osaf/libs/saf/include >> >> diff --git a/tests/unit_test_fw/src/util.c >> b/tests/unit_test_fw/src/util.c >> --- a/tests/unit_test_fw/src/util.c >> +++ b/tests/unit_test_fw/src/util.c >> @@ -21,8 +21,7 @@ >> #include <sys/time.h> >> #include <unistd.h> >> #include <assert.h> >> -#include <saAis.h> >> - >> +#include "util.h" >> static const char *saf_error[] = >> { >> "SA_AIS_NOT_VALID", >> @@ -65,17 +64,6 @@ SaTimeT getSaTimeT(void) >> (tp.tv_usec * SA_TIME_ONE_MICROSECOND); >> } >> >> -void create_dn(char *rdn, char *parent, SaNameT *dn) >> -{ >> - dn->length = sprintf((char*)dn->value, "%s,%s", rdn, parent); >> - assert(dn->length < SA_MAX_NAME_LENGTH); >> -} >> - >> -void sa_namet_init(char *value, SaNameT *namet) >> -{ >> - namet->length = sprintf((char*)namet->value, "%s", value); >> -} >> - >> const char *get_saf_error(SaAisErrorT rc) >> { >> if (rc <= SA_AIS_ERR_UNAVAILABLE) >> > ------------------------------------------------------------------------------ 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