Ack

Thanks
Lennart

-----Original Message-----
From: Vu Minh Nguyen [mailto:[email protected]] 
Sent: den 17 september 2015 12:46
To: [email protected]; Lennart Lund; Giang Do T
Cc: [email protected]
Subject: [PATCH 1 of 1] log: cannot delete value of logStreamFileFormat [#1490]

 osaf/services/saf/logsv/lgs/lgs_imm.c |   47 ++++++----
 tests/logsv/tet_LogOiOps.c            |  141 ++++++++++++++++++++++++++++++++++
 2 files changed, 170 insertions(+), 18 deletions(-)


At start up, `logStreamFileFormat` attribute in configuration obj has <empty> 
value.
Means that, built-in file format will be used as default value for app stream.
If user sets an value to logStreamFileFormat, users can not delete the value of 
this attribute.

This patch makes the attribute value can be deleted.

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
@@ -697,14 +697,19 @@ static SaAisErrorT config_ccb_completed_
 
                TRACE("attribute %s", attribute->attrName);
 
-               /* Ignore deletion of attributes except for logDataGroupname*/
+               /**
+                *  Ignore deletion of attributes
+                *  except for logDataGroupname,
+                *  and logStreamFileFormat
+                */
                if ((strcmp(attribute->attrName, LOG_DATA_GROUPNAME) != 0) &&
-                       (attribute->attrValuesNumber == 0)) {
-                       report_oi_error(immOiHandle, opdata->ccbId,
+                        (strcmp(attribute->attrName, LOG_STREAM_FILE_FORMAT) 
!= 0) &&
+                        (attribute->attrValuesNumber == 0)) {
+                               report_oi_error(immOiHandle, opdata->ccbId,
                                        "deletion of value is not allowed for 
attribute %s stream %s",
                                        attribute->attrName, 
opdata->objectName.value);
-                       ais_rc = SA_AIS_ERR_BAD_OPERATION;
-                       goto done;
+                               ais_rc = SA_AIS_ERR_BAD_OPERATION;
+                               goto done;
                }
 
                if (attribute->attrValuesNumber != 0) {
@@ -738,16 +743,19 @@ static SaAisErrorT config_ccb_completed_
                                TRACE("groupname: %s is accepted", groupname);
                        }
                } else if (!strcmp(attribute->attrName, 
LOG_STREAM_FILE_FORMAT)) {
-                       char *logFileFormat = *((char **) value);
-                       rc = lgs_cfg_verify_log_file_format(logFileFormat);
-                       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;
+                       if (attribute->attrValuesNumber == 0) {
+                               TRACE("Delete logStreamFileFormat");
+                       } else {
+                               char *logFileFormat = *((char **) value);
+                               rc = 
lgs_cfg_verify_log_file_format(logFileFormat);
+                               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("logFileFormat: %s value is accepted", 
logFileFormat);
                        }
-                       TRACE("logFileFormat: %s value is accepted", 
logFileFormat);
-                       goto done;
                } else if (!strcmp(attribute->attrName, LOG_MAX_LOGRECSIZE)) {
                        SaUint32T maxLogRecordSize = *((SaUint32T *)value);
                        rc = lgs_cfg_verify_max_logrecsize(maxLogRecordSize);
@@ -758,7 +766,6 @@ static SaAisErrorT config_ccb_completed_
                                goto done;
                        }
                        TRACE("maxLogRecordSize: %s is accepted", 
attribute->attrName);
-                       goto done;
                } else if (!strcmp(attribute->attrName, 
LOG_STREAM_SYSTEM_HIGH_LIMIT)) {
                        vattr.logStreamSystemHighLimit = *((SaUint32T *)value);
                        vattr.logStreamSystemHighLimit_changed = true;
@@ -794,7 +801,6 @@ static SaAisErrorT config_ccb_completed_
                                goto done;
                        }
                        TRACE("logFileIoTimeout: %d value is accepted", 
logFileIoTimeout);
-                       goto done;
                } else if (!strcmp(attribute->attrName, LOG_FILE_SYS_CONFIG)) {
                        report_oi_error(immOiHandle, opdata->ccbId,
                                        "%s cannot be changed", 
attribute->attrName);
@@ -1946,11 +1952,16 @@ static void config_ccb_apply_modify(cons
                        lgs_cfgupd_list_create(LOG_DATA_GROUPNAME,
                                value_str, &config_data);
                } else if (!strcmp(attribute->attrName, 
LOG_STREAM_FILE_FORMAT)) {
+                       if (value == NULL) {
+                               /* Use built-in file format as default */
+                               value_str = DEFAULT_APP_SYS_FORMAT_EXP;
+                       } else {
+                               value_str = *((char **)value);
+                       }
                        /**
                         * This attribute value is used for default log file 
format of
                         * app stream. Changing this value don't result in 
cfg/log file creation.
-                       */
-                       value_str = *((char **)value);
+                        */
                        lgs_cfgupd_list_create(LOG_STREAM_FILE_FORMAT,
                                 value_str, &config_data);
                } else if (!strcmp(attribute->attrName, 
LOG_STREAM_SYSTEM_HIGH_LIMIT)) {
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
@@ -3128,6 +3128,140 @@ void verMaxFilesRotated(void)
     rc_validate(WEXITSTATUS(rc), 1);
 }
 
+/* Add test cases to test #1490 */
+
+/* Verify that logStreamFileFormat value is allowed to delete */
+void verLogStreamFileFormat(void)
+{
+    int rc;
+    char command[256];
+       char logFileFmt[256];
+       bool logFmtEmtpy = true;
+
+    /* Get current value of logStreamFileFormat attribute */
+    rc = get_attr_value(&configurationObject, "logStreamFileFormat", NULL,
+                                               logFileFmt);
+    if (rc != -1) {
+               logFmtEmtpy = false;
+       }
+
+    sprintf(command, "immcfg -a logStreamFileFormat= %s 2> /dev/null",
+                  LOGTST_IMM_LOG_CONFIGURATION);
+    rc = system(command);
+    rc_validate(WEXITSTATUS(rc), 0);
+
+       if ((logFmtEmtpy == false) && (WEXITSTATUS(rc) == 0)) {
+               /* The value is deleted. Restore it */
+               sprintf(command, "immcfg -a logStreamFileFormat=\"%s\" %s 2> 
/dev/null",
+                          logFileFmt, LOGTST_IMM_LOG_CONFIGURATION);
+               rc = system(command);
+       }
+}
+
+/* Verify that logDataGroupname value is allowed to delete */
+void verLogDataGroupName(void)
+{
+    int rc;
+    char command[256];
+       char logGroupName[256];
+       bool logGroupEmpty = true;
+
+    /* Get current value of logDataGroupname attribute */
+    rc = get_attr_value(&configurationObject, "logDataGroupname", NULL,
+                                               logGroupName);
+    if (rc != -1) {
+               logGroupEmpty = false;
+       }
+
+    sprintf(command, "immcfg -a logDataGroupname= %s",
+                       LOGTST_IMM_LOG_CONFIGURATION);
+    rc = system(command);
+    rc_validate(WEXITSTATUS(rc), 0);
+
+       if ((logGroupEmpty == false) && (WEXITSTATUS(rc) == 0)) {
+               /* The value is deleted. Restore it */
+               sprintf(command, "immcfg -a logDataGroupname=\"%s\" %s",
+                               logGroupName, LOGTST_IMM_LOG_CONFIGURATION);
+               rc = system(command);
+       }
+}
+
+/* One CCB with valid attributes, Allowed */
+void verCCBWithValidValues(void)
+{
+    int rc;
+    char command[256];
+       uint32_t timeout = 500;
+       uint32_t *tmp_to = &timeout;
+       uint32_t maxRec = 0;
+       uint32_t *tmp_max = &maxRec;
+
+    /* Get current values of ttributes */
+    rc = get_attr_value(&configurationObject, "logFileIoTimeout", 
(void**)&tmp_to,
+                                               NULL);
+    if (rc != -1) {
+               timeout = *tmp_to;
+       }
+
+       rc = get_attr_value(&configurationObject, "logMaxLogrecsize", 
(void**)&tmp_max,
+                                               NULL);
+    if (rc != -1) {
+               maxRec = *tmp_max;
+       }
+
+    sprintf(command, "immcfg -a logFileIoTimeout=600 -a logMaxLogrecsize=2000 
%s",
+                       LOGTST_IMM_LOG_CONFIGURATION);
+    rc = system(command);
+    rc_validate(WEXITSTATUS(rc), 0);
+
+       if (WEXITSTATUS(rc) == 0) {
+               /* Restore the values */
+               sprintf(command, "immcfg -a logFileIoTimeout=%d -a 
logMaxLogrecsize=%d %s",
+                               timeout,
+                               maxRec,
+                               LOGTST_IMM_LOG_CONFIGURATION);
+               rc = system(command);
+       }
+}
+
+/* One CCB with many valid attributes, but one of them invalid. Not Allowed */
+void verCCBWithInvalidValues(void)
+{
+    int rc;
+    char command[256];
+       uint32_t timeout = 500;
+       uint32_t *tmp_to = &timeout;
+       uint32_t maxRec = 0;
+       uint32_t *tmp_max = &maxRec;
+
+    /* Get current values of ttributes */
+    rc = get_attr_value(&configurationObject, "logFileIoTimeout", 
(void**)&tmp_to,
+                                               NULL);
+    if (rc != -1) {
+               timeout = *tmp_to;
+       }
+
+       rc = get_attr_value(&configurationObject, "logMaxLogrecsize", 
(void**)&tmp_max,
+                                               NULL);
+    if (rc != -1) {
+               maxRec = *tmp_max;
+       }
+
+       /* invalid value to logMaxLogrecsize */
+    sprintf(command, "immcfg -a logFileIoTimeout=600 -a 
logMaxLogrecsize=800000 %s "
+                       " 2> /dev/null ", LOGTST_IMM_LOG_CONFIGURATION);
+    rc = system(command);
+    rc_validate(WEXITSTATUS(rc), 1);
+
+       if (WEXITSTATUS(rc) == 0) {
+               /* Restore the values */
+               sprintf(command, "immcfg -a logFileIoTimeout=%d -a 
logMaxLogrecsize=%d %s",
+                               timeout,
+                               maxRec,
+                               LOGTST_IMM_LOG_CONFIGURATION);
+               rc = system(command);
+       }
+}
 
 __attribute__ ((constructor)) static void saOiOperations_constructor(void)
 {
@@ -3224,6 +3358,13 @@ void verMaxFilesRotated(void)
        test_case_add(5, verLogMaxLogrecsize_Err_01, "CCB Object Modify: 
logMaxLogrecsize < 150, ERR");
        test_case_add(5, verLogMaxLogrecsize_Err_02, "CCB Object Modify: 
logMaxLogrecsize > 65535, ERR");
 
+       /* Add test cases to test #1490 */
+       test_case_add(5, verLogStreamFileFormat, "CCB Object Modify: delete 
logStreamFileFormat, OK");
+       test_case_add(5, verLogDataGroupName, "CCB Object Modify: delete 
logDataGroupname, OK");
+       test_case_add(5, verCCBWithValidValues, "CCB Object Modify many 
attributes with valid values, OK");
+       test_case_add(5, verCCBWithInvalidValues, "CCB Object Modify many 
attributes with one invalid values, ERR");
+
+
        /* Stream configuration object */
        /* Tests for create */
        test_suite_add(6, "LOG OI tests, Stream configuration object attribute 
validation");

------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to