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