On 01-Aug-14 1:59 PM, 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 >
[Praveen] I think in such a case legacy code will end up copying truncated string as it uses memcpy(dest_ptr, name, sizeof(SaNameT)). So here Send() API will be sending a truncated string as length part will contain actual length and not kExtendedNameMagic. Thanks Praveen >>> >>> 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
