Hi Lennart,

Oops, I seemed to have replied to the wrong thread. 
My ACK was meant for #593. 
W.r.t the backward compatibility comment,
Yes, you might remember my comments on using MDS versioning or MBCSv scheme.
Like I said, there was need to create a new mechanism in logsv to start with. 
Thanks,
Mathi.


> -----Original Message-----
> From: Lennart Lund [mailto:[email protected]]
> Sent: Monday, August 31, 2015 8:48 PM
> To: Mathivanan Naickan Palanivelu; Giang Do T; Vu Nguyen M
> Cc: [email protected]; Lennart Lund; Anders Widell
> Subject: RE: [PATCH 1 of 1] log: Make more configuration attributes possible
> to change in runtime [#1288]
> 
> 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:[email protected]]
> Sent: den 31 augusti 2015 16:35
> To: Giang Do T; Lennart Lund; Vu Nguyen M
> Cc: [email protected]
> 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:[email protected]]
> > Sent: Monday, August 31, 2015 1:25 PM
> > To: Lennart Lund; Mathivanan Naickan Palanivelu;
> > [email protected]
> > Cc: [email protected]
> > 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
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to