On 07/31/2014 11:10 AM, praveen malviya wrote:
>
> On 31-Jul-14 1:39 PM, Anders Widell wrote:
>> saAisNameLend() adds a terminating NUL character, so I think you 
>> would still need strlen(saAisNameBorrow(&name)) + 2 + 1 even with 
>> Praveen's patch, otherwise saAisNameLend() will write one byte past 
>> the end of the allocated buffer when the string is shorter than 256 
>> bytes.Another concern is, can a notification be re-used and be sent 
>> multiple times? The current version of the patch will not work in the 
>> (rare) case that the string length is equal to kExtendedNameMagic. 
> If string length is >= kExtendedNameMagic then NtfSend() API can 
> return error as it is already doing it for other parameters. 
You are right, kExtendedNameMagic is larger than kMaxDnLength is it is 
not a problem as long as we check against kMaxDnLength.

>> Third concern: there is no check that the user has allocated enough 
>> space. What if the user has by mistake allocated a buffer that is too 
>> small, e.g. sizeof(SaNameT) bytes, when the string is longer than 256 
>> bytes?
>>
> This problem can come in any other service also. Does this require 
> some extensions in saAis*.h in future. 
Well it is mainly a problem in the NTF API due to it's very strange way 
of handling memory allocations, e.g. saNtfPtrValAllocate(). Is there a 
similar memory allocation API in some other service that could cause 
problems with SaNameT?
>> The + 2 (or rather, + 2 + 1) will work, but it is a bit non-obvious. 
>> It would need to be documented clearly since I see a potential for 
>> user mistakes here. The user is not supposed to know or care about 
>> the internal structure of SaNameT anymore; it is supposed to be 
>> opaque. My proposal is that you instead handle extended SaNameT 
>> during encoding, i.e. in encodeSaNtfValueT().
>>
>> / Anders Widell
>>
>> On 07/31/2014 09:08 AM, minhchau wrote:
>>> Hi Anders, Praveen,
>>>
>>> sizeof(SaNameT) is not the right size to request the memory 
>>> allocation any more. It should be the real size (length of string + 
>>> 2 bytes of .length). It will looks like this
>>>
>>> saNtfPtrValAllocate(notHandle, strlen(saAisNameBorrow(&name)) + 2,
>>>                  (void**)&dest_ptr, 
>>> &(head->additionalInfo[1].infoValue));
>>> saAisNameLend((SaConstStringT)&test1_ext_notification_object, 
>>> (SaNameT*) dest_ptr);
>>>
>>> @Praveen: I agree with you and can I take your patch for the next 
>>> version?
>>>
>>> Thanks/Minh
>>> On 7/30/2014 10:53 PM, Anders Widell wrote:
>>>> Hi!
>>>>
>>>> This + 2 thing looks a bit hairy to me. The size of the SaNameT 
>>>> type has not changed; it is exactly 258 bytes. Wouldn't it be more 
>>>> natural if the client, when using the SA_NTF_VALUE_LDAP_NAME data 
>>>> type, requests to allocate sizeof(SaNameT) bytes, and then stores a 
>>>> pointer to the string in this allocated data by calling 
>>>> saAisNameLend() ?
>>>>
>>>> Not sure how this code used to work before. What happened if the 
>>>> user uses SA_NTF_VALUE_LDAP_NAME and requests to allocate space 
>>>> that is smaller than sizeof(SaNameT)? I guess it would be OK, as 
>>>> long as the size is large enough to hold the entire string as 
>>>> indicated by the SaNameT.length field. But what happens if the 
>>>> allocated memory is not large enough to hold the entire string? The 
>>>> NTF agent should have a check for this, I guess...
>>>>
>>>> / Anders Widell
>>>>
>>>> On 07/30/2014 11:26 AM, praveen malviya wrote:
>>>>>
>>>>> On 30-Jul-14 7:17 AM, minhchau wrote:
>>>>>> Hi Praveen,
>>>>>>
>>>>>> I think the main purpose in your patch is to let the Send() API 
>>>>>> takes care the variable_data and the client just simply uses 
>>>>>> saAisNameLend()
>>>>>>
>>>>>> + saAisNameLend((SaConstStringT)&test1_ext_notification_object, 
>>>>>> (SaNameT*) dest_ptr);
>>>>>>
>>>>>> Instead of:
>>>>>>
>>>>>> -    *((SaUint16T*)dest_ptr) = *((SaUint16T*)&name);
>>>>>> -    memcpy(dest_ptr + 2, saAisNameBorrow(&name), 
>>>>>> strlen(saAisNameBorrow(&name)));
>>>>>>
>>>>>> Looks good, but it's risky because the 
>>>>>> test1_ext_notification_object must not be changed/deallocated 
>>>>>> before calling the Send() API. We can't stop the client doing 
>>>>>> that, since test1_ext_notification_object could be reused for 
>>>>>> other purpose, unless the client must have N string variables 
>>>>>> (like this test1_ext_notification_object) if it wants to add 
>>>>>> respectively N SA_NTF_VALUE_LDAP_NAME into AdditionalInfo
>>>>>>
>>>>> But,  description of the SaAisNameLend() API says:
>>>>> "                 If length of the string
>>>>>                    is greater than or equal to 
>>>>> SA_MAX_UNEXTENDED_NAME_LENGTH, no
>>>>>                    copying is performed. Instead, a reference to 
>>>>> the original
>>>>>                    string is stored in the SaNameT type. In this 
>>>>> case, it is
>>>>>                    therefore important that the original string is 
>>>>> not modified
>>>>>                    or freed for as long as the SaNameT type may 
>>>>> still used.
>>>>> "
>>>>> So a user should not reuse the same memory or should not modified 
>>>>> till SaNameT is in use.
>>>>> Referring to this, I think, in the NTFsv case, we can change the 
>>>>> test1_ext_notification_object only after calling Send() API.
>>>>> At the same time it is aligned with NTF service saNtf*Allocate() 
>>>>> API also. A user calls saNtf*Allocate() API and fills the 
>>>>> parameter and sends notification, then
>>>>> again refills the values and send the notification on same call of 
>>>>> saNtf*Allocate() API.
>>>>>
>>>>> What do you think?
>>>>>
>>>>> Thanks,
>>>>> Praveen
>>>>>
>>>>>
>>>>>> Thanks,
>>>>>> Minh
>>>>>> On 7/28/2014 6:56 PM, praveen malviya wrote:
>>>>>>> Re: [PATCH 6 of 7] NTF: Add ntftest test cases for notification, 
>>>>>>> with long dn objects [#873] v2 Hi Minh,
>>>>>>>
>>>>>>> I have tried a small patch to  use saAisNameLend() for extended 
>>>>>>> name in saNtfPtrValAllocate() for the discussed case.
>>>>>>> It  is handled in Send() API. Patch is generated on top of V3 
>>>>>>> patchs and also includes relevant test changes  in 
>>>>>>> extFillHeaderAddInfo() in tet_longDnObject_notification.c.
>>>>>>> Please review it.
>>>>>>>
>>>>>>> Thanks
>>>>>>> Praveen
>>>>>>> On 18-Jul-14 5:22 AM, minhchau wrote:
>>>>>>>> Hi Praveen,
>>>>>>>>
>>>>>>>> Please find my comments inline
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>> Minh
>>>>>>>> On 7/17/2014 5:02 PM, praveen malviya wrote:
>>>>>>>>> Hi Minh,
>>>>>>>>>
>>>>>>>>> I saw the test and the way long DN is being used in the API.
>>>>>>>>> I tried to modified that in one way for short DN(below is the 
>>>>>>>>> patch/diff on top this patch).
>>>>>>>>>
>>>>>>>>> But I have certain doubts:
>>>>>>>>> In case ldap_name is less the 256, it can be set directly 
>>>>>>>>> using saAisNameLend(),below diff,  and ntfsubscribe 
>>>>>>>>> successfully receives it.
>>>>>>>>> This goes by the description of saAisNameLend() as in such a 
>>>>>>>>> case the contents of the string is copied into the SaNameT 
>>>>>>>>> type and can be read in a
>>>>>>>>> backwards compatible way by legacy applications that do not  
>>>>>>>>> support the extended SaNameT format".
>>>>>>>>> Because of this I was able to set ldap_name directly using 
>>>>>>>>> saAisNameLend().
>>>>>>>>>
>>>>>>>>> But in case ldap_name is greater than 256 then saAisNameLend() 
>>>>>>>>> description says  "if length of the string
>>>>>>>>> is greater than or equal to SA_MAX_UNEXTENDED_NAME_LENGTH, no 
>>>>>>>>> copying is performed. Instead, a reference to the original
>>>>>>>>> string is stored in the SaNameT type."
>>>>>>>>> So for long DN the same does not work and ntfsubscribe 
>>>>>>>>> receives the garbage value because the buffer contains the 
>>>>>>>>> reference and not the original value.
>>>>>>>>> But above description we know what saAisNanmeLend() has done. 
>>>>>>>>> So I think we need to decide:  this should be considered 
>>>>>>>>> internally in the Send () API or let it to user to
>>>>>>>>> set the longDn as in the example test case. For 
>>>>>>>>> notificationObject and NotifyingObject we are setting longDn 
>>>>>>>>> by directly using saAisNameLend().
>>>>>>>>>
>>>>>>>> [Minh]: I did think about "this should be considered internally 
>>>>>>>> in the Send () API" in order that user can do the same way 
>>>>>>>> short long dn has been specified.
>>>>>>>> And inside the Send() API, before sending the notification, we 
>>>>>>>> have to re-package variable_data (reason that 
>>>>>>>> *sizeof(SaNameT)+1* is not the right size any more). But this 
>>>>>>>> is really inefficient
>>>>>>>>
>>>>>>>> In the other hands, the description of 
>>>>>>>> saNtfPtrValAllocate(SaNtfNotificationHandleT 
>>>>>>>> notificationHandle, SaUint16T dataSize, void **dataPtr, 
>>>>>>>> SaNtfValueT *value):
>>>>>>>> /*dataSize - [in] The number of bytes to be reserved.*//*
>>>>>>>> *//*dataPtr - [out] A pointer to a pointer to the memory 
>>>>>>>> location that will be reserved with this function.*/
>>>>>>>>
>>>>>>>> Thus, the dataSize is the number of bytes that user wants to 
>>>>>>>> put the content of SaNameT (both short or long dn) into a chunk 
>>>>>>>> inside variable_data which will be sent as part of notification 
>>>>>>>> message.
>>>>>>>> The app built with extended name, using saAisNameXXX, should 
>>>>>>>> understand that *sizeof(SaNameT)* is not the real size of 
>>>>>>>> SaNameT's content any more. The way that user setting longdn is 
>>>>>>>> upon the description of saNtfPtrValAllocate plus saAisNameXXX.
>>>>>>>> I wish to have:
>>>>>>>> *saAisNameEncode(SaNameT* name, char* bytes), which pours the 
>>>>>>>> content of @.name into @.bytes. It is bit more *friendly*, and 
>>>>>>>> keep user not to make the endian mistake, since user has to set 
>>>>>>>> the length of string as well:
>>>>>>>> */      *((SaUint16T*)dest_ptr) = *((SaUint16T*)&name); /**/
>>>>>>>> /**/       memcpy(dest_ptr + 2, saAisNameBorrow(&name), 
>>>>>>>> strlen(saAisNameBorrow(&name)) + 1); /*
>>>>>>> But here, as in the test case, a user always have to keep in 
>>>>>>> mind this "+2 " logic while setting the DN name and its length 
>>>>>>> and while retreving it (we are doing it in ntfclient.c).
>>>>>>>
>>>>>>>
>>>>>>>> *saAisNameDecode(...) does in reverse.
>>>>>>>> These above functions can be done by user, but it'd be good to 
>>>>>>>> have it as api that every user doesn't have to create it.
>>>>>>>> Above all of things, there's an exception that the legacy 
>>>>>>>> application by somehow receives the longDn object, then it uses 
>>>>>>>> the saNtfPtrValAllocate in the *legacy* way, that would be a 
>>>>>>>> problem. But for now, I can't imagine which situation happening
>>>>>>>>
>>>>>>>>> What do you think?
>>>>>>>>>
>>>>>>>>> Thanks,
>>>>>>>>> Praveen
>>>>>>>>>
>>>>>>>>> Here is the modified test case of ldap_name less than 256:
>>>>>>>>> diff --git a/tests/ntfsv/tet_longDnObject_notification.c 
>>>>>>>>> b/tests/ntfsv/tet_longDnObject_notification.c
>>>>>>>>> --- a/tests/ntfsv/tet_longDnObject_notification.c
>>>>>>>>> +++ b/tests/ntfsv/tet_longDnObject_notification.c
>>>>>>>>> @@ -359,15 +359,15 @@ void extFillHeader(SaNtfNotificationHead
>>>>>>>>>         /* Fill fourth additionalInfo as unextended SaNameT */
>>>>>>>>>         head->additionalInfo[3].infoType = 
>>>>>>>>> SA_NTF_VALUE_LDAP_NAME;
>>>>>>>>>         head->additionalInfo[3].infoId = 1;
>>>>>>>>> -       saAisNameLend(DEFAULT_UNEXT_NAME_STRING, &name);
>>>>>>>>> -
>>>>>>>>> +       SaNameT *name_buffer;
>>>>>>>>>         safassert(saNtfPtrValAllocate(notHandle,
>>>>>>>>> - strlen(saAisNameBorrow(&name)) + 2 + 1,
>>>>>>>>> - (void**)&dest_ptr,
>>>>>>>>> +                               sizeof(SaNameT)+ 1,
>>>>>>>>> + (void**)&name_buffer,
>>>>>>>>> &(head->additionalInfo[3].infoValue)), SA_AIS_OK);
>>>>>>>>> +       saAisNameLend(DEFAULT_UNEXT_NAME_STRING, name_buffer);
>>>>>>>>> +       //Comment log DN setting
>>>>>>>>> + 
>>>>>>>>> //saAisNameLend((SaConstStringT)&test1_ext_notification_object, 
>>>>>>>>> name_buffer); 
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> -       *((SaUint16T*)dest_ptr) = *((SaUint16T*)&name);
>>>>>>>>> -       memcpy(dest_ptr + 2, saAisNameBorrow(&name), 
>>>>>>>>> strlen(saAisNameBorrow(&name)) + 1);
>>>>>>>>>   }
>>>>>>>>>
>>>>>>>>>   /**
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On 17-Jul-14 5:55 AM, minhchau wrote:
>>>>>>>>>> Hi Praveen,
>>>>>>>>>>
>>>>>>>>>> Regarding extended name in AdditionalInfo, I have added the 
>>>>>>>>>> test for it, as in extFillHeaderAddInfo() and 
>>>>>>>>>> extAdditionalInfoTest().
>>>>>>>>>> If the app built with extended name and using SaNameT in 
>>>>>>>>>> AdditionalInfo, it certainly knows how the extented name 
>>>>>>>>>> shaping, thus it has to change the way it specifies dataSize 
>>>>>>>>>> and dataPtr (there's one example in extFillHeaderAddInfo)
>>>>>>>>>> osaf/tools/safntf/src/ntfclient.c has also fixed the crash 
>>>>>>>>>> problem when ntfread/ntfsubscribe print extended name in 
>>>>>>>>>> AdditionalInfo.
>>>>>>>>>>
>>>>>>>>>> Thanks,
>>>>>>>>>> Minh
>>>>>>>>>>
>>>>>>>>>>  tests/ntfsv/Makefile.am |    3 +-
>>>>>>>>>>  tests/ntfsv/tet_longDnObject_notification.c | 957 
>>>>>>>>>> ++++++++++++++++++++++++++++
>>>>>>>>>>  tests/unit_test_fw/inc/util.h |    5 +-
>>>>>>>>>>  tests/unit_test_fw/src/Makefile.am |    1 +
>>>>>>>>>>  tests/unit_test_fw/src/util.c               | 14 +-
>>>>>>>>>>  5 files changed, 963 insertions(+), 17 deletions(-)
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> (1) Add testcase for AdditionalInfo with extended SaNameT
>>>>>>>>>>
>>>>>>>>>> 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/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,957 @@
>>>>>>>>>> +/*      -*- 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 
>>>>>>>>>> test1_ext_notification_object[DEFAULT_EXT_NAME_LENGTH];
>>>>>>>>>> +static char 
>>>>>>>>>> test1_ext_notifying_object[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(&test1_ext_notification_object, 'C', 
>>>>>>>>>> DEFAULT_EXT_NAME_LENGTH - 1);
>>>>>>>>>> + test1_ext_notification_object[DEFAULT_EXT_NAME_LENGTH - 1] 
>>>>>>>>>> = '\0';
>>>>>>>>>> +
>>>>>>>>>> +    memcpy(&test1_ext_notifying_object, 
>>>>>>>>>> NOTIFYING_OBJECT_TEST, sizeof(NOTIFYING_OBJECT_TEST));
>>>>>>>>>> +}
>>>>>>>>>> +
>>>>>>>>>> +/**
>>>>>>>>>> + * 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 name;
>>>>>>>>>> +    *(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)&test1_ext_notification_object, 
>>>>>>>>>> &name);
>>>>>>>>>> +
>>>>>>>>>> +    safassert(saNtfPtrValAllocate(notHandle,
>>>>>>>>>> + strlen(saAisNameBorrow(&name)) + 2 + 1,
>>>>>>>>>> +                (void**)&dest_ptr,
>>>>>>>>>> + &(head->additionalInfo[0].infoValue)), SA_AIS_OK);
>>>>>>>>>> +
>>>>>>>>>> +    *((SaUint16T*)dest_ptr) = *((SaUint16T*)&name);
>>>>>>>>>> +    memcpy(dest_ptr + 2, saAisNameBorrow(&name), 
>>>>>>>>>> strlen(saAisNameBorrow(&name)) + 1);
>>>>>>>>>> +
>>>>>>>>>> +    /* Fill first additionalInfo as extended SaNameT 
>>>>>>>>>> excluding NULL character */
>>>>>>>>>> +    head->additionalInfo[1].infoType = SA_NTF_VALUE_LDAP_NAME;
>>>>>>>>>> +    head->additionalInfo[1].infoId = 1;
>>>>>>>>>> + 
>>>>>>>>>> saAisNameLend((SaConstStringT)&test1_ext_notification_object, 
>>>>>>>>>> &name);
>>>>>>>>>> +
>>>>>>>>>> +    safassert(saNtfPtrValAllocate(notHandle,
>>>>>>>>>> + strlen(saAisNameBorrow(&name)) + 2,
>>>>>>>>>> +                (void**)&dest_ptr,
>>>>>>>>>> + &(head->additionalInfo[1].infoValue)), SA_AIS_OK);
>>>>>>>>>> +
>>>>>>>>>> +    *((SaUint16T*)dest_ptr) = *((SaUint16T*)&name);
>>>>>>>>>> +    memcpy(dest_ptr + 2, saAisNameBorrow(&name), 
>>>>>>>>>> strlen(saAisNameBorrow(&name)));
>>>>>>>>>> +
>>>>>>>>>> +    /* Fill third additionalInfo as unextended SaNameT as 
>>>>>>>>>> legacy code */
>>>>>>>>>> +    head->additionalInfo[2].infoType = SA_NTF_VALUE_LDAP_NAME;
>>>>>>>>>> +    head->additionalInfo[2].infoId = 1;
>>>>>>>>>> +    saAisNameLend(DEFAULT_UNEXT_NAME_STRING, &name);
>>>>>>>>>> +
>>>>>>>>>> +    safassert(saNtfPtrValAllocate(notHandle,
>>>>>>>>>> +                sizeof(name),
>>>>>>>>>> +                (void**)&dest_ptr,
>>>>>>>>>> + &(head->additionalInfo[2].infoValue)), SA_AIS_OK);
>>>>>>>>>> +
>>>>>>>>>> +    memcpy(dest_ptr, &name, sizeof(name));
>>>>>>>>>> +
>>>>>>>>>> +    /* Fill fourth additionalInfo as unextended SaNameT */
>>>>>>>>>> +    head->additionalInfo[3].infoType = SA_NTF_VALUE_LDAP_NAME;
>>>>>>>>>> +    head->additionalInfo[3].infoId = 1;
>>>>>>>>>> +    saAisNameLend(DEFAULT_UNEXT_NAME_STRING, &name);
>>>>>>>>>> +
>>>>>>>>>> +    safassert(saNtfPtrValAllocate(notHandle,
>>>>>>>>>> + strlen(saAisNameBorrow(&name)) + 2 + 1,
>>>>>>>>>> +                (void**)&dest_ptr,
>>>>>>>>>> + &(head->additionalInfo[3].infoValue)), SA_AIS_OK);
>>>>>>>>>> +
>>>>>>>>>> +    *((SaUint16T*)dest_ptr) = *((SaUint16T*)&name);
>>>>>>>>>> +    memcpy(dest_ptr + 2, saAisNameBorrow(&name), 
>>>>>>>>>> strlen(saAisNameBorrow(&name)) + 1);
>>>>>>>>>> + }
>>>>>>>>>> +
>>>>>>>>>> + /**
>>>>>>>>>> +  * 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),
>>>>>>>>>> +            4,
>>>>>>>>>> +            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)&test1_ext_notification_object, 
>>>>>>>>>> head->notificationObject);
>>>>>>>>>> + 
>>>>>>>>>> safassert(saNtfNotificationSend(myAlarmNotification.notificationHandle),
>>>>>>>>>>  
>>>>>>>>>> SA_AIS_OK);
>>>>>>>>>> +
>>>>>>>>>> +    extFillHeader(head);
>>>>>>>>>> + saAisNameLend((SaConstStringT)&test1_ext_notifying_object, 
>>>>>>>>>> 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(35, "Long DNs Test");
>>>>>>>>>> +    test_case_add(35, extAdditionalInfoTest
>>>>>>>>>> +                    , "Test additional info with extended 
>>>>>>>>>> SaNameT type");
>>>>>>>>>> +    test_case_add(35, extFilterNotificationTest
>>>>>>>>>> +                    , "Test filter with longDn objects");
>>>>>>>>>> +    test_case_add(35, extAlarmNotificationTest
>>>>>>>>>> +                    , "Test Alarm notification with longDn 
>>>>>>>>>> objects");
>>>>>>>>>> +    test_case_add(35, extObjectCreateDeleteNotificationTest
>>>>>>>>>> +                    , "Test Object Create/Delete 
>>>>>>>>>> notification with longDn objects");
>>>>>>>>>> +    test_case_add(35, extAttributeChangeNotificationTest
>>>>>>>>>> +                    , "Test Attribute Change notification 
>>>>>>>>>> with longDn objects");
>>>>>>>>>> +    test_case_add(35, extStateChangeNotificationTest
>>>>>>>>>> +                    , "Test State Change notification with 
>>>>>>>>>> longDn objects");
>>>>>>>>>> +    test_case_add(35, 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)
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>

------------------------------------------------------------------------------
Infragistics Professional
Build stunning WinForms apps today!
Reboot your WinForms applications with our WinForms controls. 
Build a bridge from your legacy apps to the future.
http://pubads.g.doubleclick.net/gampad/clk?id=153845071&iu=/4140/ostg.clktrk
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to