Hi Vu

ACK

Thanks
Lennart

> -----Original Message-----
> From: Vu Minh Nguyen [mailto:vu.m.ngu...@dektech.com.au]
> Sent: den 1 juli 2016 12:42
> To: mahesh.va...@oracle.com; Lennart Lund <lennart.l...@ericsson.com>
> Cc: opensaf-devel@lists.sourceforge.net
> Subject: [PATCH 4 of 4] log: create test cases and update logtest for long DN
> [#1315]
> 
>  tests/logsv/Makefile.am              |     4 +-
>  tests/logsv/logtest.c                |   132 +--
>  tests/logsv/tet_LogOiOps.c           |     2 +-
>  tests/logsv/tet_Log_recov.c          |    17 +-
>  tests/logsv/tet_log_longDN.c         |  1226
> ++++++++++++++++++++++++++++++++++
>  tests/logsv/tet_log_runtime_cfgobj.c |     9 +-
>  tests/logsv/tet_saLogStreamOpen_2.c  |    53 +-
>  tests/logsv/tet_saLogWriteLogAsync.c |     8 +-
>  8 files changed, 1318 insertions(+), 133 deletions(-)
> 
> 
> Major changes:
> 1) Add new test suite #13 for long DN test (tet_log_longDN.c file)
> 2) Do re-processing for old SaNameT
> 3) Disable test cases that checked DN limited to 256 bytes
> 
> diff --git a/tests/logsv/Makefile.am b/tests/logsv/Makefile.am
> --- a/tests/logsv/Makefile.am
> +++ b/tests/logsv/Makefile.am
> @@ -24,6 +24,7 @@ noinst_HEADERS = \
>       logtest.h
> 
>  logtest_CPPFLAGS = \
> +     -DSA_EXTENDED_NAME_SOURCE \
>       $(AM_CPPFLAGS) \
>       -I$(top_srcdir)/tests/unit_test_fw/inc \
>       -I$(top_srcdir)/osaf/libs/common/immsv/include
> @@ -46,7 +47,8 @@ logtest_SOURCES = \
>       tet_LogOiOps.c \
>       tet_Log_misc.c \
>       tet_Log_recov.c \
> -     tet_log_runtime_cfgobj.c
> +     tet_log_runtime_cfgobj.c \
> +     tet_log_longDN.c
> 
>  logtest_LDADD = \
>       $(top_builddir)/tests/unit_test_fw/src/libutest.la \
> diff --git a/tests/logsv/logtest.c b/tests/logsv/logtest.c
> --- a/tests/logsv/logtest.c
> +++ b/tests/logsv/logtest.c
> @@ -29,79 +29,37 @@
>  #include <saf_error.h>
> 
>  #include "logtest.h"
> +#include "osaf_extended_name.h"
> +#include <saAis.h>
> 
>  #define LLDTEST
> 
> -SaNameT systemStreamName =
> -{
> -     .value = SA_LOG_STREAM_SYSTEM,
> -     .length = sizeof(SA_LOG_STREAM_SYSTEM)
> -};
> +SaNameT systemStreamName;
> +SaNameT alarmStreamName;
> +SaNameT globalConfig;
> +SaNameT notificationStreamName;
> +SaNameT app1StreamName;
> +SaNameT notifyingObject;
> +SaNameT notificationObject;
> +SaNameT configurationObject;
> 
> -SaNameT alarmStreamName =
> -{
> -     .value = SA_LOG_STREAM_ALARM,
> -     .length = sizeof(SA_LOG_STREAM_ALARM)
> -};
> +SaConstStringT obj256 =
> "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
> +     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
> +     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
> +     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
> +     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
> +     "bbbbb";
> +SaNameT saNameT_Object_256;
> 
> -SaNameT globalConfig =
> -{
> -     .value = LOGTST_IMM_LOG_GCFG,
> -     .length = sizeof(LOGTST_IMM_LOG_GCFG)
> -};
> 
> +SaConstStringT name256 =
> "safLgStr=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
> +     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
> +     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
> +     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
> +     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
> +     "bbbbb";
> 
> -SaNameT notificationStreamName =
> -{
> -     .value = SA_LOG_STREAM_NOTIFICATION,
> -     .length = sizeof(SA_LOG_STREAM_NOTIFICATION)
> -};
> -
> -SaNameT app1StreamName =
> -{
> -     .value = SA_LOG_STREAM_APPLICATION1,
> -     .length = sizeof(SA_LOG_STREAM_APPLICATION1)
> -};
> -
> -SaNameT notifyingObject =
> -{
> -     .value = DEFAULT_NOTIFYING_OBJECT,
> -     .length = sizeof(DEFAULT_NOTIFYING_OBJECT)
> -};
> -
> -SaNameT notificationObject =
> -{
> -     .value = DEFAULT_NOTIFICATION_OBJECT,
> -     .length = sizeof(DEFAULT_NOTIFICATION_OBJECT)
> -};
> -
> -SaNameT configurationObject =
> -{
> -     .value = SA_LOG_CONFIGURATION_OBJECT,
> -     .length = sizeof(SA_LOG_CONFIGURATION_OBJECT)
> -};
> -
> -SaNameT saNameT_Object_256 =
> -{
> -     .value = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
> -     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
> -     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
> -     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
> -     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
> -     "bbbbb",
> -     .length = 256
> -};
> -
> -SaNameT saNameT_appstream_name_256 =
> -{
> -     .value = "safLgStr=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
> -     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
> -     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
> -     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
> -     "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
> -     "bbbbb",
> -     .length = 256
> -};
> +SaNameT saNameT_appstream_name_256;
> 
>  static char buf[2048];
> 
> @@ -123,11 +81,7 @@ static SaLogBufferT genLogBuffer =
>       .logBufSize = 0,
>  };
> 
> -SaNameT logSvcUsrName =
> -{
> -     .value = SA_LOG_STREAM_APPLICATION1,
> -     .length = sizeof(SA_LOG_STREAM_APPLICATION1)
> -};
> +SaNameT logSvcUsrName;
> 
>  SaLogRecordT genLogRecord =
>  {
> @@ -169,10 +123,8 @@ int tet_system(const char *command) {
>  void init_logrootpath(void)
>  {
>       SaImmHandleT omHandle;
> -     SaNameT objectName = {
> -             .value = "logConfig=1,safApp=safLogService",
> -             .length = strlen("logConfig=1,safApp=safLogService")
> -     };
> +     SaConstStringT config = "logConfig=1,safApp=safLogService";
> +     SaNameT objectName;
>       SaImmAccessorHandleT accessorHandle;
>       SaImmAttrValuesT_2 *attribute;
>       SaImmAttrValuesT_2 **attributes;
> @@ -180,7 +132,8 @@ void init_logrootpath(void)
>       const char logRootDirectory_name[] = "logRootDirectory";
>       SaImmAttrNameT attributeNames[2] = {(char *)
> logRootDirectory_name, NULL};
>       void *value;
> -
> +
> +     saAisNameLend(config, &objectName);
>       /* NOTE: immutil init osaf_assert if error */
>       (void) immutil_saImmOmInitialize(&omHandle, NULL,
> &immVersion);
>       (void) immutil_saImmOmAccessorInitialize(omHandle,
> &accessorHandle);
> @@ -352,16 +305,15 @@ int get_active_sc(void)
>  {
>       int active_sc = 0;
>       SaImmHandleT omHandle;
> -     SaNameT objectName1 = { /* Read object for SC-1 */
> -             .value = "safSu=SC-1,safSg=2N,safApp=OpenSAF",
> -             .length = strlen("safSu=SC-1,safSg=2N,safApp=OpenSAF") +
> 1
> -     };
> +     SaConstStringT objname = "safSu=SC-1,safSg=2N,safApp=OpenSAF";
> +     SaNameT objectName1;
>       SaImmAccessorHandleT accessorHandle;
>       SaImmAttrValuesT_2 **attributes;
>       const char saAmfSUNumCurrActiveSIs[] =
> "saAmfSUNumCurrActiveSIs";
>       SaImmAttrNameT attributeNames[2] = {(char *)
> saAmfSUNumCurrActiveSIs, NULL};
>       SaUint32T curr_act_sis = 0;
> -
> +
> +     saAisNameLend(objname, &objectName1);
>       /* NOTE: immutil init osaf_assert if error
>        */
>       (void) immutil_saImmOmInitialize(&omHandle, NULL,
> &immVersion);
> @@ -486,6 +438,24 @@ int main(int argc, char **argv)
>       char *opt_str_ptr;
>       char *tok_str_ptr = NULL;
> 
> +     if (setenv("SA_ENABLE_EXTENDED_NAMES", "1", 1) != 0 ) {
> +             fprintf(stderr, "Failed to set SA_ENABLE_EXTENDED_NAMES
> (%s)",
> +                     strerror(errno));
> +             exit(0);
> +     }
> +
> +     saAisNameLend(SA_LOG_STREAM_SYSTEM, &systemStreamName);
> +     saAisNameLend(SA_LOG_STREAM_ALARM, &alarmStreamName);
> +     saAisNameLend(LOGTST_IMM_LOG_GCFG, &globalConfig);
> +     saAisNameLend(SA_LOG_STREAM_NOTIFICATION,
> &notificationStreamName);
> +     saAisNameLend(SA_LOG_STREAM_APPLICATION1,
> &app1StreamName);
> +     saAisNameLend(DEFAULT_NOTIFYING_OBJECT, &notifyingObject);
> +     saAisNameLend(DEFAULT_NOTIFICATION_OBJECT,
> &notificationObject);
> +     saAisNameLend(SA_LOG_CONFIGURATION_OBJECT,
> &configurationObject);
> +     saAisNameLend(obj256, &saNameT_Object_256);
> +     saAisNameLend(name256, &saNameT_appstream_name_256);
> +     saAisNameLend(SA_LOG_STREAM_APPLICATION1,
> &logSvcUsrName);
> +
>       init_logrootpath();
>       srandom(getpid());
>       silent_flg = false;
> diff --git a/tests/logsv/tet_LogOiOps.c b/tests/logsv/tet_LogOiOps.c
> --- a/tests/logsv/tet_LogOiOps.c
> +++ b/tests/logsv/tet_LogOiOps.c
> @@ -3331,7 +3331,7 @@ void verLogFileName(void)
> 
>       /* Invalid filename with forward slash in */
>       sprintf(command, "immcfg -a
> saLogStreamFileName='invalidFile/Name' %s 2> /dev/null",
> -             alarmStreamName.value);
> +             SA_LOG_STREAM_ALARM);
>       rc = system(command);
> 
>       rc_validate(WEXITSTATUS(rc), 1);
> diff --git a/tests/logsv/tet_Log_recov.c b/tests/logsv/tet_Log_recov.c
> --- a/tests/logsv/tet_Log_recov.c
> +++ b/tests/logsv/tet_Log_recov.c
> @@ -242,6 +242,10 @@ static int clear_file(char *filename)
>   * - extension .log
>   * - two timestamps (other log files has four)
>   */
> +#ifndef SA_MAX_NAME_LENGTH
> +#define SA_MAX_NAME_LENGTH 255
> +#endif
> +
>  static char file_name_find[SA_MAX_NAME_LENGTH];
>  static int filter_logfile_name(const struct dirent *finfo)
>  {
> @@ -389,20 +393,21 @@ static int tst_StreamOpen_app_logtest_sc
>       int rc = 0;
>       int n;
>       int i;
> +     char data[255];
> 
>       /* Open num_streams */
>       for (i = 0; i < num_streams; i++) {
>               /* Prepare stream name and attributes for the stream to be
> opened */
>               SaNameT stream_name;
> -             n = sprintf((char *) stream_name.value, "safLgStr=%s_%d",
> +             n = sprintf(data, "safLgStr=%s_%d",
>                       STREAM_NAME_9, i+1);
> +             saAisNameLend(data, &stream_name);
>               if (n < 0) {
>                       fprintf(stderr, "\t%s [%d] sprintf Fail\n",
>                               __FUNCTION__, __LINE__);
>                       rc = -1;
>                       break;
>               }
> -             stream_name.length = n;
> 
>               /* Create log file name */
>               char logfile_name[256];
> @@ -1790,13 +1795,11 @@ static SaLogHandleT logHandleRecv;
>  void saLogRecov_openRtStream(void)
>  {
>       SaAisErrorT rc = SA_AIS_OK;
> -     SaNameT logStreamName = {.length = 0 };
> +     SaNameT logStreamName;
>       char command[300];
>       int sysRc;
> -
> -     strcpy((char *)logStreamName.value, "safLgStr=rtCleanup");
> -     logStreamName.length = strlen((char *)logStreamName.value);
> -
> +     SaConstStringT data = "safLgStr=rtCleanup";
> +     saAisNameLend(data, &logStreamName);
>       SaLogFileCreateAttributesT_2 appLogFileCreateAttributes;
> 
>       /* Cleanup the test directory */
> diff --git a/tests/logsv/tet_log_longDN.c b/tests/logsv/tet_log_longDN.c
> new file mode 100644
> --- /dev/null
> +++ b/tests/logsv/tet_log_longDN.c
> @@ -0,0 +1,1226 @@
> +/*      -*- OpenSAF  -*-
> + *
> + * (C) Copyright 2016 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 <unistd.h>
> +#include <saf_error.h>
> +#include <poll.h>
> +#include <stdbool.h>
> +#include "logtest.h"
> +
> +#include "osaf_extended_name.h"
> +#include <saLog.h>
> +#include "saf_error.h"
> +
> +/* Default format expression for alm/not streams */
> +static const char *fmt_alarm_default="@Cr @Ct @Nt @Ne6 @No30 @Ng30
> \"@Cb\"";
> +/* Default format expression for sys/app streams */
> +static const char *fmt_sys_default="@Cr @Ch:@Cn:@Cs @Cm/@Cd/@CY
> @Sv @Sl \"@Cb\"";
> +/* Format expression for testing Long DN at @No */
> +static const char *test_alarm_fmt="@Cr @Ct @Nt @Ne6 START_@No_END
> \"@Cb\"";
> +/* Format expression for testing Long DN at @Ng */
> +static const char *test_notif_fmt="@Cr @Ct @Nt @Ne6 START_@Ng_END
> \"@Cb\"";
> +/* Format expression for testing Long DN at @Sl */
> +static const char *test_sys_fmt="@Cr @Ch:@Cn:@Cs @Cm/@Cd/@CY @Sv
> START_@Sl_END \"@Cb\"";
> +// @NOTE:
> +// The purpose for adding START_*_END in fmt expression
> +// is for searching/test verifying using regular expression.
> +
> +#define ALM_LOG_FILE "saLogAlarmLongDN"
> +#define NTF_LOG_FILE "saLogNotificationLongDN"
> +#define SYS_LOG_FILE "saLogSystemLongDN"
> +#define MAX_DATA 3000
> +
> +//>>
> +// Steps to test Long DN in each test case
> +// 1) Change global `logMaxLogrecsize` to max number
> `SA_LOG_MAX_RECORD_SIZE`
> +// 2) Change the `saLogStreamLogFileFormat`
> +// 3) Set up the logBuf containing long DN data/or `logSvcUsrName` with
> long DN (> 255 bytes)
> +// 4) Sending the record to log stream
> +// 5) Read the log file and verify the content
> +// 6) Restore to default settings
> +//<<
> +
> +/* Vars holding default values - they have to change to test Long DN */
> +static uint32_t v_logMaxLogrecsize = 1024;
> +static char v_saLogStreamLogFileFormat[1024] = {0};
> +static uint32_t v_saLogStreamFixedLogRecordSize = 200;
> +static char v_saLogStreamFileName[256] = {0};
> +static uint32_t v_longDnsAllowed = 0;
> +
> +typedef enum {
> +     E_ALARM,
> +     E_NOTIF,
> +     E_SYSTE,
> +     E_APPLI
> +} stream_type_t;
> +
> +SaConstStringT s_opensafImm =
> "opensafImm=opensafImm,safApp=safImmService";
> +SaNameT sa_opensafImm;
> +
> +//>>
> +// Global data for handling LOG API
> +//<<
> +static SaLogHandleT logHandleLd = -1;
> +static SaLogStreamHandleT logStreamHandleLd = -1;
> +static SaLogRecordT logRecordLd;
> +static SaSelectionObjectT selectionObjectLd = -1;
> +static SaLogFileCreateAttributesT_2 *logFileCreateAttributesLd = NULL;
> +
> +static SaNameT logSvcUsrNameLd;
> +static SaNameT notificationObjLd;
> +static SaNameT notifyingObjLd;
> +static SaNameT logStreamNameLd;
> +static SaLogBufferT logBufferLd;
> +static SaNtfClassIdT notificationClassIdLd = { 1, 2, 3 };
> +static SaVersionT logVersionLd = { 'A', 2, 1 };
> +static SaInvocationT invocationLd;
> +static SaAisErrorT errorLd;
> +
> +
> +/* Try for 10 seconds before giving up on an API */
> +#define TEN_SECONDS 10*1000*1000
> +/* Sleep for 100 ms before retrying an API */
> +#define HUNDRED_MS 100*1000
> +
> +SaConstStringT logSvcUsrNameDf = "SvcUserName_Test_LongDN";
> +SaConstStringT notifyingObjDf = "NotifyingObj_Test_LongDN";
> +SaConstStringT notificationObjDf = "NotificationObj_Test_LongDN";
> +
> +static void logWriteLogCallbackT(SaInvocationT invocation, SaAisErrorT
> error);
> +static SaLogCallbacksT logCallbacksLd = { 0, 0, logWriteLogCallbackT };
> +
> +//>
> +// Following attributes are backup before performing testing
> +// logMaxLogrecsize;
> +// saLogStreamLogFileFormat
> +// saLogStreamFixedLogRecordSize;
> +// saLogStreamFileName;
> +// longDnsAllowed
> +//<
> +static int backupData(stream_type_t type)
> +{
> +     int rc;
> +
> +     saAisNameLend(s_opensafImm, &sa_opensafImm);
> +     rc = get_attr_value(&sa_opensafImm, "longDnsAllowed",
> &v_longDnsAllowed);
> +     if (rc == -1) {
> +             /* Failed, use default one */
> +             fprintf(stderr, "Failed to get attribute longDnsAllowed value
> from IMM\n");
> +     }
> +     rc = get_attr_value(&configurationObject, "logMaxLogrecsize",
> &v_logMaxLogrecsize);
> +     if (rc == -1) {
> +             /* Failed, use default one */
> +             fprintf(stderr, "Failed to get attribute logMaxLogrecsize value
> from IMM\n");
> +     }
> +
> +     switch (type) {
> +     case E_ALARM:
> +             /* Get and save saLogStreamLogFileFormat */
> +             rc = get_attr_value(&alarmStreamName,
> "saLogStreamLogFileFormat", v_saLogStreamLogFileFormat);
> +             if (rc == -1) {
> +                     /* Failed, use default one */
> +                     fprintf(stderr, "Failed to get
> saLogStreamLogFileFormat attribute value from IMM\n");
> +                     strncpy(v_saLogStreamLogFileFormat,
> fmt_alarm_default, 500);
> +             }
> +             /* Get and save salogStreamFileName */
> +             rc = get_attr_value(&alarmStreamName,
> "saLogStreamFileName", v_saLogStreamFileName);
> +             if (rc == -1) {
> +                     /* Failed, use default one */
> +                     fprintf(stderr, "Failed to get saLogStreamFileName
> attribute value from IMM\n");
> +                     strncpy(v_saLogStreamFileName, "saLogAlarm",
> 256);
> +             }
> +             /* Get and save saLogStreamFixedLogRecordSize */
> +             rc = get_attr_value(&alarmStreamName,
> "saLogStreamFixedLogRecordSize",
> +                                 &v_saLogStreamFixedLogRecordSize);
> +             if (rc == -1) {
> +                     /* Failed, use default one */
> +                     fprintf(stderr, "Failed to get
> saLogStreamFixedLogRecordSize attribute value from IMM\n");
> +             }
> +             break;
> +
> +     case E_NOTIF:
> +             /* Get and save saLogStreamLogFileFormat */
> +             rc = get_attr_value(&notificationStreamName,
> "saLogStreamLogFileFormat",
> +                                 v_saLogStreamLogFileFormat);
> +             if (rc == -1) {
> +                     /* Failed, use default one */
> +                     fprintf(stderr, "Failed to get attribute value from
> IMM\n");
> +                     strncpy(v_saLogStreamLogFileFormat,
> fmt_alarm_default, 256);
> +             }
> +             /* Get and save salogStreamFileName */
> +             rc = get_attr_value(&notificationStreamName,
> "saLogStreamFileName", v_saLogStreamFileName);
> +             if (rc == -1) {
> +                     /* Failed, use default one */
> +                     fprintf(stderr, "Failed to get saLogStreamFileName
> attribute value from IMM\n");
> +                     strncpy(v_saLogStreamFileName,
> "saLogNotification", 256);
> +             }
> +             /* Get and save saLogStreamFixedLogRecordSize */
> +             rc = get_attr_value(&notificationStreamName,
> "saLogStreamFixedLogRecordSize",
> +                                 &v_saLogStreamFixedLogRecordSize);
> +             if (rc == -1) {
> +                     /* Failed, use default one */
> +                     fprintf(stderr, "Failed to get
> saLogStreamFixedLogRecordSize attribute value from IMM\n");
> +             }
> +             break;
> +
> +     case E_SYSTE:
> +             /* Get and save saLogStreamLogFileFormat */
> +             rc = get_attr_value(&systemStreamName,
> "saLogStreamLogFileFormat",
> +                                 v_saLogStreamLogFileFormat);
> +             if (rc == -1) {
> +                     /* Failed, use default one */
> +                     fprintf(stderr, "Failed to get attribute value from
> IMM\n");
> +                     strncpy(v_saLogStreamLogFileFormat,
> fmt_sys_default, 256);
> +             }
> +             /* Get and save salogStreamFileName */
> +             rc = get_attr_value(&systemStreamName,
> "saLogStreamFileName", v_saLogStreamFileName);
> +             if (rc == -1) {
> +                     /* Failed, use default one */
> +                     fprintf(stderr, "Failed to get saLogStreamFileName
> attribute value from IMM\n");
> +                     strncpy(v_saLogStreamFileName, "saLogSystem",
> 256);
> +             }
> +             /* Get and save saLogStreamFixedLogRecordSize */
> +             rc = get_attr_value(&systemStreamName,
> "saLogStreamFixedLogRecordSize",
> +                                 &v_saLogStreamFixedLogRecordSize);
> +             if (rc == -1) {
> +                     /* Failed, use default one */
> +                     fprintf(stderr, "Failed to get
> saLogStreamFixedLogRecordSize attribute value from IMM\n");
> +             }
> +             break;
> +
> +     case E_APPLI:
> +             /* Do nothing here */
> +             break;
> +
> +     default:
> +             fprintf(stderr, "Not supported!\n");
> +             rc = -1;
> +             break;
> +     }
> +
> +     return rc;
> +}
> +
> +//>
> +// Set up environments before performing testing
> +// 1) Tell IMM to enable long DN feature
> +// 2) Change max log record size (record contains long DN data could be
> huge)
> +// 3) Change log file format, so long DN can be saved fully in log record
> +// 4) Change log record size to variable record (not fix one)
> +//
> +// Return value must be 0, report test failed otherwise.
> +//<
> +static int setUpTestEnv(stream_type_t type)
> +{
> +     int rc;
> +     char command[MAX_DATA];
> +
> +     /* Enable long DN feature */
> +     rc = system("immcfg -m -a longDnsAllowed=1
> opensafImm=opensafImm,safApp=safImmService");
> +     if (WEXITSTATUS(rc) != 0) {
> +             fprintf(stderr, "Failed to enable long DN \n");
> +             return -1;
> +     }
> +     sprintf(command, "immcfg -a logMaxLogrecsize=%d "
> +             "logConfig=1,safApp=safLogService 2> /dev/null",
> SA_LOG_MAX_RECORD_SIZE);
> +     rc = system(command);
> +     if (WEXITSTATUS(rc) != 0) {
> +             fprintf(stderr, "Failed to execute command %s\n",
> command);
> +             return -1;
> +     }
> +
> +     switch (type) {
> +     case E_ALARM:
> +             sprintf(command, "immcfg -a
> saLogStreamLogFileFormat=\"%s\" "
> +                     " -a saLogStreamFixedLogRecordSize=0 %s",
> +                     test_alarm_fmt, SA_LOG_STREAM_ALARM);
> +             break;
> +
> +     case E_NOTIF:
> +             sprintf(command, "immcfg -a
> saLogStreamLogFileFormat=\"%s\" "
> +                     " -a saLogStreamFixedLogRecordSize=0 %s",
> +                     test_notif_fmt, SA_LOG_STREAM_NOTIFICATION);
> +             break;
> +
> +     case E_SYSTE:
> +             sprintf(command, "immcfg -a
> saLogStreamLogFileFormat=\"%s\" "
> +                     " -a saLogStreamFixedLogRecordSize=0 %s",
> +                     test_sys_fmt, SA_LOG_STREAM_SYSTEM);
> +             break;
> +
> +     case E_APPLI:
> +             /* Do nothing here */
> +             break;
> +
> +     default:
> +             fprintf(stderr, "Not supported\n");
> +             return -1;
> +     }
> +
> +     rc = system(command);
> +     if (WEXITSTATUS(rc) != 0) {
> +             fprintf(stderr, "Failed to perform cmd = %s\n", command);
> +             return -1;
> +     }
> +
> +     return 0;
> +}
> +
> +void restoreData(stream_type_t type)
> +{
> +     int rc;
> +     char command[MAX_DATA];
> +
> +     sprintf(command, "immcfg -a longDnsAllowed=%d %s",
> v_longDnsAllowed, s_opensafImm);
> +     rc = system(command);
> +     if (WEXITSTATUS(rc) != 0) {
> +             fprintf(stderr, "Failed to perform cmd = %s\n", command);
> +     }
> +
> +     sprintf(command, "immcfg -a logMaxLogrecsize=%d "
> +             "logConfig=1,safApp=safLogService 2> /dev/null",
> v_logMaxLogrecsize);
> +     rc = system(command);
> +     if (WEXITSTATUS(rc) != 0) {
> +             fprintf(stderr, "Failed to perform cmd = %s\n", command);
> +     }
> +
> +     switch (type) {
> +     case E_ALARM:
> +             sprintf(command, "immcfg -a
> saLogStreamLogFileFormat=\"%s\" "
> +                     " -a saLogStreamFixedLogRecordSize=%d %s",
> v_saLogStreamLogFileFormat,
> +                     v_saLogStreamFixedLogRecordSize,
> SA_LOG_STREAM_ALARM);
> +             break;
> +
> +     case E_NOTIF:
> +             sprintf(command, "immcfg -a
> saLogStreamLogFileFormat=\"%s\" "
> +                     " -a saLogStreamFixedLogRecordSize=%d %s",
> v_saLogStreamLogFileFormat,
> +                     v_saLogStreamFixedLogRecordSize,
> SA_LOG_STREAM_NOTIFICATION);
> +             break;
> +
> +     case E_SYSTE:
> +             sprintf(command, "immcfg -a
> saLogStreamLogFileFormat=\"%s\" "
> +                     " -a saLogStreamFixedLogRecordSize=%d %s",
> v_saLogStreamLogFileFormat,
> +                     v_saLogStreamFixedLogRecordSize,
> SA_LOG_STREAM_SYSTEM);
> +             break;
> +
> +     case E_APPLI:
> +             /* Do nothing here */
> +             break;
> +
> +     default:
> +             fprintf(stderr, "Not supported\n");
> +             break;
> +     }
> +
> +     rc = system(command);
> +     if (WEXITSTATUS(rc) != 0) {
> +             fprintf(stderr, "failed to perform cmd = %s\n", command);
> +     }
> +
> +}
> +
> +//
> +// Functions
> +//
> +
> +static void logWriteLogCallbackT(SaInvocationT invocation, SaAisErrorT
> error)
> +{
> +     invocationLd = invocation;
> +     errorLd = error;
> +}
> +
> +static SaTimeT currentTime(void)
> +{
> +     struct timeval tv;
> +     SaTimeT ntfTime;
> +     gettimeofday(&tv, 0);
> +     ntfTime = ((unsigned)tv.tv_sec * 1000000000ULL) +
> +             ((unsigned)tv.tv_usec * 1000ULL);
> +     return ntfTime;
> +}
> +
> +static SaAisErrorT initLog(void)
> +{
> +     SaAisErrorT error;
> +     unsigned int wait_time = 0;
> +
> +     error = saLogInitialize(&logHandleLd, &logCallbacksLd,
> &logVersionLd);
> +     while (error == SA_AIS_ERR_TRY_AGAIN && wait_time <
> TEN_SECONDS) {
> +             usleep(HUNDRED_MS);
> +             wait_time += HUNDRED_MS;
> +             error = saLogInitialize(&logHandleLd, &logCallbacksLd,
> &logVersionLd);
> +     }
> +
> +     return error;
> +}
> +
> +static SaAisErrorT openLog(stream_type_t type)
> +{
> +     SaAisErrorT error;
> +     unsigned int wait_time = 0;
> +     SaLogStreamOpenFlagsT logStreamOpenFlagsIn = 0;
> +     SaLogFileCreateAttributesT_2 appLogFileCreateAttributesIn;
> +
> +     // Set up default data
> +     saAisNameLend(logSvcUsrNameDf, &logSvcUsrNameLd);
> +     saAisNameLend(notifyingObjDf, &notifyingObjLd);
> +     saAisNameLend(notificationObjDf, &notificationObjLd);
> +
> +
> +     saAisNameLend(SA_LOG_STREAM_SYSTEM, &logStreamNameLd);
> +     logRecordLd.logTimeStamp = SA_TIME_UNKNOWN;     /* LOG
> service should supply timestamp */
> +     logRecordLd.logHdrType = SA_LOG_GENERIC_HEADER;
> +     logRecordLd.logHeader.genericHdr.notificationClassId = NULL;
> +     logRecordLd.logHeader.genericHdr.logSeverity =
> SA_LOG_SEV_INFO;
> +     logRecordLd.logHeader.genericHdr.logSvcUsrName =
> &logSvcUsrNameLd;
> +     logRecordLd.logBuffer = NULL;
> +
> +     /* Initial data for E_APPLI stream type */
> +     char appStreamDN[1000] = {0};
> +
> +     switch (type) {
> +     case E_ALARM:
> +             saAisNameLend(SA_LOG_STREAM_ALARM,
> &logStreamNameLd);
> +             logRecordLd.logHdrType = SA_LOG_NTF_HEADER;
> +             break;
> +
> +     case E_NOTIF:
> +             saAisNameLend(SA_LOG_STREAM_NOTIFICATION,
> &logStreamNameLd);
> +             logRecordLd.logHdrType = SA_LOG_NTF_HEADER;
> +             break;
> +
> +     case E_SYSTE:
> +             /* Do nothing here */
> +             break;
> +
> +     case E_APPLI:
> +             appLogFileCreateAttributesIn.logFilePathName =
> "testLongDN";
> +             appLogFileCreateAttributesIn.maxLogFileSize =
> DEFAULT_APP_LOG_FILE_SIZE;
> +             appLogFileCreateAttributesIn.maxLogRecordSize =
> DEFAULT_APP_LOG_REC_SIZE;
> +             appLogFileCreateAttributesIn.haProperty = SA_TRUE;
> +             appLogFileCreateAttributesIn.logFileFullAction =
> SA_LOG_FILE_FULL_ACTION_ROTATE;
> +             appLogFileCreateAttributesIn.maxFilesRotated = 4;
> +
> +             char tmp [1000] = {0};
> +             memset(tmp, 'L', sizeof(tmp) - 1);
> +             snprintf(appStreamDN, sizeof(appStreamDN) - 2,
> "safLgStr=%s", tmp);
> +
> +             /* Use built-in log file format in log server for app stream */
> +             appLogFileCreateAttributesIn.logFileFmt = NULL;
> +             appLogFileCreateAttributesIn.logFileName =
> "longDNAppStream";
> +
> +             logFileCreateAttributesLd = &appLogFileCreateAttributesIn;
> +             logStreamOpenFlagsIn = SA_LOG_STREAM_CREATE;
> +             saAisNameLend(appStreamDN, &logStreamNameLd);
> +
> +             break;
> +
> +     default:
> +             fprintf(stderr, "Not supported \n");
> +             return SA_AIS_ERR_INVALID_PARAM;
> +     }
> +
> +     if (logRecordLd.logHdrType == SA_LOG_NTF_HEADER) {
> +             /* Setup some valid values */
> +             logRecordLd.logHeader.ntfHdr.notificationId =
> SA_NTF_IDENTIFIER_UNUSED;
> +             logRecordLd.logHeader.ntfHdr.eventType =
> SA_NTF_ALARM_PROCESSING;
> +             logRecordLd.logHeader.ntfHdr.notificationObject =
> &notificationObjLd;
> +             logRecordLd.logHeader.ntfHdr.notifyingObject =
> &notifyingObjLd;
> +             logRecordLd.logHeader.ntfHdr.notificationClassId =
> &notificationClassIdLd;
> +             logRecordLd.logHeader.ntfHdr.eventTime = currentTime();
> +     }
> +
> +     error = saLogStreamOpen_2(logHandleLd, &logStreamNameLd,
> NULL, 0,
> +                               SA_TIME_ONE_SECOND,
> &logStreamHandleLd);
> +     while (error == SA_AIS_ERR_TRY_AGAIN && wait_time <
> TEN_SECONDS) {
> +             usleep(HUNDRED_MS);
> +             wait_time += HUNDRED_MS;
> +             error = saLogStreamOpen_2(logHandleLd,
> &logStreamNameLd, NULL, 0,
> +                                       SA_TIME_ONE_SECOND,
> &logStreamHandleLd);
> +     }
> +
> +     if (error == SA_AIS_ERR_NOT_EXIST && type == E_APPLI) {
> +             wait_time = 0;
> +             error = saLogStreamOpen_2(logHandleLd,
> &logStreamNameLd, logFileCreateAttributesLd,
> +                                       logStreamOpenFlagsIn,
> SA_TIME_ONE_SECOND, &logStreamHandleLd);
> +             while (error == SA_AIS_ERR_TRY_AGAIN && wait_time <
> TEN_SECONDS) {
> +                     usleep(HUNDRED_MS);
> +                     wait_time += HUNDRED_MS;
> +                     error = saLogStreamOpen_2(logHandleLd,
> &logStreamNameLd, logFileCreateAttributesLd,
> +                                               logStreamOpenFlagsIn,
> SA_TIME_ONE_SECOND, &logStreamHandleLd);
> +             }
> +     }
> +
> +     return error;
> +}
> +
> +static SaAisErrorT endLog(void)
> +{
> +     SaAisErrorT error;
> +     unsigned int wait_time = 0;
> +
> +     wait_time = 0;
> +     error = saLogStreamClose(logStreamHandleLd);
> +     while (error == SA_AIS_ERR_TRY_AGAIN && wait_time <
> TEN_SECONDS) {
> +             usleep(HUNDRED_MS);
> +             wait_time += HUNDRED_MS;
> +             error = saLogStreamClose(logStreamHandleLd);
> +     }
> +     if (SA_AIS_OK != error) {
> +             fprintf(stderr, "saLogStreamClose FAILED: %s\n",
> saf_error(error));
> +     }
> +
> +     wait_time = 0;
> +     error = saLogFinalize(logHandleLd);
> +     while (error == SA_AIS_ERR_TRY_AGAIN && wait_time <
> TEN_SECONDS) {
> +             usleep(HUNDRED_MS);
> +             wait_time += HUNDRED_MS;
> +             error = saLogFinalize(logHandleLd);
> +     }
> +     if (SA_AIS_OK != error) {
> +             fprintf(stderr, "saLogFinalize FAILED: %s\n",
> saf_error(error));
> +     }
> +
> +     /* Reset data */
> +     logStreamHandleLd = -1;
> +     logHandleLd = -1;
> +     selectionObjectLd = -1;
> +
> +     return error;
> +
> +}
> +
> +static SaAisErrorT writeLog(void)
> +{
> +     SaAisErrorT error;
> +     unsigned int wait_time = 0;
> +     SaInvocationT invocation;
> +     int sz;
> +     struct pollfd fds[1];
> +     const char *logBuf = "test long DN";
> +     int ret;
> +
> +     sz = strlen(logBuf);
> +     logBufferLd.logBufSize = sz;
> +     logBufferLd.logBuf = (SaUint8T *)logBuf;
> +     logRecordLd.logBuffer = &logBufferLd;
> +     invocation = random();
> +
> +retry:
> +     error = saLogWriteLogAsync(logStreamHandleLd, invocation,
> SA_LOG_RECORD_WRITE_ACK, &logRecordLd);
> +     while (error == SA_AIS_ERR_TRY_AGAIN && wait_time <
> TEN_SECONDS) {
> +             usleep(HUNDRED_MS);
> +             wait_time += HUNDRED_MS;
> +             goto retry;
> +     }
> +
> +     if (error != SA_AIS_OK) {
> +             return error;
> +     }
> +
> +     fds[0].fd = (int)selectionObjectLd;
> +     fds[0].events = POLLIN;
> +
> +poll_retry:
> +     ret = poll(fds, 1, 20000);
> +
> +     if (ret == EINTR)
> +             goto poll_retry;
> +     if (ret == -1) {
> +             fprintf(stderr, "poll FAILED: %u\n", ret);
> +             return SA_AIS_ERR_BAD_OPERATION;
> +     }
> +     if (ret == 0) {
> +             fprintf(stderr, "poll timeout\n");
> +             return SA_AIS_ERR_BAD_OPERATION;
> +     }
> +
> +     error = saLogDispatch(logHandleLd, SA_DISPATCH_ONE);
> +     if (error != SA_AIS_OK) {
> +             fprintf(stderr, "saLogDispatch FAILED: %s\n",
> saf_error(error));
> +             return error;
> +     }
> +
> +     if (invocationLd != invocation) {
> +             fprintf(stderr, "logWriteLogCallbackT FAILED: wrong
> invocation\n");
> +             return SA_AIS_ERR_BAD_OPERATION;
> +     }
> +     if (errorLd == SA_AIS_ERR_TRY_AGAIN && wait_time <
> TEN_SECONDS) {
> +             usleep(HUNDRED_MS);
> +             wait_time += HUNDRED_MS;
> +             goto retry;
> +     }
> +     if (errorLd == SA_AIS_ERR_TIMEOUT) {
> +             usleep(HUNDRED_MS);
> +             fprintf(stderr, "got SA_AIS_ERR_TIMEOUT, retry\n");
> +             goto retry;
> +     }
> +     if (errorLd != SA_AIS_OK) {
> +             fprintf(stderr, "logWriteLogCallbackT FAILED: %s\n",
> saf_error(errorLd));
> +             return errorLd;
> +     }
> +
> +     return error;
> +}
> +
> +//>
> +// Verify the log file content to see if the long DN exists at specific 
> token or
> not
> +//
> +// 1) Find all log files that have changes within last 1 minute
> +// 2) Take all log files which match the pattern
> +// 3) Search in file to see the long DN exist
> +// 4) Return 0 if found, otherwise -1
> +//
> +// @param type stream type
> +// @ret 0 if found long DN in log record, 1 otherwise
> +//
> +// NOTES:
> +// 1) If environment variable `LOGTEST_ENABLE_STDOUT` set, user will set
> +//    the log record that contains the long DN.
> +// 2) In step #1, if the timer is different b/w active and other nodes,
> +//    running test on other node might get failed at verifyData step.
> +//<
> +static int verifyData(void)
> +{
> +     int rc = 0;
> +     char command[500];
> +     bool disable_stdout = true;
> +     SaConstStringT s_stdout = "1> /dev/null";
> +
> +     if (getenv("LOGTEST_ENABLE_STDOUT")) disable_stdout = false;
> +
> +     sprintf(command, "find %s -type f -mmin -1 | egrep \"%s_[0-
> 9]{8}_[0-9]{6}\\.log$\" "
> +             " | xargs egrep \" START.*END \" %s ",
> +             log_root_path, v_saLogStreamFileName, disable_stdout ?
> s_stdout : " ");
> +     rc = system(command);
> +     if (WEXITSTATUS(rc) != 0) {
> +             fprintf(stderr, "failed to perform cmd = %s\n", command);
> +             rc = 1;
> +     }
> +
> +     return rc;
> +}
> +
> +//>>
> +// UC1: Write an log records using the long DN in @No tokens using Log API.
> +//<<
> +void longDNAt_No_token(void)
> +{
> +     int rc;
> +     SaAisErrorT ais;
> +
> +     rc = backupData(E_ALARM);
> +     if (rc != 0) {
> +             fprintf(stderr, "Backup data failed\n");
> +             // Not report test failed as can use default data to restore.
> +             // rc_validate(WEXITSTATUS(rc), 0);
> +             // return;
> +     }
> +
> +     rc = setUpTestEnv(E_ALARM);
> +     if (rc != 0) {
> +             fprintf(stderr, "set up env failed\n");
> +             rc_validate(WEXITSTATUS(rc), 0);
> +             goto done;
> +     }
> +
> +     ais = initLog();
> +     if (ais != SA_AIS_OK) {
> +             fprintf(stderr, "initLog FAILED: %s\n", saf_error(ais));
> +             rc_validate(ais, SA_AIS_OK);
> +             goto done;
> +     }
> +
> +     ais = openLog(E_ALARM);
> +     if (ais != SA_AIS_OK) {
> +             fprintf(stderr, "openLog FAILED: %s\n", saf_error(ais));
> +             rc_validate(ais, SA_AIS_OK);
> +             goto done_init;
> +     }
> +
> +     ais = saLogSelectionObjectGet(logHandleLd, &selectionObjectLd);
> +     if (ais != SA_AIS_OK) {
> +             printf("saLogSelectionObjectGet FAILED: %s\n",
> saf_error(ais));
> +             rc_validate(ais, SA_AIS_OK);
> +             goto done_init;
> +     }
> +
> +     // Long DN in @No token
> +     char notificationObj[1000] = {0};
> +     memset(notificationObj, 'A', sizeof(notificationObj) - 1);
> +     saAisNameLend(notificationObj, &notificationObjLd);
> +
> +     ais = writeLog();
> +     if (ais != SA_AIS_OK) {
> +             fprintf(stderr, "saLogOpen FAILED: %s\n", saf_error(ais));
> +             rc_validate(ais, SA_AIS_OK);
> +             goto done_init;
> +     }
> +
> +     // Verify if log file contains long DN record or not
> +     rc = verifyData();
> +     rc_validate(rc, 0);
> +
> +     // End testing. Close handles and restore data
> +done_init:
> +     endLog();
> +done:
> +     restoreData(E_ALARM);
> +}
> +
> +//>>
> +// UC2: Write an log records using the long DN in @Ng tokens using Log API.
> +//<<
> +void longDNAt_Ng_token(void)
> +{
> +     int rc;
> +     SaAisErrorT ais;
> +
> +     rc = backupData(E_NOTIF);
> +     if (rc != 0) {
> +             fprintf(stderr, "Backup data failed\n");
> +             // Not report test failed as can use default data to restore.
> +             // rc_validate(WEXITSTATUS(rc), 0);
> +             // return;
> +     }
> +
> +     rc = setUpTestEnv(E_NOTIF);
> +     if (rc != 0) {
> +             fprintf(stderr, "set up env failed\n");
> +             rc_validate(WEXITSTATUS(rc), 0);
> +             goto done;
> +     }
> +
> +     ais = initLog();
> +     if (ais != SA_AIS_OK) {
> +             fprintf(stderr, "saLogInitialize FAILED: %s\n", saf_error(ais));
> +             rc_validate(ais, SA_AIS_OK);
> +             goto done;
> +     }
> +
> +     ais = openLog(E_NOTIF);
> +     if (ais != SA_AIS_OK) {
> +             fprintf(stderr, "saLogOpen FAILED: %s\n", saf_error(ais));
> +             rc_validate(ais, SA_AIS_OK);
> +             goto done_init;
> +     }
> +
> +     ais = saLogSelectionObjectGet(logHandleLd, &selectionObjectLd);
> +     if (ais != SA_AIS_OK) {
> +             printf("saLogSelectionObjectGet FAILED: %s\n",
> saf_error(ais));
> +             rc_validate(ais, SA_AIS_OK);
> +             goto done_init;
> +     }
> +
> +     // Long DN in @No token
> +     char notifyingObj[1000] = {0};
> +     memset(notifyingObj, 'B', sizeof(notifyingObj) - 1);
> +     saAisNameLend(notifyingObj, &notifyingObjLd);
> +
> +     ais = writeLog();
> +     if (ais != SA_AIS_OK) {
> +             fprintf(stderr, "saLogOpen FAILED: %s\n", saf_error(ais));
> +             rc_validate(ais, SA_AIS_OK);
> +             goto done_init;
> +     }
> +
> +     // Verify if log file contains long DN record or not
> +     rc = verifyData();
> +     rc_validate(rc, 0);
> +
> +     // End testing. Close handles and restore data
> +done_init:
> +     endLog();
> +done:
> +     restoreData(E_NOTIF);
> +}
> +
> +//>>
> +// UC3: Write an log records using the long DN in @Sl tokens using Log API.
> +//<<
> +void longDNAt_Sl_token(void)
> +{
> +     int rc;
> +     SaAisErrorT ais;
> +
> +     rc = backupData(E_SYSTE);
> +     if (rc != 0) {
> +             fprintf(stderr, "Backup data failed\n");
> +             // Not report test failed as can use default data to restore.
> +             // rc_validate(WEXITSTATUS(rc), 0);
> +             // return;
> +     }
> +
> +     rc = setUpTestEnv(E_SYSTE);
> +     if (rc != 0) {
> +             fprintf(stderr, "set up env failed\n");
> +             rc_validate(WEXITSTATUS(rc), 0);
> +             goto done;
> +     }
> +
> +     ais = initLog();
> +     if (ais != SA_AIS_OK) {
> +             fprintf(stderr, "saLogInitialize FAILED: %s\n", saf_error(ais));
> +             rc_validate(ais, SA_AIS_OK);
> +             goto done;
> +     }
> +
> +     ais = openLog(E_SYSTE);
> +     if (ais != SA_AIS_OK) {
> +             fprintf(stderr, "saLogOpen FAILED: %s\n", saf_error(ais));
> +             rc_validate(ais, SA_AIS_OK);
> +             goto done_init;
> +     }
> +
> +     ais = saLogSelectionObjectGet(logHandleLd, &selectionObjectLd);
> +     if (ais != SA_AIS_OK) {
> +             printf("saLogSelectionObjectGet FAILED: %s\n",
> saf_error(ais));
> +             rc_validate(ais, SA_AIS_OK);
> +             goto done_init;
> +     }
> +
> +     // Long DN in @Sl token
> +     char serviceName[1000] = {0};
> +     memset(serviceName, 'C', sizeof(serviceName) - 1);
> +     saAisNameLend(serviceName, &logSvcUsrNameLd);
> +
> +     ais = writeLog();
> +     if (ais != SA_AIS_OK) {
> +             fprintf(stderr, "saLogOpen FAILED: %s\n", saf_error(ais));
> +             rc_validate(ais, SA_AIS_OK);
> +             goto done_init;
> +     }
> +
> +     // Verify if log file contains long DN record or not
> +     rc = verifyData();
> +     rc_validate(rc, 0);
> +
> +     // End testing. Close handles and restore data
> +done_init:
> +     endLog();
> +done:
> +     restoreData(E_SYSTE);
> +}
> +
> +//>>
> +// UC4: Write an log records to long DN app stream using Log API.
> +//<<
> +void longDN_AppStream(void)
> +{
> +     int rc;
> +     SaAisErrorT ais;
> +
> +     rc = backupData(E_APPLI);
> +     if (rc != 0) {
> +             fprintf(stderr, "Backup data failed\n");
> +             // Not report test failed as can use default data to restore.
> +             // rc_validate(WEXITSTATUS(rc), 0);
> +             // return;
> +     }
> +
> +     rc = setUpTestEnv(E_APPLI);
> +     if (rc != 0) {
> +             fprintf(stderr, "set up env failed\n");
> +             rc_validate(WEXITSTATUS(rc), 0);
> +             goto done;
> +     }
> +
> +     ais = initLog();
> +     if (ais != SA_AIS_OK) {
> +             fprintf(stderr, "saLogInitialize FAILED: %s\n", saf_error(ais));
> +             rc_validate(ais, SA_AIS_OK);
> +             goto done;
> +     }
> +
> +     ais = openLog(E_APPLI);
> +     if (ais != SA_AIS_OK) {
> +             fprintf(stderr, "saLogOpen FAILED: %s\n", saf_error(ais));
> +             rc_validate(ais, SA_AIS_OK);
> +             goto done_init;
> +     }
> +
> +     ais = saLogSelectionObjectGet(logHandleLd, &selectionObjectLd);
> +     if (ais != SA_AIS_OK) {
> +             printf("saLogSelectionObjectGet FAILED: %s\n",
> saf_error(ais));
> +             rc_validate(ais, SA_AIS_OK);
> +             goto done_init;
> +     }
> +
> +     ais = writeLog();
> +     if (ais != SA_AIS_OK) {
> +             fprintf(stderr, "saLogOpen FAILED: %s\n", saf_error(ais));
> +             rc_validate(ais, SA_AIS_OK);
> +             goto done_init;
> +     }
> +
> +     rc_validate(rc, 0);
> +
> +     // End testing. Close handles and restore data
> +done_init:
> +     endLog();
> +done:
> +     restoreData(E_APPLI);
> +}
> +
> +//>>
> +// UC5: Write a log record to long DN runtime app stream using saflogger
> +//<<
> +void longDNIn_AppStreamDN(void)
> +{
> +     int rc;
> +     char command[3000];
> +
> +     // Backup default setting
> +     saAisNameLend(s_opensafImm, &sa_opensafImm);
> +     rc = get_attr_value(&sa_opensafImm, "longDnsAllowed",
> &v_longDnsAllowed);
> +     if (rc == -1) {
> +             /* Failed, use default one */
> +             fprintf(stderr, "Failed to get attribute longDnsAllowed value
> from IMM\n");
> +     }
> +
> +     /* Enable long DN feature */
> +     rc = system("immcfg -m -a longDnsAllowed=1
> opensafImm=opensafImm,safApp=safImmService");
> +     if (WEXITSTATUS(rc) != 0) {
> +             fprintf(stderr, "Failed to enable long DN \n");
> +             rc_validate(WEXITSTATUS(rc), 0);
> +             return;
> +     }
> +
> +     // Preparing data
> +     char appStreamDN[1000] = {0};
> +     memset(appStreamDN, 'D', sizeof(appStreamDN) - 1);
> +
> +     // Perform testing
> +     sprintf(command, "saflogger -a safLgStrCfg=%s -f longDN
> longDN_test", appStreamDN);
> +     rc = system(command);
> +     if (WEXITSTATUS(rc) != 0) {
> +             fprintf(stderr, "Failed to perform cmd = %s\n", command);
> +             rc_validate(WEXITSTATUS(rc), 0);
> +             goto done;
> +     }
> +
> +     rc_validate(WEXITSTATUS(rc), 0);
> +done:
> +     // Restore data
> +     sprintf(command, "immcfg -a longDnsAllowed=%d %s",
> v_longDnsAllowed, s_opensafImm);
> +     rc = system(command);
> +     if (WEXITSTATUS(rc) != 0) {
> +             fprintf(stderr, "Failed to perform cmd = %s\n", command);
> +     }
> +
> +}
> +
> +//>
> +// ABNORMAL USE CASES
> +//<
> +
> +//>>
> +// A-UC1: Write an log records with `notificationObject` over
> kOsafMaxDnLength (2048)
> +// using Log API.
> +//<<
> +void longDN_No_Over_MaxDn(void)
> +{
> +     int rc;
> +     SaAisErrorT ais;
> +
> +     rc = backupData(E_ALARM);
> +     if (rc != 0) {
> +             fprintf(stderr, "Backup data failed\n");
> +             // Not report test failed as can use default data to restore.
> +             // rc_validate(WEXITSTATUS(rc), 0);
> +             // return;
> +     }
> +
> +     rc = setUpTestEnv(E_ALARM);
> +     if (rc != 0) {
> +             fprintf(stderr, "set up env failed\n");
> +             rc_validate(WEXITSTATUS(rc), 0);
> +             goto done;
> +     }
> +
> +     ais = initLog();
> +     if (ais != SA_AIS_OK) {
> +             fprintf(stderr, "initLog FAILED: %s\n", saf_error(ais));
> +             rc_validate(ais, SA_AIS_OK);
> +             goto done;
> +     }
> +
> +     ais = openLog(E_ALARM);
> +     if (ais != SA_AIS_OK) {
> +             fprintf(stderr, "openLog FAILED: %s\n", saf_error(ais));
> +             rc_validate(ais, SA_AIS_OK);
> +             goto done_init;
> +     }
> +
> +     ais = saLogSelectionObjectGet(logHandleLd, &selectionObjectLd);
> +     if (ais != SA_AIS_OK) {
> +             printf("saLogSelectionObjectGet FAILED: %s\n",
> saf_error(ais));
> +             rc_validate(ais, SA_AIS_OK);
> +             goto done_init;
> +     }
> +
> +     // Long DN in @No token
> +     char notificationObj[kOsafMaxDnLength + 1] = {0};
> +     memset(notificationObj, 'X', sizeof(notificationObj) - 1);
> +     saAisNameLend(notificationObj, &notificationObjLd);
> +
> +     ais = writeLog();
> +     rc_validate(ais, SA_AIS_ERR_INVALID_PARAM);
> +
> +     // End testing. Close handles and restore data
> +done_init:
> +     endLog();
> +done:
> +     restoreData(E_ALARM);
> +}
> +
> +//>>
> +// A-UC3: Write an log records with `notifyingObject` over
> kOsafMaxDnLength (2048)
> +// using Log API.
> +//<<
> +void longDN_Ng_Over_MaxDn(void)
> +{
> +     int rc;
> +     SaAisErrorT ais;
> +
> +     rc = backupData(E_NOTIF);
> +     if (rc != 0) {
> +             fprintf(stderr, "Backup data failed\n");
> +             // Not report test failed as can use default data to restore.
> +             // rc_validate(WEXITSTATUS(rc), 0);
> +             // return;
> +     }
> +
> +     rc = setUpTestEnv(E_NOTIF);
> +     if (rc != 0) {
> +             fprintf(stderr, "set up env failed\n");
> +             rc_validate(WEXITSTATUS(rc), 0);
> +             goto done;
> +     }
> +
> +     ais = initLog();
> +     if (ais != SA_AIS_OK) {
> +             fprintf(stderr, "saLogInitialize FAILED: %s\n", saf_error(ais));
> +             rc_validate(ais, SA_AIS_OK);
> +             goto done;
> +     }
> +
> +     ais = openLog(E_NOTIF);
> +     if (ais != SA_AIS_OK) {
> +             fprintf(stderr, "saLogOpen FAILED: %s\n", saf_error(ais));
> +             rc_validate(ais, SA_AIS_OK);
> +             goto done_init;
> +     }
> +
> +     ais = saLogSelectionObjectGet(logHandleLd, &selectionObjectLd);
> +     if (ais != SA_AIS_OK) {
> +             printf("saLogSelectionObjectGet FAILED: %s\n",
> saf_error(ais));
> +             rc_validate(ais, SA_AIS_OK);
> +             goto done_init;
> +     }
> +
> +     // Long DN in @No token
> +     char notifyingObj[kOsafMaxDnLength + 1] = {0};
> +     memset(notifyingObj, 'Y', sizeof(notifyingObj) - 1);
> +     saAisNameLend(notifyingObj, &notifyingObjLd);
> +
> +     ais = writeLog();
> +     rc_validate(ais, SA_AIS_ERR_INVALID_PARAM);
> +
> +     // End testing. Close handles and restore data
> +done_init:
> +     endLog();
> +done:
> +     restoreData(E_NOTIF);
> +}
> +
> +//>>
> +// A-UC3: Write an log records with `logSvcUsrName` over
> kOsafMaxDnLength (2048)
> +// using Log API.
> +//<<
> +void longDN_Sl_Over_MaxDn(void)
> +{
> +     int rc;
> +     SaAisErrorT ais;
> +
> +     rc = backupData(E_SYSTE);
> +     if (rc != 0) {
> +             fprintf(stderr, "Backup data failed\n");
> +             // Not report test failed as can use default data to restore.
> +             // rc_validate(WEXITSTATUS(rc), 0);
> +             // return;
> +     }
> +
> +     rc = setUpTestEnv(E_SYSTE);
> +     if (rc != 0) {
> +             fprintf(stderr, "set up env failed\n");
> +             rc_validate(WEXITSTATUS(rc), 0);
> +             goto done;
> +     }
> +
> +     ais = initLog();
> +     if (ais != SA_AIS_OK) {
> +             fprintf(stderr, "saLogInitialize FAILED: %s\n", saf_error(ais));
> +             rc_validate(ais, SA_AIS_OK);
> +             goto done;
> +     }
> +
> +     ais = openLog(E_SYSTE);
> +     if (ais != SA_AIS_OK) {
> +             fprintf(stderr, "saLogOpen FAILED: %s\n", saf_error(ais));
> +             rc_validate(ais, SA_AIS_OK);
> +             goto done_init;
> +     }
> +
> +     ais = saLogSelectionObjectGet(logHandleLd, &selectionObjectLd);
> +     if (ais != SA_AIS_OK) {
> +             printf("saLogSelectionObjectGet FAILED: %s\n",
> saf_error(ais));
> +             rc_validate(ais, SA_AIS_OK);
> +             goto done_init;
> +     }
> +
> +     // Long DN in @Sl token
> +     char serviceName[kOsafMaxDnLength + 1] = {0};
> +     memset(serviceName, 'Z', sizeof(serviceName) - 1);
> +     saAisNameLend(serviceName, &logSvcUsrNameLd);
> +
> +     ais = writeLog();
> +     rc_validate(ais, SA_AIS_ERR_INVALID_PARAM);
> +
> +     // End testing. Close handles and restore data
> +done_init:
> +     endLog();
> +done:
> +     restoreData(E_SYSTE);
> +}
> +
> +//>>
> +// UC4: Write a log record to long DN runtime app stream using saflogger
> +//<<
> +void longDN_AppStrDN_Over_MaxDn(void)
> +{
> +     int rc;
> +     char command[kOsafMaxDnLength + 100];
> +
> +     // Backup default setting
> +     saAisNameLend(s_opensafImm, &sa_opensafImm);
> +     rc = get_attr_value(&sa_opensafImm, "longDnsAllowed",
> &v_longDnsAllowed);
> +     if (rc == -1) {
> +             /* Failed, use default one */
> +             fprintf(stderr, "Failed to get attribute longDnsAllowed value
> from IMM\n");
> +     }
> +
> +     /* Enable long DN feature */
> +     rc = system("immcfg -m -a longDnsAllowed=1
> opensafImm=opensafImm,safApp=safImmService");
> +     if (WEXITSTATUS(rc) != 0) {
> +             fprintf(stderr, "Failed to enable long DN \n");
> +             rc_validate(WEXITSTATUS(rc), 0);
> +             return;
> +     }
> +
> +     // Preparing data
> +     char appStreamDN[kOsafMaxDnLength + 1] = {0};
> +     memset(appStreamDN, 'x', sizeof(appStreamDN) - 1);
> +
> +     // Perform testing
> +     sprintf(command, "saflogger -a safLgStrCfg=%s -f longDN_overMax
> longDN_test 2> /dev/null", appStreamDN);
> +     rc = system(command);
> +     if (WEXITSTATUS(rc) != 0) {
> +             rc_validate(0, 0);
> +             goto done;
> +     }
> +
> +     rc_validate(1, 0);
> +done:
> +     // Restore data
> +     sprintf(command, "immcfg -a longDnsAllowed=%d %s",
> v_longDnsAllowed, s_opensafImm);
> +     rc = system(command);
> +     if (WEXITSTATUS(rc) != 0) {
> +             fprintf(stderr, "Failed to perform cmd = %s\n", command);
> +     }
> +
> +}
> +
> +//>>
> +// A-UC4: Write a log record to long DN runtime app stream using saflogger,
> +// but not using f option (ER)
> +//<<
> +void longDNIn_AppStreamDN_ButNoF(void)
> +{
> +     int rc;
> +     char command[3000];
> +
> +     // Backup default setting
> +     saAisNameLend(s_opensafImm, &sa_opensafImm);
> +     rc = get_attr_value(&sa_opensafImm, "longDnsAllowed",
> &v_longDnsAllowed);
> +     if (rc == -1) {
> +             /* Failed, use default one */
> +             fprintf(stderr, "Failed to get attribute longDnsAllowed value
> from IMM\n");
> +     }
> +
> +     /* Enable long DN feature */
> +     rc = system("immcfg -m -a longDnsAllowed=1
> opensafImm=opensafImm,safApp=safImmService");
> +     if (WEXITSTATUS(rc) != 0) {
> +             fprintf(stderr, "Failed to enable long DN \n");
> +             rc_validate(WEXITSTATUS(rc), 0);
> +             return;
> +     }
> +
> +     // Preparing data
> +     char appStreamDN[1000] = {0};
> +     memset(appStreamDN, 'E', sizeof(appStreamDN) - 1);
> +
> +     // Perform testing
> +     sprintf(command, "saflogger -a safLgStrCfg=%s longDN_test_no_f 2>
> /dev/null", appStreamDN);
> +     rc = system(command);
> +     if (WEXITSTATUS(rc) != 0) {
> +             rc_validate(0, 0);
> +             goto done;
> +     }
> +
> +     rc_validate(WEXITSTATUS(rc), 0);
> +done:
> +     // Restore data
> +     sprintf(command, "immcfg -a longDnsAllowed=%d %s",
> v_longDnsAllowed, s_opensafImm);
> +     rc = system(command);
> +     if (WEXITSTATUS(rc) != 0) {
> +             fprintf(stderr, "Failed to perform cmd = %s\n", command);
> +     }
> +
> +}
> +
> +/*
> + * Suite #13
> + */
> +__attribute__ ((constructor)) static void longDN_constructor(void)
> +{
> +     test_suite_add(13, "Test Long DN support");
> +     // Normal test cases
> +     test_case_add(13, longDNAt_No_token, "Write a log record using
> the long DN in @No");
> +     test_case_add(13, longDNAt_Ng_token, "Write a log record using
> the long DN in @Ng");
> +     test_case_add(13, longDNAt_Sl_token, "Write a log record using the
> long DN in @Sl");
> +     test_case_add(13, longDN_AppStream, "Write a log record to long
> DN app stream");
> +     test_case_add(13, longDNIn_AppStreamDN, "Write a log record to
> long DN runtime app stream using saflogger tool");
> +     // Abnormal test cases
> +     test_case_add(13, longDN_No_Over_MaxDn, "Write a log record
> with notificationObj (@No) over max length");
> +     test_case_add(13, longDN_Ng_Over_MaxDn, "Write a log record
> with notifyingObj (@Ng) over max length");
> +     test_case_add(13, longDN_Sl_Over_MaxDn, "Write a log record with
> logSvcUsrName (@Sl) over max length");
> +     test_case_add(13, longDN_AppStrDN_Over_MaxDn, "Write a log
> record to app stream with DN over max using saflogger tool");
> +     test_case_add(13, longDNIn_AppStreamDN_ButNoF, "Write a log
> record to long DN runtime app using saflogger, but no f option");
> +
> +
> +}
> diff --git a/tests/logsv/tet_log_runtime_cfgobj.c
> b/tests/logsv/tet_log_runtime_cfgobj.c
> --- a/tests/logsv/tet_log_runtime_cfgobj.c
> +++ b/tests/logsv/tet_log_runtime_cfgobj.c
> @@ -46,10 +46,7 @@ void log_rt_cf_obj_compare(void)
> 
>       /* Count attributes in configuration object
>        */
> -     sprintf((char *) object_name.value, "%s",
> -                     LOGTST_IMM_LOG_CONFIGURATION);
> -     object_name.length = strlen((char *) object_name.value);
> -
> +     saAisNameLend(LOGTST_IMM_LOG_CONFIGURATION,
> &object_name);
>       ais_rc = immutil_saImmOmAccessorGet_2(accessorHandle,
> &object_name, NULL,
>                       &attributes);
>       if (ais_rc != SA_AIS_OK) {
> @@ -64,9 +61,7 @@ void log_rt_cf_obj_compare(void)
> 
>       /* Count attributes in runtime object
>        */
> -     sprintf((char *) object_name.value, "%s",
> -                     LOGTST_IMM_LOG_RUNTIME);
> -     object_name.length = strlen((char *) object_name.value);
> +     saAisNameLend(LOGTST_IMM_LOG_RUNTIME, &object_name);
> 
>       ais_rc = immutil_saImmOmAccessorGet_2(accessorHandle,
> &object_name, NULL,
>                       &attributes);
> diff --git a/tests/logsv/tet_saLogStreamOpen_2.c
> b/tests/logsv/tet_saLogStreamOpen_2.c
> --- a/tests/logsv/tet_saLogStreamOpen_2.c
> +++ b/tests/logsv/tet_saLogStreamOpen_2.c
> @@ -205,8 +205,8 @@ void saLogStreamOpen_2_15(void)
>  void saLogStreamOpen_2_16(void)
>  {
>      SaNameT streamName;
> -    streamName.length = sizeof("safLgStr=")+sizeof(__FUNCTION__)-1;
> -    sprintf((char*)streamName.value, "safLgStr=%s", __FUNCTION__);
> +    SaConstStringT data = "safLgStr=saLogStreamOpen_2_16";
> +    saAisNameLend(data, &streamName);
> 
>      init_file_create_attributes();
>      safassert(saLogInitialize(&logHandle, &logCallbacks, &logVersion),
> SA_AIS_OK);
> @@ -222,8 +222,8 @@ void saLogStreamOpen_2_16(void)
>  void saLogStreamOpen_2_17(void)
>  {
>      SaNameT streamName;
> -    streamName.length = sizeof("safLgStr=")+sizeof(__FUNCTION__)-1;
> -    sprintf((char*)streamName.value, "safLgStr=%s", __FUNCTION__);
> +    SaConstStringT data = "safLgStr=saLogStreamOpen_2_17";
> +    saAisNameLend(data, &streamName);
> 
>      init_file_create_attributes();
>      safassert(saLogInitialize(&logHandle, &logCallbacks, &logVersion),
> SA_AIS_OK);
> @@ -338,10 +338,9 @@ void saLogStreamOpen_2_23(void)
>  void saLogStreamOpen_2_46(void)
>  {
>      SaAisErrorT rc = SA_AIS_OK;
> -    SaNameT logStreamName = {.length = 0 };
> +    SaNameT logStreamName;
> 
> -    strcpy((char *)logStreamName.value, SA_LOG_STREAM_APPLICATION1);
> -    logStreamName.length = strlen((char *)logStreamName.value);
> +    saAisNameLend(SA_LOG_STREAM_APPLICATION1, &logStreamName);
> 
>      SaLogFileCreateAttributesT_2 appLogFileCreateAttributes;
> 
> @@ -387,10 +386,8 @@ done:
>  void saLogStreamOpen_2_47(void)
>  {
>      SaAisErrorT rc = SA_AIS_OK;
> -    SaNameT logStreamName = {.length = 0 };
> -
> -    strcpy((char *)logStreamName.value, SA_LOG_STREAM_APPLICATION1);
> -    logStreamName.length = strlen((char *)logStreamName.value);
> +    SaNameT logStreamName;
> +    saAisNameLend(SA_LOG_STREAM_APPLICATION1, &logStreamName);
> 
>      SaLogFileCreateAttributesT_2 appLogFileCreateAttributes;
> 
> @@ -440,10 +437,8 @@ done:
>  void verFixLogRec_Max_Err(void)
>  {
>      SaAisErrorT rc = SA_AIS_OK;
> -    SaNameT logStreamName = {.length = 0 };
> -
> -    strcpy((char *)logStreamName.value, SA_LOG_STREAM_APPLICATION1);
> -    logStreamName.length = strlen((char *)logStreamName.value);
> +    SaNameT logStreamName;
> +    saAisNameLend(SA_LOG_STREAM_APPLICATION1, &logStreamName);
> 
>      SaLogFileCreateAttributesT_2 appLogFileCreateAttributes;
> 
> @@ -489,10 +484,8 @@ done:
>  void verFixLogRec_Min_Err(void)
>  {
>      SaAisErrorT rc = SA_AIS_OK;
> -    SaNameT logStreamName = {.length = 0 };
> -
> -    strcpy((char *)logStreamName.value, SA_LOG_STREAM_APPLICATION1);
> -    logStreamName.length = strlen((char *)logStreamName.value);
> +    SaNameT logStreamName;
> +    saAisNameLend(SA_LOG_STREAM_APPLICATION1, &logStreamName);
> 
>      SaLogFileCreateAttributesT_2 appLogFileCreateAttributes;
> 
> @@ -537,14 +530,12 @@ done:
>  void saLogStreamOpen_2_48(void)
>  {
>      SaAisErrorT rc = SA_AIS_OK;
> -    SaNameT logStreamName = {.length = 0 };
> +    SaNameT logStreamName;
>      char fileName[220];
> 
>      memset(fileName, 'A', 218);
>      fileName[219] = '\0';
> -
> -    strcpy((char *)logStreamName.value, SA_LOG_STREAM_APPLICATION1);
> -    logStreamName.length = strlen((char *)logStreamName.value);
> +    saAisNameLend(SA_LOG_STREAM_APPLICATION1, &logStreamName);
> 
>      SaLogFileCreateAttributesT_2 appLogFileCreateAttributes;
> 
> @@ -591,10 +582,8 @@ done:
>  void saLogStreamOpen_2_49(void)
>  {
>      SaAisErrorT rc = SA_AIS_OK;
> -    SaNameT logStreamName = {.length = 0 };
> -
> -    strcpy((char *)logStreamName.value, SA_LOG_STREAM_APPLICATION1);
> -    logStreamName.length = strlen((char *)logStreamName.value);
> +    SaNameT logStreamName;
> +    saAisNameLend(SA_LOG_STREAM_APPLICATION1, &logStreamName);
> 
>      SaLogFileCreateAttributesT_2 appLogFileCreateAttributes;
> 
> @@ -756,7 +745,8 @@ extern void saLogStreamClose_01(void);
>      test_case_add(2, saLogStreamOpen_2_20, "Open app stream with invalid
> logFileFmt");
>      test_case_add(2, saLogStreamOpen_2_21, "Open app stream with
> unsupported logFullAction");
>      test_case_add(2, saLogStreamOpen_2_22, "Open non exist app stream
> with NULL create attrs");
> -    test_case_add(2, saLogStreamOpen_2_23, "Open with stream name
> length == 256");
> +    //This test case is no longer valid when Long DN is supported
> +    //test_case_add(2, saLogStreamOpen_2_23, "Open with stream name
> length == 256");
>      test_case_add(2, saLogStreamOpenAsync_2_01,
> "saLogStreamOpenAsync_2(), Not supported");
>      test_case_add(2, saLogStreamOpenCallbackT_01,
> "saLogStreamOpenCallbackT() OK");
>      test_case_add(2, saLogWriteLog_01, "saLogWriteLog(), Not supported");
> @@ -773,9 +763,10 @@ extern void saLogStreamClose_01(void);
>      test_case_add(2, saLogWriteLogAsync_12, "saLogWriteAsyncLog() without
> logTimeStamp set");
>      test_case_add(2, saLogWriteLogAsync_13, "saLogWriteAsyncLog() 1800
> bytes logrecord (ticket #203)");
>      test_case_add(2, saLogWriteLogAsync_14, "saLogWriteAsyncLog() invalid
> severity");
> -    test_case_add(2, saLogWriteLogAsync_15, "saLogWriteAsyncLog() NTF
> notificationObject length == 256");
> -    test_case_add(2, saLogWriteLogAsync_16, "saLogWriteAsyncLog() NTF
> notifyingObject length == 256");
> -    test_case_add(2, saLogWriteLogAsync_17, "saLogWriteLogAsync()
> Generic logSvcUsrName length == 256");
> +    //These test cases are no longer valid when Long DN is supported
> +    //test_case_add(2, saLogWriteLogAsync_15, "saLogWriteAsyncLog() NTF
> notificationObject length == 256");
> +    //test_case_add(2, saLogWriteLogAsync_16, "saLogWriteAsyncLog() NTF
> notifyingObject length == 256");
> +    //test_case_add(2, saLogWriteLogAsync_17, "saLogWriteLogAsync()
> Generic logSvcUsrName length == 256");
>      test_case_add(2, saLogWriteLogAsync_18, "saLogWriteLogAsync()
> logBufSize > strlen(logBuf) + 1");
>      test_case_add(2, saLogWriteLogAsync_19, "saLogWriteLogAsync()
> logBufSize > SA_LOG_MAX_RECORD_SIZE");
>      test_case_add(2, saLogWriteLogCallbackT_01, "saLogWriteLogCallbackT()
> SA_DISPATCH_ONE");
> diff --git a/tests/logsv/tet_saLogWriteLogAsync.c
> b/tests/logsv/tet_saLogWriteLogAsync.c
> --- a/tests/logsv/tet_saLogWriteLogAsync.c
> +++ b/tests/logsv/tet_saLogWriteLogAsync.c
> @@ -321,11 +321,9 @@ void saLogWriteLogAsync_13(void)
>          .logFileFmt = DEFAULT_FORMAT_EXPRESSION
>      };
>      SaInvocationT invocation = 0;
> -    SaNameT appStreamName = {
> -        .value = "safLgStr=ticket203",
> -        .length = 0
> -    };
> -     appStreamName.length = strlen((char *) appStreamName.value);
> +    SaNameT appStreamName;
> +    SaConstStringT data = "safLgStr=ticket203";
> +    saAisNameLend(data, &appStreamName);
> 
>      memset(genLogRecord.logBuffer->logBuf, 'X', 1000);
>      genLogRecord.logBuffer->logBufSize = 1000;

------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to