void test_lagopus_dstring_clear_null(void) { lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES; lagopus_dstring_t ds_null = NULL; ret = lagopus_dstring_clear(NULL); TEST_ASSERT_EQUAL_MESSAGE(LAGOPUS_RESULT_INVALID_ARGS, ret, "lagopus_dstring_clear error."); ret = lagopus_dstring_clear(&ds_null); TEST_ASSERT_EQUAL_MESSAGE(LAGOPUS_RESULT_INVALID_ARGS, ret, "lagopus_dstring_clear error."); }
void test_agent_cmd_parse_serialize(void) { lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES; datastore_interp_state_t state = DATASTORE_INTERP_STATE_AUTO_COMMIT; char *str = NULL; const char *argv1[] = {"agent", "-channelq-size", "2000", "-channelq-max-batches", "3000", NULL}; const char test_str1[] = "{\"ret\":\"OK\"}"; const char serialize_str1[] = "agent " "-channelq-size 2000 " "-channelq-max-batches 3000\n\n"; /* set */ TEST_CMD_PARSE(ret, LAGOPUS_RESULT_OK, s_parse_agent, &interp, state, ARGV_SIZE(argv1), argv1, &tbl, NULL, &ds, str, test_str1); lagopus_dstring_clear(&ds); /* serialize */ ret = agent_cmd_serialize(&ds); TEST_ASSERT_EQUAL_MESSAGE(LAGOPUS_RESULT_OK, ret, "agent_cmd_serialize error."); TEST_DSTRING_NO_JSON(ret, &ds, str, serialize_str1, true); }
void test_mactable_cmd_dump_not_found(void) { #ifdef HYBRID lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES; char *str = NULL; const char format_str[] = "{\"name\":\":hoge\",\n" "\"mactable\":[{"; char test_str[1000]; uint8_t eth[6]; uint32_t port = 1; /* add mac entries */ eth[0] = 0xaa; eth[1] = 0xbb; eth[2] = 0xcc; eth[3] = 0xdd; eth[4] = 0xee; eth[5] = 0xff; ret = dp_bridge_mactable_entry_set(bridge_name, eth, port); TEST_ASSERT_EQUAL(ret, LAGOPUS_RESULT_OK); sprintf(test_str, format_str); /* test target. */ (void) lagopus_dstring_clear(&ds); ret = dump_bridge_mactable(":hoge", is_bridge_first, &ds); TEST_ASSERT_EQUAL(ret, LAGOPUS_RESULT_NOT_FOUND); TEST_DSTRING(ret, &ds, str, test_str, false); #else /* HYBRID */ TEST_IGNORE_MESSAGE("HYBRID is not defined."); #endif /* HYBRID */ }
void test_mactable_cmd_dump_02(void) { #ifdef HYBRID lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES; char *str = NULL; const char format_str[] = "{\"name\":\":br0\",\n" "\"mactable\":[{\"num_entries\":2,\n" "\"max_entries\":8192,\n" "\"ageing_time\":300,\n" "\"entries\":[{\"mac_addr\":\"1a:2b:3c:4d:5e:6f\",\n" "\"port_no\":2,\n" "\"update_time\":%ld,\n" "\"address_type\":\"static\"},\n" "{\"mac_addr\":\"aa:bb:cc:dd:ee:ff\",\n" "\"port_no\":1,\n" "\"update_time\":%ld,\n" "\"address_type\":\"static\"}]}]}"; char test_str[1000]; uint8_t eth1[6]; uint8_t eth2[6]; uint32_t port1 = 1; uint32_t port2 = 2; struct timespec now; struct bridge *bridge; /* add mac entries */ eth1[0] = 0xaa; eth1[1] = 0xbb; eth1[2] = 0xcc; eth1[3] = 0xdd; eth1[4] = 0xee; eth1[5] = 0xff; eth2[0] = 0x1a; eth2[1] = 0x2b; eth2[2] = 0x3c; eth2[3] = 0x4d; eth2[4] = 0x5e; eth2[5] = 0x6f; /* preparation */ ret = dp_bridge_mactable_entry_set(bridge_name, eth1, port1); TEST_ASSERT_EQUAL(ret, LAGOPUS_RESULT_OK); ret = dp_bridge_mactable_entry_set(bridge_name, eth2, port2); TEST_ASSERT_EQUAL(ret, LAGOPUS_RESULT_OK); now = get_current_time(); sprintf(test_str, format_str, now.tv_sec, now.tv_sec); bridge = dp_bridge_lookup(bridge_name); mactable_update(&bridge->mactable); /* test target. */ (void) lagopus_dstring_clear(&ds); ret = dump_bridge_mactable(bridge_name, is_bridge_first, &ds); TEST_ASSERT_EQUAL(ret, LAGOPUS_RESULT_OK); TEST_DSTRING(ret, &ds, str, test_str, true); #else /* HYBRID */ TEST_IGNORE_MESSAGE("HYBRID is not defined."); #endif /* HYBRID */ }
void test_lagopus_dstring_concat_clear_srt_get(void) { lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES; char *str = NULL; char test_str1[] = "hoge foo\n"; char test_str2[] = "bas\n"; char test_str3[] = "hoge foo\nbas\n"; char test_str4[] = "\0"; char test_str5[] = "1234 5678\n"; char test_str6[] = "hoge foo\nbas\n1234 5678\n"; /* append ds. */ ret = lagopus_dstring_appendf(&ds, "%s foo\n", "hoge"); TEST_ASSERT_EQUAL_MESSAGE(LAGOPUS_RESULT_OK, ret, "lagopus_dstring_appendf error."); TEST_DSTRING(ret, &ds, str, test_str1); /* append ds2. */ ret = lagopus_dstring_appendf(&ds2, "%s\n", "bas"); TEST_ASSERT_EQUAL_MESSAGE(LAGOPUS_RESULT_OK, ret, "lagopus_dstring_appendf error."); TEST_DSTRING(ret, &ds2, str, test_str2); /* concat (ds + ds2). */ ret = lagopus_dstring_concat(&ds, &ds2); TEST_ASSERT_EQUAL_MESSAGE(LAGOPUS_RESULT_OK, ret, "lagopus_dstring_concat error."); TEST_DSTRING(ret, &ds, str, test_str3); /* check const ds2. */ TEST_DSTRING(ret, &ds2, str, test_str2); /* clear ds2. */ ret = lagopus_dstring_clear(&ds2); TEST_ASSERT_EQUAL_MESSAGE(LAGOPUS_RESULT_OK, ret, "lagopus_dstring_clear error."); TEST_DSTRING(ret, &ds2, str, test_str4); /* append ds2. */ ret = lagopus_dstring_appendf(&ds2, "1234 %d\n", 5678); TEST_ASSERT_EQUAL_MESSAGE(LAGOPUS_RESULT_OK, ret, "lagopus_dstring_appendf error."); TEST_DSTRING(ret, &ds2, str, test_str5); /* concat (ds + ds2).*/ ret = lagopus_dstring_concat(&ds, &ds2); TEST_ASSERT_EQUAL_MESSAGE(LAGOPUS_RESULT_OK, ret, "lagopus_dstring_concat error."); TEST_DSTRING(ret, &ds, str, test_str6); /* check const ds2. */ TEST_DSTRING(ret, &ds2, str, test_str5); }
void test_lagopus_dstring_len_get(void) { lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES; char *str = NULL; char test_str1[] = "1 2\n"; char test_str2[] = "1 2\na b\n"; char test_str3[] = "\0"; char test_str4[] = "98 76\n"; /* check len. */ ret = lagopus_dstring_len_get(&ds); TEST_ASSERT_EQUAL_MESSAGE(0, ret, "lagopus_dstring_len_get error."); /* append int. */ ret = lagopus_dstring_appendf(&ds, "%d 2\n", 1); TEST_ASSERT_EQUAL_MESSAGE(LAGOPUS_RESULT_OK, ret, "lagopus_dstring_appendf error."); TEST_DSTRING(ret, &ds, str, test_str1); ret = lagopus_dstring_len_get(&ds); TEST_ASSERT_EQUAL_MESSAGE(4, ret, "lagopus_dstring_len_get error."); /* append str. */ ret = lagopus_dstring_appendf(&ds, "a %s\n", "b"); TEST_ASSERT_EQUAL_MESSAGE(LAGOPUS_RESULT_OK, ret, "lagopus_dstring_appendf error."); TEST_DSTRING(ret, &ds, str, test_str2); ret = lagopus_dstring_len_get(&ds); TEST_ASSERT_EQUAL_MESSAGE(4 + 4, ret, "lagopus_dstring_len_get error."); /* clear. */ ret = lagopus_dstring_clear(&ds); TEST_ASSERT_EQUAL_MESSAGE(LAGOPUS_RESULT_OK, ret, "lagopus_dstring_clear error."); TEST_DSTRING(ret, &ds, str, test_str3); ret = lagopus_dstring_len_get(&ds); TEST_ASSERT_EQUAL_MESSAGE(0, ret, "lagopus_dstring_len_get error."); /* append int. */ ret = lagopus_dstring_appendf(&ds, "%d 76\n", 98); TEST_ASSERT_EQUAL_MESSAGE(LAGOPUS_RESULT_OK, ret, "lagopus_dstring_appendf error."); TEST_DSTRING(ret, &ds, str, test_str4); ret = lagopus_dstring_len_get(&ds); TEST_ASSERT_EQUAL_MESSAGE(6, ret, "lagopus_dstring_len_get error."); }
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; }
void test_mactable_cmd_dump_no_entry(void) { #ifdef HYBRID lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES; char *str = NULL; const char format_str[] = "{\"name\":\":br0\",\n" "\"mactable\":[{\"num_entries\":0,\n" "\"max_entries\":8192,\n" "\"ageing_time\":300,\n" "\"entries\":["; char test_str[1000]; sprintf(test_str, format_str); /* test target. */ (void) lagopus_dstring_clear(&ds); ret = dump_bridge_mactable(bridge_name, is_bridge_first, &ds); TEST_ASSERT_EQUAL(ret, LAGOPUS_RESULT_ANY_FAILURES); TEST_DSTRING(ret, &ds, str, test_str, false); #else /* HYBRID */ TEST_IGNORE_MESSAGE("HYBRID is not defined."); #endif /* HYBRID */ }
void test_lagopus_dstring_insertf_clear_srt_get(void) { lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES; bool empty; char *str = NULL; size_t test_offset1 = 0; char test_str1[] = "1234 5678\n"; size_t test_offset2 = 5; char test_str2[] = "1234 hoge foo\n5678\n"; char test_str3[] = "\0"; size_t test_offset4 = 0; char test_str4[] = "9876 5432\n"; size_t test_offset5 = 5; char test_str5[] = "9876 hoge foo bar\n5432\n"; size_t test_offset6 = 0; char test_str6[] = "bas\n9876 hoge foo bar\n5432\n"; size_t test_offset7 = 0; char test_str7[] = "1 2\nbas\n9876 hoge foo bar\n5432\n"; size_t test_offset8 = 31; char test_str8[] = "1 2\nbas\n9876 hoge foo bar\n5432\n3 4\n"; size_t test_offset9 = 36; /* check empty. */ empty = lagopus_dstring_empty(&ds); TEST_ASSERT_EQUAL_MESSAGE(true, empty, "empty error."); /* insert int. */ ret = lagopus_dstring_insertf(&ds, test_offset1, "%d 5678\n", 1234); TEST_ASSERT_EQUAL_MESSAGE(LAGOPUS_RESULT_OK, ret, "lagopus_dstring_insertf error."); TEST_DSTRING(ret, &ds, str, test_str1); empty = lagopus_dstring_empty(&ds); TEST_ASSERT_EQUAL_MESSAGE(false, empty, "empty error."); /* insert str. */ ret = lagopus_dstring_insertf(&ds, test_offset2, "hoge %s\n", "foo"); TEST_ASSERT_EQUAL_MESSAGE(LAGOPUS_RESULT_OK, ret, "lagopus_dstring_insertf error."); TEST_DSTRING(ret, &ds, str, test_str2); /* clear. */ ret = lagopus_dstring_clear(&ds); TEST_ASSERT_EQUAL_MESSAGE(LAGOPUS_RESULT_OK, ret, "lagopus_dstring_clear error."); TEST_DSTRING(ret, &ds, str, test_str3); /* insert int. */ ret = lagopus_dstring_insertf(&ds, test_offset4, "%d 5432\n", 9876); TEST_ASSERT_EQUAL_MESSAGE(LAGOPUS_RESULT_OK, ret, "lagopus_dstring_insertf error."); TEST_DSTRING(ret, &ds, str, test_str4); /* insert str. */ ret = lagopus_dstring_insertf(&ds, test_offset5, "hoge %s %s\n", "foo", "bar"); TEST_ASSERT_EQUAL_MESSAGE(LAGOPUS_RESULT_OK, ret, "lagopus_dstring_insertf error."); TEST_DSTRING(ret, &ds, str, test_str5); /* not args */ ret = lagopus_dstring_insertf(&ds, test_offset6, "bas\n"); TEST_ASSERT_EQUAL_MESSAGE(LAGOPUS_RESULT_OK, ret, "lagopus_dstring_insertf error."); TEST_DSTRING(ret, &ds, str, test_str6); /* offset = 0. */ ret = lagopus_dstring_insertf(&ds, test_offset7, "%d 2\n", 1); TEST_ASSERT_EQUAL_MESSAGE(LAGOPUS_RESULT_OK, ret, "lagopus_dstring_insertf error."); TEST_DSTRING(ret, &ds, str, test_str7); /* offset = end. */ ret = lagopus_dstring_insertf(&ds, test_offset8, "%d 4\n", 3); TEST_ASSERT_EQUAL_MESSAGE(LAGOPUS_RESULT_OK, ret, "lagopus_dstring_insertf error."); TEST_DSTRING(ret, &ds, str, test_str8); /* offset = over. */ ret = lagopus_dstring_insertf(&ds, test_offset9, "%d 5\n", 6); TEST_ASSERT_EQUAL_MESSAGE(LAGOPUS_RESULT_INVALID_ARGS, ret, "lagopus_dstring_insertf error."); }
void test_lagopus_dstring_prependf_clear_srt_get(void) { lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES; bool empty; char *str = NULL; char test_str1[] = "1234 5678\n"; char test_str2[] = "hoge foo\n1234 5678\n"; char test_str3[] = "\0"; char test_str4[] = "9876 5432\n"; char test_str5[] = "hoge foo bar\n9876 5432\n"; char test_str6[] = "bas\nhoge foo bar\n9876 5432\n"; /* check empty. */ empty = lagopus_dstring_empty(&ds); TEST_ASSERT_EQUAL_MESSAGE(true, empty, "empty error."); /* prepend int. */ ret = lagopus_dstring_prependf(&ds, "%d 5678\n", 1234); TEST_ASSERT_EQUAL_MESSAGE(LAGOPUS_RESULT_OK, ret, "lagopus_dstring_prependf error."); TEST_DSTRING(ret, &ds, str, test_str1); empty = lagopus_dstring_empty(&ds); TEST_ASSERT_EQUAL_MESSAGE(false, empty, "empty error."); /* prepend str. */ ret = lagopus_dstring_prependf(&ds, "hoge %s\n", "foo"); TEST_ASSERT_EQUAL_MESSAGE(LAGOPUS_RESULT_OK, ret, "lagopus_dstring_prependf error."); TEST_DSTRING(ret, &ds, str, test_str2); /* clear. */ ret = lagopus_dstring_clear(&ds); TEST_ASSERT_EQUAL_MESSAGE(LAGOPUS_RESULT_OK, ret, "lagopus_dstring_clear error."); TEST_DSTRING(ret, &ds, str, test_str3); /* prepend int. */ ret = lagopus_dstring_prependf(&ds, "%d 5432\n", 9876); TEST_ASSERT_EQUAL_MESSAGE(LAGOPUS_RESULT_OK, ret, "lagopus_dstring_prependf error."); TEST_DSTRING(ret, &ds, str, test_str4); /* prepend str. */ ret = lagopus_dstring_prependf(&ds, "hoge %s %s\n", "foo", "bar"); TEST_ASSERT_EQUAL_MESSAGE(LAGOPUS_RESULT_OK, ret, "lagopus_dstring_prependf error."); TEST_DSTRING(ret, &ds, str, test_str5); /* not args. */ ret = lagopus_dstring_prependf(&ds, "bas\n"); TEST_ASSERT_EQUAL_MESSAGE(LAGOPUS_RESULT_OK, ret, "lagopus_dstring_prependf error."); TEST_DSTRING(ret, &ds, str, test_str6); }
static inline lagopus_result_t s_parse_dryrun(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; (void)iptr; (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]); } if (argc == 1) { (void)lagopus_dstring_clear(result); ret = lagopus_dstring_appendf(result, "{\"ret\":\"OK\",\n" "\"data\":{\"dryrun\": "); if (ret == LAGOPUS_RESULT_OK) { if (state == DATASTORE_INTERP_STATE_DRYRUN) { ret = lagopus_dstring_appendf(result, "true}}"); } else { ret = lagopus_dstring_appendf(result, "false}}"); } if (ret != LAGOPUS_RESULT_OK) { ret = datastore_json_result_string_setf(result, LAGOPUS_RESULT_ANY_FAILURES, "dstring append failed."); } } else { ret = datastore_json_result_string_setf(result, LAGOPUS_RESULT_ANY_FAILURES, "dstring append failed."); } } else if (argc == 2) { argv++; if (strcmp(*argv, "begin") == 0) { ret = dryrun_begin(); if (ret != LAGOPUS_RESULT_OK) { ret = datastore_json_result_string_setf(result, ret, "dryrun begin failed."); } } else if (strcmp(*argv, "end") == 0) { ret = dryrun_end(); if (ret != LAGOPUS_RESULT_OK) { ret = datastore_json_result_string_setf(result, ret, "dryrun end failed."); } } else { ret = datastore_json_result_string_setf(result, LAGOPUS_RESULT_INVALID_ARGS, "Unknown option '%s'.", *argv); } if (ret != LAGOPUS_RESULT_DATASTORE_INTERP_ERROR) { ret = datastore_json_result_set(result, ret, NULL); } } else { ret = datastore_json_result_string_setf(result, LAGOPUS_RESULT_INVALID_ARGS, "Unknown option."); } 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; }