Hi all,

Do we have any comments on the latest patch? If not, can we push it for 
4.5 FC?
I have a small patch that Lennart recommended to add the test info in 
README, so if who's going to push to repo please help to add this path too.

Thanks,
Minh

diff --git a/tests/ntfsv/README b/tests/ntfsv/README
--- a/tests/ntfsv/README
+++ b/tests/ntfsv/README
@@ -32,4 +32,9 @@ and IMMSV_PBE_FILE.
  (3) activate pbe, immcfg -a saImmRepositoryInit=1 safRdn=
  immManagement,safApp=safImmService

-
+The test suite 35 has been added for the test of create/modify/delete 
object
+having extended name attribute (#873). This test suite also requires the
+ntfsv_test_classes.xml loaded, and extended name must be enabled in IMM by
+following steps:
+- Enable SA_ENABLE_EXTENDED_NAMES=1 in immnd.conf
+- immcfg -m -a longDnsAllowed=1 opensafImm=opensafImm,safApp=safImmService

On 8/8/2014 8:46 PM, Lennart Lund wrote:
> Hi Minh,
>
> Have you added this information to the README file in the .../test/ntfsv/ 
> directory?
> If not please do so.
>
> Thanks
> Lennart
>
>> -----Original Message-----
>> From: minhchau [mailto:minh.c...@dektech.com.au]
>> Sent: den 8 augusti 2014 12:09
>> To: praveen malviya; Anders Widell; mathi.naic...@oracle.com; Anders
>> Björnerstedt; Zoran Milinkovic
>> Cc: opensaf-devel@lists.sourceforge.net
>> Subject: Re: [devel] [PATCH 6 of 6] NTF: Add ntftest test cases for 
>> notification
>> with long dn objects [#873] V3
>>
>> 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.notificationI
>> d);
>>>> +            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.notificationHandl
>> e),
>>>> 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.notificationHandl
>> e),
>>>> SA_AIS_OK);
>>>> +
>>>> +    *(myAttrChangeNotification.sourceIndicator) =
>>>> SA_NTF_MANAGEMENT_OPERATION;
>>>> +
>>>>
>> safassert(saNtfNotificationSend(myAttrChangeNotification.notificationHandl
>> e),
>>>> 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.notificationHandl
>> e),
>>>> 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.notificationHan
>> dle),
>>>> 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.notificationHan
>> dle),
>>>> SA_AIS_OK);
>>>> +
>>>> +    *(myStateChangeNotification.sourceIndicator) =
>>>> SA_NTF_MANAGEMENT_OPERATION;
>>>> +
>>>>
>> safassert(saNtfNotificationSend(myStateChangeNotification.notificationHan
>> dle),
>>>> 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.notificationHand
>> le),
>>>> 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


------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to