On 31-Jul-14 2:50 PM, Anders Widell wrote:
>
> 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?
I am not aware of such a case in other service. But, as pointed out 
already in this mail thread, a user will also not know this just by the 
sizeof (SaNameT). I think
the description of aisa_api.c for bot the APIs should also be kept in 
saAis_B_5_14.h and AIS PR doc.

Thanks,
Praveen
>>> 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