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