Hi Lennart,

Ack after converging on the following minor comments inline:

----- vu.m.ngu...@dektech.com.au wrote:

> Hi,
> 
> With this patch, the lowest value for `logMaxLogrecsize` in the
> validation
> is set to `256`.
> But in logsv class definition, the default value of `
> saLogStreamFixedLogRecordSize` is set to `150`.

Good comment Vu.
Iam keen to understand the reason behind changing the lower limit!?

Some more below...

> 
> I think the lowest value for ` logMaxLogrecsize` should be changed to
> `150`
> instead.
> 
> Regards,
> Vu
> 
> 
> >-----Original Message-----
> >From: Lennart Lund [mailto:lennart.l...@ericsson.com]
> >Sent: Tuesday, August 25, 2015 8:27 PM
> >To: mathi.naic...@oracle.com; vu.m.ngu...@dektech.com.au;
> >giang.t...@dektech.com.au
> >Cc: opensaf-devel@lists.sourceforge.net
> >Subject: [PATCH 1 of 1] log: Make more configuration attributes
> possible to
> >change in runtime [#1288]
> >
> > 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).

Is this value calculated based on transport layer considerations or
just a random value?

In either case this seems to be half the size of the maximum size
of a single TIPC message. So, perhaps this value may just not 
turnout to be problematic...But, 
We need to test this by say for eg:- writing log records continuously
with this record size.


> >+
> >+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

Is user always a 'He'!? ;-)

> 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*/
> > };
> >
> > 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);
> >     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,

We could remove these wild numbers #448. These need
not remain in the code. I thought these would get removed before 448 was pushed!

> >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))

Were able to run the following test? for sanity testing sakes
- modify these attributes
- perform a switchover or failover to see if this attribute is reflecting
in the actual behaviour!


Thanks,
Mathi.

> >{
> >+                    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
> >--- 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