You have a point, backwards compatibility is tricky when fixing bugs. So 
the current situation is then that sometimes SA_NTF_VALUE_LDAP_NAME 
comes with two bytes of length information in the beginning, and 
sometimes it doesn't. How will the user know how to interpret the value?

I don't see a problem with allocating too much memory (other than that 
it is wasteful). So the documentation can say that for 
SA_NTF_VALUE_LDAP_NAME, you should allocate AT LEAST strlen(x) + 3 bytes.

/ Anders Widell

On 07/31/2014 01:42 PM, minhchau wrote:
> Yes it's a bug I think so, but I'm not sure if we can fix it due to 
> backward compatibility.
>
> On 7/31/2014 8:49 PM, Anders Widell wrote:
>> Yes I noticed, but that is a bug in ntfimcn_notifier.c, isn't it? The 
>> SAF spec says that for SA_NTF_VALUE_LDAP_NAME, the data type is SaNameT.
>>
>> / Anders Widell
>>
>> On 07/31/2014 12:45 PM, minhchau wrote:
>>> Note that the usage of SA_NTF_VALUE_LDAP_NAME for SaNtfValueT is not 
>>> consistent. Currently the ntfimcn_notifier.c , function 
>>> fill_attribute_value(), treat SA_NTF_VALUE_LDAP_NAME as 
>>> SA_NTF_VALUE_STRING, it drop out 2 bytes of .length.
>>> . So it's not always "strlen(x) + 3" in document.
>>>
>>> On 7/31/2014 8:17 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.
>>>>
>>>> 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
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to