On 08/01/2014 10:29 AM, minhchau wrote: > On 8/1/2014 5:19 PM, Anders Widell wrote: >> >> On 07/31/2014 02:19 PM, praveen malviya wrote: >>> >>> On 31-Jul-14 5:31 PM, Anders Widell wrote: >>>> >>>> On 07/31/2014 01:40 PM, praveen malviya wrote: >>>>> >>>>> On 31-Jul-14 3:47 PM, Anders Widell wrote: >>>>>> I am leaning towards your suggested solution for >>>>>> SA_NTF_VALUE_LDAP_NAME now. :-) It will be the easiest one to >>>>>> implement in NTF, but it may be a bit non-obvious to the user. We >>>>>> have to clearly document that for SA_NTF_VALUE_LDAP_NAME, the >>>>>> user must allocate strlen(x) + 3 bytes. >>>>>> >>>>>> With the help of Praveen's patch, it is possible to use >>>>>> saAisNameLend() on the allocated data for additional info. >>>>>> Something similar must then be done also at other places where >>>>>> SaNtfValueT is used, and I think this is still missing. Also, at >>>>>> the receiving end it is still not possible to use >>>>>> saAisNameBorrow() because we would need to perform the opposite >>>>>> conversion first. >>>>>> >>>>>> A mabe simpler yet solution is to state in the documentation that >>>>>> saAisNameLend() / saAisNameBorrow() must NOT be used for data >>>>>> type SA_NTF_VALUE_LDAP_NAME. Instead, the user would himself be >>>>>> responsible for filling in 16-bit length + NUL terminated string. >>>>>> >>>>> V3 of the patches is already uses this way for >>>>> SA_NTF_VALUE_LDAP_NAME. In the newly added test cases for longDns: >>>>> >>>>> - *((SaUint16T*)dest_ptr) = *((SaUint16T*)&name); >>>>> - memcpy(dest_ptr + 2, saAisNameBorrow(&name), >>>>> strlen(saAisNameBorrow(&name))); >>>>> >>>>> But then when notification is received, ntfsv should give SaNameT >>>>> through saNtfPtrValGet() and user will get the string using >>>>> saAisNameBorrow(). >>>> This is not part of the current patch. How will it work? Let's say >>>> the string is longer than 255 bytes and doesn't fit in the old >>>> SaNameT structure. Will saNtfPtrValGet() dynamically allocate a >>>> temporary SaNameT with a pointer to the data? How is this >>>> dynamically allocated memory going to be released? >>> saNtfPtrValGet() is called inside notificaion callback. In >>> notificaion callback user has to call saNtfNotificaionFree() that >>> time ntffsv can release memory. >> Ok. Another thing to consider: What if the (consumer) client does not >> support extended DNs? One possibility here would be to truncate DNs >> to 255 bytes. > [Minh]: Let say after upgrade to Opensaf 4.5 supporting extended DNs, > but there's still one legacy client not support extended DNs *living* > in Opensaf 4.5. By somehow the client receives long SaNameT from other > services and this SaNameT goes through the legacy code, which is using > sizeof(SaNameT) to allocate the memory by saNtfPtrValAllocate. That > would be a problem, the size of memory is not large enough to put the > entire string later in Send() API. > Do you think this situation could happen in real? This legacy client > would end up many problems to access SaNameT, not only by the way it > uses NTF API
Yes, this is exactly why we have the environment variable SA_ENABLE_EXTENDED_NAMES. It makes it possible for the agent code to detect if the client supports extended DNs or not. If the client doesn't support it, the agent should handle the situation in an appropriate way. It could either send an error code to the client, or it could truncate the string. > >>> >>> Thanks >>> Praveen >>>>> >>>>> Thanks, >>>>> Praveen >>>>>> When I look at the existing code, it seems rather buggy for >>>>>> SA_NTF_VALUE_LDAP_NAME. This 16-bit length field in SaNameT, >>>>>> shouldn't it be encoded so that we handle big-endian / little >>>>>> endian conversion properly? I don't see where this is done in the >>>>>> old code. >>>>>> >>>>>> / Anders Widell >>>>>> >>>>>> On 07/31/2014 11:45 AM, praveen malviya wrote: >>>>>>> >>>>>>> On 31-Jul-14 2:50 PM, Anders Widell wrote: >>>>>>>> >>>>>>>> On 07/31/2014 11:10 AM, praveen malviya wrote: >>>>>>>>> >>>>>>>>> On 31-Jul-14 1:39 PM, Anders Widell wrote: >>>>>>>>>> saAisNameLend() adds a terminating NUL character, so I think >>>>>>>>>> you would still need strlen(saAisNameBorrow(&name)) + 2 + 1 >>>>>>>>>> even with Praveen's patch, otherwise saAisNameLend() will >>>>>>>>>> write one byte past the end of the allocated buffer when the >>>>>>>>>> string is shorter than 256 bytes.Another concern is, can a >>>>>>>>>> notification be re-used and be sent multiple times? The >>>>>>>>>> current version of the patch will not work in the (rare) case >>>>>>>>>> that the string length is equal to kExtendedNameMagic. >>>>>>>>> If string length is >= kExtendedNameMagic then NtfSend() API >>>>>>>>> can return error as it is already doing it for other parameters. >>>>>>>> You are right, kExtendedNameMagic is larger than kMaxDnLength >>>>>>>> is it is not a problem as long as we check against kMaxDnLength. >>>>>>>> >>>>>>>>>> Third concern: there is no check that the user has allocated >>>>>>>>>> enough space. What if the user has by mistake allocated a >>>>>>>>>> buffer that is too small, e.g. sizeof(SaNameT) bytes, when >>>>>>>>>> the string is longer than 256 bytes? >>>>>>>>>> >>>>>>>>> This problem can come in any other service also. Does this >>>>>>>>> require some extensions in saAis*.h in future. >>>>>>>> Well it is mainly a problem in the NTF API due to it's very >>>>>>>> strange way of handling memory allocations, e.g. >>>>>>>> saNtfPtrValAllocate(). Is there a similar memory allocation API >>>>>>>> in some other service that could cause problems with SaNameT? >>>>>>> I am not aware of such a case in other service. But, as pointed >>>>>>> out already in this mail thread, a user will also not know this >>>>>>> just by the sizeof (SaNameT). I think >>>>>>> the description of aisa_api.c for bot the APIs should also be >>>>>>> kept in saAis_B_5_14.h and AIS PR doc. >>>>>>> >>>>>>> Thanks, >>>>>>> Praveen >>>>>>>>>> The + 2 (or rather, + 2 + 1) will work, but it is a bit >>>>>>>>>> non-obvious. It would need to be documented clearly since I >>>>>>>>>> see a potential for user mistakes here. The user is not >>>>>>>>>> supposed to know or care about the internal structure of >>>>>>>>>> SaNameT anymore; it is supposed to be opaque. My proposal is >>>>>>>>>> that you instead handle extended SaNameT during encoding, >>>>>>>>>> i.e. in encodeSaNtfValueT(). >>>>>>>>>> >>>>>>>>>> / Anders Widell >>>>>>>>>> >>>>>>>>>> On 07/31/2014 09:08 AM, minhchau wrote: >>>>>>>>>>> Hi Anders, Praveen, >>>>>>>>>>> >>>>>>>>>>> sizeof(SaNameT) is not the right size to request the memory >>>>>>>>>>> allocation any more. It should be the real size (length of >>>>>>>>>>> string + 2 bytes of .length). It will looks like this >>>>>>>>>>> >>>>>>>>>>> saNtfPtrValAllocate(notHandle, >>>>>>>>>>> strlen(saAisNameBorrow(&name)) + 2, >>>>>>>>>>> (void**)&dest_ptr, >>>>>>>>>>> &(head->additionalInfo[1].infoValue)); >>>>>>>>>>> saAisNameLend((SaConstStringT)&test1_ext_notification_object, >>>>>>>>>>> (SaNameT*) >>>>>>>>>>> dest_ptr); >>>>>>>>>>> >>>>>>>>>>> @Praveen: I agree with you and can I take your patch for the >>>>>>>>>>> next version? >>>>>>>>>>> >>>>>>>>>>> Thanks/Minh >>>>>>>>>>> On 7/30/2014 10:53 PM, Anders Widell wrote: >>>>>>>>>>>> Hi! >>>>>>>>>>>> >>>>>>>>>>>> This + 2 thing looks a bit hairy to me. The size of the >>>>>>>>>>>> SaNameT type has not changed; it is exactly 258 bytes. >>>>>>>>>>>> Wouldn't it be more natural if the client, when using the >>>>>>>>>>>> SA_NTF_VALUE_LDAP_NAME data type, requests to allocate >>>>>>>>>>>> sizeof(SaNameT) bytes, and then stores a pointer to the >>>>>>>>>>>> string in this allocated data by calling saAisNameLend() ? >>>>>>>>>>>> >>>>>>>>>>>> Not sure how this code used to work before. What happened >>>>>>>>>>>> if the user uses SA_NTF_VALUE_LDAP_NAME and requests to >>>>>>>>>>>> allocate space that is smaller than sizeof(SaNameT)? I >>>>>>>>>>>> guess it would be OK, as long as the size is large enough >>>>>>>>>>>> to hold the entire string as indicated by the >>>>>>>>>>>> SaNameT.length field. But what happens if the allocated >>>>>>>>>>>> memory is not large enough to hold the entire string? The >>>>>>>>>>>> NTF agent should have a check for this, I guess... >>>>>>>>>>>> >>>>>>>>>>>> / Anders Widell >>>>>>>>>>>> >>>>>>>>>>>> On 07/30/2014 11:26 AM, praveen malviya wrote: >>>>>>>>>>>>> >>>>>>>>>>>>> On 30-Jul-14 7:17 AM, minhchau wrote: >>>>>>>>>>>>>> Hi Praveen, >>>>>>>>>>>>>> >>>>>>>>>>>>>> I think the main purpose in your patch is to let the >>>>>>>>>>>>>> Send() API takes care the variable_data and the client >>>>>>>>>>>>>> just simply uses saAisNameLend() >>>>>>>>>>>>>> >>>>>>>>>>>>>> + >>>>>>>>>>>>>> saAisNameLend((SaConstStringT)&test1_ext_notification_object, >>>>>>>>>>>>>> (SaNameT*) dest_ptr); >>>>>>>>>>>>>> >>>>>>>>>>>>>> Instead of: >>>>>>>>>>>>>> >>>>>>>>>>>>>> - *((SaUint16T*)dest_ptr) = *((SaUint16T*)&name); >>>>>>>>>>>>>> - memcpy(dest_ptr + 2, saAisNameBorrow(&name), >>>>>>>>>>>>>> strlen(saAisNameBorrow(&name))); >>>>>>>>>>>>>> >>>>>>>>>>>>>> Looks good, but it's risky because the >>>>>>>>>>>>>> test1_ext_notification_object must not be >>>>>>>>>>>>>> changed/deallocated before calling the Send() API. We >>>>>>>>>>>>>> can't stop the client doing that, since >>>>>>>>>>>>>> test1_ext_notification_object could be reused for other >>>>>>>>>>>>>> purpose, unless the client must have N string variables >>>>>>>>>>>>>> (like this test1_ext_notification_object) if it wants to >>>>>>>>>>>>>> add respectively N SA_NTF_VALUE_LDAP_NAME into AdditionalInfo >>>>>>>>>>>>>> >>>>>>>>>>>>> But, description of the SaAisNameLend() API says: >>>>>>>>>>>>> " If length of the string >>>>>>>>>>>>> is greater than or equal to >>>>>>>>>>>>> SA_MAX_UNEXTENDED_NAME_LENGTH, no >>>>>>>>>>>>> copying is performed. Instead, a >>>>>>>>>>>>> reference to the original >>>>>>>>>>>>> string is stored in the SaNameT type. >>>>>>>>>>>>> In this case, it is >>>>>>>>>>>>> therefore important that the original >>>>>>>>>>>>> string is not modified >>>>>>>>>>>>> or freed for as long as the SaNameT >>>>>>>>>>>>> type may still used. >>>>>>>>>>>>> " >>>>>>>>>>>>> So a user should not reuse the same memory or should not >>>>>>>>>>>>> modified till SaNameT is in use. >>>>>>>>>>>>> Referring to this, I think, in the NTFsv case, we can >>>>>>>>>>>>> change the test1_ext_notification_object only after >>>>>>>>>>>>> calling Send() API. >>>>>>>>>>>>> At the same time it is aligned with NTF service >>>>>>>>>>>>> saNtf*Allocate() API also. A user calls saNtf*Allocate() >>>>>>>>>>>>> API and fills the parameter and sends notification, then >>>>>>>>>>>>> again refills the values and send the notification on same >>>>>>>>>>>>> call of saNtf*Allocate() API. >>>>>>>>>>>>> >>>>>>>>>>>>> What do you think? >>>>>>>>>>>>> >>>>>>>>>>>>> Thanks, >>>>>>>>>>>>> Praveen >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>>> Thanks, >>>>>>>>>>>>>> Minh >>>>>>>>>>>>>> On 7/28/2014 6:56 PM, praveen malviya wrote: >>>>>>>>>>>>>>> Re: [PATCH 6 of 7] NTF: Add ntftest test cases for >>>>>>>>>>>>>>> notification, with long dn objects [#873] v2 Hi Minh, >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> I have tried a small patch to use saAisNameLend() for >>>>>>>>>>>>>>> extended name in saNtfPtrValAllocate() for the discussed >>>>>>>>>>>>>>> case. >>>>>>>>>>>>>>> It is handled in Send() API. Patch is generated on top >>>>>>>>>>>>>>> of V3 patchs and also includes relevant test changes in >>>>>>>>>>>>>>> extFillHeaderAddInfo() in tet_longDnObject_notification.c. >>>>>>>>>>>>>>> Please review it. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Thanks >>>>>>>>>>>>>>> Praveen >>>>>>>>>>>>>>> On 18-Jul-14 5:22 AM, minhchau wrote: >>>>>>>>>>>>>>>> Hi Praveen, >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Please find my comments inline >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Thanks, >>>>>>>>>>>>>>>> Minh >>>>>>>>>>>>>>>> On 7/17/2014 5:02 PM, praveen malviya wrote: >>>>>>>>>>>>>>>>> Hi Minh, >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> I saw the test and the way long DN is being used in >>>>>>>>>>>>>>>>> the API. >>>>>>>>>>>>>>>>> I tried to modified that in one way for short DN(below >>>>>>>>>>>>>>>>> is the patch/diff on top this patch). >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> But I have certain doubts: >>>>>>>>>>>>>>>>> In case ldap_name is less the 256, it can be set >>>>>>>>>>>>>>>>> directly using saAisNameLend(),below diff, and >>>>>>>>>>>>>>>>> ntfsubscribe successfully receives it. >>>>>>>>>>>>>>>>> This goes by the description of saAisNameLend() as in >>>>>>>>>>>>>>>>> such a case the contents of the string is copied into >>>>>>>>>>>>>>>>> the SaNameT type and can be read in a >>>>>>>>>>>>>>>>> backwards compatible way by legacy applications that >>>>>>>>>>>>>>>>> do not support the extended SaNameT format". >>>>>>>>>>>>>>>>> Because of this I was able to set ldap_name directly >>>>>>>>>>>>>>>>> using saAisNameLend(). >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> But in case ldap_name is greater than 256 then >>>>>>>>>>>>>>>>> saAisNameLend() description says "if length of the >>>>>>>>>>>>>>>>> string >>>>>>>>>>>>>>>>> is greater than or equal to >>>>>>>>>>>>>>>>> SA_MAX_UNEXTENDED_NAME_LENGTH, no copying is >>>>>>>>>>>>>>>>> performed. Instead, a reference to the original >>>>>>>>>>>>>>>>> string is stored in the SaNameT type." >>>>>>>>>>>>>>>>> So for long DN the same does not work and ntfsubscribe >>>>>>>>>>>>>>>>> receives the garbage value because the buffer contains >>>>>>>>>>>>>>>>> the reference and not the original value. >>>>>>>>>>>>>>>>> But above description we know what saAisNanmeLend() >>>>>>>>>>>>>>>>> has done. So I think we need to decide: this should >>>>>>>>>>>>>>>>> be considered internally in the Send () API or let it >>>>>>>>>>>>>>>>> to user to >>>>>>>>>>>>>>>>> set the longDn as in the example test case. For >>>>>>>>>>>>>>>>> notificationObject and NotifyingObject we are setting >>>>>>>>>>>>>>>>> longDn by directly using saAisNameLend(). >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> [Minh]: I did think about "this should be considered >>>>>>>>>>>>>>>> internally in the Send () API" in order that user can >>>>>>>>>>>>>>>> do the same way short long dn has been specified. >>>>>>>>>>>>>>>> And inside the Send() API, before sending the >>>>>>>>>>>>>>>> notification, we have to re-package variable_data >>>>>>>>>>>>>>>> (reason that *sizeof(SaNameT)+1* is not the right size >>>>>>>>>>>>>>>> any more). But this is really inefficient >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> In the other hands, the description of >>>>>>>>>>>>>>>> saNtfPtrValAllocate(SaNtfNotificationHandleT >>>>>>>>>>>>>>>> notificationHandle, SaUint16T dataSize, void **dataPtr, >>>>>>>>>>>>>>>> SaNtfValueT *value): >>>>>>>>>>>>>>>> /*dataSize - [in] The number of bytes to be reserved.*//* >>>>>>>>>>>>>>>> *//*dataPtr - [out] A pointer to a pointer to the >>>>>>>>>>>>>>>> memory location that will be reserved with this function.*/ >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Thus, the dataSize is the number of bytes that user >>>>>>>>>>>>>>>> wants to put the content of SaNameT (both short or long >>>>>>>>>>>>>>>> dn) into a chunk inside variable_data which will be >>>>>>>>>>>>>>>> sent as part of notification message. >>>>>>>>>>>>>>>> The app built with extended name, using saAisNameXXX, >>>>>>>>>>>>>>>> should understand that *sizeof(SaNameT)* is not the >>>>>>>>>>>>>>>> real size of SaNameT's content any more. The way that >>>>>>>>>>>>>>>> user setting longdn is upon the description of >>>>>>>>>>>>>>>> saNtfPtrValAllocate plus saAisNameXXX. >>>>>>>>>>>>>>>> I wish to have: >>>>>>>>>>>>>>>> *saAisNameEncode(SaNameT* name, char* bytes), which >>>>>>>>>>>>>>>> pours the content of @.name into @.bytes. It is bit >>>>>>>>>>>>>>>> more *friendly*, and keep user not to make the endian >>>>>>>>>>>>>>>> mistake, since user has to set the length of string as >>>>>>>>>>>>>>>> well: >>>>>>>>>>>>>>>> */*((SaUint16T*)dest_ptr) = *((SaUint16T*)&name); /**/ >>>>>>>>>>>>>>>> /**/memcpy(dest_ptr + 2, saAisNameBorrow(&name), >>>>>>>>>>>>>>>> strlen(saAisNameBorrow(&name)) + 1); /* >>>>>>>>>>>>>>> But here, as in the test case, a user always have to >>>>>>>>>>>>>>> keep in mind this "+2 " logic while setting the DN name >>>>>>>>>>>>>>> and its length and while retreving it (we are doing it >>>>>>>>>>>>>>> in ntfclient.c). >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> *saAisNameDecode(...) does in reverse. >>>>>>>>>>>>>>>> These above functions can be done by user, but it'd be >>>>>>>>>>>>>>>> good to have it as api that every user doesn't have to >>>>>>>>>>>>>>>> create it. >>>>>>>>>>>>>>>> Above all of things, there's an exception that the >>>>>>>>>>>>>>>> legacy application by somehow receives the longDn >>>>>>>>>>>>>>>> object, then it uses the saNtfPtrValAllocate in the >>>>>>>>>>>>>>>> *legacy* way, that would be a problem. But for now, I >>>>>>>>>>>>>>>> can't imagine which situation happening >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> What do you think? >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Thanks, >>>>>>>>>>>>>>>>> Praveen >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Here is the modified test case of ldap_name less than >>>>>>>>>>>>>>>>> 256: >>>>>>>>>>>>>>>>> diff --git >>>>>>>>>>>>>>>>> a/tests/ntfsv/tet_longDnObject_notification.c >>>>>>>>>>>>>>>>> b/tests/ntfsv/tet_longDnObject_notification.c >>>>>>>>>>>>>>>>> --- a/tests/ntfsv/tet_longDnObject_notification.c >>>>>>>>>>>>>>>>> +++ b/tests/ntfsv/tet_longDnObject_notification.c >>>>>>>>>>>>>>>>> @@ -359,15 +359,15 @@ void >>>>>>>>>>>>>>>>> extFillHeader(SaNtfNotificationHead >>>>>>>>>>>>>>>>> /* Fill fourth additionalInfo as unextended >>>>>>>>>>>>>>>>> SaNameT */ >>>>>>>>>>>>>>>>> head->additionalInfo[3].infoType = >>>>>>>>>>>>>>>>> SA_NTF_VALUE_LDAP_NAME; >>>>>>>>>>>>>>>>> head->additionalInfo[3].infoId = 1; >>>>>>>>>>>>>>>>> - saAisNameLend(DEFAULT_UNEXT_NAME_STRING, &name); >>>>>>>>>>>>>>>>> - >>>>>>>>>>>>>>>>> + SaNameT *name_buffer; >>>>>>>>>>>>>>>>> safassert(saNtfPtrValAllocate(notHandle, >>>>>>>>>>>>>>>>> - strlen(saAisNameBorrow(&name)) + 2 + 1, >>>>>>>>>>>>>>>>> - (void**)&dest_ptr, >>>>>>>>>>>>>>>>> + sizeof(SaNameT)+ 1, >>>>>>>>>>>>>>>>> + (void**)&name_buffer, >>>>>>>>>>>>>>>>> &(head->additionalInfo[3].infoValue)), SA_AIS_OK); >>>>>>>>>>>>>>>>> + saAisNameLend(DEFAULT_UNEXT_NAME_STRING, name_buffer); >>>>>>>>>>>>>>>>> + //Comment log DN setting >>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>> //saAisNameLend((SaConstStringT)&test1_ext_notification_object, >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> name_buffer); >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> - *((SaUint16T*)dest_ptr) = *((SaUint16T*)&name); >>>>>>>>>>>>>>>>> - memcpy(dest_ptr + 2, saAisNameBorrow(&name), >>>>>>>>>>>>>>>>> strlen(saAisNameBorrow(&name)) + 1); >>>>>>>>>>>>>>>>> } >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> /** >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> On 17-Jul-14 5:55 AM, minhchau wrote: >>>>>>>>>>>>>>>>>> Hi Praveen, >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Regarding extended name in AdditionalInfo, I have >>>>>>>>>>>>>>>>>> added the test for it, as in extFillHeaderAddInfo() >>>>>>>>>>>>>>>>>> and extAdditionalInfoTest(). >>>>>>>>>>>>>>>>>> If the app built with extended name and using SaNameT >>>>>>>>>>>>>>>>>> in AdditionalInfo, it certainly knows how the >>>>>>>>>>>>>>>>>> extented name shaping, thus it has to change the way >>>>>>>>>>>>>>>>>> it specifies dataSize and dataPtr (there's one >>>>>>>>>>>>>>>>>> example in extFillHeaderAddInfo) >>>>>>>>>>>>>>>>>> osaf/tools/safntf/src/ntfclient.c has also fixed the >>>>>>>>>>>>>>>>>> crash problem when ntfread/ntfsubscribe print >>>>>>>>>>>>>>>>>> extended name in AdditionalInfo. >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Thanks, >>>>>>>>>>>>>>>>>> Minh >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> tests/ntfsv/Makefile.am | 3 +- >>>>>>>>>>>>>>>>>> tests/ntfsv/tet_longDnObject_notification.c | 957 >>>>>>>>>>>>>>>>>> ++++++++++++++++++++++++++++ >>>>>>>>>>>>>>>>>> tests/unit_test_fw/inc/util.h | 5 +- >>>>>>>>>>>>>>>>>> tests/unit_test_fw/src/Makefile.am | 1 + >>>>>>>>>>>>>>>>>> tests/unit_test_fw/src/util.c | 14 +- >>>>>>>>>>>>>>>>>> 5 files changed, 963 insertions(+), 17 deletions(-) >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> (1) Add testcase for AdditionalInfo with extended >>>>>>>>>>>>>>>>>> SaNameT >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> diff --git a/tests/ntfsv/Makefile.am >>>>>>>>>>>>>>>>>> b/tests/ntfsv/Makefile.am >>>>>>>>>>>>>>>>>> --- a/tests/ntfsv/Makefile.am >>>>>>>>>>>>>>>>>> +++ b/tests/ntfsv/Makefile.am >>>>>>>>>>>>>>>>>> @@ -64,7 +64,8 @@ ntftest_SOURCES = \ >>>>>>>>>>>>>>>>>> tet_saNtfPtrValAllocate.c \ >>>>>>>>>>>>>>>>>> tet_saNtfArrayValGet.c \ >>>>>>>>>>>>>>>>>> tet_saNtfPtrValGet.c \ >>>>>>>>>>>>>>>>>> - test_ntfFilterVerification.c >>>>>>>>>>>>>>>>>> + test_ntfFilterVerification.c \ >>>>>>>>>>>>>>>>>> + tet_longDnObject_notification.c >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> ntftest_LDADD = \ >>>>>>>>>>>>>>>>>> $(top_builddir)/tests/unit_test_fw/src/libutest.la >>>>>>>>>>>>>>>>>> diff --git >>>>>>>>>>>>>>>>>> a/tests/ntfsv/tet_longDnObject_notification.c >>>>>>>>>>>>>>>>>> b/tests/ntfsv/tet_longDnObject_notification.c >>>>>>>>>>>>>>>>>> new file mode 100644 >>>>>>>>>>>>>>>>>> --- /dev/null >>>>>>>>>>>>>>>>>> +++ b/tests/ntfsv/tet_longDnObject_notification.c >>>>>>>>>>>>>>>>>> @@ -0,0 +1,957 @@ >>>>>>>>>>>>>>>>>> +/* -*- OpenSAF -*- >>>>>>>>>>>>>>>>>> + * >>>>>>>>>>>>>>>>>> + * (C) Copyright 2009 The OpenSAF Foundation >>>>>>>>>>>>>>>>>> + * >>>>>>>>>>>>>>>>>> + * This program is distributed in the hope that it >>>>>>>>>>>>>>>>>> will be useful, but >>>>>>>>>>>>>>>>>> + * WITHOUT ANY WARRANTY; without even the implied >>>>>>>>>>>>>>>>>> warranty of MERCHANTABILITY >>>>>>>>>>>>>>>>>> + * or FITNESS FOR A PARTICULAR PURPOSE. This file >>>>>>>>>>>>>>>>>> and program are licensed >>>>>>>>>>>>>>>>>> + * under the GNU Lesser General Public License >>>>>>>>>>>>>>>>>> Version 2.1, February 1999. >>>>>>>>>>>>>>>>>> + * The complete license can be accessed from the >>>>>>>>>>>>>>>>>> following location: >>>>>>>>>>>>>>>>>> + *http://opensource.org/licenses/lgpl-license.php >>>>>>>>>>>>>>>>>> + * See the Copying file included with the OpenSAF >>>>>>>>>>>>>>>>>> distribution for full >>>>>>>>>>>>>>>>>> + * licensing terms. >>>>>>>>>>>>>>>>>> + * >>>>>>>>>>>>>>>>>> + * Author(s): Ericsson AB >>>>>>>>>>>>>>>>>> + * >>>>>>>>>>>>>>>>>> + */ >>>>>>>>>>>>>>>>>> +/** >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + */ >>>>>>>>>>>>>>>>>> +#include <utest.h> >>>>>>>>>>>>>>>>>> +#include <util.h> >>>>>>>>>>>>>>>>>> +#include "tet_ntf.h" >>>>>>>>>>>>>>>>>> +#include "tet_ntf_common.h" >>>>>>>>>>>>>>>>>> +//#include "util.h" >>>>>>>>>>>>>>>>>> +#define NOTIFYING_OBJECT_TEST "AVND" >>>>>>>>>>>>>>>>>> +#define NTF_REST_MAX_IDS 30 >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> +#define DEFAULT_EXT_NAME_LENGTH 300 >>>>>>>>>>>>>>>>>> +#define DEFAULT_UNEXT_NAME_STRING "This is >>>>>>>>>>>>>>>>>> unextended SaNameT string (<256)" >>>>>>>>>>>>>>>>>> +struct not_idsT { >>>>>>>>>>>>>>>>>> + int length; >>>>>>>>>>>>>>>>>> + SaNtfIdentifierT ids[NTF_REST_MAX_IDS]; >>>>>>>>>>>>>>>>>> +}; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> +static struct not_idsT received_ids = {0,}; >>>>>>>>>>>>>>>>>> +static struct not_idsT ok_ids = {0,}; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> +static char >>>>>>>>>>>>>>>>>> default_ext_notification_object[DEFAULT_EXT_NAME_LENGTH]; >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> +static char >>>>>>>>>>>>>>>>>> default_ext_notifying_object[DEFAULT_EXT_NAME_LENGTH]; >>>>>>>>>>>>>>>>>> +static char >>>>>>>>>>>>>>>>>> test1_ext_notification_object[DEFAULT_EXT_NAME_LENGTH]; >>>>>>>>>>>>>>>>>> +static char >>>>>>>>>>>>>>>>>> test1_ext_notifying_object[DEFAULT_EXT_NAME_LENGTH]; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> +static SaNtfNotificationTypeFilterHandlesT >>>>>>>>>>>>>>>>>> myNotificationFilterHandles; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> +/* Used to keep track of which ntf we got */ >>>>>>>>>>>>>>>>>> +static SaNtfNotificationTypeFilterHandlesT ntfRecieved; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> +static int errors; >>>>>>>>>>>>>>>>>> +static SaNtfSubscriptionIdT subscriptionId; >>>>>>>>>>>>>>>>>> +static SaNtfAlarmNotificationT myAlarmNotification; >>>>>>>>>>>>>>>>>> +static SaNtfObjectCreateDeleteNotificationT >>>>>>>>>>>>>>>>>> myObjCrDelNotification; >>>>>>>>>>>>>>>>>> +static SaNtfAttributeChangeNotificationT >>>>>>>>>>>>>>>>>> myAttrChangeNotification; >>>>>>>>>>>>>>>>>> +static SaNtfStateChangeNotificationT >>>>>>>>>>>>>>>>>> myStateChangeNotification; >>>>>>>>>>>>>>>>>> +static SaNtfSecurityAlarmNotificationT >>>>>>>>>>>>>>>>>> mySecAlarmNotification; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> +extern void saAisNameLend(SaConstStringT value, >>>>>>>>>>>>>>>>>> SaNameT* name); >>>>>>>>>>>>>>>>>> +extern SaConstStringT saAisNameBorrow(const SaNameT* >>>>>>>>>>>>>>>>>> name); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> +/** >>>>>>>>>>>>>>>>>> + * Init default long dn objects >>>>>>>>>>>>>>>>>> + */ >>>>>>>>>>>>>>>>>> +static void init_ext_object() >>>>>>>>>>>>>>>>>> +{ >>>>>>>>>>>>>>>>>> + safassert(setenv("SA_ENABLE_EXTENDED_NAMES", "1", >>>>>>>>>>>>>>>>>> 1), 0); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + memset(&default_ext_notification_object, 'A', >>>>>>>>>>>>>>>>>> DEFAULT_EXT_NAME_LENGTH - 1); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> default_ext_notification_object[DEFAULT_EXT_NAME_LENGTH >>>>>>>>>>>>>>>>>> - 1] = '\0'; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + memset(&default_ext_notifying_object, 'B', >>>>>>>>>>>>>>>>>> DEFAULT_EXT_NAME_LENGTH - 1); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> default_ext_notifying_object[DEFAULT_EXT_NAME_LENGTH >>>>>>>>>>>>>>>>>> - 1] = '\0'; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + memset(&test1_ext_notification_object, 'C', >>>>>>>>>>>>>>>>>> DEFAULT_EXT_NAME_LENGTH - 1); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> test1_ext_notification_object[DEFAULT_EXT_NAME_LENGTH >>>>>>>>>>>>>>>>>> - 1] = '\0'; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + memcpy(&test1_ext_notifying_object, >>>>>>>>>>>>>>>>>> NOTIFYING_OBJECT_TEST, sizeof(NOTIFYING_OBJECT_TEST)); >>>>>>>>>>>>>>>>>> +} >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> +/** >>>>>>>>>>>>>>>>>> + * Store all recieved notificationIds >>>>>>>>>>>>>>>>>> + */ >>>>>>>>>>>>>>>>>> +static void ntf_id_store(SaNtfIdentifierT n_id) >>>>>>>>>>>>>>>>>> +{ >>>>>>>>>>>>>>>>>> + assert(NTF_REST_MAX_IDS > received_ids.length); >>>>>>>>>>>>>>>>>> + received_ids.ids[received_ids.length++] = n_id; >>>>>>>>>>>>>>>>>> +} >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> +/** >>>>>>>>>>>>>>>>>> + * Post process all recived notificationIds towards >>>>>>>>>>>>>>>>>> the ids that >>>>>>>>>>>>>>>>>> + * are expected to be received. >>>>>>>>>>>>>>>>>> + */ >>>>>>>>>>>>>>>>>> +static SaAisErrorT check_errors() >>>>>>>>>>>>>>>>>> +{ >>>>>>>>>>>>>>>>>> + int i, j, found; >>>>>>>>>>>>>>>>>> + SaAisErrorT rc = SA_AIS_OK; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + for (i = 0; i< received_ids.length; i++) { >>>>>>>>>>>>>>>>>> + found=0; >>>>>>>>>>>>>>>>>> + for (j= 0; j< ok_ids.length; j++) { >>>>>>>>>>>>>>>>>> + if (received_ids.ids[i] == ok_ids.ids[j]){ >>>>>>>>>>>>>>>>>> + found = 1; >>>>>>>>>>>>>>>>>> + break; >>>>>>>>>>>>>>>>>> + } >>>>>>>>>>>>>>>>>> + } >>>>>>>>>>>>>>>>>> + if(!found) >>>>>>>>>>>>>>>>>> + errors++; >>>>>>>>>>>>>>>>>> + } >>>>>>>>>>>>>>>>>> + if(errors) >>>>>>>>>>>>>>>>>> + { >>>>>>>>>>>>>>>>>> + rc = SA_AIS_ERR_FAILED_OPERATION; >>>>>>>>>>>>>>>>>> + printf("num of failed notifications: %d\n", >>>>>>>>>>>>>>>>>> errors); >>>>>>>>>>>>>>>>>> + } >>>>>>>>>>>>>>>>>> + return rc; >>>>>>>>>>>>>>>>>> +} >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> +static void resetCounters() >>>>>>>>>>>>>>>>>> +{ >>>>>>>>>>>>>>>>>> + errors = 0; >>>>>>>>>>>>>>>>>> + received_ids.length = 0; >>>>>>>>>>>>>>>>>> + ok_ids.length = 0; >>>>>>>>>>>>>>>>>> + ntfRecieved.alarmFilterHandle = 0; >>>>>>>>>>>>>>>>>> + ntfRecieved.attributeChangeFilterHandle = 0; >>>>>>>>>>>>>>>>>> + ntfRecieved.objectCreateDeleteFilterHandle = 0; >>>>>>>>>>>>>>>>>> + ntfRecieved.securityAlarmFilterHandle = 0; >>>>>>>>>>>>>>>>>> + ntfRecieved.stateChangeFilterHandle = 0; >>>>>>>>>>>>>>>>>> +} >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> +/** >>>>>>>>>>>>>>>>>> + * Creates an ObjectCreateDeleteNotification with >>>>>>>>>>>>>>>>>> default values. >>>>>>>>>>>>>>>>>> + * >>>>>>>>>>>>>>>>>> + * @param ntfHandle >>>>>>>>>>>>>>>>>> + * @param myObjCreDelNotification >>>>>>>>>>>>>>>>>> + */ >>>>>>>>>>>>>>>>>> +void >>>>>>>>>>>>>>>>>> extCreateObjectCreateDeleteNotification(SaNtfHandleT >>>>>>>>>>>>>>>>>> ntfHandle, >>>>>>>>>>>>>>>>>> + SaNtfObjectCreateDeleteNotificationT >>>>>>>>>>>>>>>>>> *myObjCrDelNotification) >>>>>>>>>>>>>>>>>> +{ >>>>>>>>>>>>>>>>>> + SaNtfNotificationHeaderT *head; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + createObjectCreateDeleteNotification(ntfHandle, >>>>>>>>>>>>>>>>>> myObjCrDelNotification); >>>>>>>>>>>>>>>>>> + head = &myObjCrDelNotification->notificationHeader; >>>>>>>>>>>>>>>>>> + /* Overwrite with long dn object */ >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> saAisNameLend((SaConstStringT)&default_ext_notification_object, >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> head->notificationObject); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> saAisNameLend((SaConstStringT)&default_ext_notifying_object, >>>>>>>>>>>>>>>>>> head->notifyingObject); >>>>>>>>>>>>>>>>>> +} >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> +/** >>>>>>>>>>>>>>>>>> + * Creates an AttributeChangeNotification with >>>>>>>>>>>>>>>>>> default values. >>>>>>>>>>>>>>>>>> + * >>>>>>>>>>>>>>>>>> + * @param ntfhandle >>>>>>>>>>>>>>>>>> + * @param myAttrChangeNotification >>>>>>>>>>>>>>>>>> + */ >>>>>>>>>>>>>>>>>> +void >>>>>>>>>>>>>>>>>> extCreateAttributeChangeNotification(SaNtfHandleT >>>>>>>>>>>>>>>>>> ntfHandle, >>>>>>>>>>>>>>>>>> + SaNtfAttributeChangeNotificationT >>>>>>>>>>>>>>>>>> *myAttrChangeNotification) >>>>>>>>>>>>>>>>>> +{ >>>>>>>>>>>>>>>>>> + SaNtfNotificationHeaderT *head; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + createAttributeChangeNotification(ntfHandle, >>>>>>>>>>>>>>>>>> myAttrChangeNotification); >>>>>>>>>>>>>>>>>> + head = >>>>>>>>>>>>>>>>>> &myAttrChangeNotification->notificationHeader; >>>>>>>>>>>>>>>>>> + /* Overwrite with long dn object */ >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> saAisNameLend((SaConstStringT)&default_ext_notification_object, >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> head->notificationObject); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> saAisNameLend((SaConstStringT)&default_ext_notifying_object, >>>>>>>>>>>>>>>>>> head->notifyingObject); >>>>>>>>>>>>>>>>>> +} >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> +/** >>>>>>>>>>>>>>>>>> + * Create a StateChangeNotification with default >>>>>>>>>>>>>>>>>> values. >>>>>>>>>>>>>>>>>> + * >>>>>>>>>>>>>>>>>> + * @param ntfHandle >>>>>>>>>>>>>>>>>> + * @param myStateChangeNotification >>>>>>>>>>>>>>>>>> + */ >>>>>>>>>>>>>>>>>> +void extCreateStateChangeNotification(SaNtfHandleT >>>>>>>>>>>>>>>>>> ntfHandle, >>>>>>>>>>>>>>>>>> + SaNtfStateChangeNotificationT >>>>>>>>>>>>>>>>>> *myStateChangeNotification) >>>>>>>>>>>>>>>>>> +{ >>>>>>>>>>>>>>>>>> + SaNtfNotificationHeaderT *head; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + createStateChangeNotification(ntfHandle, >>>>>>>>>>>>>>>>>> myStateChangeNotification); >>>>>>>>>>>>>>>>>> + head = >>>>>>>>>>>>>>>>>> &myStateChangeNotification->notificationHeader; >>>>>>>>>>>>>>>>>> + /* Overwrite with long dn object */ >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> saAisNameLend((SaConstStringT)&default_ext_notification_object, >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> head->notificationObject); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> saAisNameLend((SaConstStringT)&default_ext_notifying_object, >>>>>>>>>>>>>>>>>> head->notifyingObject); >>>>>>>>>>>>>>>>>> +} >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> +/** >>>>>>>>>>>>>>>>>> + * Create a SecurityAlarmNotification with default >>>>>>>>>>>>>>>>>> values. >>>>>>>>>>>>>>>>>> + * >>>>>>>>>>>>>>>>>> + * @param ntfHandle >>>>>>>>>>>>>>>>>> + * @param mySecAlarmNotification >>>>>>>>>>>>>>>>>> + */ >>>>>>>>>>>>>>>>>> +void extCreateSecurityAlarmNotification(SaNtfHandleT >>>>>>>>>>>>>>>>>> ntfHandle, >>>>>>>>>>>>>>>>>> + SaNtfSecurityAlarmNotificationT >>>>>>>>>>>>>>>>>> *mySecAlarmNotification) >>>>>>>>>>>>>>>>>> +{ >>>>>>>>>>>>>>>>>> + SaNtfNotificationHeaderT *head; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + createSecurityAlarmNotification(ntfHandle, >>>>>>>>>>>>>>>>>> mySecAlarmNotification); >>>>>>>>>>>>>>>>>> + head = &mySecAlarmNotification->notificationHeader; >>>>>>>>>>>>>>>>>> + /* Overwrite with long dn object */ >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> saAisNameLend((SaConstStringT)&default_ext_notification_object, >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> head->notificationObject); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> saAisNameLend((SaConstStringT)&default_ext_notifying_object, >>>>>>>>>>>>>>>>>> head->notifyingObject); >>>>>>>>>>>>>>>>>> +} >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> +/** >>>>>>>>>>>>>>>>>> + * Verify the contents in the notification. >>>>>>>>>>>>>>>>>> + * We use the myNotificationFilterHandles to know >>>>>>>>>>>>>>>>>> which notifications to expect. >>>>>>>>>>>>>>>>>> + */ >>>>>>>>>>>>>>>>>> +static void saNtfNotificationCallbackT( >>>>>>>>>>>>>>>>>> + SaNtfSubscriptionIdT subscriptionId, >>>>>>>>>>>>>>>>>> + const SaNtfNotificationsT *notification) >>>>>>>>>>>>>>>>>> +{ >>>>>>>>>>>>>>>>>> + SaNtfNotificationHandleT notificationHandle = 0; >>>>>>>>>>>>>>>>>> + switch(notification->notificationType) >>>>>>>>>>>>>>>>>> + { >>>>>>>>>>>>>>>>>> + case SA_NTF_TYPE_OBJECT_CREATE_DELETE: >>>>>>>>>>>>>>>>>> + notificationHandle = >>>>>>>>>>>>>>>>>> notification->notification.objectCreateDeleteNotification.notificationHandle; >>>>>>>>>>>>>>>>>> + ntfRecieved.objectCreateDeleteFilterHandle += 1; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> if(myNotificationFilterHandles.objectCreateDeleteFilterHandle >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> == 0) >>>>>>>>>>>>>>>>>> + errors +=1; >>>>>>>>>>>>>>>>>> + else >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> ntf_id_store(*notification->notification.objectCreateDeleteNotification.notificationHeader.notificationId); >>>>>>>>>>>>>>>>>> + break; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + case SA_NTF_TYPE_ATTRIBUTE_CHANGE: >>>>>>>>>>>>>>>>>> + notificationHandle = >>>>>>>>>>>>>>>>>> notification->notification.attributeChangeNotification.notificationHandle; >>>>>>>>>>>>>>>>>> + ntfRecieved.attributeChangeFilterHandle += 1; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> if(myNotificationFilterHandles.attributeChangeFilterHandle >>>>>>>>>>>>>>>>>> == 0) >>>>>>>>>>>>>>>>>> + errors += 1; >>>>>>>>>>>>>>>>>> + else >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> ntf_id_store(*notification->notification.attributeChangeNotification.notificationHeader.notificationId); >>>>>>>>>>>>>>>>>> + break; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + case SA_NTF_TYPE_STATE_CHANGE: >>>>>>>>>>>>>>>>>> + notificationHandle = >>>>>>>>>>>>>>>>>> notification->notification.stateChangeNotification.notificationHandle; >>>>>>>>>>>>>>>>>> + ntfRecieved.stateChangeFilterHandle += 1; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> if(myNotificationFilterHandles.stateChangeFilterHandle == >>>>>>>>>>>>>>>>>> 0) >>>>>>>>>>>>>>>>>> + errors += 1; >>>>>>>>>>>>>>>>>> + else >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> ntf_id_store(*notification->notification.stateChangeNotification.notificationHeader.notificationId); >>>>>>>>>>>>>>>>>> + break; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + case SA_NTF_TYPE_ALARM: >>>>>>>>>>>>>>>>>> + notificationHandle = >>>>>>>>>>>>>>>>>> notification->notification.alarmNotification.notificationHandle; >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> + ntfRecieved.alarmFilterHandle += 1; >>>>>>>>>>>>>>>>>> + if(myNotificationFilterHandles.alarmFilterHandle == >>>>>>>>>>>>>>>>>> 0) { >>>>>>>>>>>>>>>>>> + printf("alarmFilterHandle == 0\n"); >>>>>>>>>>>>>>>>>> + errors +=1; >>>>>>>>>>>>>>>>>> + } else >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> ntf_id_store(*notification->notification.alarmNotification.notificationHeader.notificationId); >>>>>>>>>>>>>>>>>> + break; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + case SA_NTF_TYPE_SECURITY_ALARM: >>>>>>>>>>>>>>>>>> + notificationHandle = >>>>>>>>>>>>>>>>>> notification->notification.securityAlarmNotification.notificationHandle; >>>>>>>>>>>>>>>>>> + ntfRecieved.securityAlarmFilterHandle += 1; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> if(myNotificationFilterHandles.securityAlarmFilterHandle >>>>>>>>>>>>>>>>>> == 0) >>>>>>>>>>>>>>>>>> + errors += 1; >>>>>>>>>>>>>>>>>> + else >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> ntf_id_store(*notification->notification.securityAlarmNotification.notificationHeader.notificationId); >>>>>>>>>>>>>>>>>> + break; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + default: >>>>>>>>>>>>>>>>>> + errors +=1; >>>>>>>>>>>>>>>>>> + assert(0); >>>>>>>>>>>>>>>>>> + break; >>>>>>>>>>>>>>>>>> + } >>>>>>>>>>>>>>>>>> + last_not_id = get_ntf_id(notification); >>>>>>>>>>>>>>>>>> + if (notificationHandle != 0) >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationFree(notificationHandle), >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> +} >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> +static SaNtfCallbacksT ntfCbTest = { >>>>>>>>>>>>>>>>>> + saNtfNotificationCallbackT, >>>>>>>>>>>>>>>>>> + NULL >>>>>>>>>>>>>>>>>> +}; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> +/** >>>>>>>>>>>>>>>>>> + * Fill the filter header with long dn objects >>>>>>>>>>>>>>>>>> + */ >>>>>>>>>>>>>>>>>> +void >>>>>>>>>>>>>>>>>> extFillFilterHeader(SaNtfNotificationFilterHeaderT >>>>>>>>>>>>>>>>>> *head) >>>>>>>>>>>>>>>>>> +{ >>>>>>>>>>>>>>>>>> + fillFilterHeader(head); >>>>>>>>>>>>>>>>>> + /* Overwrite the objects with long dn */ >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> saAisNameLend((SaConstStringT)&default_ext_notification_object, >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> &head->notificationObjects[0]); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> saAisNameLend((SaConstStringT)&default_ext_notifying_object, >>>>>>>>>>>>>>>>>> &head->notifyingObjects[0]); >>>>>>>>>>>>>>>>>> +} >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> +/** >>>>>>>>>>>>>>>>>> + * Fill the header with long dn objects >>>>>>>>>>>>>>>>>> + */ >>>>>>>>>>>>>>>>>> +void extFillHeader(SaNtfNotificationHeaderT *head) >>>>>>>>>>>>>>>>>> +{ >>>>>>>>>>>>>>>>>> + fillHeader(head); >>>>>>>>>>>>>>>>>> + /* Overwrite the objects with long dn */ >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> saAisNameLend((SaConstStringT)&default_ext_notification_object, >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> head->notificationObject); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> saAisNameLend((SaConstStringT)&default_ext_notifying_object, >>>>>>>>>>>>>>>>>> head->notifyingObject); >>>>>>>>>>>>>>>>>> +} >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> +/** >>>>>>>>>>>>>>>>>> + * Fill header with extended SaNameT in additionalInfo >>>>>>>>>>>>>>>>>> + */ >>>>>>>>>>>>>>>>>> + void extFillHeaderAddInfo(SaNtfNotificationHeaderT >>>>>>>>>>>>>>>>>> *head, SaNtfNotificationHandleT notHandle) >>>>>>>>>>>>>>>>>> + { >>>>>>>>>>>>>>>>>> + int i; >>>>>>>>>>>>>>>>>> + SaStringT dest_ptr; >>>>>>>>>>>>>>>>>> + SaNameT name; >>>>>>>>>>>>>>>>>> + *(head->eventType) = SA_NTF_ALARM_COMMUNICATION; >>>>>>>>>>>>>>>>>> + *(head->eventTime) = SA_TIME_UNKNOWN; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> saAisNameLend((SaConstStringT)&default_ext_notification_object, >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> head->notificationObject); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> saAisNameLend((SaConstStringT)&default_ext_notifying_object, >>>>>>>>>>>>>>>>>> head->notifyingObject); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + head->notificationClassId->vendorId = >>>>>>>>>>>>>>>>>> ERICSSON_VENDOR_ID; >>>>>>>>>>>>>>>>>> + head->notificationClassId->majorId = 92; >>>>>>>>>>>>>>>>>> + head->notificationClassId->minorId = 12; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + /* set additional text */ >>>>>>>>>>>>>>>>>> + (void)strncpy(head->additionalText, >>>>>>>>>>>>>>>>>> + DEFAULT_ADDITIONAL_TEXT, >>>>>>>>>>>>>>>>>> + (SaUint16T)(strlen(DEFAULT_ADDITIONAL_TEXT) + 1)); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + for (i = 0; i < >>>>>>>>>>>>>>>>>> head->numCorrelatedNotifications; i++) >>>>>>>>>>>>>>>>>> + head->correlatedNotifications[i] = >>>>>>>>>>>>>>>>>> (SaNtfIdentifierT) (i + 400); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + /* Fill first additionalInfo as extended SaNameT >>>>>>>>>>>>>>>>>> including NULL character */ >>>>>>>>>>>>>>>>>> + head->additionalInfo[0].infoType = >>>>>>>>>>>>>>>>>> SA_NTF_VALUE_LDAP_NAME; >>>>>>>>>>>>>>>>>> + head->additionalInfo[0].infoId = 1; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> saAisNameLend((SaConstStringT)&test1_ext_notification_object, >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> &name); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + safassert(saNtfPtrValAllocate(notHandle, >>>>>>>>>>>>>>>>>> + strlen(saAisNameBorrow(&name)) + 2 + 1, >>>>>>>>>>>>>>>>>> + (void**)&dest_ptr, >>>>>>>>>>>>>>>>>> + &(head->additionalInfo[0].infoValue)), SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + *((SaUint16T*)dest_ptr) = *((SaUint16T*)&name); >>>>>>>>>>>>>>>>>> + memcpy(dest_ptr + 2, saAisNameBorrow(&name), >>>>>>>>>>>>>>>>>> strlen(saAisNameBorrow(&name)) + 1); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + /* Fill first additionalInfo as extended SaNameT >>>>>>>>>>>>>>>>>> excluding NULL character */ >>>>>>>>>>>>>>>>>> + head->additionalInfo[1].infoType = >>>>>>>>>>>>>>>>>> SA_NTF_VALUE_LDAP_NAME; >>>>>>>>>>>>>>>>>> + head->additionalInfo[1].infoId = 1; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> saAisNameLend((SaConstStringT)&test1_ext_notification_object, >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> &name); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + safassert(saNtfPtrValAllocate(notHandle, >>>>>>>>>>>>>>>>>> + strlen(saAisNameBorrow(&name)) + 2, >>>>>>>>>>>>>>>>>> + (void**)&dest_ptr, >>>>>>>>>>>>>>>>>> + &(head->additionalInfo[1].infoValue)), SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + *((SaUint16T*)dest_ptr) = *((SaUint16T*)&name); >>>>>>>>>>>>>>>>>> + memcpy(dest_ptr + 2, saAisNameBorrow(&name), >>>>>>>>>>>>>>>>>> strlen(saAisNameBorrow(&name))); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + /* Fill third additionalInfo as unextended >>>>>>>>>>>>>>>>>> SaNameT as legacy code */ >>>>>>>>>>>>>>>>>> + head->additionalInfo[2].infoType = >>>>>>>>>>>>>>>>>> SA_NTF_VALUE_LDAP_NAME; >>>>>>>>>>>>>>>>>> + head->additionalInfo[2].infoId = 1; >>>>>>>>>>>>>>>>>> + saAisNameLend(DEFAULT_UNEXT_NAME_STRING, &name); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + safassert(saNtfPtrValAllocate(notHandle, >>>>>>>>>>>>>>>>>> + sizeof(name), >>>>>>>>>>>>>>>>>> + (void**)&dest_ptr, >>>>>>>>>>>>>>>>>> + &(head->additionalInfo[2].infoValue)), SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + memcpy(dest_ptr, &name, sizeof(name)); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + /* Fill fourth additionalInfo as unextended >>>>>>>>>>>>>>>>>> SaNameT */ >>>>>>>>>>>>>>>>>> + head->additionalInfo[3].infoType = >>>>>>>>>>>>>>>>>> SA_NTF_VALUE_LDAP_NAME; >>>>>>>>>>>>>>>>>> + head->additionalInfo[3].infoId = 1; >>>>>>>>>>>>>>>>>> + saAisNameLend(DEFAULT_UNEXT_NAME_STRING, &name); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + safassert(saNtfPtrValAllocate(notHandle, >>>>>>>>>>>>>>>>>> + strlen(saAisNameBorrow(&name)) + 2 + 1, >>>>>>>>>>>>>>>>>> + (void**)&dest_ptr, >>>>>>>>>>>>>>>>>> + &(head->additionalInfo[3].infoValue)), SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + *((SaUint16T*)dest_ptr) = *((SaUint16T*)&name); >>>>>>>>>>>>>>>>>> + memcpy(dest_ptr + 2, saAisNameBorrow(&name), >>>>>>>>>>>>>>>>>> strlen(saAisNameBorrow(&name)) + 1); >>>>>>>>>>>>>>>>>> + } >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + /** >>>>>>>>>>>>>>>>>> + * Test AdditionalInfo with extended SaNameT type >>>>>>>>>>>>>>>>>> + */ >>>>>>>>>>>>>>>>>> + void extAdditionalInfoTest(void) >>>>>>>>>>>>>>>>>> + { >>>>>>>>>>>>>>>>>> + SaNtfAlarmNotificationFilterT myAlarmFilter; >>>>>>>>>>>>>>>>>> + subscriptionId = 1; >>>>>>>>>>>>>>>>>> + SaNtfNotificationHeaderT *head; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + rc = SA_AIS_OK; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + resetCounters(); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + safassert(saNtfInitialize(&ntfHandle, &ntfCbTest, >>>>>>>>>>>>>>>>>> &ntfVersion) , SA_AIS_OK); >>>>>>>>>>>>>>>>>> + safassert(saNtfSelectionObjectGet(ntfHandle, >>>>>>>>>>>>>>>>>> &selectionObject) , SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + /* specify complex filter */ >>>>>>>>>>>>>>>>>> + safassert(saNtfAlarmNotificationFilterAllocate( >>>>>>>>>>>>>>>>>> + ntfHandle, >>>>>>>>>>>>>>>>>> + &myAlarmFilter, >>>>>>>>>>>>>>>>>> + 1, >>>>>>>>>>>>>>>>>> + 1, >>>>>>>>>>>>>>>>>> + 1, >>>>>>>>>>>>>>>>>> + 1, >>>>>>>>>>>>>>>>>> + 0, >>>>>>>>>>>>>>>>>> + 0, >>>>>>>>>>>>>>>>>> + 0), SA_AIS_OK); >>>>>>>>>>>>>>>>>> + /* set header filter specific fields */ >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> extFillFilterHeader(&myAlarmFilter.notificationFilterHeader); >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + /* Initialize filter handles */ >>>>>>>>>>>>>>>>>> + myNotificationFilterHandles.alarmFilterHandle = >>>>>>>>>>>>>>>>>> + myAlarmFilter.notificationFilterHandle; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> myNotificationFilterHandles.attributeChangeFilterHandle >>>>>>>>>>>>>>>>>> = 0; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> myNotificationFilterHandles.objectCreateDeleteFilterHandle >>>>>>>>>>>>>>>>>> = 0; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> myNotificationFilterHandles.securityAlarmFilterHandle >>>>>>>>>>>>>>>>>> = 0; >>>>>>>>>>>>>>>>>> + myNotificationFilterHandles.stateChangeFilterHandle >>>>>>>>>>>>>>>>>> = 0; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationSubscribe(&myNotificationFilterHandles, >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> + subscriptionId), SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + /* Create a notification and send it */ >>>>>>>>>>>>>>>>>> + safassert(saNtfAlarmNotificationAllocate( >>>>>>>>>>>>>>>>>> + ntfHandle, >>>>>>>>>>>>>>>>>> + &myAlarmNotification, >>>>>>>>>>>>>>>>>> + 0, >>>>>>>>>>>>>>>>>> + (SaUint16T)(strlen(DEFAULT_ADDITIONAL_TEXT) + 1), >>>>>>>>>>>>>>>>>> + 4, >>>>>>>>>>>>>>>>>> + 0, >>>>>>>>>>>>>>>>>> + 0, >>>>>>>>>>>>>>>>>> + 0, >>>>>>>>>>>>>>>>>> + SA_NTF_ALLOC_SYSTEM_LIMIT), SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + head = &myAlarmNotification.notificationHeader; >>>>>>>>>>>>>>>>>> + extFillHeaderAddInfo(head, >>>>>>>>>>>>>>>>>> myAlarmNotification.notificationHandle); >>>>>>>>>>>>>>>>>> + /* These 3 fields is alarm filter items */ >>>>>>>>>>>>>>>>>> + *(myAlarmNotification.perceivedSeverity) = >>>>>>>>>>>>>>>>>> SA_NTF_SEVERITY_WARNING; >>>>>>>>>>>>>>>>>> + *(myAlarmNotification.probableCause) = >>>>>>>>>>>>>>>>>> SA_NTF_BANDWIDTH_REDUCED; >>>>>>>>>>>>>>>>>> + *myAlarmNotification.trend = >>>>>>>>>>>>>>>>>> SA_NTF_TREND_MORE_SEVERE; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> myAlarmNotification.thresholdInformation->thresholdValueType >>>>>>>>>>>>>>>>>> = SA_NTF_VALUE_UINT32; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> myAlarmNotification.thresholdInformation->thresholdValue.uint32Val >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> = 600; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> myAlarmNotification.thresholdInformation->thresholdHysteresis.uint32Val >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> = 100; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> myAlarmNotification.thresholdInformation->observedValue.uint32Val >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> = 567; >>>>>>>>>>>>>>>>>> + myAlarmNotification.thresholdInformation->armTime = >>>>>>>>>>>>>>>>>> SA_TIME_UNKNOWN; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationSend(myAlarmNotification.notificationHandle), >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + /* only this notification should be caught */ >>>>>>>>>>>>>>>>>> + ok_ids.ids[ok_ids.length++] = >>>>>>>>>>>>>>>>>> *myAlarmNotification.notificationHeader.notificationId; >>>>>>>>>>>>>>>>>> + poll_until_received(ntfHandle, >>>>>>>>>>>>>>>>>> *myAlarmNotification.notificationHeader.notificationId); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + if(ntfRecieved.alarmFilterHandle != 1 || >>>>>>>>>>>>>>>>>> + ntfRecieved.attributeChangeFilterHandle != 0 || >>>>>>>>>>>>>>>>>> + ntfRecieved.objectCreateDeleteFilterHandle !=0 || >>>>>>>>>>>>>>>>>> + ntfRecieved.securityAlarmFilterHandle != 0 || >>>>>>>>>>>>>>>>>> + ntfRecieved.stateChangeFilterHandle != 0) >>>>>>>>>>>>>>>>>> safassert(SA_AIS_ERR_BAD_FLAGS, SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationFree(myAlarmNotification.notificationHandle) >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> , SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationFilterFree(myAlarmFilter.notificationFilterHandle), >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationUnsubscribe(subscriptionId), >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + safassert(saNtfFinalize(ntfHandle), SA_AIS_OK); >>>>>>>>>>>>>>>>>> + rc = check_errors(); >>>>>>>>>>>>>>>>>> + test_validate(rc, SA_AIS_OK); >>>>>>>>>>>>>>>>>> + } >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> +/** >>>>>>>>>>>>>>>>>> + * Test all filter header fields >>>>>>>>>>>>>>>>>> + */ >>>>>>>>>>>>>>>>>> +void extFilterNotificationTest(void) >>>>>>>>>>>>>>>>>> +{ >>>>>>>>>>>>>>>>>> + SaNtfAlarmNotificationFilterT myAlarmFilter; >>>>>>>>>>>>>>>>>> + subscriptionId = 1; >>>>>>>>>>>>>>>>>> + SaNtfNotificationHeaderT *head; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + rc = SA_AIS_OK; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + resetCounters(); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + safassert(saNtfInitialize(&ntfHandle, &ntfCbTest, >>>>>>>>>>>>>>>>>> &ntfVersion) , SA_AIS_OK); >>>>>>>>>>>>>>>>>> + safassert(saNtfSelectionObjectGet(ntfHandle, >>>>>>>>>>>>>>>>>> &selectionObject) , SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + /* specify complex filter */ >>>>>>>>>>>>>>>>>> + safassert(saNtfAlarmNotificationFilterAllocate( >>>>>>>>>>>>>>>>>> + ntfHandle, >>>>>>>>>>>>>>>>>> + &myAlarmFilter, >>>>>>>>>>>>>>>>>> + 1, >>>>>>>>>>>>>>>>>> + 1, >>>>>>>>>>>>>>>>>> + 1, >>>>>>>>>>>>>>>>>> + 1, >>>>>>>>>>>>>>>>>> + 0, >>>>>>>>>>>>>>>>>> + 0, >>>>>>>>>>>>>>>>>> + 0), SA_AIS_OK); >>>>>>>>>>>>>>>>>> + /* set header filter specific fields */ >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> extFillFilterHeader(&myAlarmFilter.notificationFilterHeader); >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + /* Initialize filter handles */ >>>>>>>>>>>>>>>>>> + myNotificationFilterHandles.alarmFilterHandle = >>>>>>>>>>>>>>>>>> + myAlarmFilter.notificationFilterHandle; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> myNotificationFilterHandles.attributeChangeFilterHandle >>>>>>>>>>>>>>>>>> = 0; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> myNotificationFilterHandles.objectCreateDeleteFilterHandle >>>>>>>>>>>>>>>>>> = 0; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> myNotificationFilterHandles.securityAlarmFilterHandle >>>>>>>>>>>>>>>>>> = 0; >>>>>>>>>>>>>>>>>> + myNotificationFilterHandles.stateChangeFilterHandle >>>>>>>>>>>>>>>>>> = 0; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationSubscribe(&myNotificationFilterHandles, >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> + subscriptionId), SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + /* Create a notification and send it */ >>>>>>>>>>>>>>>>>> + safassert(saNtfAlarmNotificationAllocate( >>>>>>>>>>>>>>>>>> + ntfHandle, >>>>>>>>>>>>>>>>>> + &myAlarmNotification, >>>>>>>>>>>>>>>>>> + 0, >>>>>>>>>>>>>>>>>> + (SaUint16T)(strlen(DEFAULT_ADDITIONAL_TEXT) + 1), >>>>>>>>>>>>>>>>>> + 0, >>>>>>>>>>>>>>>>>> + 0, >>>>>>>>>>>>>>>>>> + 0, >>>>>>>>>>>>>>>>>> + 0, >>>>>>>>>>>>>>>>>> + SA_NTF_ALLOC_SYSTEM_LIMIT), SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + head = &myAlarmNotification.notificationHeader; >>>>>>>>>>>>>>>>>> + extFillHeader(head); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + /* These 3 fields is alarm filter items */ >>>>>>>>>>>>>>>>>> + *(myAlarmNotification.perceivedSeverity) = >>>>>>>>>>>>>>>>>> SA_NTF_SEVERITY_WARNING; >>>>>>>>>>>>>>>>>> + *(myAlarmNotification.probableCause) = >>>>>>>>>>>>>>>>>> SA_NTF_BANDWIDTH_REDUCED; >>>>>>>>>>>>>>>>>> + *myAlarmNotification.trend = >>>>>>>>>>>>>>>>>> SA_NTF_TREND_MORE_SEVERE; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> myAlarmNotification.thresholdInformation->thresholdValueType >>>>>>>>>>>>>>>>>> = SA_NTF_VALUE_UINT32; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> myAlarmNotification.thresholdInformation->thresholdValue.uint32Val >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> = 600; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> myAlarmNotification.thresholdInformation->thresholdHysteresis.uint32Val >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> = 100; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> myAlarmNotification.thresholdInformation->observedValue.uint32Val >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> = 567; >>>>>>>>>>>>>>>>>> + myAlarmNotification.thresholdInformation->armTime = >>>>>>>>>>>>>>>>>> SA_TIME_UNKNOWN; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + *(head->eventType) = SA_NTF_ALARM_EQUIPMENT; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationSend(myAlarmNotification.notificationHandle), >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> saAisNameLend((SaConstStringT)&test1_ext_notification_object, >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> head->notificationObject); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationSend(myAlarmNotification.notificationHandle), >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + extFillHeader(head); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> saAisNameLend((SaConstStringT)&test1_ext_notifying_object, >>>>>>>>>>>>>>>>>> head->notifyingObject); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationSend(myAlarmNotification.notificationHandle), >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + extFillHeader(head); >>>>>>>>>>>>>>>>>> + head->notificationClassId->vendorId = 199; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationSend(myAlarmNotification.notificationHandle), >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + extFillHeader(head); >>>>>>>>>>>>>>>>>> + head->notificationClassId->majorId = 89; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationSend(myAlarmNotification.notificationHandle), >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + extFillHeader(head); >>>>>>>>>>>>>>>>>> + head->notificationClassId->minorId = 24; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationSend(myAlarmNotification.notificationHandle), >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + extFillHeader(head); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationSend(myAlarmNotification.notificationHandle), >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + /* only this notification should be caught */ >>>>>>>>>>>>>>>>>> + ok_ids.ids[ok_ids.length++] = >>>>>>>>>>>>>>>>>> *myAlarmNotification.notificationHeader.notificationId; >>>>>>>>>>>>>>>>>> + poll_until_received(ntfHandle, >>>>>>>>>>>>>>>>>> *myAlarmNotification.notificationHeader.notificationId); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + if(ntfRecieved.alarmFilterHandle != 1 || >>>>>>>>>>>>>>>>>> + ntfRecieved.attributeChangeFilterHandle != 0 || >>>>>>>>>>>>>>>>>> + ntfRecieved.objectCreateDeleteFilterHandle !=0 || >>>>>>>>>>>>>>>>>> + ntfRecieved.securityAlarmFilterHandle != 0 || >>>>>>>>>>>>>>>>>> + ntfRecieved.stateChangeFilterHandle != 0) >>>>>>>>>>>>>>>>>> safassert(SA_AIS_ERR_BAD_FLAGS, SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationFree(myAlarmNotification.notificationHandle) >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> , SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationFilterFree(myAlarmFilter.notificationFilterHandle), >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationUnsubscribe(subscriptionId), >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + safassert(saNtfFinalize(ntfHandle), SA_AIS_OK); >>>>>>>>>>>>>>>>>> + rc = check_errors(); >>>>>>>>>>>>>>>>>> + test_validate(rc, SA_AIS_OK); >>>>>>>>>>>>>>>>>> +} >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> +/** >>>>>>>>>>>>>>>>>> + * Test Alarm notification with long dn objects >>>>>>>>>>>>>>>>>> + */ >>>>>>>>>>>>>>>>>> +void extAlarmNotificationTest(void) >>>>>>>>>>>>>>>>>> +{ >>>>>>>>>>>>>>>>>> + SaNtfAlarmNotificationFilterT myAlarmFilter; >>>>>>>>>>>>>>>>>> + subscriptionId = 1; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + rc = SA_AIS_OK; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + resetCounters(); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + safassert(saNtfInitialize(&ntfHandle, &ntfCbTest, >>>>>>>>>>>>>>>>>> &ntfVersion) , SA_AIS_OK); >>>>>>>>>>>>>>>>>> + safassert(saNtfSelectionObjectGet(ntfHandle, >>>>>>>>>>>>>>>>>> &selectionObject) , SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + safassert(saNtfAlarmNotificationFilterAllocate( >>>>>>>>>>>>>>>>>> + ntfHandle, >>>>>>>>>>>>>>>>>> + &myAlarmFilter, >>>>>>>>>>>>>>>>>> + 0, >>>>>>>>>>>>>>>>>> + 0, >>>>>>>>>>>>>>>>>> + 0, >>>>>>>>>>>>>>>>>> + 0, >>>>>>>>>>>>>>>>>> + 1, >>>>>>>>>>>>>>>>>> + 1, >>>>>>>>>>>>>>>>>> + 1), SA_AIS_OK); >>>>>>>>>>>>>>>>>> + /* Set perceived severities */ >>>>>>>>>>>>>>>>>> + myAlarmFilter.perceivedSeverities[0] = >>>>>>>>>>>>>>>>>> SA_NTF_SEVERITY_WARNING; >>>>>>>>>>>>>>>>>> + myAlarmFilter.probableCauses[0] = >>>>>>>>>>>>>>>>>> SA_NTF_BANDWIDTH_REDUCED; >>>>>>>>>>>>>>>>>> + myAlarmFilter.trends[0] = SA_NTF_TREND_MORE_SEVERE; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + /* Initialize filter handles */ >>>>>>>>>>>>>>>>>> + myNotificationFilterHandles.alarmFilterHandle = >>>>>>>>>>>>>>>>>> + myAlarmFilter.notificationFilterHandle; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> myNotificationFilterHandles.attributeChangeFilterHandle >>>>>>>>>>>>>>>>>> = 0; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> myNotificationFilterHandles.objectCreateDeleteFilterHandle >>>>>>>>>>>>>>>>>> = 0; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> myNotificationFilterHandles.securityAlarmFilterHandle >>>>>>>>>>>>>>>>>> = 0; >>>>>>>>>>>>>>>>>> + myNotificationFilterHandles.stateChangeFilterHandle >>>>>>>>>>>>>>>>>> = 0; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationSubscribe(&myNotificationFilterHandles, >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> + subscriptionId), SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + /* Create a notification and send it */ >>>>>>>>>>>>>>>>>> + safassert(saNtfAlarmNotificationAllocate( >>>>>>>>>>>>>>>>>> + ntfHandle, >>>>>>>>>>>>>>>>>> + &myAlarmNotification, >>>>>>>>>>>>>>>>>> + 0, >>>>>>>>>>>>>>>>>> + (SaUint16T)(strlen(DEFAULT_ADDITIONAL_TEXT) + 1), >>>>>>>>>>>>>>>>>> + 0, >>>>>>>>>>>>>>>>>> + 0, >>>>>>>>>>>>>>>>>> + 0, >>>>>>>>>>>>>>>>>> + 0, >>>>>>>>>>>>>>>>>> + SA_NTF_ALLOC_SYSTEM_LIMIT), SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> extFillHeader(&myAlarmNotification.notificationHeader); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + *(myAlarmNotification.perceivedSeverity) = >>>>>>>>>>>>>>>>>> SA_NTF_SEVERITY_CRITICAL; >>>>>>>>>>>>>>>>>> + *(myAlarmNotification.probableCause) = >>>>>>>>>>>>>>>>>> SA_NTF_CALL_ESTABLISHMENT_ERROR; >>>>>>>>>>>>>>>>>> + *myAlarmNotification.trend = >>>>>>>>>>>>>>>>>> SA_NTF_TREND_NO_CHANGE; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationSend(myAlarmNotification.notificationHandle), >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + *(myAlarmNotification.perceivedSeverity) = >>>>>>>>>>>>>>>>>> SA_NTF_SEVERITY_WARNING; >>>>>>>>>>>>>>>>>> + *(myAlarmNotification.probableCause) = >>>>>>>>>>>>>>>>>> SA_NTF_PRESSURE_UNACCEPTABLE; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationSend(myAlarmNotification.notificationHandle), >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + *(myAlarmNotification.perceivedSeverity) = >>>>>>>>>>>>>>>>>> SA_NTF_SEVERITY_WARNING; >>>>>>>>>>>>>>>>>> + *(myAlarmNotification.probableCause) = >>>>>>>>>>>>>>>>>> SA_NTF_BANDWIDTH_REDUCED; >>>>>>>>>>>>>>>>>> + *myAlarmNotification.trend = >>>>>>>>>>>>>>>>>> SA_NTF_TREND_NO_CHANGE; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationSend(myAlarmNotification.notificationHandle), >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> extFillHeader(&myAlarmNotification.notificationHeader); >>>>>>>>>>>>>>>>>> + /* These 3 fields is filter items */ >>>>>>>>>>>>>>>>>> + *(myAlarmNotification.perceivedSeverity) = >>>>>>>>>>>>>>>>>> SA_NTF_SEVERITY_WARNING; >>>>>>>>>>>>>>>>>> + *(myAlarmNotification.probableCause) = >>>>>>>>>>>>>>>>>> SA_NTF_BANDWIDTH_REDUCED; >>>>>>>>>>>>>>>>>> + *myAlarmNotification.trend = >>>>>>>>>>>>>>>>>> SA_NTF_TREND_MORE_SEVERE; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> myAlarmNotification.thresholdInformation->thresholdValueType >>>>>>>>>>>>>>>>>> = SA_NTF_VALUE_UINT32; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> myAlarmNotification.thresholdInformation->thresholdValue.uint32Val >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> = 600; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> myAlarmNotification.thresholdInformation->thresholdHysteresis.uint32Val >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> = 100; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> myAlarmNotification.thresholdInformation->observedValue.uint32Val >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> = 567; >>>>>>>>>>>>>>>>>> + myAlarmNotification.thresholdInformation->armTime = >>>>>>>>>>>>>>>>>> SA_TIME_UNKNOWN; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationSend(myAlarmNotification.notificationHandle), >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + /* only this notification should be caught*/ >>>>>>>>>>>>>>>>>> + ok_ids.ids[ok_ids.length++] = >>>>>>>>>>>>>>>>>> *myAlarmNotification.notificationHeader.notificationId; >>>>>>>>>>>>>>>>>> + poll_until_received(ntfHandle, >>>>>>>>>>>>>>>>>> *myAlarmNotification.notificationHeader.notificationId); >>>>>>>>>>>>>>>>>> + if(ntfRecieved.alarmFilterHandle != 1 || >>>>>>>>>>>>>>>>>> + ntfRecieved.attributeChangeFilterHandle != 0 || >>>>>>>>>>>>>>>>>> + ntfRecieved.objectCreateDeleteFilterHandle !=0 || >>>>>>>>>>>>>>>>>> + ntfRecieved.securityAlarmFilterHandle != 0 || >>>>>>>>>>>>>>>>>> + ntfRecieved.stateChangeFilterHandle != 0) >>>>>>>>>>>>>>>>>> safassert(SA_AIS_ERR_BAD_FLAGS, SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationFree(myAlarmNotification.notificationHandle) >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> , SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationFilterFree(myAlarmFilter.notificationFilterHandle), >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationUnsubscribe(subscriptionId), >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + safassert(saNtfFinalize(ntfHandle), SA_AIS_OK); >>>>>>>>>>>>>>>>>> + rc = check_errors(); >>>>>>>>>>>>>>>>>> + test_validate(rc, SA_AIS_OK); >>>>>>>>>>>>>>>>>> +} >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> +/** >>>>>>>>>>>>>>>>>> + * Test Object Create/Delete notification with long >>>>>>>>>>>>>>>>>> dn objects >>>>>>>>>>>>>>>>>> + */ >>>>>>>>>>>>>>>>>> +void extObjectCreateDeleteNotificationTest(void) >>>>>>>>>>>>>>>>>> +{ >>>>>>>>>>>>>>>>>> + SaNtfObjectCreateDeleteNotificationFilterT myFilter; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + subscriptionId = 2; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + resetCounters(); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + safassert(saNtfInitialize(&ntfHandle, &ntfCbTest, >>>>>>>>>>>>>>>>>> &ntfVersion) , SA_AIS_OK); >>>>>>>>>>>>>>>>>> + safassert(saNtfSelectionObjectGet(ntfHandle, >>>>>>>>>>>>>>>>>> &selectionObject) , SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfObjectCreateDeleteNotificationFilterAllocate( >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> + ntfHandle, >>>>>>>>>>>>>>>>>> + &myFilter, >>>>>>>>>>>>>>>>>> + 1, >>>>>>>>>>>>>>>>>> + 1, >>>>>>>>>>>>>>>>>> + 1, >>>>>>>>>>>>>>>>>> + 1, >>>>>>>>>>>>>>>>>> + 2), SA_AIS_OK); >>>>>>>>>>>>>>>>>> + myFilter.sourceIndicators[0] = >>>>>>>>>>>>>>>>>> SA_NTF_OBJECT_OPERATION; >>>>>>>>>>>>>>>>>> + myFilter.sourceIndicators[1] = >>>>>>>>>>>>>>>>>> SA_NTF_MANAGEMENT_OPERATION; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> extFillFilterHeader(&myFilter.notificationFilterHeader); >>>>>>>>>>>>>>>>>> + myFilter.notificationFilterHeader.eventTypes[0] = >>>>>>>>>>>>>>>>>> SA_NTF_OBJECT_CREATION; >>>>>>>>>>>>>>>>>> + /* Initialize filter handles */ >>>>>>>>>>>>>>>>>> + myNotificationFilterHandles.alarmFilterHandle = 0; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> myNotificationFilterHandles.attributeChangeFilterHandle >>>>>>>>>>>>>>>>>> = 0; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> myNotificationFilterHandles.objectCreateDeleteFilterHandle >>>>>>>>>>>>>>>>>> = >>>>>>>>>>>>>>>>>> + myFilter.notificationFilterHandle; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> myNotificationFilterHandles.securityAlarmFilterHandle >>>>>>>>>>>>>>>>>> = 0; >>>>>>>>>>>>>>>>>> + myNotificationFilterHandles.stateChangeFilterHandle >>>>>>>>>>>>>>>>>> = 0; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationSubscribe(&myNotificationFilterHandles, >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> + subscriptionId), SA_AIS_OK); >>>>>>>>>>>>>>>>>> + extCreateObjectCreateDeleteNotification(ntfHandle, >>>>>>>>>>>>>>>>>> &myObjCrDelNotification); >>>>>>>>>>>>>>>>>> + *(myObjCrDelNotification.sourceIndicator) = >>>>>>>>>>>>>>>>>> SA_NTF_OBJECT_OPERATION; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationSend(myObjCrDelNotification.notificationHandle), >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + /* this notification should be caught*/ >>>>>>>>>>>>>>>>>> + ok_ids.ids[ok_ids.length++] = >>>>>>>>>>>>>>>>>> *myObjCrDelNotification.notificationHeader.notificationId; >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + *(myObjCrDelNotification.sourceIndicator) = >>>>>>>>>>>>>>>>>> SA_NTF_UNKNOWN_OPERATION; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationSend(myObjCrDelNotification.notificationHandle), >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + *(myObjCrDelNotification.sourceIndicator) = >>>>>>>>>>>>>>>>>> SA_NTF_MANAGEMENT_OPERATION; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationSend(myObjCrDelNotification.notificationHandle), >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + /* this notification should be caught*/ >>>>>>>>>>>>>>>>>> + ok_ids.ids[ok_ids.length++] = >>>>>>>>>>>>>>>>>> *myObjCrDelNotification.notificationHeader.notificationId; >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> + poll_until_received(ntfHandle, >>>>>>>>>>>>>>>>>> *myObjCrDelNotification.notificationHeader.notificationId); >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> + if(ntfRecieved.alarmFilterHandle != 0 || >>>>>>>>>>>>>>>>>> + ntfRecieved.attributeChangeFilterHandle != 0 || >>>>>>>>>>>>>>>>>> + ntfRecieved.objectCreateDeleteFilterHandle != >>>>>>>>>>>>>>>>>> ok_ids.length|| >>>>>>>>>>>>>>>>>> + ntfRecieved.securityAlarmFilterHandle != 0 || >>>>>>>>>>>>>>>>>> + ntfRecieved.stateChangeFilterHandle != 0) >>>>>>>>>>>>>>>>>> safassert(SA_AIS_ERR_BAD_FLAGS, SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationFree(myObjCrDelNotification.notificationHandle), >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationFilterFree(myFilter.notificationFilterHandle), >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationUnsubscribe(subscriptionId), >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + safassert(saNtfFinalize(ntfHandle) , SA_AIS_OK); >>>>>>>>>>>>>>>>>> + rc = check_errors(); >>>>>>>>>>>>>>>>>> + test_validate(rc, SA_AIS_OK); >>>>>>>>>>>>>>>>>> +} >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> +/** >>>>>>>>>>>>>>>>>> + * Test Attribute Change notification with long dn >>>>>>>>>>>>>>>>>> objects >>>>>>>>>>>>>>>>>> + */ >>>>>>>>>>>>>>>>>> +void extAttributeChangeNotificationTest(void) >>>>>>>>>>>>>>>>>> +{ >>>>>>>>>>>>>>>>>> + SaNtfAttributeChangeNotificationFilterT myFilter; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + subscriptionId = 2; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + resetCounters(); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + safassert(saNtfInitialize(&ntfHandle, &ntfCbTest, >>>>>>>>>>>>>>>>>> &ntfVersion) , SA_AIS_OK); >>>>>>>>>>>>>>>>>> + safassert(saNtfSelectionObjectGet(ntfHandle, >>>>>>>>>>>>>>>>>> &selectionObject) , SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfAttributeChangeNotificationFilterAllocate( >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> + ntfHandle, >>>>>>>>>>>>>>>>>> + &myFilter, >>>>>>>>>>>>>>>>>> + 1, >>>>>>>>>>>>>>>>>> + 1, >>>>>>>>>>>>>>>>>> + 1, >>>>>>>>>>>>>>>>>> + 1, >>>>>>>>>>>>>>>>>> + 2), SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + myFilter.sourceIndicators[0] = >>>>>>>>>>>>>>>>>> SA_NTF_OBJECT_OPERATION; >>>>>>>>>>>>>>>>>> + myFilter.sourceIndicators[1] = >>>>>>>>>>>>>>>>>> SA_NTF_MANAGEMENT_OPERATION; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> extFillFilterHeader(&myFilter.notificationFilterHeader); >>>>>>>>>>>>>>>>>> + myFilter.notificationFilterHeader.eventTypes[0] = >>>>>>>>>>>>>>>>>> SA_NTF_ATTRIBUTE_CHANGED; >>>>>>>>>>>>>>>>>> + /* Initialize filter handles */ >>>>>>>>>>>>>>>>>> + myNotificationFilterHandles.alarmFilterHandle = 0; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> myNotificationFilterHandles.attributeChangeFilterHandle >>>>>>>>>>>>>>>>>> = >>>>>>>>>>>>>>>>>> + myFilter.notificationFilterHandle; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> myNotificationFilterHandles.objectCreateDeleteFilterHandle >>>>>>>>>>>>>>>>>> = 0; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> myNotificationFilterHandles.securityAlarmFilterHandle >>>>>>>>>>>>>>>>>> = 0; >>>>>>>>>>>>>>>>>> + myNotificationFilterHandles.stateChangeFilterHandle >>>>>>>>>>>>>>>>>> = 0; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationSubscribe(&myNotificationFilterHandles, >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> + subscriptionId), SA_AIS_OK); >>>>>>>>>>>>>>>>>> + extCreateAttributeChangeNotification(ntfHandle, >>>>>>>>>>>>>>>>>> &myAttrChangeNotification); >>>>>>>>>>>>>>>>>> + *(myAttrChangeNotification.sourceIndicator) = >>>>>>>>>>>>>>>>>> SA_NTF_OBJECT_OPERATION; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationSend(myAttrChangeNotification.notificationHandle), >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + /* this notification should be caught*/ >>>>>>>>>>>>>>>>>> + ok_ids.ids[ok_ids.length++] = >>>>>>>>>>>>>>>>>> *myAttrChangeNotification.notificationHeader.notificationId; >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + *(myAttrChangeNotification.sourceIndicator) = >>>>>>>>>>>>>>>>>> SA_NTF_UNKNOWN_OPERATION; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationSend(myAttrChangeNotification.notificationHandle), >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + *(myAttrChangeNotification.sourceIndicator) = >>>>>>>>>>>>>>>>>> SA_NTF_MANAGEMENT_OPERATION; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationSend(myAttrChangeNotification.notificationHandle), >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + /* this notification should be caught*/ >>>>>>>>>>>>>>>>>> + ok_ids.ids[ok_ids.length++] = >>>>>>>>>>>>>>>>>> *myAttrChangeNotification.notificationHeader.notificationId; >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> + poll_until_received(ntfHandle, >>>>>>>>>>>>>>>>>> *myAttrChangeNotification.notificationHeader.notificationId); >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> + if(ntfRecieved.alarmFilterHandle != 0 || >>>>>>>>>>>>>>>>>> + ntfRecieved.attributeChangeFilterHandle != >>>>>>>>>>>>>>>>>> ok_ids.length || >>>>>>>>>>>>>>>>>> + ntfRecieved.objectCreateDeleteFilterHandle != 0|| >>>>>>>>>>>>>>>>>> + ntfRecieved.securityAlarmFilterHandle != 0 || >>>>>>>>>>>>>>>>>> + ntfRecieved.stateChangeFilterHandle != 0) >>>>>>>>>>>>>>>>>> safassert(SA_AIS_ERR_BAD_FLAGS, SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationFree(myAttrChangeNotification.notificationHandle), >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationFilterFree(myFilter.notificationFilterHandle), >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationUnsubscribe(subscriptionId), >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + safassert(saNtfFinalize(ntfHandle) , SA_AIS_OK); >>>>>>>>>>>>>>>>>> + rc = check_errors(); >>>>>>>>>>>>>>>>>> + test_validate(rc, SA_AIS_OK); >>>>>>>>>>>>>>>>>> +} >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> +/** >>>>>>>>>>>>>>>>>> + * Test State Change notification with long dn objects >>>>>>>>>>>>>>>>>> + */ >>>>>>>>>>>>>>>>>> +void extStateChangeNotificationTest(void) >>>>>>>>>>>>>>>>>> +{ >>>>>>>>>>>>>>>>>> + SaNtfStateChangeNotificationFilterT myFilter; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + subscriptionId = 2; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + resetCounters(); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + safassert(saNtfInitialize(&ntfHandle, &ntfCbTest, >>>>>>>>>>>>>>>>>> &ntfVersion) , SA_AIS_OK); >>>>>>>>>>>>>>>>>> + safassert(saNtfSelectionObjectGet(ntfHandle, >>>>>>>>>>>>>>>>>> &selectionObject) , SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + safassert(saNtfStateChangeNotificationFilterAllocate( >>>>>>>>>>>>>>>>>> + ntfHandle, >>>>>>>>>>>>>>>>>> + &myFilter, >>>>>>>>>>>>>>>>>> + 1, >>>>>>>>>>>>>>>>>> + 1, >>>>>>>>>>>>>>>>>> + 1, >>>>>>>>>>>>>>>>>> + 1, >>>>>>>>>>>>>>>>>> + 2, >>>>>>>>>>>>>>>>>> + 0), SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + myFilter.sourceIndicators[0] = >>>>>>>>>>>>>>>>>> SA_NTF_OBJECT_OPERATION; >>>>>>>>>>>>>>>>>> + myFilter.sourceIndicators[1] = >>>>>>>>>>>>>>>>>> SA_NTF_MANAGEMENT_OPERATION; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> extFillFilterHeader(&myFilter.notificationFilterHeader); >>>>>>>>>>>>>>>>>> + myFilter.notificationFilterHeader.eventTypes[0] = >>>>>>>>>>>>>>>>>> SA_NTF_OBJECT_STATE_CHANGE; >>>>>>>>>>>>>>>>>> + /* Initialize filter handles */ >>>>>>>>>>>>>>>>>> + myNotificationFilterHandles.alarmFilterHandle = 0; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> myNotificationFilterHandles.attributeChangeFilterHandle >>>>>>>>>>>>>>>>>> = 0; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> myNotificationFilterHandles.objectCreateDeleteFilterHandle >>>>>>>>>>>>>>>>>> = 0; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> myNotificationFilterHandles.securityAlarmFilterHandle >>>>>>>>>>>>>>>>>> = 0; >>>>>>>>>>>>>>>>>> + myNotificationFilterHandles.stateChangeFilterHandle >>>>>>>>>>>>>>>>>> = myFilter.notificationFilterHandle; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationSubscribe(&myNotificationFilterHandles, >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> + subscriptionId), SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + extCreateStateChangeNotification(ntfHandle, >>>>>>>>>>>>>>>>>> &myStateChangeNotification); >>>>>>>>>>>>>>>>>> + *(myStateChangeNotification.sourceIndicator) = >>>>>>>>>>>>>>>>>> SA_NTF_OBJECT_OPERATION; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationSend(myStateChangeNotification.notificationHandle), >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + /* this notification should be caught*/ >>>>>>>>>>>>>>>>>> + ok_ids.ids[ok_ids.length++] = >>>>>>>>>>>>>>>>>> *myStateChangeNotification.notificationHeader.notificationId; >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + *(myStateChangeNotification.sourceIndicator) = >>>>>>>>>>>>>>>>>> SA_NTF_UNKNOWN_OPERATION; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationSend(myStateChangeNotification.notificationHandle), >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + *(myStateChangeNotification.sourceIndicator) = >>>>>>>>>>>>>>>>>> SA_NTF_MANAGEMENT_OPERATION; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationSend(myStateChangeNotification.notificationHandle), >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + /* this notification should be caught*/ >>>>>>>>>>>>>>>>>> + ok_ids.ids[ok_ids.length++] = >>>>>>>>>>>>>>>>>> *myStateChangeNotification.notificationHeader.notificationId; >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> + poll_until_received(ntfHandle, >>>>>>>>>>>>>>>>>> *myStateChangeNotification.notificationHeader.notificationId); >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> + if(ntfRecieved.alarmFilterHandle != 0 || >>>>>>>>>>>>>>>>>> + ntfRecieved.attributeChangeFilterHandle != 0 || >>>>>>>>>>>>>>>>>> + ntfRecieved.objectCreateDeleteFilterHandle != 0|| >>>>>>>>>>>>>>>>>> + ntfRecieved.securityAlarmFilterHandle != 0 || >>>>>>>>>>>>>>>>>> + ntfRecieved.stateChangeFilterHandle != >>>>>>>>>>>>>>>>>> ok_ids.length) safassert(SA_AIS_ERR_BAD_FLAGS, >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationFree(myStateChangeNotification.notificationHandle), >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationFilterFree(myFilter.notificationFilterHandle), >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationUnsubscribe(subscriptionId), >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + safassert(saNtfFinalize(ntfHandle), SA_AIS_OK); >>>>>>>>>>>>>>>>>> + rc = check_errors(); >>>>>>>>>>>>>>>>>> + test_validate(rc, SA_AIS_OK); >>>>>>>>>>>>>>>>>> +} >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> +/** >>>>>>>>>>>>>>>>>> + * Test Security Alarm notification with long dn >>>>>>>>>>>>>>>>>> objects >>>>>>>>>>>>>>>>>> + */ >>>>>>>>>>>>>>>>>> +void extSecurityAlarmNotificationTest(void) >>>>>>>>>>>>>>>>>> +{ >>>>>>>>>>>>>>>>>> + SaNtfSecurityAlarmNotificationFilterT myFilter; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + subscriptionId = 5; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + resetCounters(); >>>>>>>>>>>>>>>>>> + safassert(saNtfInitialize(&ntfHandle, &ntfCbTest, >>>>>>>>>>>>>>>>>> &ntfVersion) , SA_AIS_OK); >>>>>>>>>>>>>>>>>> + safassert(saNtfSelectionObjectGet(ntfHandle, >>>>>>>>>>>>>>>>>> &selectionObject) , SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfSecurityAlarmNotificationFilterAllocate( >>>>>>>>>>>>>>>>>> + ntfHandle, >>>>>>>>>>>>>>>>>> + &myFilter, >>>>>>>>>>>>>>>>>> + 0, >>>>>>>>>>>>>>>>>> + 0, >>>>>>>>>>>>>>>>>> + 0, >>>>>>>>>>>>>>>>>> + 0, >>>>>>>>>>>>>>>>>> + 3, >>>>>>>>>>>>>>>>>> + 0, >>>>>>>>>>>>>>>>>> + 0, >>>>>>>>>>>>>>>>>> + 0, >>>>>>>>>>>>>>>>>> + 0), SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + /* Initialize filter handles */ >>>>>>>>>>>>>>>>>> + myNotificationFilterHandles.alarmFilterHandle = 0; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> myNotificationFilterHandles.attributeChangeFilterHandle >>>>>>>>>>>>>>>>>> = 0; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> myNotificationFilterHandles.objectCreateDeleteFilterHandle >>>>>>>>>>>>>>>>>> = 0; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> myNotificationFilterHandles.securityAlarmFilterHandle = >>>>>>>>>>>>>>>>>> + myFilter.notificationFilterHandle; >>>>>>>>>>>>>>>>>> + myNotificationFilterHandles.stateChangeFilterHandle >>>>>>>>>>>>>>>>>> = 0; >>>>>>>>>>>>>>>>>> + myFilter.probableCauses[0] = SA_NTF_ADAPTER_ERROR; >>>>>>>>>>>>>>>>>> + myFilter.probableCauses[1] = >>>>>>>>>>>>>>>>>> SA_NTF_EQUIPMENT_MALFUNCTION; >>>>>>>>>>>>>>>>>> + myFilter.probableCauses[2] = >>>>>>>>>>>>>>>>>> SA_NTF_VERSION_MISMATCH; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + /* subscribe */ >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationSubscribe(&myNotificationFilterHandles, >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> + subscriptionId), SA_AIS_OK); >>>>>>>>>>>>>>>>>> + extCreateSecurityAlarmNotification(ntfHandle, >>>>>>>>>>>>>>>>>> &mySecAlarmNotification); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationSend(mySecAlarmNotification.notificationHandle), >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + *mySecAlarmNotification.probableCause = >>>>>>>>>>>>>>>>>> SA_NTF_VERSION_MISMATCH; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationSend(mySecAlarmNotification.notificationHandle), >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + ok_ids.ids[ok_ids.length++] = >>>>>>>>>>>>>>>>>> *mySecAlarmNotification.notificationHeader.notificationId; >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + *mySecAlarmNotification.probableCause = >>>>>>>>>>>>>>>>>> SA_NTF_RESPONSE_TIME_EXCESSIVE; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationSend(mySecAlarmNotification.notificationHandle), >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + *mySecAlarmNotification.probableCause = >>>>>>>>>>>>>>>>>> SA_NTF_NON_REPUDIATION_FAILURE; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationSend(mySecAlarmNotification.notificationHandle), >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + *mySecAlarmNotification.probableCause = >>>>>>>>>>>>>>>>>> SA_NTF_EQUIPMENT_MALFUNCTION; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationSend(mySecAlarmNotification.notificationHandle), >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + ok_ids.ids[ok_ids.length++] = >>>>>>>>>>>>>>>>>> *mySecAlarmNotification.notificationHeader.notificationId; >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> + *mySecAlarmNotification.probableCause = >>>>>>>>>>>>>>>>>> SA_NTF_STORAGE_CAPACITY_PROBLEM; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationSend(mySecAlarmNotification.notificationHandle), >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + *mySecAlarmNotification.probableCause = >>>>>>>>>>>>>>>>>> SA_NTF_DENIAL_OF_SERVICE; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationSend(mySecAlarmNotification.notificationHandle), >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + *mySecAlarmNotification.probableCause = >>>>>>>>>>>>>>>>>> SA_NTF_ADAPTER_ERROR; >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationSend(mySecAlarmNotification.notificationHandle), >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + ok_ids.ids[ok_ids.length++] = >>>>>>>>>>>>>>>>>> *mySecAlarmNotification.notificationHeader.notificationId; >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> + poll_until_received(ntfHandle, >>>>>>>>>>>>>>>>>> *mySecAlarmNotification.notificationHeader.notificationId); >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> + if(ntfRecieved.alarmFilterHandle != 0 || >>>>>>>>>>>>>>>>>> + ntfRecieved.attributeChangeFilterHandle != 0 || >>>>>>>>>>>>>>>>>> + ntfRecieved.objectCreateDeleteFilterHandle !=0 || >>>>>>>>>>>>>>>>>> + ntfRecieved.securityAlarmFilterHandle != >>>>>>>>>>>>>>>>>> ok_ids.length || >>>>>>>>>>>>>>>>>> + ntfRecieved.stateChangeFilterHandle != 0) >>>>>>>>>>>>>>>>>> safassert(SA_AIS_ERR_BAD_FLAGS, SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationFree(mySecAlarmNotification.notificationHandle), >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationFilterFree(myFilter.notificationFilterHandle), >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> safassert(saNtfNotificationUnsubscribe(subscriptionId), >>>>>>>>>>>>>>>>>> SA_AIS_OK); >>>>>>>>>>>>>>>>>> + safassert(saNtfFinalize(ntfHandle) , SA_AIS_OK); >>>>>>>>>>>>>>>>>> + rc = check_errors(); >>>>>>>>>>>>>>>>>> + test_validate(rc, SA_AIS_OK); >>>>>>>>>>>>>>>>>> +} >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> +__attribute__ ((constructor)) static void >>>>>>>>>>>>>>>>>> longDnObject_notification_constructor(void) >>>>>>>>>>>>>>>>>> +{ >>>>>>>>>>>>>>>>>> + init_ext_object(); >>>>>>>>>>>>>>>>>> + test_suite_add(35, "Long DNs Test"); >>>>>>>>>>>>>>>>>> + test_case_add(35, extAdditionalInfoTest >>>>>>>>>>>>>>>>>> + , "Test additional info with >>>>>>>>>>>>>>>>>> extended SaNameT type"); >>>>>>>>>>>>>>>>>> + test_case_add(35, extFilterNotificationTest >>>>>>>>>>>>>>>>>> + , "Test filter with longDn >>>>>>>>>>>>>>>>>> objects"); >>>>>>>>>>>>>>>>>> + test_case_add(35, extAlarmNotificationTest >>>>>>>>>>>>>>>>>> + , "Test Alarm notification with >>>>>>>>>>>>>>>>>> longDn objects"); >>>>>>>>>>>>>>>>>> + test_case_add(35, >>>>>>>>>>>>>>>>>> extObjectCreateDeleteNotificationTest >>>>>>>>>>>>>>>>>> + , "Test Object Create/Delete >>>>>>>>>>>>>>>>>> notification with longDn objects"); >>>>>>>>>>>>>>>>>> + test_case_add(35, >>>>>>>>>>>>>>>>>> extAttributeChangeNotificationTest >>>>>>>>>>>>>>>>>> + , "Test Attribute Change >>>>>>>>>>>>>>>>>> notification with longDn objects"); >>>>>>>>>>>>>>>>>> + test_case_add(35, extStateChangeNotificationTest >>>>>>>>>>>>>>>>>> + , "Test State Change >>>>>>>>>>>>>>>>>> notification with longDn objects"); >>>>>>>>>>>>>>>>>> + test_case_add(35, extSecurityAlarmNotificationTest >>>>>>>>>>>>>>>>>> + , "Test Security Alarm >>>>>>>>>>>>>>>>>> notification with longDn objects"); >>>>>>>>>>>>>>>>>> +} >>>>>>>>>>>>>>>>>> diff --git a/tests/unit_test_fw/inc/util.h >>>>>>>>>>>>>>>>>> b/tests/unit_test_fw/inc/util.h >>>>>>>>>>>>>>>>>> --- a/tests/unit_test_fw/inc/util.h >>>>>>>>>>>>>>>>>> +++ b/tests/unit_test_fw/inc/util.h >>>>>>>>>>>>>>>>>> @@ -19,11 +19,10 @@ >>>>>>>>>>>>>>>>>> #ifndef util_h >>>>>>>>>>>>>>>>>> #define util_h >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> +#include <saAis.h> >>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>> extern SaTimeT getSaTimeT(void); >>>>>>>>>>>>>>>>>> -extern void create_dn(char *rdn, char *parent, >>>>>>>>>>>>>>>>>> SaNameT *dn); >>>>>>>>>>>>>>>>>> -extern void sa_namet_init(char *value, SaNameT *namet); >>>>>>>>>>>>>>>>>> extern const char *get_saf_error(SaAisErrorT rc); >>>>>>>>>>>>>>>>>> - >>>>>>>>>>>>>>>>>> extern void safassert_impl(const char* file, >>>>>>>>>>>>>>>>>> unsigned int line, SaAisErrorT actual, SaAisErrorT >>>>>>>>>>>>>>>>>> expected); >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> /** >>>>>>>>>>>>>>>>>> diff --git a/tests/unit_test_fw/src/Makefile.am >>>>>>>>>>>>>>>>>> b/tests/unit_test_fw/src/Makefile.am >>>>>>>>>>>>>>>>>> --- a/tests/unit_test_fw/src/Makefile.am >>>>>>>>>>>>>>>>>> +++ b/tests/unit_test_fw/src/Makefile.am >>>>>>>>>>>>>>>>>> @@ -22,6 +22,7 @@ noinst_LTLIBRARIES = libutest.la >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> libutest_la_CPPFLAGS = \ >>>>>>>>>>>>>>>>>> $(AM_CPPFLAGS) \ >>>>>>>>>>>>>>>>>> + -DSA_EXTENDED_NAME_SOURCE \ >>>>>>>>>>>>>>>>>> -I$(top_srcdir)/tests/unit_test_fw/inc \ >>>>>>>>>>>>>>>>>> -I$(top_srcdir)/osaf/libs/saf/include >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> diff --git a/tests/unit_test_fw/src/util.c >>>>>>>>>>>>>>>>>> b/tests/unit_test_fw/src/util.c >>>>>>>>>>>>>>>>>> --- a/tests/unit_test_fw/src/util.c >>>>>>>>>>>>>>>>>> +++ b/tests/unit_test_fw/src/util.c >>>>>>>>>>>>>>>>>> @@ -21,8 +21,7 @@ >>>>>>>>>>>>>>>>>> #include <sys/time.h> >>>>>>>>>>>>>>>>>> #include <unistd.h> >>>>>>>>>>>>>>>>>> #include <assert.h> >>>>>>>>>>>>>>>>>> -#include <saAis.h> >>>>>>>>>>>>>>>>>> - >>>>>>>>>>>>>>>>>> +#include "util.h" >>>>>>>>>>>>>>>>>> static const char *saf_error[] = >>>>>>>>>>>>>>>>>> { >>>>>>>>>>>>>>>>>> "SA_AIS_NOT_VALID", >>>>>>>>>>>>>>>>>> @@ -65,17 +64,6 @@ SaTimeT getSaTimeT(void) >>>>>>>>>>>>>>>>>> (tp.tv_usec * SA_TIME_ONE_MICROSECOND); >>>>>>>>>>>>>>>>>> } >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> -void create_dn(char *rdn, char *parent, SaNameT *dn) >>>>>>>>>>>>>>>>>> -{ >>>>>>>>>>>>>>>>>> - dn->length = sprintf((char*)dn->value, "%s,%s", >>>>>>>>>>>>>>>>>> rdn, parent); >>>>>>>>>>>>>>>>>> - assert(dn->length < SA_MAX_NAME_LENGTH); >>>>>>>>>>>>>>>>>> -} >>>>>>>>>>>>>>>>>> - >>>>>>>>>>>>>>>>>> -void sa_namet_init(char *value, SaNameT *namet) >>>>>>>>>>>>>>>>>> -{ >>>>>>>>>>>>>>>>>> - namet->length = sprintf((char*)namet->value, >>>>>>>>>>>>>>>>>> "%s", value); >>>>>>>>>>>>>>>>>> -} >>>>>>>>>>>>>>>>>> - >>>>>>>>>>>>>>>>>> const char *get_saf_error(SaAisErrorT rc) >>>>>>>>>>>>>>>>>> { >>>>>>>>>>>>>>>>>> if (rc <= SA_AIS_ERR_UNAVAILABLE) >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>> >> > ------------------------------------------------------------------------------ Want fast and easy access to all the code in your enterprise? Index and search up to 200,000 lines of code with a free copy of Black Duck Code Sight - the same software that powers the world's largest code search on Ohloh, the Black Duck Open Hub! Try it now. http://p.sf.net/sfu/bds _______________________________________________ Opensaf-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/opensaf-devel
