void setUp(void) { lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES; /* create. */ ret = lagopus_dstring_create(&ds); TEST_ASSERT_EQUAL_MESSAGE(LAGOPUS_RESULT_OK, ret, "lagopus_dstring_create error."); TEST_ASSERT_NOT_EQUAL_MESSAGE(NULL, ds, "dstring is null."); ret = lagopus_dstring_create(&ds2); TEST_ASSERT_EQUAL_MESSAGE(LAGOPUS_RESULT_OK, ret, "lagopus_dstring_create error."); TEST_ASSERT_NOT_EQUAL_MESSAGE(NULL, ds2, "dstring is null."); }
void test_lagopus_dstring_create_null(void) { lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES; /* create */ ret = lagopus_dstring_create(NULL); TEST_ASSERT_EQUAL_MESSAGE(LAGOPUS_RESULT_INVALID_ARGS, ret, "lagopus_dstring_create error(NULL)."); }
int main(int argc, const char *const argv[]) { lagopus_result_t r = LAGOPUS_RESULT_ANY_FAILURES; const char *file = argv[1]; (void)argc; if ((r = datastore_register_configurator(MY_CONF_NAME)) == LAGOPUS_RESULT_OK) { lagopus_dstring_t ds; char *str = NULL; (void)lagopus_dstring_create(&ds); if (IS_VALID_STRING(file) == true) { r = datastore_interp_eval_file(&s_interp, MY_CONF_NAME, file, &ds); } else { while ((r = datastore_interp_eval_fd(&s_interp, MY_CONF_NAME, stdin, stdout, false, &ds)) == LAGOPUS_RESULT_OK) { lagopus_dstring_clear(&ds); } } if (r != LAGOPUS_RESULT_OK) { lagopus_perror(r); } (void)lagopus_dstring_str_get(&ds, &str); if (IS_VALID_STRING(str) == true) { fprintf(stdout, "%s", str); } free((void *)str); } else { lagopus_perror(r); } datastore_unregister_configurator(MY_CONF_NAME); return (r == LAGOPUS_RESULT_OK) ? 0 : 1; }
static inline lagopus_result_t s_parse_begin_show(lagopus_dstring_t *result) { lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES; lagopus_dstring_t show_result = NULL; char *str = NULL; /* show. */ if ((ret = lagopus_dstring_create(&show_result)) == LAGOPUS_RESULT_OK) { if ((ret = lagopus_dstring_appendf(&show_result, "{")) != LAGOPUS_RESULT_OK) { lagopus_perror(ret); goto done; } if ((ret = datastore_json_string_append( &show_result, ATTR_NAME_GET(opt_strs, OPT_TMP_DIR), save_tmp_dir, false)) != LAGOPUS_RESULT_OK) { lagopus_perror(ret); goto done; } if ((ret = lagopus_dstring_appendf(&show_result, "}")) != LAGOPUS_RESULT_OK) { lagopus_perror(ret); goto done; } ret = lagopus_dstring_str_get(&show_result, &str); if (ret == LAGOPUS_RESULT_OK) { ret = datastore_json_result_set(result, LAGOPUS_RESULT_OK, str); } } else { lagopus_perror(ret); } done: free(str); lagopus_dstring_destroy(&show_result); return ret; }
lagopus_result_t cmd_dump_main(lagopus_thread_t *thd, datastore_interp_t *iptr, void *conf, void *stream_out, datastore_printf_proc_t printf_proc, datastore_config_type_t ftype, char *file_name, cmd_dump_proc_t dump_proc) { lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES; lagopus_dstring_t result = NULL; FILE *fp = NULL; mode_t old_mask; int fd; if (thd != NULL && iptr != NULL && conf != NULL && stream_out !=NULL && printf_proc != NULL && file_name != NULL) { /* start : sending large data. */ if (ftype == DATASTORE_CONFIG_TYPE_STREAM_SESSION) { if ((ret = datastore_interp_blocking_session_set( iptr, (struct session *) stream_out, thd)) != LAGOPUS_RESULT_OK) { lagopus_perror(ret); goto done; } } if ((ret = lagopus_dstring_create(&result)) != LAGOPUS_RESULT_OK) { lagopus_perror(ret); goto done; } old_mask = umask(S_IRUSR | S_IWUSR); fd = mkstemp(file_name); (void) umask(old_mask); if (fd >= 0) { if ((fp = fdopen(fd, "w+")) != NULL) { unlink(file_name); ret = dump_proc(iptr, conf, fp, stream_out, printf_proc, &result); if (ret != LAGOPUS_RESULT_OK) { lagopus_perror(ret); } fclose(fp); } else { close(fd); ret = LAGOPUS_RESULT_POSIX_API_ERROR; lagopus_perror(ret); } } else { ret = LAGOPUS_RESULT_POSIX_API_ERROR; lagopus_perror(ret); } done: lagopus_dstring_destroy(&result); /* end : sending large data. */ if (ftype == DATASTORE_CONFIG_TYPE_STREAM_SESSION) { datastore_interp_blocking_session_unset( iptr,(struct session *) stream_out); } } else { ret = LAGOPUS_RESULT_INVALID_ARGS; lagopus_perror(ret); } return ret; }
STATIC lagopus_result_t flow_cmd_parse(datastore_interp_t *iptr, datastore_interp_state_t state, size_t argc, const char *const argv[], lagopus_hashmap_t *hptr, datastore_update_proc_t u_proc, datastore_enable_proc_t e_proc, datastore_serialize_proc_t s_proc, datastore_destroy_proc_t d_proc, lagopus_dstring_t *result) { lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES; lagopus_result_t ret_for_json = LAGOPUS_RESULT_ANY_FAILURES; size_t i; void *sub_cmd_proc; char *name = NULL; char *fullname = NULL; char *str = NULL; flow_conf_t conf = {NULL, OFPTT_ALL}; configs_t out_configs = {false, false}; lagopus_dstring_t conf_result = NULL; (void) u_proc; (void) e_proc; (void) s_proc; (void) d_proc; for (i = 0; i < argc; i++) { lagopus_msg_debug(1, "argv[" PFSZS(4, u) "]:\t'%s'\n", i, argv[i]); } if (iptr != NULL && argv != NULL && result != NULL) { if ((ret = lagopus_dstring_create(&conf_result)) == LAGOPUS_RESULT_OK) { argv++; if (IS_VALID_STRING(*argv) == true) { if ((ret = lagopus_hashmap_find( &sub_cmd_not_name_table, (void *)(*argv), &sub_cmd_proc)) == LAGOPUS_RESULT_OK) { /* parse sub cmd. */ if (sub_cmd_proc != NULL) { ret_for_json = ((sub_cmd_proc_t) sub_cmd_proc)(iptr, state, argc, argv, NULL, hptr, u_proc, (void *) &out_configs, result); } } if (ret == LAGOPUS_RESULT_NOT_FOUND && ret_for_json != LAGOPUS_RESULT_OK) { if ((ret = lagopus_str_unescape(*argv, "\"'", &name)) < 0) { goto done; } else { argv++; if ((ret = namespace_get_fullname(name, &fullname)) == LAGOPUS_RESULT_OK) { if (IS_VALID_STRING(*argv) == true) { if ((ret = lagopus_hashmap_find( &sub_cmd_table, (void *)(*argv), &sub_cmd_proc)) == LAGOPUS_RESULT_OK) { /* parse sub cmd. */ if (sub_cmd_proc != NULL) { ret_for_json = ((sub_cmd_proc_t) sub_cmd_proc)(iptr, state, argc, argv, fullname, hptr, u_proc, (void *) &out_configs, result); } else { ret = LAGOPUS_RESULT_NOT_FOUND; lagopus_perror(ret); goto done; } } else if (ret == LAGOPUS_RESULT_NOT_FOUND) { /* parse dump cmd. */ ret_for_json = dump_sub_cmd_parse(iptr, argv, fullname, &conf, &out_configs, result); } else { ret_for_json = datastore_json_result_string_setf( result, LAGOPUS_RESULT_INVALID_ARGS, "sub_cmd = %s.", *argv); } } else { /* parse dump cmd. */ ret_for_json = dump_sub_cmd_parse(iptr, argv, fullname, &conf, &out_configs, result); } } else { ret_for_json = datastore_json_result_string_setf( result, ret, "Can't get fullname %s.", name); } } } } else { /* parse dump all cmd. */ ret_for_json = dump_sub_cmd_parse(iptr, argv, NULL, &conf, &out_configs, result); } /* create jsno for LAGOPUS_RESULT_OK. */ if (ret_for_json == LAGOPUS_RESULT_OK && out_configs.is_dump == false) { ret = lagopus_dstring_str_get(result, &str); if (ret != LAGOPUS_RESULT_OK) { goto done; } if (IS_VALID_STRING(str) == true) { ret = datastore_json_result_set(result, LAGOPUS_RESULT_OK, str); } else { ret = datastore_json_result_set(result, LAGOPUS_RESULT_OK, NULL); } } else { ret = ret_for_json; } } done: /* free. */ free(name); free(fullname); free(str); lagopus_dstring_destroy(&conf_result); } else { ret = LAGOPUS_RESULT_INVALID_ARGS; } return ret; }
static bool queue_conf_iterate(void *key, void *val, lagopus_hashentry_t he, void *arg) { lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES; lagopus_dstring_t ds; char *prefix = NULL; size_t len = 0; bool result = false; char *fullname = (char *)key; queue_conf_iter_ctx_t *ctx = (queue_conf_iter_ctx_t *)arg; (void)he; if (((queue_conf_t *) val)->is_destroying == false) { if (ctx->m_namespace == NULL) { if (ctx->m_n_configs < ctx->m_max) { ctx->m_configs[ctx->m_n_configs++] = (queue_conf_t *)val; result = true; } else { result = false; } } else { ret = lagopus_dstring_create(&ds); if (ret == LAGOPUS_RESULT_OK) { if (ctx->m_namespace[0] == '\0') { ret = lagopus_dstring_appendf(&ds, "%s", NAMESPACE_DELIMITER); } else { ret = lagopus_dstring_appendf(&ds, "%s%s", ctx->m_namespace, NAMESPACE_DELIMITER); } if (ret == LAGOPUS_RESULT_OK) { ret = lagopus_dstring_str_get(&ds, &prefix); if (ret == LAGOPUS_RESULT_OK) { len = strlen(prefix); if (ctx->m_n_configs < ctx->m_max && strncmp(fullname, prefix, len) == 0) { ctx->m_configs[ctx->m_n_configs++] = (queue_conf_t *)val; } result = true; } else { lagopus_msg_warning("dstring get failed.\n"); result = false; } } else { lagopus_msg_warning("dstring append failed.\n"); result = false; } } else { lagopus_msg_warning("dstring create failed.\n"); result = false; } free((void *) prefix); (void)lagopus_dstring_clear(&ds); (void)lagopus_dstring_destroy(&ds); } } else { /* skip destroying conf.*/ result = true; } return result; }