On 31-Jul-14 5:31 PM, Anders Widell wrote:
>
> On 07/31/2014 01:40 PM, praveen malviya wrote:
>>
>> On 31-Jul-14 3:47 PM, Anders Widell wrote:
>>> I am leaning towards your suggested solution for 
>>> SA_NTF_VALUE_LDAP_NAME now. :-) It will be the easiest one to 
>>> implement in NTF, but it may be a bit non-obvious to the user. We 
>>> have to clearly document that for SA_NTF_VALUE_LDAP_NAME, the user 
>>> must allocate strlen(x) + 3 bytes.
>>>
>>> With the help of Praveen's patch, it is possible to use 
>>> saAisNameLend() on the allocated data for additional info. Something 
>>> similar must then be done also at other places where SaNtfValueT is 
>>> used, and I think this is still missing. Also, at the receiving end 
>>> it is still not possible to use saAisNameBorrow() because we would 
>>> need to perform the opposite conversion first.
>>>
>>> A mabe simpler yet solution is to state in the documentation that 
>>> saAisNameLend() / saAisNameBorrow() must NOT be used for data type 
>>> SA_NTF_VALUE_LDAP_NAME. Instead, the user would himself be 
>>> responsible for filling in 16-bit length + NUL terminated string.
>>>
>> V3 of the patches is already uses this way for 
>> SA_NTF_VALUE_LDAP_NAME. In the newly added test cases for longDns:
>>
>> -    *((SaUint16T*)dest_ptr) = *((SaUint16T*)&name);
>> -    memcpy(dest_ptr + 2, saAisNameBorrow(&name), 
>> strlen(saAisNameBorrow(&name)));
>>
>> But then when notification is received, ntfsv should give SaNameT 
>> through saNtfPtrValGet() and user will get the string using 
>> saAisNameBorrow().
> This is not part of the current patch. How will it work? Let's say the 
> string is longer than 255 bytes and doesn't fit in the old SaNameT 
> structure. Will saNtfPtrValGet() dynamically allocate a temporary 
> SaNameT with a pointer to the data? How is this dynamically allocated 
> memory going to be released?
saNtfPtrValGet() is called inside notificaion callback. In notificaion 
callback user has to call saNtfNotificaionFree() that time ntffsv can 
release memory.

Thanks
Praveen
>>
>> Thanks,
>> Praveen
>>> When I look at the existing code, it seems rather buggy for 
>>> SA_NTF_VALUE_LDAP_NAME. This 16-bit length field in SaNameT, 
>>> shouldn't it be encoded so that we handle big-endian / little endian 
>>> conversion properly? I don't see where this is done in the old code.
>>>
>>> / Anders Widell
>>>
>>> On 07/31/2014 11:45 AM, praveen malviya wrote:
>>>>
>>>> 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