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

Reply via email to