Hi Mathi,

Can you please explain what maintainability problems that we will get because 
of this way of checkpointing?

By the way you said that you needed some more time to review  #593 "#593 needs 
more effort, will prioritize to close it on Monday(28th)". Can you say when 
that can be?

Thanks
Lennart

-----Original Message-----
From: Mathivanan Naickan Palanivelu [mailto:mathi.naic...@oracle.com] 
Sent: den 31 augusti 2015 16:35
To: Giang Do T; Lennart Lund; Vu Nguyen M
Cc: opensaf-devel@lists.sourceforge.net
Subject: RE: [PATCH 1 of 1] log: Make more configuration attributes possible to 
change in runtime [#1288]

ACK,

On a different topic, I think we should remove this way of checkpointing!
We would end up(if not already) creating maintainability problems,
We should rather use the versioning scheme of mds or mbcsv to perform the 
checkpointing.

Thanks,
Mathi.


> -----Original Message-----
> From: giang do [mailto:giang.t...@dektech.com.au]
> Sent: Monday, August 31, 2015 1:25 PM
> To: Lennart Lund; Mathivanan Naickan Palanivelu;
> vu.m.ngu...@dektech.com.au
> Cc: opensaf-devel@lists.sourceforge.net
> Subject: Re: [PATCH 1 of 1] log: Make more configuration attributes possible
> to change in runtime [#1288]
> 
> Hi Lennart,
> 
> Tested and Acked from me.
> 
> There are some minor comments in lines.
> 
> Best Regards,
> Giang Do
> 
> 
> On 25/08/2015 20:26, Lennart Lund wrote:
> >   osaf/services/saf/logsv/README           |   21 +
> >   osaf/services/saf/logsv/lgs/lgs_config.c |   50 +-
> >   osaf/services/saf/logsv/lgs/lgs_config.h |    1 +
> >   osaf/services/saf/logsv/lgs/lgs_file.c   |    1 +
> >   osaf/services/saf/logsv/lgs/lgs_imm.c    |  224 +++++---
> >   tests/logsv/logtest.c                    |    2 +-
> >   tests/logsv/tet_LogOiOps.c               |  714
> +++++++++++++++++++++++++++++-
> >   7 files changed, 867 insertions(+), 146 deletions(-)
> >
> >
> > More log service configuration attributes can be changed in runtime
> > including logMaxLogrecsize
> >
> > diff --git a/osaf/services/saf/logsv/README
> b/osaf/services/saf/logsv/README
> > --- a/osaf/services/saf/logsv/README
> > +++ b/osaf/services/saf/logsv/README
> > @@ -212,6 +212,8 @@ The following attributes can be changed
> >      Can be changed to an existing path.
> >
> >    - logStreamFileFormat
> > + - logMaxLogrecsize
> > + - logFileIoTimeout
> >
> >    - logStreamSystemHighLimit
> >      logStreamSystemLowLimit
> > @@ -500,6 +502,8 @@ in the same way as checkpointing is done
> >   Configuration changes are now checkpointed using a variable length
> buffer
> >   containing a cfgupd list.
> >
> > +With this change, when attributes are check pointed,
> > +the list is always updated with all check pointed values.
> >
> >   CONTRIBUTORS/MAINTAINERS
> >   ========================
> > @@ -711,3 +715,20 @@ of second from log timestamp (@Ck, @Nk).
> >   - @Nk: for alarm and notification log stream.
> >
> >   Preceding and trailing zeros (0) if needed should exist.
> > +
> > +
> > +2. Log record size could be up to 32Kb (#1288)
> > +----------------------------------------------
> > +With this ticket, logMaxLogrecsize and logFileIoTimeout attributes
> > +could be possible to change in runtime.
> > +
> > +logMaxLogrecsize attribute value could be up to 32768 (32Kb).
> > +
> > +logFileIoTimeout, this attribute defines the time period for
> > +which the main thread has to wait for the file IO operation to complete.
> > +The value is in milliseconds. In default, the main thread waits up to 500ms
> > +for file handling thread complete file IO operation.
> > +
> > +If user suffers the timeout when sending a big record size (e.g: 32Kb),
> > +He can adjust the waiting time by updating logFileIoTimeout attribute
> value up to 5000ms.
> > +
> > diff --git a/osaf/services/saf/logsv/lgs/lgs_config.c
> b/osaf/services/saf/logsv/lgs/lgs_config.c
> > --- a/osaf/services/saf/logsv/lgs/lgs_config.c
> > +++ b/osaf/services/saf/logsv/lgs/lgs_config.c
> > @@ -120,24 +120,22 @@ static struct {
> >     SaUint32T logStreamSystemLowLimit;
> >     SaUint32T logStreamAppHighLimit;
> >     SaUint32T logStreamAppLowLimit;
> > -
> > -   /* Not runtime configurable */
> >     SaUint32T logMaxLogrecsize;
> >     SaUint32T logMaxApplicationStreams;
> >     SaUint32T logFileIoTimeout;
> >     SaUint32T logFileSysConfig;
> >   } lgs_conf_def = {
> > -   PKGLOGDIR,      /*logRootDirectory*/
> > -   "",             /*logDataGroupname*/
> > -   DEFAULT_APP_SYS_FORMAT_EXP, /* logStreamFileFormat */
> > -   1024,           /*logMaxLogrecsize*/
> > -   0,              /*logStreamSystemHighLimit*/
> > -   0,              /*logStreamSystemLowLimit*/
> > -   0,              /*logStreamAppHighLimit*/
> > -   0,              /*logStreamAppLowLimit*/
> > -   64,             /*logMaxApplicationStreams*/
> > -   500,            /*logFileIoTimeout*/
> > -   1,              /*logFileSysConfig*/
> > +   .logRootDirectory = PKGLOGDIR,  /*logRootDirectory*/
> > +   .logDataGroupname = "",         /*logDataGroupname*/
> > +   .logStreamFileFormat = DEFAULT_APP_SYS_FORMAT_EXP, /*
> logStreamFileFormat */
> > +   .logStreamSystemHighLimit = 0,
>       /*logStreamSystemHighLimit*/
> > +   .logStreamSystemLowLimit = 0,   /*logStreamSystemLowLimit*/
> > +   .logStreamAppHighLimit = 0,     /*logStreamAppHighLimit*/
> > +   .logStreamAppLowLimit = 0,      /*logStreamAppLowLimit*/
> > +   .logMaxLogrecsize = 1024,       /*logMaxLogrecsize*/
> > +   .logMaxApplicationStreams = 64,
>       /*logMaxApplicationStreams*/
> > +   .logFileIoTimeout = 500,        /*logFileIoTimeout*/
> > +   .logFileSysConfig = 1,          /*logFileSysConfig*/
> [giang] Should remove comments in above lines because name of struct's
> member are good enough.
> 
> >   };
> >
> >   static lgs_conf_t lgs_conf = {
> > @@ -544,9 +542,8 @@ int lgs_cfg_verify_log_file_format(const
> >   /**
> >    * Verify logMaxLogrecsize; Max size of a log record including header
> >    * Rules:
> > - * - Because of an incorrect declaration in the server (uint16_t) that 
> > shall
> be
> > - *   uint32_t the max value cannot be set > 2^15-1 (32767)
> > - * - Must be > 256
> > + * - Must be >= 256
> > + * - Must not larger than 65535 (UINT16_MAX)
> >    *
> >    * @param max_logrecsize_in[in]
> >    * @return -1 on error
> > @@ -554,8 +551,7 @@ int lgs_cfg_verify_log_file_format(const
> >   int lgs_cfg_verify_max_logrecsize(uint32_t max_logrecsize_in)
> >   {
> >     int rc = 0;
> > -
> > -   if ((max_logrecsize_in > 32767) || (max_logrecsize_in < 256)) {
> > +   if ((max_logrecsize_in > 65535) || (max_logrecsize_in < 256)) {
> >             LOG_NO("verify_max_logrecsize Fail");
> >             rc = -1;
> >     }
> > @@ -609,14 +605,24 @@ int lgs_cfg_verify_max_application_strea
> >
> >   /**
> >    * Verify logFileIoTimeout
> > - * Rules: No rules defined will always return 0 (ok)
> > - *
> > + * Rules: timeout must not be larger than 15s as it will impact on amf
> healthcheck.
> > + *        - Maximum value is less than 5s
> > + *        - Minimum timeout is not less than 500ms
> > + * NOTE: This range has not been measured in real system yet.
> >    * @param log_file_io_timeout[in]
> >    * @return -1 on error
> >    */
> > -static int lgs_cfg_verify_file_io_timeout(uint32_t log_file_io_timeout)
> > +int lgs_cfg_verify_file_io_timeout(uint32_t log_file_io_timeout)
> >   {
> > -   return 0;
> > +   int rc = 0;
> > +
> > +   if ((log_file_io_timeout < 500) || (log_file_io_timeout > 5000)) {
> > +           LOG_NO("logFileIoTimeout has invalid value = %u",
> > +                      log_file_io_timeout);
> > +           rc = -1;
> > +   }
> > +
> > +   return rc;
> >   }
> >
> >   /**
> > diff --git a/osaf/services/saf/logsv/lgs/lgs_config.h
> b/osaf/services/saf/logsv/lgs/lgs_config.h
> > --- a/osaf/services/saf/logsv/lgs/lgs_config.h
> > +++ b/osaf/services/saf/logsv/lgs/lgs_config.h
> > @@ -97,6 +97,7 @@ int lgs_cfg_verify_log_file_format(const
> >   int lgs_cfg_verify_max_logrecsize(uint32_t max_logrecsize_in);
> >   int lgs_cfg_verify_mbox_limit(uint32_t high, uint32_t low);
> >   int lgs_cfg_verify_max_application_streams(uint32_t max_app_streams);
> > +int lgs_cfg_verify_file_io_timeout(uint32_t log_file_io_timeout);
> >
> >   /*
> >    * Handle runtime object for showing actual configuration
> > diff --git a/osaf/services/saf/logsv/lgs/lgs_file.c
> b/osaf/services/saf/logsv/lgs/lgs_file.c
> > --- a/osaf/services/saf/logsv/lgs/lgs_file.c
> > +++ b/osaf/services/saf/logsv/lgs/lgs_file.c
> > @@ -428,6 +428,7 @@ lgsf_retcode_t log_file_api(lgsf_apipar_
> >     if (rc != 0) osaf_abort(rc);
> >
> >     /* Wait for an answer */
> > +   max_waittime_ms = *(SaUint32T *)
> lgs_cfg_get(LGS_IMM_FILEHDL_TIMEOUT);
> [giang] Because we get this value from lgs_conf -> we don't need to use
> static variable anymore.
>       => we should remove this line: "static uint32_t max_waittime_ms =
> 500;"
> and use local variable instead.
> 
> >     get_timeout_time(&timeout_time, max_waittime_ms);
> >
> >     while (lgs_com_data.answer_f == false) {
> > diff --git a/osaf/services/saf/logsv/lgs/lgs_imm.c
> b/osaf/services/saf/logsv/lgs/lgs_imm.c
> > --- a/osaf/services/saf/logsv/lgs/lgs_imm.c
> > +++ b/osaf/services/saf/logsv/lgs/lgs_imm.c
> > @@ -772,9 +772,15 @@ static SaAisErrorT config_ccb_completed_
> >                     TRACE("%s value is accepted", logFileFormat);
> >                     goto done;
> >             } else if (!strcmp(attribute->attrName,
> LOG_MAX_LOGRECSIZE)) {
> > -                   report_oi_error(immOiHandle, opdata->ccbId,
> > -                                   "%s cannot be changed", attribute-
> >attrName);
> > -                   ais_rc = SA_AIS_ERR_FAILED_OPERATION;
> > +                   SaUint32T maxLogRecordSize = *((SaUint32T
> *)value);
> > +                   rc =
> lgs_cfg_verify_max_logrecsize(maxLogRecordSize);
> > +                   if (rc == -1) {
> > +                           report_oi_error(immOiHandle, opdata-
> >ccbId,
> > +                                           "%s value is NOT accepted",
> attribute->attrName);
> > +                           ais_rc = SA_AIS_ERR_INVALID_PARAM;
> > +                           goto done;
> > +                   }
> > +                   TRACE("%s is accepted", attribute->attrName);
> >                     goto done;
> >             } else if (!strcmp(attribute->attrName,
> LOG_STREAM_SYSTEM_HIGH_LIMIT)) {
> >                     vattr_v3.logStreamSystemHighLimit = *((SaUint32T
> *)value);
> > @@ -802,9 +808,15 @@ static SaAisErrorT config_ccb_completed_
> >                     ais_rc = SA_AIS_ERR_FAILED_OPERATION;
> >                     goto done;
> >             } else if (!strcmp(attribute->attrName,
> LOG_FILE_IO_TIMEOUT)) {
> > -                   report_oi_error(immOiHandle, opdata->ccbId,
> > -                                   "%s cannot be changed", attribute-
> >attrName);
> > -                   ais_rc = SA_AIS_ERR_FAILED_OPERATION;
> > +                   SaUint32T logFileIoTimeout = *((SaUint32T *) value);
> > +                   rc =
> lgs_cfg_verify_file_io_timeout(logFileIoTimeout);
> > +                   if (rc == -1) {
> > +                           report_oi_error(immOiHandle, opdata-
> >ccbId,
> > +                                   "%s value is NOT accepted",
> attribute->attrName);
> > +                           ais_rc = SA_AIS_ERR_INVALID_PARAM;
> > +                           goto done;
> > +                   }
> > +                   TRACE("%d value is accepted", logFileIoTimeout);
> >                     goto done;
> >             } else if (!strcmp(attribute->attrName,
> LOG_FILE_SYS_CONFIG)) {
> >                     report_oi_error(immOiHandle, opdata->ccbId,
> > @@ -1063,35 +1075,36 @@ bool chk_filepath_stream_exist(
> >   /**
> >    * Verify fixedLogRecordSize and maxLogFileSize.
> >    * Rules:
> > - *  - fixedLogRecordSize must be less than maxLogFileSize
> > - *  - fixedLogRecordSize must be less than or equal to logMaxLogrecsize
> > - *  - fixedLogRecordSize can be 0. Means variable record size
> > - *  - maxLogFileSize must be bigger than 0. No limit is not supported
> > - *  - maxLogFileSize must be bigger than logMaxLogrecsize
> > + * 1 - saLogStreamFixedLogRecordSize must be less than
> saLogStreamMaxLogFileSize
> > + * 2 - saLogStreamFixedLogRecordSize must be less than or equal to
> logMaxLogrecsize
> > + * 3 - saLogStreamFixedLogRecordSize can be 0. Means variable record
> size
> > + * 4 - saLogStreamMaxLogFileSize must be bigger than 0. No limit is not
> supported
> > + * 5 - saLogStreamMaxLogFileSize must be bigger than logMaxLogrecsize
> > + * 6 - saLogStreamMaxLogFileSize must be bigger than
> saLogStreamFixedLogRecordSize
> >    *
> > - * The ..._flag variable == true means that the corresponding attribute is
> > - * changed.
> > + * The ..._mod variable == true means that the corresponding attribute is
> > + * modified.
> >    *
> > - * @param immOiHandle
> > - * @param maxLogFileSize
> > - * @param maxLogFileSize_flag
> > - * @param fixedLogRecordSize
> > - * @param fixedLogRecordSize_flag
> > - * @param stream
> > - * @param operationType
> > + * @param immOiHandle[in]
> > + * @param streamMaxLogFileSize[in]
> > + * @param streamMaxLogFileSize_mod[in]
> > + * @param streamFixedLogRecordSize[in]
> > + * @param streamFixedLogRecordSize_mod[in]
> > + * @param stream[in]
> > + * @param operationType[in]
> >    * @return false if error
> >    */
> >   static bool chk_max_filesize_recordsize_compatible(SaImmOiHandleT
> immOiHandle,
> > -           SaUint64T maxLogFileSize,
> > -           bool maxLogFileSize_mod,
> > -           SaUint32T fixedLogRecordSize,
> > -           bool fixedLogRecordSize_mod,
> > +           SaUint64T streamMaxLogFileSize,
> > +           bool streamMaxLogFileSize_mod,
> > +           SaUint32T streamFixedLogRecordSize,
> > +           bool streamFixedLogRecordSize_mod,
> >             log_stream_t *stream,
> >             enum CcbUtilOperationType operationType,
> >             SaImmOiCcbIdT ccbId)
> >   {
> > -   SaUint64T i_maxLogFileSize = 0;
> > -   SaUint32T i_fixedLogRecordSize = 0;
> > +   SaUint64T i_streamMaxLogFileSize = 0;
> > +   SaUint32T i_streamFixedLogRecordSize = 0;
> >     SaUint32T i_logMaxLogrecsize = 0;
> >     lgs_stream_defval_t *stream_default;
> >
> > @@ -1117,77 +1130,98 @@ static bool chk_max_filesize_recordsize_
> >                     LOG_ER("448 %s stream == NULL", __FUNCTION__);
> >                     osafassert(0);
> >             }
> > -           if (fixedLogRecordSize_mod == false) {
> > -                   /* fixedLogRecordSize is not given. Get from stream
> */
> > -                   i_fixedLogRecordSize = stream->fixedLogRecordSize;
> > -                   TRACE("\t448 Get from stream, fixedLogRecordSize =
> %d",
> > -                                   i_fixedLogRecordSize);
> > +           if (streamFixedLogRecordSize_mod == false) {
> > +                   /* streamFixedLogRecordSize is not given. Get from
> stream */
> > +                   i_streamFixedLogRecordSize = stream-
> >fixedLogRecordSize;
> > +                   TRACE("\t448 Get from stream,
> streamFixedLogRecordSize = %d",
> > +                                   i_streamFixedLogRecordSize);
> >             } else {
> > -                   i_fixedLogRecordSize = fixedLogRecordSize;
> > +                   i_streamFixedLogRecordSize =
> streamFixedLogRecordSize;
> >             }
> >
> > -           if (maxLogFileSize_mod == false) {
> > -                   /* maxLogFileSize is not given. Get from stream */
> > -                   i_maxLogFileSize = stream->maxLogFileSize;
> > -                   TRACE("\t448 Get from stream, maxLogFileSize =
> %lld",
> > -                                   i_maxLogFileSize);
> > +           if (streamMaxLogFileSize_mod == false) {
> > +                   /* streamMaxLogFileSize is not given. Get from
> stream */
> > +                   i_streamMaxLogFileSize = stream->maxLogFileSize;
> > +                   TRACE("\t448 Get from stream,
> streamMaxLogFileSize = %lld",
> > +                                   i_streamMaxLogFileSize);
> >             } else {
> > -                   i_maxLogFileSize = maxLogFileSize;
> > -                   TRACE("\t448 Modified maxLogFileSize = %lld",
> i_maxLogFileSize);
> > +                   i_streamMaxLogFileSize = streamMaxLogFileSize;
> > +                   TRACE("\t448 Modified streamMaxLogFileSize =
> %lld", i_streamMaxLogFileSize);
> >             }
> >     } else if (operationType == CCBUTIL_CREATE) {
> >             TRACE("\t448 operationType == CCBUTIL_CREATE");
> >             /* The stream does not yet exist
> >              */
> > -           if (fixedLogRecordSize_mod == false) {
> > -                   /* fixedLogRecordSize is not given. Use default */
> > -                   i_fixedLogRecordSize = stream_default-
> >saLogStreamFixedLogRecordSize;
> > -                   TRACE("\t448 Get default, fixedLogRecordSize = %d",
> > -                                   i_fixedLogRecordSize);
> > +           if (streamFixedLogRecordSize_mod == false) {
> > +                   /* streamFixedLogRecordSize is not given. Use
> default */
> > +                   i_streamFixedLogRecordSize = stream_default-
> >saLogStreamFixedLogRecordSize;
> > +                   TRACE("\t448 Get default, streamFixedLogRecordSize
> = %d",
> > +                                   i_streamFixedLogRecordSize);
> >             } else {
> > -                   i_fixedLogRecordSize = fixedLogRecordSize;
> > +                   i_streamFixedLogRecordSize =
> streamFixedLogRecordSize;
> >             }
> >
> > -           if (maxLogFileSize_mod == false) {
> > -                   /* maxLogFileSize is not given. Use default */
> > -                   i_maxLogFileSize = stream_default-
> >saLogStreamMaxLogFileSize;
> > -                   TRACE("\t448 Get default, maxLogFileSize = %lld",
> > -                                   i_maxLogFileSize);
> > +           if (streamMaxLogFileSize_mod == false) {
> > +                   /* streamMaxLogFileSize is not given. Use default */
> > +                   i_streamMaxLogFileSize = stream_default-
> >saLogStreamMaxLogFileSize;
> > +                   TRACE("\t448 Get default, streamMaxLogFileSize =
> %lld",
> > +                                   i_streamMaxLogFileSize);
> >             } else {
> > -                   i_maxLogFileSize = maxLogFileSize;
> > +                   i_streamMaxLogFileSize = streamMaxLogFileSize;
> >             }
> >     } else {
> >             /* Unknown operationType */
> >             LOG_ER("%s Unknown operationType", __FUNCTION__);
> >             osafassert(0);
> >     }
> > -
> > -   /** Do the verification **/
> > -   if (i_maxLogFileSize <= i_logMaxLogrecsize) {
> > -           /* maxLogFileSize must be bigger than logMaxLogrecsize */
> > -           report_oi_error(immOiHandle, ccbId,
> > -                                   "maxLogFileSize out of range");
> > -           TRACE("\t448 i_maxLogFileSize (%lld) <= i_logMaxLogrecsize
> (%d)",
> > -                           i_maxLogFileSize, i_logMaxLogrecsize);
> > -           rc = false;
> > -   } else if (i_fixedLogRecordSize == 0) {
> > -           /* fixedLogRecordSize can be 0. Means variable record size
> */
> > -           TRACE("\t448 fixedLogRecordSize = 0");
> > -           rc = true;
> > -   } else if (i_fixedLogRecordSize >= i_maxLogFileSize) {
> > -           /* fixedLogRecordSize must be less than maxLogFileSize */
> > -           report_oi_error(immOiHandle, ccbId,
> > -                           "fixedLogRecordSize out of range");
> > -           TRACE("\t448 i_fixedLogRecordSize >= i_maxLogFileSize");
> > -           rc = false;
> > -   } else if (i_fixedLogRecordSize > i_logMaxLogrecsize) {
> > -           /* fixedLogRecordSize must be less than maxLogFileSize */
> > -           report_oi_error(immOiHandle, ccbId,
> > -                           "fixedLogRecordSize out of range");
> > -           TRACE("\t448 i_fixedLogRecordSize > i_logMaxLogrecsize");
> > -           rc = false;
> > +
> > +
> > +   /*
> > +    * Do verification
> > +    */
> > +   if (streamMaxLogFileSize_mod == true) {
> > +           if (i_streamMaxLogFileSize <= i_logMaxLogrecsize) {
> > +                   /* streamMaxLogFileSize must be bigger than
> logMaxLogrecsize */
> > +                   report_oi_error(immOiHandle, ccbId,
> > +
>       "streamMaxLogFileSize out of range");
> > +                   TRACE("\t448 i_streamMaxLogFileSize (%lld) <=
> i_logMaxLogrecsize (%d)",
> > +                             i_streamMaxLogFileSize,
> i_logMaxLogrecsize);
> > +                   rc = false;
> > +                   goto done;
> > +           } else if (i_streamMaxLogFileSize <=
> i_streamFixedLogRecordSize) {
> > +                   /* streamMaxLogFileSize must be bigger than
> streamFixedLogRecordSize */
> > +                   report_oi_error(immOiHandle, ccbId,
> > +
>       "streamMaxLogFileSize out of range");
> > +                   TRACE("\t448 i_streamMaxLogFileSize (%lld) <=
> i_streamFixedLogRecordSize (%d)",
> > +                             i_streamMaxLogFileSize,
> i_streamFixedLogRecordSize);
> > +                   rc = false;
> > +                   goto done;
> > +           }
> >     }
> > -
> > +
> > +   if (streamFixedLogRecordSize_mod == true) {
> > +           if (i_streamFixedLogRecordSize == 0) {
> > +                   /* streamFixedLogRecordSize can be 0. Means
> variable record size */
> > +                   TRACE("\t448 streamFixedLogRecordSize = 0");
> > +                   rc = true;
> > +           } else if (i_streamFixedLogRecordSize >=
> i_streamMaxLogFileSize) {
> > +                   /* streamFixedLogRecordSize must be less than
> streamMaxLogFileSize */
> > +                   report_oi_error(immOiHandle, ccbId,
> > +
>       "streamFixedLogRecordSize out of range");
> > +                   TRACE("\t448 i_streamFixedLogRecordSize (%d) >=
> i_streamMaxLogFileSize (%lld)",
> > +                             i_streamFixedLogRecordSize,
> i_streamMaxLogFileSize);
> > +                   rc = false;
> > +           } else if (i_streamFixedLogRecordSize > i_logMaxLogrecsize) {
> > +                   /* streamFixedLogRecordSize must be less than
> streamMaxLogFileSize */
> > +                   report_oi_error(immOiHandle, ccbId,
> > +
>       "streamFixedLogRecordSize out of range");
> > +                   TRACE("\t448 i_streamFixedLogRecordSize (%d) >
> i_logMaxLogrecsize (%d)",
> > +                             i_streamFixedLogRecordSize,
> i_logMaxLogrecsize);
> > +                   rc = false;
> > +           }
> > +   }
> > +
> > +done:
> >     TRACE_LEAVE2("448 rc = %d", rc);
> >     return rc;
> >   }
> > @@ -1218,10 +1252,10 @@ static SaAisErrorT check_attr_validity(S
> >     char *i_pathName = NULL;
> >     bool i_pathName_mod = false;
> >     /* Modification flag -> true if modified */
> > -   SaUint32T i_fixedLogRecordSize = 0;
> > -   bool i_fixedLogRecordSize_mod = false;
> > -   SaUint64T i_maxLogFileSize = 0;
> > -   bool i_maxLogFileSize_mod = false;
> > +   SaUint32T i_streamFixedLogRecordSize = 0;
> > +   bool i_streamFixedLogRecordSize_mod = false;
> > +   SaUint64T i_streamMaxLogFileSize = 0;
> > +   bool i_streamMaxLogFileSize_mod = false;
> >     SaUint32T i_logFullAction = 0;
> >     bool i_logFullAction_mod = false;
> >     char *i_logFileFormat = NULL;
> > @@ -1322,16 +1356,16 @@ static SaAisErrorT check_attr_validity(S
> >                     /* Save and compare with FixedLogRecordSize after
> all attributes
> >                      * are read. Must be bigger than FixedLogRecordSize
> >                      */
> > -                   i_maxLogFileSize = *((SaUint64T *) value);
> > -                   i_maxLogFileSize_mod = true;
> > +                   i_streamMaxLogFileSize = *((SaUint64T *) value);
> > +                   i_streamMaxLogFileSize_mod = true;
> >                     TRACE("\t448 Saved attribute \"%s\"", attribute-
> >attrName);
> >
> >             } else if (!strcmp(attribute->attrName,
> "saLogStreamFixedLogRecordSize")) {
> >                     /* Save and compare with MaxLogFileSize after all
> attributes
> >                      * are read. Must be smaller than MaxLogFileSize
> >                      */
> > -                   i_fixedLogRecordSize = *((SaUint64T *) value);
> > -                   i_fixedLogRecordSize_mod = true;
> > +                   i_streamFixedLogRecordSize = *((SaUint64T *)
> value);
> > +                   i_streamFixedLogRecordSize_mod = true;
> >                     TRACE("\t448 Saved attribute \"%s\"", attribute-
> >attrName);
> >
> >             } else if (!strcmp(attribute->attrName,
> "saLogStreamLogFullAction")) {
> > @@ -1436,14 +1470,14 @@ static SaAisErrorT check_attr_validity(S
> >             /* saLogStreamMaxLogFileSize or
> saLogStreamFixedLogRecordSize
> >              * See chk_max_filesize_recordsize_compatible() for rules
> >              */
> > -           if (i_maxLogFileSize_mod || i_fixedLogRecordSize_mod) {
> > +           if (i_streamMaxLogFileSize_mod ||
> i_streamFixedLogRecordSize_mod) {
> >                     TRACE("\t448 Check saLogStreamMaxLogFileSize,"
> >                                     " saLogStreamFixedLogRecordSize");
> >                     if
> (chk_max_filesize_recordsize_compatible(immOiHandle,
> > -                                   i_maxLogFileSize,
> > -                                   i_maxLogFileSize_mod,
> > -                                   i_fixedLogRecordSize,
> > -                                   i_fixedLogRecordSize_mod,
> > +                                   i_streamMaxLogFileSize,
> > +                                   i_streamMaxLogFileSize_mod,
> > +                                   i_streamFixedLogRecordSize,
> > +                                   i_streamFixedLogRecordSize_mod,
> >                                     stream,
> >                                     opdata->operationType,
> >                                     opdata->ccbId) == false) {
> > @@ -1966,6 +2000,16 @@ static void config_ccb_apply_modify(cons
> >                     mailbox_lim_upd = true;
> >
>       lgs_cfgupd_list_create(LOG_STREAM_APP_LOW_LIMIT,
> >                             uint32_str, &config_data);
> > +           } else if (!strcmp(attribute->attrName,
> LOG_MAX_LOGRECSIZE)) {
> > +                   uint32_val = *(SaUint32T *) value;
> > +                   snprintf(uint32_str, 20, "%u", uint32_val);
> > +                   lgs_cfgupd_list_create(LOG_MAX_LOGRECSIZE,
> > +                            uint32_str, &config_data);
> > +           } else if (!strcmp(attribute->attrName,
> LOG_FILE_IO_TIMEOUT)) {
> > +                   uint32_val = *(SaUint32T *) value;
> > +                   snprintf(uint32_str, 20, "%u", uint32_val);
> > +                   lgs_cfgupd_list_create(LOG_FILE_IO_TIMEOUT,
> > +                      uint32_str, &config_data);
> >             }
> >
> >             attrMod = opdata->param.modify.attrMods[i++];
> > diff --git a/tests/logsv/logtest.c b/tests/logsv/logtest.c
> > --- a/tests/logsv/logtest.c
> > +++ b/tests/logsv/logtest.c
> > @@ -190,7 +190,7 @@ void init_logrootpath(void)
> >
> >
> >   /**
> > - * Get attribute value in string from IMM
> > + * Get attribute value from IMM
> >    * @param inObjname Distinguished Name
> >    * @param inAttr Attribute to search for value
> >    * @param outNume The holder for the output for number data type
> attribute
> > diff --git a/tests/logsv/tet_LogOiOps.c b/tests/logsv/tet_LogOiOps.c
> [giang] Should check alignment of new added code.
>       Some place use tab, some place use space.
>       EX: in  void verLogFileIoTimeout(void), void
> verMaxLogRecord_02(void)
> functions
> 
> > --- a/tests/logsv/tet_LogOiOps.c
> > +++ b/tests/logsv/tet_LogOiOps.c
> > @@ -28,6 +28,24 @@
> >   #define opensaf_user "opensaf"
> >   #define data_group "log-data"
> >
> > +/**
> > + * Due to the ticket #1443, if creating/deleting conf obj class 
> > continuously,
> > + * logsv will be crashed or deleting action gets failed.
> > + *
> > + * For now, until the ticket is fixed, adding some delay b/w
> creating/deleting
> > + * as a workaround to avoid impact on testing that frequently encounter
> > + * when running whole test suite in one go.
> > + *
> > + */
> > +
> > +/* Add delay 10ms. Once the #1443 is done, undefine following macro */
> > +#define __ADD_SLEEP__
> > +#ifdef __ADD_SLEEP__
> > +static void delay_ms(void) { usleep (10*1000); }
> > +#else
> > +static void delay_ms(void) {};
> > +#endif // __ADD_SLEEP__
> > +
> >   static SaLogFileCreateAttributesT_2 appStreamLogFileCreateAttributes =
> >   {
> >       .logFilePathName = DEFAULT_APP_FILE_PATH_NAME,
> > @@ -1061,21 +1079,6 @@ void saLogOi_81(void)
> >   }
> >
> >   /**
> > - * CCB Object Modify, logMaxLogrecsize. Not allowed
> > - * Result, Reject
> > - */
> > -void saLogOi_53(void)
> > -{
> > -    int rc;
> > -    char command[256];
> > -
> > -    sprintf(command, "immcfg -a logMaxLogrecsize=%d "
> > -                   "logConfig=1,safApp=safLogService 2>
> /dev/null",1025);
> > -    rc = system(command);
> > -    rc_validate(WEXITSTATUS(rc), 1);
> > -}
> > -
> > -/**
> >    * CCB Object Modify, logStreamSystemHighLimit >
> logStreamSystemLowLimit. OK
> >    * Result OK
> >    */
> > @@ -1211,21 +1214,6 @@ void saLogOi_62(void)
> >   }
> >
> >   /**
> > - * CCB Object Modify, logFileIoTimeout. Not allowed
> > - * Result, Reject
> > - */
> > -void saLogOi_63(void)
> > -{
> > -    int rc;
> > -    char command[256];
> > -
> > -    sprintf(command, "immcfg -a logFileIoTimeout=%d"
> > -                   " logConfig=1,safApp=safLogService 2>
> /dev/null",600);
> > -    rc = system(command);
> > -    rc_validate(WEXITSTATUS(rc), 1);
> > -}
> > -
> > -/**
> >    * CCB Object Modify, logFileSysConfig. Not allowed
> >    * Result, Reject
> >    */
> > @@ -1281,6 +1269,7 @@ void saLogOi_65(void)
> >     rc = system(command);
> >
> >     sprintf(command,"immcfg -d
> safLgStrCfg=str6,safApp=safLogService");
> > +   delay_ms();
> >     safassert(system(command),0);
> >     rc_validate(WEXITSTATUS(rc), 0);
> >   }
> > @@ -1335,6 +1324,7 @@ void saLogOi_68(void)
> >     rc = system(command);
> >     /* Delete the test object */
> >     sprintf(command,"immcfg -d
> safLgStrCfg=str6,safApp=safLogService");
> > +   delay_ms();
> >     safassert(system(command),0);
> >
> >     rc_validate(WEXITSTATUS(rc), 1);
> > @@ -1356,6 +1346,7 @@ void saLogOi_69(void)
> >     rc = system(command);
> >     /* Delete the test object */
> >     sprintf(command,"immcfg -d
> safLgStrCfg=str6,safApp=safLogService");
> > +   delay_ms();
> >     safassert(system(command),0);
> >
> >     rc_validate(WEXITSTATUS(rc), 0);
> > @@ -1411,6 +1402,7 @@ void saLogOi_72(void)
> >     rc = system(command);
> >     /* Delete the test object */
> >     sprintf(command,"immcfg -d
> safLgStrCfg=str6,safApp=safLogService");
> > +   delay_ms();
> >     safassert(system(command),0);
> >     rc_validate(WEXITSTATUS(rc), 0);
> >   }
> > @@ -1437,6 +1429,7 @@ void saLogOi_73(void)
> >
> >     /* Delete the test object */
> >     sprintf(command,"immcfg -d
> safLgStrCfg=str6,safApp=safLogService");
> > +   delay_ms();
> >     rc = tet_system(command);
> >     if (rc != 0) {
> >             fprintf(stderr, "%s Fail rc=%d\n", command, rc);
> > @@ -1468,6 +1461,7 @@ void saLogOi_74(void)
> >     }
> >     /* Delete the test object */
> >     sprintf(command,"immcfg -d
> safLgStrCfg=str6,safApp=safLogService");
> > +   delay_ms();
> >     rc = tet_system(command);
> >     if (rc != 0) {
> >             fprintf(stderr, "'%s' Fail rc=%d\n", command, rc);
> > @@ -1510,6 +1504,7 @@ void saLogOi_76(void)
> >     rc = system(command);
> >     /* Delete the test object */
> >     sprintf(command,"immcfg -d
> safLgStrCfg=str6,safApp=safLogService");
> > +   delay_ms();
> >     safassert(system(command),0);
> >     rc_validate(WEXITSTATUS(rc), 0);
> >   }
> > @@ -1587,6 +1582,7 @@ void saLogOi_100(void)
> >     rc = system(command);
> >     /* Delete */
> >     sprintf(command,"immcfg -d
> safLgStrCfg=str6,safApp=safLogService");
> > +   delay_ms();
> >     safassert(system(command),0);
> >
> >     rc_validate(WEXITSTATUS(rc), 0);
> > @@ -1615,6 +1611,7 @@ void saLogOi_101(void)
> >     rc = system(command);
> >     /* Delete */
> >     sprintf(command,"immcfg -d
> safLgStrCfg=str6,safApp=safLogService");
> > +   delay_ms();
> >     safassert(system(command),0);
> >
> >     rc_validate(WEXITSTATUS(rc), 1);
> > @@ -1643,6 +1640,7 @@ void saLogOi_102(void)
> >     rc = system(command);
> >     /* Delete */
> >     sprintf(command,"immcfg -d
> safLgStrCfg=str6,safApp=safLogService");
> > +   delay_ms();
> >     safassert(system(command),0);
> >
> >     rc_validate(WEXITSTATUS(rc), 1);
> > @@ -1671,6 +1669,7 @@ void saLogOi_103(void)
> >     rc = system(command);
> >     /* Delete */
> >     sprintf(command,"immcfg -d
> safLgStrCfg=str6,safApp=safLogService");
> > +   delay_ms();
> >     safassert(system(command),0);
> >
> >     rc_validate(WEXITSTATUS(rc), 1);
> > @@ -1705,8 +1704,10 @@ void saLogOi_104(void)
> >
> >     /* Delete */
> >     sprintf(command,"immcfg -d
> safLgStrCfg=str6,safApp=safLogService");
> > +   delay_ms();
> >     safassert(system(command),0);
> >     sprintf(command,"immcfg -d
> safLgStrCfg=str6a,safApp=safLogService");
> > +   delay_ms();
> >     safassert(system(command),0);
> >     rc_validate(WEXITSTATUS(rc), 0);
> >   }
> > @@ -1733,6 +1734,7 @@ void saLogOi_105(void)
> >     rc = system(command);
> >     /* Delete */
> >     sprintf(command,"immcfg -d
> safLgStrCfg=str6a,safApp=safLogService");
> > +   delay_ms();
> >     safassert(system(command),0);
> >
> >     rc_validate(WEXITSTATUS(rc), 0);
> > @@ -1760,6 +1762,7 @@ void saLogOi_106(void)
> >     rc = system(command);
> >     /* Delete */
> >     sprintf(command,"immcfg -d
> safLgStrCfg=str6,safApp=safLogService");
> > +   delay_ms();
> >     safassert(system(command),0);
> >
> >     rc_validate(WEXITSTATUS(rc), 0);
> > @@ -1788,6 +1791,7 @@ void saLogOi_107(void)
> >     rc = system(command);
> >     /* Delete */
> >     sprintf(command,"immcfg -d
> safLgStrCfg=str6,safApp=safLogService");
> > +   delay_ms();
> >     safassert(system(command),0);
> >
> >     rc_validate(WEXITSTATUS(rc), 1);
> > @@ -1816,6 +1820,7 @@ void saLogOi_108(void)
> >     rc = system(command);
> >     /* Delete */
> >     sprintf(command,"immcfg -d
> safLgStrCfg=str6,safApp=safLogService");
> > +   delay_ms();
> >     safassert(system(command),0);
> >
> >     rc_validate(WEXITSTATUS(rc), 1);
> > @@ -1844,6 +1849,7 @@ void saLogOi_109(void)
> >     rc = system(command);
> >     /* Delete */
> >     sprintf(command,"immcfg -d
> safLgStrCfg=str6,safApp=safLogService");
> > +   delay_ms();
> >     safassert(system(command),0);
> >
> >     rc_validate(WEXITSTATUS(rc), 0);
> > @@ -1872,6 +1878,7 @@ void saLogOi_110(void)
> >     rc = system(command);
> >     /* Delete */
> >     sprintf(command,"immcfg -d
> safLgStrCfg=str6,safApp=safLogService");
> > +   delay_ms();
> >     safassert(system(command),0);
> >
> >     rc_validate(WEXITSTATUS(rc), 0);
> > @@ -1900,6 +1907,7 @@ void saLogOi_111(void)
> >     rc = system(command);
> >     /* Delete */
> >     sprintf(command,"immcfg -d
> safLgStrCfg=str6,safApp=safLogService");
> > +   delay_ms();
> >     safassert(system(command),0);
> >
> >     rc_validate(WEXITSTATUS(rc), 0);
> > @@ -1928,6 +1936,7 @@ void saLogOi_112(void)
> >     rc = system(command);
> >     /* Delete */
> >     sprintf(command,"immcfg -d
> safLgStrCfg=str6,safApp=safLogService");
> > +   delay_ms();
> >     safassert(system(command),0);
> >
> >     rc_validate(WEXITSTATUS(rc), 1);
> > @@ -1956,6 +1965,7 @@ void saLogOi_113(void)
> >     rc = system(command);
> >     /* Delete */
> >     sprintf(command,"immcfg -d
> safLgStrCfg=str6,safApp=safLogService");
> > +   delay_ms();
> >     safassert(system(command),0);
> >
> >     rc_validate(WEXITSTATUS(rc), 0);
> > @@ -1984,6 +1994,7 @@ void saLogOi_114(void)
> >     rc = system(command);
> >     /* Delete */
> >     sprintf(command,"immcfg -d
> safLgStrCfg=str6,safApp=safLogService");
> > +   delay_ms();
> >     safassert(system(command),0);
> >
> >     rc_validate(WEXITSTATUS(rc), 1);
> > @@ -2012,6 +2023,7 @@ void saLogOi_115(void)
> >     rc = system(command);
> >     /* Delete */
> >     sprintf(command,"immcfg -d
> safLgStrCfg=str6,safApp=safLogService");
> > +   delay_ms();
> >     safassert(system(command),0);
> >
> >     rc_validate(WEXITSTATUS(rc), 1);
> > @@ -2471,6 +2483,627 @@ void verDefaultLogFileFmt(void)
> >
> >   #undef MAX_LOGRECSIZE
> >
> > +/**
> > + * Add test cases for ticket #1288
> > + * - logFileIoTimeout is changeable in runtime
> > + * - logMaxLogrecsize is changeable in runtime
> > + * - Max log record is up to 65535
> > + */
> > +
> > +#define MAX_LOGRECSIZE (65535)
> > +
> > +/**
> > + * CCB Object Modify, logFileIoTimeout.
> > + * Verify it is possible to change the value
> > + */
> > +void verLogFileIoTimeout(void)
> > +{
> > +    int rc;
> > +    char command[256];
> > +   uint32_t val = 0;
> > +   uint32_t *tmp = &val;
> > +
> > +   /* Get current value of logMaxApplicationStreams */
> > +   rc = get_attr_value(&configurationObject, "logFileIoTimeout",
> > +                                           (void **)&tmp, NULL);
> > +   if (rc == -1) {
> > +           /* if failed, use default value */
> > +           fprintf(stderr, "Failed to get attribute value from IMM \n");
> > +           val = 500;
> > +   } else {
> > +           val = *tmp;
> > +   }
> > +
> > +    sprintf(command, "immcfg -a logFileIoTimeout=%d"
> > +                   " logConfig=1,safApp=safLogService 2> /dev/null",
> 600);
> > +    rc = system(command);
> > +   rc_validate(WEXITSTATUS(rc), 0);
> > +
> > +   /* If perform the command succesfully, restore to previous value. */
> > +   if (WEXITSTATUS(rc) == 0) {
> > +           sprintf(command, "immcfg -a logFileIoTimeout=%u"
> > +                           " logConfig=1,safApp=safLogService 2>
> /dev/null", val);
> > +           rc = system(command);
> > +   }
> > +}
> > +
> > +/**
> > + * CCB Object Modify, logFileIoTimeout < 500. Not allowed
> > + * Result, Reject
> > + */
> > +void verLogFileIoTimeout_Err_01(void)
> > +{
> > +    int rc;
> > +    char command[256];
> > +
> > +    sprintf(command, "immcfg -a logFileIoTimeout=%d"
> > +                   " logConfig=1,safApp=safLogService 2> /dev/null",
> 400);
> > +    rc = system(command);
> > +    rc_validate(WEXITSTATUS(rc), 1);
> > +}
> > +
> > +/**
> > + * CCB Object Modify, logFileIoTimeout > 5000. Not allowed
> > + * Result, Reject
> > + */
> > +void verLogFileIoTimeout_Err_02(void)
> > +{
> > +    int rc;
> > +    char command[256];
> > +
> > +    sprintf(command, "immcfg -a logFileIoTimeout=%d"
> > +                   " logConfig=1,safApp=safLogService 2> /dev/null",
> 6000);
> > +    rc = system(command);
> > +    rc_validate(WEXITSTATUS(rc), 1);
> > +}
> > +
> > +/**
> > + * CCB Object Modify, valid logMaxLogrecsize value is in range [256 -
> 65535].
> > + */
> > +void verLogMaxLogrecsize(void)
> > +{
> > +    int rc;
> > +    char command[256];
> > +   uint32_t logMaxRec = 0;
> > +   uint32_t *tmp = &logMaxRec;
> > +
> > +    /* Get current value of the attribute, use default value if failed 
> > (-1) */
> > +    rc = get_attr_value(&configurationObject, "logMaxLogrecsize", (void
> **)&tmp,
> > +                                           NULL);
> > +    if (rc == -1) {
> > +           /* Failed, use default one */
> > +           fprintf(stderr, "Failed to get attribute value from IMM\n");
> > +           logMaxRec = 1024;
> > +    } else {
> > +           logMaxRec = *tmp;
> > +   }
> > +
> > +    sprintf(command, "immcfg -a logMaxLogrecsize=%d "
> > +                   "logConfig=1,safApp=safLogService 2> /dev/null",
> MAX_LOGRECSIZE);
> > +    rc = system(command);
> > +    rc_validate(WEXITSTATUS(rc), 0);
> > +
> > +   /* Restore logMaxLogrecsize to previous value */
> > +   sprintf(command, "immcfg -a logMaxLogrecsize=%d "
> > +                   "logConfig=1,safApp=safLogService 2> /dev/null",
> logMaxRec);
> > +    rc = system(command);
> > +}
> > +
> > +/**
> > + * CCB Object Modify, verify the rule:
> > + * saLogStreamMaxLogFileSize > logMaxLogrecsize >=
> saLogStreamFixedLogRecordSize
> > + */
> > +void verLogMaxLogrecsize_dep(void)
> > +{
> > +    int rc;
> > +    char command[256];
> > +   uint32_t logMaxRec = 0;
> > +   uint32_t *tmp = &logMaxRec;
> > +
> > +    /* Get current value of the attribute, use default value if failed 
> > (-1) */
> > +    rc = get_attr_value(&configurationObject, "logMaxLogrecsize", (void
> **)&tmp,
> > +                                           NULL);
> > +    if (rc == -1) {
> > +           /* Failed, use default one */
> > +           fprintf(stderr, "Failed to get attribute value from IMM\n");
> > +           logMaxRec = 1024;
> > +    } else {
> > +           logMaxRec = *tmp;
> > +   }
> > +
> > +   /* Change the logMaxLogrecsize */
> > +    sprintf(command, "immcfg -a logMaxLogrecsize=%d "
> > +                   "logConfig=1,safApp=safLogService 2> /dev/null",
> 1000);
> > +    rc = system(command);
> > +   if (WEXITSTATUS(rc)) {
> > +           /* Failed to perform command. Report test failed */
> > +           fprintf(stderr, "Failed to perfom command - %s \n",
> command);
> > +           rc_validate(WEXITSTATUS(rc), 0);
> > +           return;
> > +   }
> > +
> > +   /* Create an stream with valid values */
> > +   sprintf(command, "immcfg -c SaLogStreamConfig
> safLgStrCfg=Test,safApp=safLogService"
> > +                   " -a saLogStreamFileName=Test -a
> saLogStreamPathName=Test"
> > +                   " -a saLogStreamFixedLogRecordSize=1000 "
> > +                   " -a saLogStreamMaxLogFileSize=5000");
> > +    rc = system(command);
> > +   if (WEXITSTATUS(rc)) {
> > +           /* Failed to perform command. Report test failed */
> > +           fprintf(stderr, "Failed to perfom command - %s \n",
> command);
> > +           rc_validate(WEXITSTATUS(rc), 0);
> > +           goto done;
> > +   }
> > +
> > +   /* Change the logMaxLogrecsize to value less than above
> fixedLogRecordSize */
> > +    sprintf(command, "immcfg -a logMaxLogrecsize=%d "
> > +                   "logConfig=1,safApp=safLogService 2> /dev/null",
> 500);
> > +    rc = system(command);
> > +   if (WEXITSTATUS(rc)) {
> > +           /* Failed to perform command. Report test failed */
> > +           fprintf(stderr, "Failed to perfom command - %s \n",
> command);
> > +           rc_validate(WEXITSTATUS(rc), 0);
> > +           goto free_class;
> > +   }
> > +
> > +   /*
> > +    * Change the saLogStreamMaxLogFileSize to valid value.
> > +    * Verify that the command performs succesfully.
> > +    */
> > +    sprintf(command, "immcfg -a saLogStreamMaxLogFileSize=%d "
> > +                   "safLgStrCfg=Test,safApp=safLogService 2>
> /dev/null", 6000);
> > +    rc = system(command);
> > +   rc_validate(WEXITSTATUS(rc), 0);
> > +
> > +free_class:
> > +   /* Delete created obj class */
> > +   sprintf(command, "immcfg -d
> safLgStrCfg=Test,safApp=safLogService "
> > +                   "2> /dev/null");
> > +    rc = system(command);
> > +
> > +done:
> > +   /* Restore logMaxLogrecsize to previous value */
> > +   sprintf(command, "immcfg -a logMaxLogrecsize=%d "
> > +                   "logConfig=1,safApp=safLogService 2> /dev/null",
> logMaxRec);
> > +    rc = system(command);
> > +}
> > +
> > +/**
> > + * CCB Object Modify, logMaxLogrecsize < 256. Not allowed.
> > + */
> > +void verLogMaxLogrecsize_Err_01(void)
> > +{
> > +    int rc;
> > +    char command[256];
> > +
> > +    sprintf(command, "immcfg -a logMaxLogrecsize=%d "
> > +                   "logConfig=1,safApp=safLogService 2> /dev/null",
> 255);
> > +    rc = system(command);
> > +    rc_validate(WEXITSTATUS(rc), 1);
> > +}
> > +
> > +/**
> > + * CCB Object Modify, logMaxLogrecsize > 65535. Not allowed.
> > + */
> > +void verLogMaxLogrecsize_Err_02(void)
> > +{
> > +    int rc;
> > +    char command[256];
> > +
> > +    sprintf(command, "immcfg -a logMaxLogrecsize=%d "
> > +                   "logConfig=1,safApp=safLogService 2> /dev/null",
> MAX_LOGRECSIZE + 1);
> > +    rc = system(command);
> > +    rc_validate(WEXITSTATUS(rc), 1);
> > +}
> > +
> > +/**
> > + * Also add test cases to verify the rules:
> > + * ---------------------------------------
> > + * 1 - saLogStreamFixedLogRecordSize must be less than
> saLogStreamMaxLogFileSize
> > + * 2 - saLogStreamFixedLogRecordSize must be less than or equal to
> logMaxLogrecsize
> > + * 3 - saLogStreamFixedLogRecordSize can be 0. Means variable record
> size
> > + * 4 - saLogStreamMaxLogFileSize must be bigger than 0. No limit is not
> supported
> > + * 5 - saLogStreamMaxLogFileSize must be bigger than logMaxLogrecsize
> > + * 6 - saLogStreamMaxLogFileSize must be bigger than
> saLogStreamFixedLogRecordSize
> > + * ----------------------------------------
> > + *
> > + * For rules #2, #3, #5, test cases are already added above.
> > + */
> > +
> > +/**
> > + * CCB Object modify, verify rule #1/#6
> > + * saLogStreamFixedLogRecordSize < saLogStreamMaxLogFileSize.
> Allowed.
> > + */
> > +void verFixLogRec_MaxFileSize(void)
> > +{
> > +    int rc;
> > +    char command[256];
> > +   uint32_t fixLogRec = 0;
> > +   uint32_t *tmpFix = &fixLogRec;
> > +   uint32_t maxFileSize = 0;
> > +   uint32_t *tmpMax = &maxFileSize;
> > +   uint32_t logMaxRec = 0;
> > +   uint32_t *tmp = &logMaxRec;
> > +
> > +    /* Get current value of logMaxLogrecsize attribute, use default value 
> > if
> failed (-1) */
> > +    rc = get_attr_value(&configurationObject, "logMaxLogrecsize", (void
> **)&tmp,
> > +                                           NULL);
> > +    if (rc == -1) {
> > +           /* Failed, use default one */
> > +           fprintf(stderr, "Failed to get attribute value from IMM\n");
> > +           logMaxRec = 1024;
> > +    } else {
> > +           logMaxRec = *tmp;
> > +   }
> > +
> > +   /* Get current value of saLogStreamFixedLogRecordSize */
> > +   rc = get_attr_value(&alarmStreamName,
> "saLogStreamFixedLogRecordSize",
> > +                                           (void **)&tmpFix, NULL);
> > +   if (rc == -1) {
> > +           /* Report test failed and exit if getting value failed */
> > +           fprintf(stderr, "Failed to get attribute value from IMM \n");
> > +           test_validate(rc, 0);
> > +           return;
> > +   }
> > +
> > +   /* Backup the current saLogStreamFixedLogRecordSize value */
> > +   fixLogRec = *tmpFix;
> > +
> > +   /* Get current value of saLogStreamMaxLogFileSize */
> > +   rc = get_attr_value(&alarmStreamName,
> "saLogStreamMaxLogFileSize",
> > +                                           (void **)&tmpMax, NULL);
> > +   if (rc == -1) {
> > +           /* Report test failed and exit if getting value failed */
> > +           fprintf(stderr, "Failed to get attribute value from IMM \n");
> > +           test_validate(rc, 0);
> > +           return;
> > +   }
> > +
> > +   /* Backup the current saLogStreamMaxLogFileSize value */
> > +   maxFileSize = *tmpMax;
> > +
> > +   /* Allow to set saLogStreamMaxLogFileSize >
> saLogStreamFixedLogRecordSize */
> > +   sprintf(command, "immcfg -a saLogStreamMaxLogFileSize=%d "
> > +                   "-a saLogStreamFixedLogRecordSize=%d %s 2>
> /dev/null",
> > +                   logMaxRec + 1, logMaxRec,
> SA_LOG_STREAM_ALARM);
> > +    rc = system(command);
> > +   rc_validate(WEXITSTATUS(rc), 0);
> > +
> > +   /* Restore the changed value */
> > +   if (WEXITSTATUS(rc) == 0) {
> > +           sprintf(command, "immcfg -a
> saLogStreamMaxLogFileSize=%d "
> > +                           " -a saLogStreamFixedLogRecordSize=%d %s
> 2> /dev/null",
> > +                           maxFileSize, fixLogRec,
> SA_LOG_STREAM_ALARM);
> > +           rc = system(command);
> > +   }
> > +}
> > +
> > +/**
> > + * CCB Object modify, verify rule #1/#6
> > + * saLogStreamFixedLogRecordSize > saLogStreamMaxLogFileSize. Not
> allowed.
> > + */
> > +void verFixLogRec_MaxFileSize_Err(void)
> > +{
> > +    int rc;
> > +    char command[256];
> > +   uint32_t fixLogRec = 0;
> > +   uint32_t *tmpFix = &fixLogRec;
> > +   uint32_t maxFileSize = 0;
> > +   uint32_t *tmpMax = &maxFileSize;
> > +
> > +   /* Get current value of saLogStreamFixedLogRecordSize */
> > +   rc = get_attr_value(&alarmStreamName,
> "saLogStreamFixedLogRecordSize",
> > +                                           (void **)&tmpFix, NULL);
> > +   if (rc == -1) {
> > +           /* Report test failed and exit if getting value failed */
> > +           fprintf(stderr, "Failed to get attribute value from IMM \n");
> > +           test_validate(rc, 0);
> > +           return;
> > +   }
> > +
> > +   /* Backup the current saLogStreamFixedLogRecordSize value */
> > +   fixLogRec = *tmpFix;
> > +
> > +   /* Get current value of saLogStreamMaxLogFileSize */
> > +   rc = get_attr_value(&alarmStreamName,
> "saLogStreamMaxLogFileSize",
> > +                                           (void **)&tmpMax, NULL);
> > +   if (rc == -1) {
> > +           /* Report test failed and exit if getting value failed */
> > +           fprintf(stderr, "Failed to get attribute value from IMM \n");
> > +           test_validate(rc, 0);
> > +           return;
> > +   }
> > +
> > +   /* Backup the current saLogStreamMaxLogFileSize value */
> > +   maxFileSize = *tmpMax;
> > +
> > +   /* Not allow to set saLogStreamMaxLogFileSize <
> saLogStreamFixedLogRecordSize */
> > +   sprintf(command, "immcfg -a saLogStreamMaxLogFileSize=%d %s 2>
> /dev/null",
> > +                   fixLogRec - 1, SA_LOG_STREAM_ALARM);
> > +    rc = system(command);
> > +   rc_validate(WEXITSTATUS(rc), 1);
> > +
> > +   /* Restore the changed value */
> > +   if (WEXITSTATUS(rc) == 0) {
> > +           sprintf(command, "immcfg -a
> saLogStreamMaxLogFileSize=%d %s 2> /dev/null",
> > +                           maxFileSize, SA_LOG_STREAM_ALARM);
> > +           rc = system(command);
> > +   }
> > +}
> > +
> > +/**
> > + * CCB Object modify, verify rule #4
> > + * saLogStreamMaxLogFileSize = 0. Not allowed.
> > + */
> > +void verMaxLogFileSize_Err(void)
> > +{
> > +    int rc;
> > +    char command[256];
> > +   uint32_t val = 0;
> > +   uint32_t *tmp = &val;
> > +
> > +   /* Get current value of logMaxApplicationStreams */
> > +   rc = get_attr_value(&alarmStreamName,
> "saLogStreamMaxLogFileSize",
> > +                                           (void **)&tmp, NULL);
> > +   if (rc == -1) {
> > +           /* Report test failed and exit if getting value failed */
> > +           fprintf(stderr, "Failed to get attribute value from IMM \n");
> > +           test_validate(rc, 0);
> > +           return;
> > +   }
> > +
> > +   /* Backup the current value */
> > +   val = *tmp;
> > +
> > +   /* Allow to set saLogStreamMaxLogFileSize=0 */
> > +   sprintf(command, "immcfg -a saLogStreamMaxLogFileSize=0 %s 2>
> /dev/null",
> > +                   SA_LOG_STREAM_ALARM);
> > +    rc = system(command);
> > +   rc_validate(WEXITSTATUS(rc), 1);
> > +
> > +   /* Restore the changed value */
> > +   if (WEXITSTATUS(rc) == 0) {
> > +           sprintf(command, "immcfg -a
> saLogStreamMaxLogFileSize=%d %s 2> /dev/null",
> > +                           val, SA_LOG_STREAM_ALARM);
> > +           rc = system(command);
> > +   }
> > +}
> > +
> > +/**
> > + * Write a maximum log record to app stream.
> > + * Then, verify if it is done succesfully or not.
> > + *
> > + * Steps:
> > + *
> > + * 1. Change the logMaxLogrecsize value to maximum one.
> > + * 2. Create application stream with saLogStreamFixedLogRecordSize
> > + *    equal to logMaxLogrecsize (maximum value).
> > + * 3. Create a log record buffer with 65535 bytes.
> > + * 4. Using saflogger tool, writing that buffer to the created app stream.
> > + * 5. Get file size of the app stream log file
> > + * 6. Verify if the size of file is larger than 65535 bytes or not
> > + * 7. Delete created app class
> > + */
> > +
> > +void verMaxLogRecord_01(void)
> > +{
> > +    int rc;
> > +    char command[66000];
> > +   char logRecord[MAX_LOGRECSIZE];
> > +   uint32_t logMaxRec = 0;
> > +   uint32_t *tmp = &logMaxRec;
> > +
> > +    /* Get current value of the attribute, use default value if failed 
> > (-1) */
> > +    rc = get_attr_value(&configurationObject, "logMaxLogrecsize", (void
> **)&tmp,
> > +                                           NULL);
> > +    if (rc == -1) {
> > +           /* Failed, use default one */
> > +           fprintf(stderr, "Failed to get attribute value from IMM\n");
> > +           logMaxRec = 1024;
> > +    } else {
> > +           logMaxRec = *tmp;
> > +   }
> > +
> > +   /* Change the attribute value to maximum one */
> > +   sprintf(command, "immcfg -a logMaxLogrecsize=%u"
> > +                   " logConfig=1,safApp=safLogService 2> /dev/null",
> MAX_LOGRECSIZE);
> > +
> > +   rc = system(command);
> > +   if (WEXITSTATUS(rc)) {
> > +           /* Failed to set logMaxLogrecsize. Report test failed */
> > +           fprintf(stderr, "Failed to perform command = %s\n",
> command);
> > +           rc_validate(WEXITSTATUS(rc), 0);
> > +           return;
> > +   }
> > +
> > +   /* Set saLogStreamFixedLogRecordSize = 0, fix log record =
> maxLogRecordSize */
> > +   sprintf(command, "immcfg -c SaLogStreamConfig
> safLgStrCfg=maxrecsize,safApp=safLogService"
> > +                   " -a saLogStreamFileName=verMaxLogrecsize -a
> saLogStreamPathName=vermaxsize"
> > +                   " -a saLogStreamFixedLogRecordSize=0");
> > +
> > +   rc = system(command);
> > +   if (WEXITSTATUS(rc)) {
> > +           /* Fail to perform the command. Report TC failed */
> > +           fprintf(stderr, "Failed to perform command = %s",
> command);
> > +           rc_validate(WEXITSTATUS(rc), 0);
> > +           goto done;
> > +   }
> > +
> > +   /* Prepare log record data */
> > +   memset(logRecord, 'A', MAX_LOGRECSIZE - 2);
> > +   logRecord[MAX_LOGRECSIZE - 1] = '\0';
> > +
> > +   sprintf(command, "saflogger -a
> safLgStrCfg=maxrecsize,safApp=safLogService \"%s\"",
> > +                   logRecord);
> > +
> > +    rc = system(command);
> > +   if (WEXITSTATUS(rc)) {
> > +           /* Fail to perform command. Report test failed. */
> > +           fprintf(stderr, "Failed to perform command = %s\n",
> command);
> > +           rc_validate(WEXITSTATUS(rc), 0);
> > +           goto free_class;
> > +   }
> > +   /* Write log record succesfully. Then, measure the log file size. */
> > +   FILE *fp = NULL;
> > +   char fileSize_c[10];
> > +   uint32_t fileSize = 0;
> > +
> > +   /* Command to get exact app stream log file, and measure that file
> size. */
> > +   sprintf(command, "find %s/vermaxsize -type f -mmin -1 "
> > +                   "| egrep \"%s_([0-9]{8}_[0-9]{6}\\.log$)\" "
> > +                   "| xargs wc -c | awk '{printf $1}'",
> > +                   log_root_path, "verMaxLogrecsize");
> > +
> > +   fp = popen(command, "r");
> > +
> > +   if (fp == NULL) {
> > +           /* Fail to read size of log file. Report test failed. */
> > +           fprintf(stderr, "Failed to run command = %s\n", command);
> > +           test_validate(1, 0);
> > +           goto free_class;
> > +   }
> > +   /* Get output of the command - actually the file size in chars */
> > +   while (fgets(fileSize_c, sizeof(fileSize_c) - 1, fp) != NULL) {};
> > +   pclose(fp);
> > +
> > +   /* Convert chars to number */
> > +   fileSize = atoi(fileSize_c);
> > +
> > +   if (fileSize < MAX_LOGRECSIZE) {
> > +           fprintf(stderr, "Log file size (%u) is less than %d \n",
> > +                           fileSize, MAX_LOGRECSIZE);
> > +           test_validate(fileSize, MAX_LOGRECSIZE);
> > +           goto free_class;
> > +   } else {
> > +           rc_validate(WEXITSTATUS(rc), 0);
> > +   }
> > +
> > +free_class:
> > +   /* Delete class created */
> > +   (void)strcpy(command, "immcfg -d
> safLgStrCfg=maxrecsize,safApp=safLogService");
> > +   rc = system(command);
> > +
> > +done:
> > +   /* Restore logMaxLogrecsize to previous value */
> > +   sprintf(command, "immcfg -a logMaxLogrecsize=%d "
> > +                   "logConfig=1,safApp=safLogService 2> /dev/null",
> logMaxRec);
> > +    rc = system(command);
> > +}
> > +
> > +/**
> > + * Write a log record containing special characters.
> > + * Make sure the logsv functions normally.
> > + */
> > +void verMaxLogRecord_02(void)
> > +{
> > +    int rc;
> > +    char command[66000];
> > +   char logRecord[MAX_LOGRECSIZE];
> > +   uint32_t logMaxRec = 0;
> > +   uint32_t *tmp = &logMaxRec;
> > +
> > +    /* Get current value of the attribute, use default value if failed 
> > (-1) */
> > +    rc = get_attr_value(&configurationObject, "logMaxLogrecsize", (void
> **)&tmp,
> > +                                           NULL);
> > +    if (rc == -1) {
> > +           /* Failed, use default one */
> > +           fprintf(stderr, "Failed to get attribute value from IMM\n");
> > +           logMaxRec = 1024;
> > +    } else {
> > +           logMaxRec = *tmp;
> > +   }
> > +
> > +   /* Change the attribute value to maximum one */
> > +   sprintf(command, "immcfg -a logMaxLogrecsize=%u"
> > +                   " logConfig=1,safApp=safLogService 2> /dev/null",
> MAX_LOGRECSIZE);
> > +
> > +   rc = system(command);
> > +   if (WEXITSTATUS(rc)) {
> > +           /* Failed to set logMaxLogrecsize. Report test failed */
> > +           fprintf(stderr, "Failed to perform command = %s\n",
> command);
> > +           rc_validate(WEXITSTATUS(rc), 0);
> > +           return;
> > +   }
> > +   /* Set saLogStreamFixedLogRecordSize = max */
> > +   sprintf(command, "immcfg -c SaLogStreamConfig
> safLgStrCfg=specialCharactor,safApp=safLogService"
> > +                   " -a saLogStreamFileName=specialCharactor -a
> saLogStreamPathName=vermaxsize"
> > +                   " -a saLogStreamFixedLogRecordSize=%d",
> MAX_LOGRECSIZE);
> > +
> > +   rc = system(command);
> > +   if (WEXITSTATUS(rc)) {
> > +           /* Fail to perform the command. Report TC failed */
> > +           fprintf(stderr, "Failed to perform command = %s",
> command);
> > +           rc_validate(WEXITSTATUS(rc), 0);
> > +           goto done;
> > +   }
> > +
> > +   /* Prepare log record data with special characters */
> > +   memset(logRecord, 'A', MAX_LOGRECSIZE - 2);
> > +   logRecord[1] = '\t';
> > +   logRecord[2] = 't';
> > +   logRecord[3] = '\n';
> > +   logRecord[4] = 'n';
> > +   logRecord[5] = ' ';
> > +   logRecord[6] = 'S';
> > +   logRecord[MAX_LOGRECSIZE - 1] = '\0';
> > +
> > +   sprintf(command, "saflogger -a
> safLgStrCfg=specialCharactor,safApp=safLogService \"%s\"",
> > +                   logRecord);
> > +
> > +    rc = system(command);
> > +   if (WEXITSTATUS(rc)) {
> > +           /* Fail to perform command. Report test failed. */
> > +           fprintf(stderr, "Failed to perform command = %s\n",
> command);
> > +           rc_validate(WEXITSTATUS(rc), 0);
> > +           goto free_class;
> > +   }
> > +   /* Write log record succesfully. Then, measure the log file size. */
> > +   FILE *fp = NULL;
> > +   char fileSize_c[10];
> > +   uint32_t fileSize = 0;
> > +
> > +   /* Command to get exact app stream log file, and measure that file
> size. */
> > +   sprintf(command, "find %s/vermaxsize -type f -mmin -1 "
> > +                   "| egrep \"%s_([0-9]{8}_[0-9]{6}\\.log$)\" "
> > +                   "| xargs wc -c | awk '{printf $1}'",
> > +                   log_root_path, "specialCharactor");
> > +
> > +   fp = popen(command, "r");
> > +
> > +   if (fp == NULL) {
> > +           /* Fail to read size of log file. Report test failed. */
> > +           fprintf(stderr, "Failed to run command = %s\n", command);
> > +           test_validate(1, 0);
> > +           goto free_class;
> > +   }
> > +   /* Get output of the command - actually the file size in chars */
> > +   while (fgets(fileSize_c, sizeof(fileSize_c) - 1, fp) != NULL) {};
> > +   pclose(fp);
> > +
> > +   /* Convert chars to number */
> > +   fileSize = atoi(fileSize_c);
> > +
> > +   if (fileSize < MAX_LOGRECSIZE) {
> > +           fprintf(stderr, "Log file size (%u) is less than %d \n",
> > +                           fileSize, MAX_LOGRECSIZE);
> > +           test_validate(fileSize, MAX_LOGRECSIZE);
> > +           goto free_class;
> > +   } else {
> > +           rc_validate(WEXITSTATUS(rc), 0);
> > +   }
> > +
> > +free_class:
> > +   /* Delete class created */
> > +   (void)strcpy(command, "immcfg -d
> safLgStrCfg=specialCharactor,safApp=safLogService");
> > +   rc = system(command);
> > +
> > +done:
> > +   /* Restore logMaxLogrecsize to previous value */
> > +   sprintf(command, "immcfg -a logMaxLogrecsize=%d "
> > +                   "logConfig=1,safApp=safLogService 2> /dev/null",
> logMaxRec);
> > +    rc = system(command);
> > +}
> > +
> >   __attribute__ ((constructor)) static void
> saOiOperations_constructor(void)
> >   {
> >     /* Stream objects */
> > @@ -2546,7 +3179,6 @@ void verDefaultLogFileFmt(void)
> >       test_case_add(5, saLogOi_79, "CCB Object Modify, data group. Group
> does not exist. Not allowed");
> >       test_case_add(5, saLogOi_80, "CCB Object Modify, data group. Group
> exists. OK");
> >       test_case_add(5, saLogOi_81, "CCB Object Modify, delete data group.
> OK");
> > -    test_case_add(5, saLogOi_53, "CCB Object Modify, logMaxLogrecsize.
> Not allowed");
> >       test_case_add(5, saLogOi_54, "CCB Object Modify,
> logStreamSystemHighLimit > logStreamSystemLowLimit. OK");
> >       test_case_add(5, saLogOi_55, "CCB Object Modify,
> logStreamSystemHighLimit = logStreamSystemLowLimit, != 0. Ok");
> >       test_case_add(5, saLogOi_56, "CCB Object Modify,
> logStreamSystemHighLimit < logStreamSystemLowLimit. Error");
> > @@ -2556,9 +3188,17 @@ void verDefaultLogFileFmt(void)
> >       test_case_add(5, saLogOi_60, "CCB Object Modify,
> logStreamAppHighLimit < logStreamAppLowLimit. Error");
> >       test_case_add(5, saLogOi_61, "CCB Object Modify,
> logStreamAppHighLimit = logStreamAppLowLimit = 0. OK");
> >       test_case_add(5, saLogOi_62, "CCB Object Modify,
> logMaxApplicationStreams. Not allowed");
> > -    test_case_add(5, saLogOi_63, "CCB Object Modify, logFileIoTimeout.
> Not allowed");
> >       test_case_add(5, saLogOi_64, "CCB Object Modify, logFileSysConfig. Not
> allowed");
> > -
> > +
> > +   /* Add test cases to test #1288 */
> > +   test_case_add(5, verLogFileIoTimeout, "CCB Object Modify:
> logFileIoTimeout is in range [500 - 5000], OK");
> > +   test_case_add(5, verLogFileIoTimeout_Err_01, "CCB Object Modify:
> logFileIoTimeout < 500, ERR");
> > +   test_case_add(5, verLogFileIoTimeout_Err_02, "CCB Object Modify:
> logFileIoTimeout > 5000, ERR");
> > +   test_case_add(5, verLogMaxLogrecsize, "CCB Object Modify:
> logMaxLogrecsize is in range [256 - 65535], OK");
> > +   test_case_add(5, verLogMaxLogrecsize_dep, "CCB Object Modify:
> logMaxLogrecsize dependencies, OK");
> > +   test_case_add(5, verLogMaxLogrecsize_Err_01, "CCB Object Modify:
> logMaxLogrecsize < 256, ERR");
> > +   test_case_add(5, verLogMaxLogrecsize_Err_02, "CCB Object Modify:
> logMaxLogrecsize > 65535, ERR");
> > +
> >     /* Stream configuration object */
> >     /* Tests for create */
> >     test_suite_add(6, "LOG OI tests, Stream configuration object
> attribute validation");
> > @@ -2586,6 +3226,9 @@ void verDefaultLogFileFmt(void)
> >     test_case_add(6, saLogOi_106, "Modify: saLogStreamMaxLogFileSize
> > logMaxLogrecsize, Ok");
> >     test_case_add(6, saLogOi_107, "Modify: saLogStreamMaxLogFileSize
> == logMaxLogrecsize, ERR");
> >     test_case_add(6, saLogOi_108, "Modify: saLogStreamMaxLogFileSize
> < logMaxLogrecsize, ERR");
> > +   test_case_add(6, verFixLogRec_MaxFileSize, "Modify:
> saLogStreamMaxLogFileSize > saLogStreamFixedLogRecordSize, OK");
> > +   test_case_add(6, verFixLogRec_MaxFileSize_Err, "Modify:
> saLogStreamMaxLogFileSize <= saLogStreamFixedLogRecordSize, ERR");
> > +   test_case_add(6, verMaxLogFileSize_Err, "Modify:
> saLogStreamMaxLogFileSize == 0, ERR");
> >     test_case_add(6, saLogOi_109, "Modify:
> saLogStreamFixedLogRecordSize < logMaxLogrecsize, Ok");
> >     test_case_add(6, saLogOi_110, "Modify:
> saLogStreamFixedLogRecordSize == 0, Ok");
> >     test_case_add(6, saLogOi_111, "Modify:
> saLogStreamFixedLogRecordSize == logMaxLogrecsize, Ok");
> > @@ -2593,4 +3236,9 @@ void verDefaultLogFileFmt(void)
> >     test_case_add(6, saLogOi_113, "Modify:
> saLogStreamMaxFilesRotated < 128, Ok");
> >     test_case_add(6, saLogOi_114, "Modify:
> saLogStreamMaxFilesRotated > 128, ERR");
> >     test_case_add(6, saLogOi_115, "Modify:
> saLogStreamMaxFilesRotated == 128, ERR");
> > +
> > +   /* Add test cases to test #1288 */
> > +   test_case_add(6, verMaxLogRecord_01, "Modify:
> saLogStreamFixedLogRecordSize == 0, write a record = 65535 bytes, OK");
> > +   test_case_add(6, verMaxLogRecord_02, "Modify:
> saLogStreamFixedLogRecordSize == 65535, Write a record = 65535 bytes with
> special characters, OK");
> > +
> >   }
> >

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

Reply via email to