Ack. Thanks, Praveen
On 11-Aug-16 2:03 PM, Vu Minh Nguyen wrote: > osaf/services/saf/ntfsv/ntfs/NtfLogger.cc | 51 +----- > tests/ntfsv/tet_longDnObject_notification.c | 188 > +++++++++++++++++++++++++++- > 2 files changed, 196 insertions(+), 43 deletions(-) > > > Remove the part of code that truncates the long DN. > And update the long DN test suite (#36) to make sure full record logged. > > diff --git a/osaf/services/saf/ntfsv/ntfs/NtfLogger.cc > b/osaf/services/saf/ntfsv/ntfs/NtfLogger.cc > --- a/osaf/services/saf/ntfsv/ntfs/NtfLogger.cc > +++ b/osaf/services/saf/ntfsv/ntfs/NtfLogger.cc > @@ -21,6 +21,7 @@ > */ > #include <sys/poll.h> > > +#include "osaf_utility.h" > #include "saAis.h" > #include "saLog.h" > #include "NtfAdmin.hh" > @@ -232,48 +233,22 @@ SaAisErrorT NtfLogger::logNotification(N > notif->getNotificationId(), > SA_LOG_RECORD_WRITE_ACK, > &logRecord); > - if (SA_AIS_OK != errorCode) { > - LOG_NO("Failed to log an alarm or security alarm notification (%d)", > errorCode); > - if (errorCode == SA_AIS_ERR_LIBRARY || errorCode == > SA_AIS_ERR_BAD_HANDLE) { > - LOG_ER("Fatal error SA_AIS_ERR_LIBRARY or SA_AIS_ERR_BAD_HANDLE; > exiting (%d)...", errorCode); > - exit(EXIT_FAILURE); > - } else if (errorCode == SA_AIS_ERR_INVALID_PARAM) { > - /* Retry to log truncated notificationObject/notifyingObject because > - * LOG Service has not supported long dn in Opensaf 4.5 > - */ > - char short_dn[SA_MAX_UNEXTENDED_NAME_LENGTH]; > - memset(&short_dn, 0, SA_MAX_UNEXTENDED_NAME_LENGTH); > - SaNameT shortdn_notificationObject, shortdn_notifyingObject; > - if (osaf_is_an_extended_name(ntfHeader->notificationObject)) { > - strncpy(short_dn, > osaf_extended_name_borrow(ntfHeader->notificationObject) > - , SA_MAX_UNEXTENDED_NAME_LENGTH - 1); > - osaf_extended_name_lend(short_dn, &shortdn_notificationObject); > - logRecord.logHeader.ntfHdr.notificationObject = > &shortdn_notificationObject; > - } > - if (osaf_is_an_extended_name(ntfHeader->notifyingObject)) { > - strncpy(short_dn, > osaf_extended_name_borrow(ntfHeader->notifyingObject) > - , SA_MAX_UNEXTENDED_NAME_LENGTH - 1); > - osaf_extended_name_lend(short_dn, &shortdn_notifyingObject); > - logRecord.logHeader.ntfHdr.notifyingObject = > &shortdn_notifyingObject; > - } > - if (short_dn[0] != '\0') { > - LOG_NO("Retry to log the truncated > notificationObject/notifyingObject"); > - if ((errorCode = saLogWriteLogAsync(alarmStreamHandle, > - notif->getNotificationId(), > - SA_LOG_RECORD_WRITE_ACK, > - &logRecord)) != SA_AIS_OK) { > - LOG_ER("Failed to log the truncated > notificationObject/notifyingObject (%d)" > - , errorCode); > - } > - } > - } > - goto end; > + switch (errorCode) { > + case SA_AIS_OK: > + break; > + > + /* LOGsv is busy. Put the notification to queue and re-send next time */ > + case SA_AIS_ERR_TRY_AGAIN: > + case SA_AIS_ERR_TIMEOUT: > + TRACE("Failed to log notification (ret: %d). Try next time.", > errorCode); > + break; > + > + default: > + osaf_abort(errorCode); > } > } > > -end: > TRACE_LEAVE(); > - > return errorCode; > } > > 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 > @@ -19,6 +19,7 @@ > */ > #include <utest.h> > #include <util.h> > +#include <unistd.h> > #include "tet_ntf.h" > #include "tet_ntf_common.h" > //#include "util.h" > @@ -57,6 +58,166 @@ static SaNtfSecurityAlarmNotificationT m > extern void saAisNameLend(SaConstStringT value, SaNameT* name); > extern SaConstStringT saAisNameBorrow(const SaNameT* name); > > +//> > +// For backup and restore IMM attribute values. > +//< > + > +#define MAX_DATA 256 > +typedef struct { > + char name[MAX_DATA]; > + char val[MAX_DATA]; > + int val_is_num; > +} attrinfo_t; > + > +typedef struct { > + attrinfo_t *attr; > + size_t size; > +} attrlist_t; > + > +typedef struct { > + attrlist_t *alist; > + char dn[MAX_DATA]; > +} imminfo_t; > + > +static void getVal(imminfo_t *info) > +{ > + FILE *fp = NULL; > + attrinfo_t *tmp = NULL; > + char attrValue[MAX_DATA] = {0}; > + char command[MAX_DATA] = {0}; > + size_t s = info->alist->size; > + > + tmp = info->alist->attr; > + while (s) { > + sprintf(command, "immlist -a %s %s " > + "| awk -F \"=\" '{print $2}' ", tmp->name, > + info->dn); > + fp = popen(command, "r"); > + while (fgets(attrValue, sizeof(attrValue) - 1, fp) != NULL) {}; > + pclose(fp); > + strtok(attrValue, "\n"); > + strncpy(tmp->val, attrValue, MAX_DATA); > + s--; > + tmp++; > + > + /* For Debug only*/ > + if (getenv("NTFTEST_DEBUG")) printf("%s \n", command); > + > + } > + > +} > + > +static int setVal(imminfo_t *info) > +{ > + char *f = NULL; > + attrinfo_t *tmp = NULL; > + char command[MAX_DATA] = {0}; > + char format[MAX_DATA] = {0}; > + size_t s = info->alist->size; > + int rc; > + > + f = format; > + tmp = info->alist->attr; > + while (s) { > + if (tmp->val_is_num) { > + rc = snprintf(f, MAX_DATA, "-a %s=%s ", > + tmp->name, > + tmp->val); > + } else { > + rc = snprintf(f, MAX_DATA, "-a %s='%s' ", > + tmp->name, > + tmp->val); > + } > + f = f + rc; > + s--; > + tmp++; > + } > + sprintf(command, "immcfg %s %s", format, info->dn); > + > + /* For Debug only*/ > + if (getenv("NTFTEST_DEBUG")) printf("%s \n", command); > + > + rc = system(command); > + return WEXITSTATUS(rc); > +} > + > +static attrinfo_t g_alarm[] = { > + { > + "saLogStreamFixedLogRecordSize", > + "200", // default val > + 1 // val is num type > + }, > + { > + "saLogStreamLogFileFormat", > + "@Cr @Ct @Nt @Ne6 @No30 @Ng30 \"@Cb\"", > + 0 // val is string type > + } > +}; > +static attrinfo_t g_config[] = { > + { > + "logMaxLogrecsize", > + "1024", > + 1 > + } > +}; > +static attrlist_t alarmList = {g_alarm, sizeof(g_alarm)/sizeof(attrinfo_t)}; > +static attrlist_t configList = {g_config, > sizeof(g_config)/sizeof(attrinfo_t)}; > +static imminfo_t alarmInfo = {&alarmList, > "safLgStrCfg=saLogAlarm,safApp=safLogService"}; > +static imminfo_t configInfo = {&configList, > "logConfig=1,safApp=safLogService"}; > + > +static void backupEnv(void) > +{ > + getVal(&alarmInfo); > + getVal(&configInfo); > + > + /* For Debug only*/ > + if (getenv("NTFTEST_DEBUG")) printf("\n"); > +} > + > +static void restoreEnv(void) > +{ > + /* For Debug only*/ > + if (getenv("NTFTEST_DEBUG")) printf("\n"); > + > + setVal(&configInfo); > + setVal(&alarmInfo); > + > + /* For Debug only*/ > + if (getenv("NTFTEST_DEBUG")) printf("\n"); > +} > + > +static void setupEnv(void) > +{ > + > + attrinfo_t aData[2]; > + memcpy(aData, g_alarm, sizeof(g_alarm)); > + strcpy(aData[0].val, "0"); > + strcpy(aData[1].val, "@Cr @Ct @Nt @Ne6 @No @Ng \"@Cb\""); > + > + attrinfo_t cData[1]; > + memcpy(cData, g_config, sizeof(g_config)); > + strcpy(cData[0].val, "65535"); > + > + attrlist_t aList = {aData, sizeof(aData)/sizeof(attrinfo_t)}; > + attrlist_t cList = {cData, sizeof(cData)/sizeof(attrinfo_t)}; > + > + imminfo_t aInfo; > + aInfo.alist= &aList; > + strcpy(aInfo.dn, alarmInfo.dn); > + > + imminfo_t cInfo; > + cInfo.alist= &cList; > + strcpy(cInfo.dn, configInfo.dn); > + > + setVal(&aInfo); > + setVal(&cInfo); > + > + /* For Debug only*/ > + if (getenv("NTFTEST_DEBUG")) printf("\n"); > +} > + > +//< > + > /** > * Init default long dn objects > */ > @@ -306,6 +467,7 @@ void extFillHeader(SaNtfNotificationHead > int i; > SaStringT dest_ptr; > SaNameT name1, name2, name3, name4, name5; > + > *(head->eventType) = SA_NTF_ALARM_COMMUNICATION; > *(head->eventTime) = SA_TIME_UNKNOWN; > > @@ -390,12 +552,15 @@ void extFillHeader(SaNtfNotificationHead > */ > void extAdditionalInfoTest(void) > { > - SaNtfAlarmNotificationFilterT myAlarmFilter; > + SaNtfAlarmNotificationFilterT myAlarmFilter; > subscriptionId = 1; > SaNtfNotificationHeaderT *head; > - > + > rc = SA_AIS_OK; > > + backupEnv(); > + setupEnv(); > + > resetCounters(); > > safassert(saNtfInitialize(&ntfHandle, &ntfCbTest, &ntfVersion) , > SA_AIS_OK); > @@ -475,6 +640,7 @@ void extFillHeader(SaNtfNotificationHead > safassert(saNtfFinalize(ntfHandle), SA_AIS_OK); > rc = check_errors(); > test_validate(rc, SA_AIS_OK); > + restoreEnv(); > } > > /** > @@ -482,12 +648,15 @@ void extFillHeader(SaNtfNotificationHead > */ > void extFilterNotificationTest(void) > { > - SaNtfAlarmNotificationFilterT myAlarmFilter; > + SaNtfAlarmNotificationFilterT myAlarmFilter; > subscriptionId = 1; > SaNtfNotificationHeaderT *head; > - > + > rc = SA_AIS_OK; > > + backupEnv(); > + setupEnv(); > + > resetCounters(); > > safassert(saNtfInitialize(&ntfHandle, &ntfCbTest, &ntfVersion) , > SA_AIS_OK); > @@ -586,6 +755,7 @@ void extFilterNotificationTest(void) > safassert(saNtfFinalize(ntfHandle), SA_AIS_OK); > rc = check_errors(); > test_validate(rc, SA_AIS_OK); > + restoreEnv(); > } > > /** > @@ -593,11 +763,14 @@ void extFilterNotificationTest(void) > */ > void extAlarmNotificationTest(void) > { > - SaNtfAlarmNotificationFilterT myAlarmFilter; > + SaNtfAlarmNotificationFilterT myAlarmFilter; > subscriptionId = 1; > > rc = SA_AIS_OK; > > + backupEnv(); > + setupEnv(); > + > resetCounters(); > > safassert(saNtfInitialize(&ntfHandle, &ntfCbTest, &ntfVersion) , > SA_AIS_OK); > @@ -683,6 +856,7 @@ void extAlarmNotificationTest(void) > safassert(saNtfFinalize(ntfHandle), SA_AIS_OK); > rc = check_errors(); > test_validate(rc, SA_AIS_OK); > + restoreEnv(); > } > > /** > @@ -887,6 +1061,9 @@ void extSecurityAlarmNotificationTest(vo > > subscriptionId = 5; > > + backupEnv(); > + setupEnv(); > + > resetCounters(); > safassert(saNtfInitialize(&ntfHandle, &ntfCbTest, &ntfVersion) , > SA_AIS_OK); > safassert(saNtfSelectionObjectGet(ntfHandle, &selectionObject) , > SA_AIS_OK); > @@ -954,6 +1131,7 @@ void extSecurityAlarmNotificationTest(vo > safassert(saNtfFinalize(ntfHandle) , SA_AIS_OK); > rc = check_errors(); > test_validate(rc, SA_AIS_OK); > + restoreEnv(); > } > > __attribute__ ((constructor)) static void > longDnObject_notification_constructor(void) > ------------------------------------------------------------------------------ _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel