示例#1
0
void
test_is_readable(void) {
  const char *readable_file_path = LAGOPUS_LOAD_CMD_TEST_FILE;
  const char *unreadable_file_path = LAGOPUS_LOAD_CMD_TEST_FILE;

  lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES;

  (void)remove_file(LAGOPUS_LOAD_CMD_TEST_FILE);
  (void)create_file(LAGOPUS_LOAD_CMD_TEST_FILE);
  ret = s_is_readable(readable_file_path);
  (void)remove_file(LAGOPUS_LOAD_CMD_TEST_FILE);
  TEST_ASSERT_EQUAL(LAGOPUS_RESULT_OK, ret);

  (void)create_file(LAGOPUS_LOAD_CMD_TEST_FILE);
  (void)chmod(LAGOPUS_LOAD_CMD_TEST_FILE, 0);
  ret = s_is_readable(unreadable_file_path);
  (void)remove_file(LAGOPUS_LOAD_CMD_TEST_FILE);
  TEST_ASSERT_EQUAL(LAGOPUS_RESULT_INVALID_ARGS, ret);
}
示例#2
0
static inline lagopus_result_t
s_parse_load(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;
  size_t i;
  const char *cname = NULL;
  char *filepath = NULL;

  (void)state;
  (void)argc;
  (void)hptr;
  (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]);
  }

  argv++;

  if (IS_VALID_STRING(*argv) == false) {
    ret = datastore_json_result_set(result,
                                    LAGOPUS_RESULT_OK,
                                    NULL);
  } else {
    if (IS_VALID_STRING(*argv) == true) {
      if ((ret = lagopus_str_unescape(*argv, "\"'", &filepath)) > 0) {
        if (s_is_readable(filepath) == LAGOPUS_RESULT_OK) {
          ret = datastore_interp_get_current_configurater(iptr, &cname);
          if (ret == LAGOPUS_RESULT_OK && IS_VALID_STRING(cname) == true) {
            ret = datastore_interp_load_file(iptr, cname, filepath, result);
            if (ret == LAGOPUS_RESULT_OK) {
              ret = datastore_json_result_set(result, ret, NULL);
            }
          } else {
            ret = datastore_json_result_string_setf(result,
                                                    ret,
                                                    CMD_ERR_MSG_LOAD_FAILED,
                                                    "internal error.");
          }
        } else {
          ret = datastore_json_result_string_setf(result,
                                                  LAGOPUS_RESULT_INVALID_ARGS,
                                                  CMD_ERR_MSG_UNREADABLE,
                                                  filepath);
        }
      } else {
        ret = datastore_json_result_string_setf(result,
                                                LAGOPUS_RESULT_INVALID_ARGS,
                                                CMD_ERR_MSG_INVALID_OPT_VALUE,
                                                *argv);
      }
    } else {
      ret = datastore_json_result_string_setf(result,
                                              LAGOPUS_RESULT_INVALID_ARGS,
                                              CMD_ERR_MSG_INVALID_OPT,
                                              *argv);
    }
  }

  free((void *) filepath);
  return ret;
}