tests/ntfsv/Makefile.am                     |    3 +-
 tests/ntfsv/test_ntf_imcn.c                 |  508 ++++++++++++++-
 tests/ntfsv/tet_longDnObject_notification.c |  972 ++++++++++++++++++++++++++++
 tests/unit_test_fw/inc/util.h               |    5 +-
 tests/unit_test_fw/src/Makefile.am          |    1 +
 tests/unit_test_fw/src/util.c               |   14 +-
 6 files changed, 1483 insertions(+), 20 deletions(-)


(1) Add testcase for AdditionInfo with extended name

(2) Add testcase for create/modify/delete runtime&config object with extended 
name attribute

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/test_ntf_imcn.c b/tests/ntfsv/test_ntf_imcn.c
--- a/tests/ntfsv/test_ntf_imcn.c
+++ b/tests/ntfsv/test_ntf_imcn.c
@@ -39,6 +39,12 @@
 static SaNtfHandleT ntfHandle;
 static NotifData rec_notif_data;
 static SaImmOiHandleT immOiHnd = 0;
+#define DEFAULT_EXT_NAME_LENGTH 300
+static char extended_name_string_01[DEFAULT_EXT_NAME_LENGTH];
+static char extended_name_string_02[DEFAULT_EXT_NAME_LENGTH];
+
+extern void saAisNameLend(SaConstStringT value, SaNameT* name);
+extern SaConstStringT saAisNameBorrow(const SaNameT* name);
 
 /**
  * Callback routine, called when subscribed notification arrives.
@@ -976,6 +982,31 @@ static SaAisErrorT set_attr_buf(NotifDat
        return error;
 }
 
+static SaAisErrorT set_attr_extended_name(NotifData* n_exp, SaUint16T idx,
+               SaNtfElementIdT attrId, SaNtfValueTypeT valType, void* 
attrValue)
+{
+       safassert(valType == SA_NTF_VALUE_LDAP_NAME, true);
+       SaAisErrorT error = SA_AIS_OK;
+       SaUint16T numAlloc = strlen(saAisNameBorrow((SaNameT*)attrValue));
+       SaUint8T* temp = NULL;
+       SaUint8T* srcPtr = (SaUint8T*)saAisNameBorrow((SaNameT*)attrValue);
+
+       if (n_exp->c_d_notif_ptr != NULL) {
+               error = saNtfPtrValAllocate(n_exp->nHandle,
+                               numAlloc,
+                               (void**) &temp,
+                               
&n_exp->c_d_notif_ptr->objectAttributes[idx].attributeValue);
+               if (error == SA_AIS_OK) {
+                       memcpy(temp, srcPtr, numAlloc);
+                       n_exp->c_d_notif_ptr->objectAttributes[idx].attributeId 
= attrId;
+                       
n_exp->c_d_notif_ptr->objectAttributes[idx].attributeType = valType;
+               }
+       } else {
+               error = SA_AIS_ERR_FAILED_OPERATION;
+       }
+       return error;
+}
+
 /**
  * Set an expected attribute value, type is string.
  */
@@ -1038,6 +1069,34 @@ static SaAisErrorT set_attr_change_buf(N
        return error;
 }
 
+static SaAisErrorT set_attr_change_extended_name(NotifData* n_exp, SaUint16T 
idx,
+               SaNtfElementIdT attrId, SaNtfValueTypeT valType, const void* 
newValue)
+{
+       safassert(valType == SA_NTF_VALUE_LDAP_NAME, true);
+       SaAisErrorT error = SA_AIS_OK;
+       SaUint16T numAlloc = strlen(saAisNameBorrow((SaNameT*)newValue));
+       SaUint8T* temp = NULL;
+       SaUint8T* srcPtr = (SaUint8T*)saAisNameBorrow((SaNameT*)newValue);
+
+       if (n_exp->a_c_notif_ptr != NULL) {
+               
n_exp->a_c_notif_ptr->changedAttributes[idx].oldAttributePresent = SA_FALSE;
+               error = saNtfPtrValAllocate(n_exp->nHandle,
+                               numAlloc,
+                               (void**) &temp,
+                               
&n_exp->a_c_notif_ptr->changedAttributes[idx].newAttributeValue);
+               if (error == SA_AIS_OK) {
+                       memcpy(temp, srcPtr, numAlloc);
+                       
n_exp->a_c_notif_ptr->changedAttributes[idx].attributeId = attrId;
+                       
n_exp->a_c_notif_ptr->changedAttributes[idx].attributeType = valType;
+               } else {
+                       error = SA_AIS_ERR_FAILED_OPERATION;
+               }
+       } else {
+               error = SA_AIS_ERR_FAILED_OPERATION;
+       }
+       return error;
+}
+
 /**
  * Set expected attribute change value, type is 
UINT32/INT32/UINT64/INT64/FLOAT/DOUBLE.
  */
@@ -4256,6 +4315,432 @@ void objectDeleteTest_3404(void)
        test_validate(error, SA_AIS_OK);
 }
 
+/**
+ * Create a runtime test object with extended name attribute and verify 
correctness
+ * of generated notification.
+ */
+void objectCreateTest_3501(void)
+{
+       SaAisErrorT error = SA_AIS_OK;
+       safassert(init_ntf(), SA_AIS_OK);
+       safassert(subscribe_notifications(), SA_AIS_OK);
+       rec_notif_data.populated = SA_FALSE;
+
+       /* create the runtime object */
+       SaInt32T int32Var = INT32VAR1;
+       SaUint32T uint32Var = UINT32VAR1;
+       SaInt64T int64Var = INT64VAR1;
+       SaUint64T uint64Var = UINT64VAR1;
+       SaTimeT timeVar = TIMEVAR1;
+       SaNameT nameVar;
+       saAisNameLend((SaConstStringT)&extended_name_string_01, &nameVar);
+       SaFloatT floatVar = FLOATVAR1;
+       SaDoubleT doubleVar = DOUBLEVAR1;
+       SaStringT stringVar = STRINGVAR1;
+       SaAnyT anyVar = {.bufferSize = sizeof (BUF1), .bufferAddr = (SaUint8T*) 
BUF1};
+
+       /*
+        * Create the object in IMM.
+        */
+       create_rt_test_object("OsafNtfCmTestRT", DNTESTRT, int32Var, uint32Var, 
int64Var, uint64Var,
+                       &timeVar, &nameVar, floatVar, doubleVar, &stringVar, 
&anyVar);
+
+       /*
+        * Wait for notification reception.
+        */
+       int dwCnt = 0;
+       while (dwCnt++ < POLLWAIT && !rec_notif_data.populated) {
+               saNtfDispatch(ntfHandle, SA_DISPATCH_ALL);
+               if (!rec_notif_data.populated) usleep(100);
+       }
+
+       if (rec_notif_data.populated) {
+               NotifData n_exp;
+               safassert(set_ntf(&n_exp, SA_NTF_OBJECT_CREATION, DNTESTRT, 12, 
12), SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 0, 0, 
"SaImmAttrImplementerName"), SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 1, 1, "SaImmAttrClassName"), 
SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 2, 2, "testUint32"), SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 3, 3, "testInt32"), SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 4, 4, "testUint64"), SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 5, 5, "testInt64"), SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 6, 6, "testString"), SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 7, 7, "testFloat"), SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 8, 8, "testDouble"), SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 9, 9, "testName"), SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 10, 10, "testTime"), SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 11, 11, "testAny"), SA_AIS_OK);
+               safassert(set_attr_str(&n_exp, 0, 0, IMPLEMENTERNAME_RT), 
SA_AIS_OK);
+               safassert(set_attr_str(&n_exp, 1, 1, "OsafNtfCmTestRT"), 
SA_AIS_OK);
+               safassert(set_attr_scalar(&n_exp, 2, 2, SA_NTF_VALUE_UINT32, 
&uint32Var), SA_AIS_OK);
+               safassert(set_attr_scalar(&n_exp, 3, 3, SA_NTF_VALUE_INT32, 
&int32Var), SA_AIS_OK);
+               safassert(set_attr_scalar(&n_exp, 4, 4, SA_NTF_VALUE_UINT64, 
&uint64Var), SA_AIS_OK);
+               safassert(set_attr_scalar(&n_exp, 5, 5, SA_NTF_VALUE_INT64, 
&int64Var), SA_AIS_OK);
+               safassert(set_attr_str(&n_exp, 6, 6, stringVar), SA_AIS_OK);
+               safassert(set_attr_scalar(&n_exp, 7, 7, SA_NTF_VALUE_FLOAT, 
&floatVar), SA_AIS_OK);
+               safassert(set_attr_scalar(&n_exp, 8, 8, SA_NTF_VALUE_DOUBLE, 
&doubleVar), SA_AIS_OK);
+               safassert(set_attr_extended_name(&n_exp, 9, 9, 
SA_NTF_VALUE_LDAP_NAME, &nameVar), SA_AIS_OK);
+               safassert(set_attr_scalar(&n_exp, 10, 10, SA_NTF_VALUE_INT64, 
&timeVar), SA_AIS_OK);
+               safassert(set_attr_buf(&n_exp, 11, 11, SA_NTF_VALUE_BINARY, 
&anyVar), SA_AIS_OK);
+
+               if (!compare_notifs(&n_exp, &rec_notif_data)) {
+                       print_notif(&n_exp);
+                       print_notif(&rec_notif_data);
+                       error = SA_AIS_ERR_FAILED_OPERATION;
+               }
+
+               safassert(saNtfNotificationFree(rec_notif_data.nHandle), 
SA_AIS_OK);
+               safassert(saNtfNotificationFree(n_exp.nHandle), SA_AIS_OK);
+       } else {
+               error = SA_AIS_ERR_FAILED_OPERATION;
+       }
+       safassert(unsub_notifications(), SA_AIS_OK);
+       safassert(saNtfFinalize(ntfHandle), SA_AIS_OK);
+       test_validate(error, SA_AIS_OK);
+}
+
+/**
+ * Modify a runtime test object with extended name attribute and verify 
correctness
+ * of generated notification.
+ */
+void objectModifyTest_3502(void)
+{
+       SaAisErrorT error = SA_AIS_OK;
+       safassert(init_ntf(), SA_AIS_OK);
+       safassert(subscribe_notifications(), SA_AIS_OK);
+       rec_notif_data.populated = SA_FALSE;
+
+       SaNameT var1;
+       saAisNameLend((SaConstStringT)&extended_name_string_02, &var1);
+
+       SaAnyT var2 = {.bufferSize = sizeof (BUF2), .bufferAddr = (SaUint8T*) 
BUF2};
+       void* v1[] = {&var1};
+       void* v2[] = {&var2};
+       TestAttributeValue att1 = {
+               .attrName = "testName", .attrType = SA_IMM_ATTR_SANAMET, 
.attrValues = v1
+       };
+       TestAttributeValue att2 = {
+               .attrName = "testAny", .attrType = SA_IMM_ATTR_SAANYT, 
.attrValues = v2
+       };
+       TestAttributeValue * attrs[] = {&att1, &att2, NULL};
+
+       /*
+        * Modify (REPLACE) the object in IMM.
+        */
+       modify_rt_test_object(DNTESTRT, SA_IMM_ATTR_VALUES_REPLACE, attrs);
+
+       /*
+        * Wait for notification reception.
+        */
+       int dwCnt = 0;
+       while (dwCnt++ < POLLWAIT && !rec_notif_data.populated) {
+               saNtfDispatch(ntfHandle, SA_DISPATCH_ALL);
+               if (!rec_notif_data.populated) usleep(100);
+       }
+
+       if (rec_notif_data.populated) {
+               NotifData n_exp;
+               safassert(set_ntf(&n_exp, SA_NTF_ATTRIBUTE_CHANGED, DNTESTRT, 
4, 4), SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 0, 0, 
"SaImmAttrImplementerName"), SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 1, 1, "SaImmAttrClassName"), 
SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 2, 2, "testName"), SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 3, 3, "testAny"), SA_AIS_OK);
+               safassert(set_attr_change_str(&n_exp, 0, 0, 
IMPLEMENTERNAME_RT), SA_AIS_OK);
+               safassert(set_attr_change_str(&n_exp, 1, 1, "OsafNtfCmTestRT"), 
SA_AIS_OK);
+               safassert(set_attr_change_extended_name(&n_exp, 2, 2, 
SA_NTF_VALUE_LDAP_NAME, &var1), SA_AIS_OK);
+               safassert(set_attr_change_buf(&n_exp, 3, 3, 
SA_NTF_VALUE_BINARY, &var2), SA_AIS_OK);
+
+               if (!compare_notifs(&n_exp, &rec_notif_data)) {
+                       print_notif(&n_exp);
+                       print_notif(&rec_notif_data);
+                       error = SA_AIS_ERR_FAILED_OPERATION;
+               }
+               safassert(saNtfNotificationFree(rec_notif_data.nHandle), 
SA_AIS_OK);
+               safassert(saNtfNotificationFree(n_exp.nHandle), SA_AIS_OK);
+       } else {
+               error = SA_AIS_ERR_FAILED_OPERATION;
+       }
+       safassert(unsub_notifications(), SA_AIS_OK);
+       safassert(saNtfFinalize(ntfHandle), SA_AIS_OK);
+       test_validate(error, SA_AIS_OK);
+}
+
+
+/**
+ * Modify a runtime test object with extended name attribute and verify 
correctness
+ * of generated notification.
+ */
+void objectModifyTest_3503(void)
+{
+       SaAisErrorT error = SA_AIS_OK;
+       safassert(init_ntf(), SA_AIS_OK);
+       safassert(subscribe_notifications(), SA_AIS_OK);
+       rec_notif_data.populated = SA_FALSE;
+
+       /* modify the runtime object */
+
+       SaNameT oldvar;
+       saAisNameLend((SaConstStringT)&extended_name_string_02, &oldvar);
+       SaNameT addvar;
+       saAisNameLend((SaConstStringT)&extended_name_string_01, &addvar);
+       void* v[] = {&addvar};
+       TestAttributeValue att = {
+               .attrName = "testName", .attrType = SA_IMM_ATTR_SANAMET, 
.attrValues = v
+       };
+       TestAttributeValue * attrs[] = {&att, NULL};
+
+       /*
+        * Modify (ADD) the object in IMM.
+        */
+       modify_rt_test_object(DNTESTRT, SA_IMM_ATTR_VALUES_ADD, attrs);
+
+       /*
+        * Wait for notification reception.
+        */
+       int dwCnt = 0;
+       while (dwCnt++ < POLLWAIT && !rec_notif_data.populated) {
+               saNtfDispatch(ntfHandle, SA_DISPATCH_ALL);
+               if (!rec_notif_data.populated) usleep(100);
+       }
+
+       if (rec_notif_data.populated) {
+               NotifData n_exp;
+               safassert(set_ntf(&n_exp, SA_NTF_ATTRIBUTE_CHANGED, DNTESTRT, 
3, 4), SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 0, 0, 
"SaImmAttrImplementerName"), SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 1, 1, "SaImmAttrClassName"), 
SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 2, 2, "testName"), SA_AIS_OK);
+               safassert(set_attr_change_str(&n_exp, 0, 0, 
IMPLEMENTERNAME_RT), SA_AIS_OK);
+               safassert(set_attr_change_str(&n_exp, 1, 1, "OsafNtfCmTestRT"), 
SA_AIS_OK);
+               safassert(set_attr_change_extended_name(&n_exp, 2, 2, 
SA_NTF_VALUE_LDAP_NAME, &oldvar), SA_AIS_OK);
+               safassert(set_attr_change_extended_name(&n_exp, 3, 2, 
SA_NTF_VALUE_LDAP_NAME, &addvar), SA_AIS_OK);
+
+               if (!compare_notifs(&n_exp, &rec_notif_data)) {
+                       print_notif(&n_exp);
+                       print_notif(&rec_notif_data);
+                       error = SA_AIS_ERR_FAILED_OPERATION;
+               }
+               safassert(saNtfNotificationFree(rec_notif_data.nHandle), 
SA_AIS_OK);
+               safassert(saNtfNotificationFree(n_exp.nHandle), SA_AIS_OK);
+       } else {
+               error = SA_AIS_ERR_FAILED_OPERATION;
+       }
+       safassert(unsub_notifications(), SA_AIS_OK);
+       safassert(saNtfFinalize(ntfHandle), SA_AIS_OK);
+       test_validate(error, SA_AIS_OK);
+}
+
+
+/**
+ * Create a config object with extended name attribute and verify correctness 
of
+ * generated notification.
+ */
+void objectCreateTest_3505(void)
+{
+       char command[1024];
+       SaAisErrorT error = SA_AIS_OK;
+       safassert(init_ntf(), SA_AIS_OK);
+       safassert(subscribe_notifications(), SA_AIS_OK);
+       rec_notif_data.populated = SA_FALSE;
+
+       /* create an object */
+       sprintf(command, "immcfg -t 20 -c OsafNtfCmTestCFG %s -a testNameCfg=%s 
-a testStringCfg=%s -a testAnyCfg=%s",
+                       DNTESTCFG, extended_name_string_01, STRINGVAR1, BUF1);
+       assert(system(command) != -1);
+
+       /*
+        * Wait for notification reception.
+        */
+       int dwCnt = 0;
+       while (dwCnt++ < POLLWAIT && !rec_notif_data.populated) {
+               saNtfDispatch(ntfHandle, SA_DISPATCH_ALL);
+               if (!rec_notif_data.populated) usleep(100);
+       }
+
+       if (rec_notif_data.populated) {
+               NotifData n_exp;
+               SaInt32T int32Var = INT32VAR1;
+               SaUint32T uint32Var = UINT32VAR1;
+               SaInt64T int64Var = INT64VAR1;
+               SaUint64T uint64Var = UINT64VAR1;
+               SaTimeT timeVar = TIMEVAR1;
+               SaNameT nameVar;
+               saAisNameLend((SaConstStringT)&extended_name_string_01, 
&nameVar);
+               SaFloatT floatVar = FLOATVAR1;
+               SaDoubleT doubleVar = DOUBLEVAR1;
+               SaStringT stringVar = STRINGVAR1;
+               SaAnyT anyVar = {.bufferSize = sizeof (BUF1), .bufferAddr = 
(SaUint8T*) BUF1};
+
+               safassert(set_ntf(&n_exp, SA_NTF_OBJECT_CREATION, DNTESTCFG, 
14, 14), SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 0, 0, 
"SaImmAttrAdminOwnerName"), SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 1, 1, "SaImmAttrClassName"), 
SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 2, 2, "SaImmOiCcbIdT"), 
SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 3, 3, "ccbLast"), SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 4, 4, "testUint32Cfg"), 
SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 5, 5, "testInt32Cfg"), 
SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 6, 6, "testUint64Cfg"), 
SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 7, 7, "testInt64Cfg"), 
SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 8, 8, "testStringCfg"), 
SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 9, 9, "testFloatCfg"), 
SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 10, 10, "testDoubleCfg"), 
SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 11, 11, "testNameCfg"), 
SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 12, 12, "testTimeCfg"), 
SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 13, 13, "testAnyCfg"), 
SA_AIS_OK);
+               safassert(set_attr_str(&n_exp, 0, 0, "immcfg_xxx"), SA_AIS_OK);
+               safassert(set_attr_str(&n_exp, 1, 1, "OsafNtfCmTestCFG"), 
SA_AIS_OK);
+               SaUint64T ccidVar = 2;
+               safassert(set_attr_scalar(&n_exp, 2, 2, SA_NTF_VALUE_UINT64, 
&ccidVar), SA_AIS_OK);
+               SaUint32T ccbLast = 1;
+               safassert(set_attr_scalar(&n_exp, 3, 3, SA_NTF_VALUE_UINT32, 
&ccbLast), SA_AIS_OK);
+               safassert(set_attr_scalar(&n_exp, 4, 4, SA_NTF_VALUE_UINT32, 
&uint32Var), SA_AIS_OK);
+               safassert(set_attr_scalar(&n_exp, 5, 5, SA_NTF_VALUE_INT32, 
&int32Var), SA_AIS_OK);
+               safassert(set_attr_scalar(&n_exp, 6, 6, SA_NTF_VALUE_UINT64, 
&uint64Var), SA_AIS_OK);
+               safassert(set_attr_scalar(&n_exp, 7, 7, SA_NTF_VALUE_INT64, 
&int64Var), SA_AIS_OK);
+               safassert(set_attr_str(&n_exp, 8, 8, stringVar), SA_AIS_OK);
+               safassert(set_attr_scalar(&n_exp, 9, 9, SA_NTF_VALUE_FLOAT, 
&floatVar), SA_AIS_OK);
+               safassert(set_attr_scalar(&n_exp, 10, 10, SA_NTF_VALUE_DOUBLE, 
&doubleVar), SA_AIS_OK);
+               safassert(set_attr_extended_name(&n_exp, 11, 11, 
SA_NTF_VALUE_LDAP_NAME, &nameVar), SA_AIS_OK);
+               safassert(set_attr_scalar(&n_exp, 12, 12, SA_NTF_VALUE_INT64, 
&timeVar), SA_AIS_OK);
+               safassert(set_attr_buf(&n_exp, 13, 13, SA_NTF_VALUE_BINARY, 
&anyVar), SA_AIS_OK);
+
+               if (!compare_notifs(&n_exp, &rec_notif_data)) {
+                       print_notif(&n_exp);
+                       print_notif(&rec_notif_data);
+                       error = SA_AIS_ERR_FAILED_OPERATION;
+               }
+               safassert(saNtfNotificationFree(rec_notif_data.nHandle), 
SA_AIS_OK);
+               safassert(saNtfNotificationFree(n_exp.nHandle), SA_AIS_OK);
+       } else {
+               error = SA_AIS_ERR_FAILED_OPERATION;
+       }
+       safassert(unsub_notifications(), SA_AIS_OK);
+       safassert(saNtfFinalize(ntfHandle), SA_AIS_OK);
+       test_validate(error, SA_AIS_OK);
+}
+
+
+/**
+ * Modify a config object with extended name and verify correctness
+ * of generated notification.
+ */
+void objectModifyTest_3506(void)
+{
+       char command[1024];
+       SaAisErrorT error = SA_AIS_OK;
+       safassert(init_ntf(), SA_AIS_OK);
+       safassert(subscribe_notifications(), SA_AIS_OK);
+       rec_notif_data.populated = SA_FALSE;
+
+       SaNameT var1;
+       saAisNameLend((SaConstStringT)&extended_name_string_02, &var1);
+       
+       SaAnyT var2 = {.bufferSize = sizeof (BUF2), .bufferAddr = (SaUint8T*) 
BUF2};
+
+       /* modify an object */
+       sprintf(command, "immcfg -t 20 -a testNameCfg=%s -a testAnyCfg=%s %s",
+                       extended_name_string_02, BUF2, DNTESTCFG);
+       assert(system(command) != -1);
+
+       /*
+        * Wait for notification reception.
+        */
+       int dwCnt = 0;
+       while (dwCnt++ < POLLWAIT && !rec_notif_data.populated) {
+               saNtfDispatch(ntfHandle, SA_DISPATCH_ALL);
+               if (!rec_notif_data.populated) usleep(100);
+       }
+
+       if (rec_notif_data.populated) {
+               NotifData n_exp;
+               safassert(set_ntf(&n_exp, SA_NTF_ATTRIBUTE_CHANGED, DNTESTCFG, 
6, 6), SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 0, 0, 
"SaImmAttrAdminOwnerName"), SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 1, 1, "SaImmAttrClassName"), 
SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 2, 2, "SaImmOiCcbIdT"), 
SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 3, 3, "ccbLast"), SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 4, 4, "testNameCfg"), SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 5, 5, "testAnyCfg"), SA_AIS_OK);
+               safassert(set_attr_change_str(&n_exp, 0, 0, "immcfg_xxx"), 
SA_AIS_OK);
+               safassert(set_attr_change_str(&n_exp, 1, 1, 
"OsafNtfCmTestCFG"), SA_AIS_OK);
+               SaUint64T ccidVar = 3;
+               safassert(set_attr_change_scalar(&n_exp, 2, 2, 
SA_NTF_VALUE_UINT64, &ccidVar), SA_AIS_OK);
+               SaUint32T ccbLast = 1;
+               safassert(set_attr_change_scalar(&n_exp, 3, 3, 
SA_NTF_VALUE_UINT32, &ccbLast), SA_AIS_OK);
+               safassert(set_attr_change_extended_name(&n_exp, 4, 4, 
SA_NTF_VALUE_LDAP_NAME, &var1), SA_AIS_OK);
+               safassert(set_attr_change_buf(&n_exp, 5, 5, 
SA_NTF_VALUE_BINARY, &var2), SA_AIS_OK);
+
+               if (!compare_notifs(&n_exp, &rec_notif_data)) {
+                       print_notif(&n_exp);
+                       print_notif(&rec_notif_data);
+                       error = SA_AIS_ERR_FAILED_OPERATION;
+               }
+               safassert(saNtfNotificationFree(rec_notif_data.nHandle), 
SA_AIS_OK);
+               safassert(saNtfNotificationFree(n_exp.nHandle), SA_AIS_OK);
+       } else {
+               error = SA_AIS_ERR_FAILED_OPERATION;
+       }
+       safassert(unsub_notifications(), SA_AIS_OK);
+       safassert(saNtfFinalize(ntfHandle), SA_AIS_OK);
+       test_validate(error, SA_AIS_OK);
+}
+
+/**
+ * Modify a config object with extended name attribute and verify correctness
+ * of generated notification.
+ */
+void objectModifyTest_3507(void)
+{
+       char command[1024];
+       SaAisErrorT error = SA_AIS_OK;
+       safassert(init_ntf(), SA_AIS_OK);
+       safassert(subscribe_notifications(), SA_AIS_OK);
+       rec_notif_data.populated = SA_FALSE;
+
+       /* modify an object */
+       SaNameT oldvar;
+       saAisNameLend((SaConstStringT)&extended_name_string_02, &oldvar);
+       SaNameT addvar;
+       saAisNameLend((SaConstStringT)&extended_name_string_01, &addvar);
+       sprintf(command, "immcfg -a testNameCfg+=%s %s", 
extended_name_string_01, DNTESTCFG);
+       assert(system(command) != -1);
+
+       /*
+        * Wait for notification reception.
+        */
+       int dwCnt = 0;
+       while (dwCnt++ < POLLWAIT && !rec_notif_data.populated) {
+               saNtfDispatch(ntfHandle, SA_DISPATCH_ALL);
+               if (!rec_notif_data.populated) usleep(100);
+       }
+
+       if (rec_notif_data.populated) {
+               NotifData n_exp;
+               safassert(set_ntf(&n_exp, SA_NTF_ATTRIBUTE_CHANGED, DNTESTCFG, 
5, 6), SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 0, 0, 
"SaImmAttrAdminOwnerName"), SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 1, 1, "SaImmAttrClassName"), 
SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 2, 2, "SaImmOiCcbIdT"), 
SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 3, 3, "ccbLast"), SA_AIS_OK);
+               safassert(set_add_info(&n_exp, 4, 4, "testNameCfg"), SA_AIS_OK);
+               safassert(set_attr_change_str(&n_exp, 0, 0, "immcfg_xxx"), 
SA_AIS_OK);
+               safassert(set_attr_change_str(&n_exp, 1, 1, 
"OsafNtfCmTestCFG"), SA_AIS_OK);
+               SaUint64T ccidVar = 3;
+               safassert(set_attr_change_scalar(&n_exp, 2, 2, 
SA_NTF_VALUE_UINT64, &ccidVar), SA_AIS_OK);
+               SaUint32T ccbLast = 1;
+               safassert(set_attr_change_scalar(&n_exp, 3, 3, 
SA_NTF_VALUE_UINT32, &ccbLast), SA_AIS_OK);
+               safassert(set_attr_change_extended_name(&n_exp, 4, 4, 
SA_NTF_VALUE_LDAP_NAME, &oldvar), SA_AIS_OK);
+               safassert(set_attr_change_extended_name(&n_exp, 5, 4, 
SA_NTF_VALUE_LDAP_NAME, &addvar), SA_AIS_OK);
+
+               if (!compare_notifs(&n_exp, &rec_notif_data)) {
+                       print_notif(&n_exp);
+                       print_notif(&rec_notif_data);
+                       error = SA_AIS_ERR_FAILED_OPERATION;
+               }
+               safassert(saNtfNotificationFree(rec_notif_data.nHandle), 
SA_AIS_OK);
+               safassert(saNtfNotificationFree(n_exp.nHandle), SA_AIS_OK);
+       } else {
+               error = SA_AIS_ERR_FAILED_OPERATION;
+       }
+       safassert(unsub_notifications(), SA_AIS_OK);
+       safassert(saNtfFinalize(ntfHandle), SA_AIS_OK);
+       test_validate(error, SA_AIS_OK);
+}
 
 __attribute__((constructor)) static void ntf_imcn_constructor(void)
 {
@@ -4290,9 +4775,15 @@ void objectDeleteTest_3404(void)
             rc = system("immcfg -f //tmp//ntfsv_test_classes.xml");
         }
         if (rc != 0) {
-           printf("ntfsv_test_classes.xml file not installed (see README)");
-           return;
-       }
+                       printf("ntfsv_test_classes.xml file not installed (see 
README)");
+                       return;
+               }
+       memset(&extended_name_string_01, 'C', DEFAULT_EXT_NAME_LENGTH - 1);
+       extended_name_string_01[DEFAULT_EXT_NAME_LENGTH - 1] = '\0';
+
+       memset(&extended_name_string_02, 'D', DEFAULT_EXT_NAME_LENGTH - 1);
+       extended_name_string_02[DEFAULT_EXT_NAME_LENGTH - 1] = '\0';
+       
        test_suite_add(32, "CM notifications test");
        test_case_add(32, objectCreateTest_01, "CREATE, runtime 
(OsafNtfCmTestRT) object");
        test_case_add(32, objectModifyTest_02, "runtime, attr ch, REPLACE 
(UINT32, FLOAT)");
@@ -4334,10 +4825,21 @@ void objectDeleteTest_3404(void)
        test_case_add(32, objectMultiCcbTest_38, "config, multiple op in ccb, 2 
REPLACE");
        test_case_add(32, objectMultiCcbTest_39, "config, multiple op in ccb, 
ADD, REPLACE, DELETE");
        test_case_add(32, objectDeleteTest_40, "DELETE, config 
(OsafNtfCmTestCFG) object");
+       
        test_suite_add(34, "CM notifications test, persistent runtime");
        test_case_add(34, objectCreateTest_3401, "CREATE, runtime 
(OsafNtfCmTestRT1) object");
        test_case_add(34, objectModifyTest_3402, "runtime, attr ch, REPLACE 
(UINT32, FLOAT)");
        test_case_add(34, objectModifyTest_3403, "runtime, attr ch, ADD 
(INT32)");
        test_case_add(34, objectDeleteTest_3404, "DELETE, runtime 
(OsafNtfCmTestRT1) object");
+       
+       test_suite_add(35, "CM notification test for extended name attribute");
+       test_case_add(35, objectCreateTest_3501, "CREATE, runtime 
(OsafNtfCmTestRT) object, extended name attribute");
+       test_case_add(35, objectModifyTest_3502, "runtime, attr ch, REPLACE 
(EXTENDED NAME, ANY)");
+       test_case_add(35, objectModifyTest_3503, "runtime, attr ch, ADD 
(EXTENDED NAME)");
+       test_case_add(35, objectDeleteTest_19, "DELETE, runtime 
(OsafNtfCmTestRT) object");
+       test_case_add(35, objectCreateTest_3505, "CREATE, config 
(OsafNtfCmTestCFG) object, extended name attribute");
+       test_case_add(35, objectModifyTest_3506, "config, attr ch, REPLACE 
(EXTENDED NAME, ANY)");
+       test_case_add(35, objectModifyTest_3507, "config, attr ch, ADD 
(EXTENDED NAME)");
+       test_case_add(35, objectDeleteTest_40, "DELETE, config 
(OsafNtfCmTestCFG) object");
 }
 
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,972 @@
+/*       -*- 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 test_longdn_object_1[DEFAULT_EXT_NAME_LENGTH];
+static char test_longdn_object_2[DEFAULT_EXT_NAME_LENGTH];
+static char test_longdn_object_3[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(&test_longdn_object_1, 'C', DEFAULT_EXT_NAME_LENGTH - 1);
+       test_longdn_object_1[DEFAULT_EXT_NAME_LENGTH - 1] = '\0';
+
+       memset(&test_longdn_object_2, 'D', DEFAULT_EXT_NAME_LENGTH - 1);
+       test_longdn_object_2[DEFAULT_EXT_NAME_LENGTH - 1] = '\0';
+
+       memset(&test_longdn_object_3, 'E', DEFAULT_EXT_NAME_LENGTH - 1);
+       test_longdn_object_3[DEFAULT_EXT_NAME_LENGTH - 1] = '\0';
+       
+}
+
+/**
+ * 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 name1, name2, name3, name4, name5;
+       *(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)&test_longdn_object_1, &name1);
+       
+       safassert(saNtfPtrValAllocate(notHandle,
+                               strlen(saAisNameBorrow(&name1)) + 3,
+                               (void**)&dest_ptr,
+                               &(head->additionalInfo[0].infoValue)), 
SA_AIS_OK);
+                               
+       saAisNameLend(saAisNameBorrow(&name1), (SaNameT*) dest_ptr);
+       
+       // Fill sencond additionalInfo as extended SaNameT excluding NULL 
character 
+       head->additionalInfo[1].infoType = SA_NTF_VALUE_LDAP_NAME;
+       head->additionalInfo[1].infoId = 1;
+       saAisNameLend((SaConstStringT)&test_longdn_object_2, &name2);
+       
+       safassert(saNtfPtrValAllocate(notHandle,
+                               strlen(saAisNameBorrow(&name2)) + 2,
+                               (void**)&dest_ptr,
+                               &(head->additionalInfo[1].infoValue)), 
SA_AIS_OK);
+                               
+       saAisNameLend(saAisNameBorrow(&name2), (SaNameT*) dest_ptr);
+
+       
+       //Fill third additionalInfo as extended SaNameT as legacy code -> 
object is truncated
+       head->additionalInfo[2].infoType = SA_NTF_VALUE_LDAP_NAME;
+       head->additionalInfo[2].infoId = 1;
+       saAisNameLend((SaConstStringT)&test_longdn_object_3, &name3);
+       safassert(saNtfPtrValAllocate(notHandle,
+                               sizeof(name3) + 1,
+                               (void**)&dest_ptr,
+                               &(head->additionalInfo[2].infoValue)), 
SA_AIS_OK);
+                               
+       memcpy(dest_ptr, &name3, sizeof(name3));
+       
+       // Fill fourth additionalInfo as unextended SaNameT as legacy code
+       head->additionalInfo[3].infoType = SA_NTF_VALUE_LDAP_NAME;
+       head->additionalInfo[3].infoId = 1;
+       saAisNameLend(DEFAULT_UNEXT_NAME_STRING, &name4);
+       
+       safassert(saNtfPtrValAllocate(notHandle,
+                               sizeof(name4) + 1,
+                               (void**)&dest_ptr,
+                               &(head->additionalInfo[3].infoValue)), 
SA_AIS_OK);
+                               
+       memcpy(dest_ptr, &name4, sizeof(name4));
+       
+       //Fill the fifth additionalInfo as unextended SaNameT as modern code
+       head->additionalInfo[4].infoType = SA_NTF_VALUE_LDAP_NAME;
+       head->additionalInfo[4].infoId = 1;
+       saAisNameLend(DEFAULT_UNEXT_NAME_STRING, &name5);
+       
+       safassert(saNtfPtrValAllocate(notHandle,
+                               strlen(saAisNameBorrow(&name5)) + 3,
+                               (void**)&dest_ptr,
+                               &(head->additionalInfo[4].infoValue)), 
SA_AIS_OK);
+                               
+       saAisNameLend(saAisNameBorrow(&name5), (SaNameT*) dest_ptr);
+ }
+ 
+ /**
+  * 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),
+                       5,
+                       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)&test_longdn_object_1, 
head->notificationObject);
+       
safassert(saNtfNotificationSend(myAlarmNotification.notificationHandle), 
SA_AIS_OK);
+       
+       extFillHeader(head);
+       saAisNameLend(NOTIFYING_OBJECT_TEST, 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(36, "Long DNs Test");
+       test_case_add(36, extAdditionalInfoTest
+                                       , "Test additional info with extended 
SaNameT type");   
+       test_case_add(36, extFilterNotificationTest
+                                       , "Test filter with longDn objects");
+       test_case_add(36, extAlarmNotificationTest
+                                       , "Test Alarm notification with longDn 
objects");
+       test_case_add(36, extObjectCreateDeleteNotificationTest
+                                       , "Test Object Create/Delete 
notification with longDn objects");
+       test_case_add(36, extAttributeChangeNotificationTest
+                                       , "Test Attribute Change notification 
with longDn objects");
+       test_case_add(36, extStateChangeNotificationTest
+                                       , "Test State Change notification with 
longDn objects");
+       test_case_add(36, extSecurityAlarmNotificationTest
+                                       , "Test Security Alarm notification 
with longDn objects");                                      
+}
diff --git a/tests/unit_test_fw/inc/util.h b/tests/unit_test_fw/inc/util.h
--- a/tests/unit_test_fw/inc/util.h
+++ b/tests/unit_test_fw/inc/util.h
@@ -19,11 +19,10 @@
 #ifndef util_h
 #define util_h
 
+#include <saAis.h>
+
 extern SaTimeT getSaTimeT(void);
-extern void create_dn(char *rdn, char *parent, SaNameT *dn);
-extern void sa_namet_init(char *value, SaNameT *namet);
 extern const char *get_saf_error(SaAisErrorT rc);
-
 extern void safassert_impl(const char* file, unsigned int line, SaAisErrorT 
actual, SaAisErrorT expected);
 
 /**
diff --git a/tests/unit_test_fw/src/Makefile.am 
b/tests/unit_test_fw/src/Makefile.am
--- a/tests/unit_test_fw/src/Makefile.am
+++ b/tests/unit_test_fw/src/Makefile.am
@@ -22,6 +22,7 @@ noinst_LTLIBRARIES = libutest.la
 
 libutest_la_CPPFLAGS = \
        $(AM_CPPFLAGS) \
+       -DSA_EXTENDED_NAME_SOURCE \
        -I$(top_srcdir)/tests/unit_test_fw/inc \
        -I$(top_srcdir)/osaf/libs/saf/include
 
diff --git a/tests/unit_test_fw/src/util.c b/tests/unit_test_fw/src/util.c
--- a/tests/unit_test_fw/src/util.c
+++ b/tests/unit_test_fw/src/util.c
@@ -21,8 +21,7 @@
 #include <sys/time.h>
 #include <unistd.h>
 #include <assert.h>
-#include <saAis.h>
-
+#include "util.h"
 static const char *saf_error[] =
 {
     "SA_AIS_NOT_VALID",
@@ -65,17 +64,6 @@ SaTimeT getSaTimeT(void)
         (tp.tv_usec * SA_TIME_ONE_MICROSECOND);
 } 
 
-void create_dn(char *rdn, char *parent, SaNameT *dn)
-{
-    dn->length = sprintf((char*)dn->value, "%s,%s", rdn, parent);
-    assert(dn->length < SA_MAX_NAME_LENGTH);
-}
-
-void sa_namet_init(char *value, SaNameT *namet)
-{
-    namet->length = sprintf((char*)namet->value, "%s", value);
-}
-
 const char *get_saf_error(SaAisErrorT rc)
 {
     if (rc <= SA_AIS_ERR_UNAVAILABLE)

------------------------------------------------------------------------------
Want fast and easy access to all the code in your enterprise? Index and
search up to 200,000 lines of code with a free copy of Black Duck
Code Sight - the same software that powers the world's largest code
search on Ohloh, the Black Duck Open Hub! Try it now.
http://p.sf.net/sfu/bds
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to