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