On 31-Jul-14 5:36 PM, Anders Widell wrote:
> 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?
>
When LDAP name is set a user knows it by SaNtfValueTypeT in additional
info structure
typedef struct {
SaNtfElementIdT infoId;
/* API user is expected to define this field */
SaNtfValueTypeT infoType;
SaNtfValueT infoValue;
} SaNtfAdditionalInfoT;
Thanks,
Praveen
> 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
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel