Hi Vu,
Acked and tested
Best Regards,
Giang Do
On 17/09/2015 17:46, Vu Minh Nguyen wrote:
> 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