diff options
Diffstat (limited to 'test/decoders/stratum/plugin_test_main.cpp')
| -rw-r--r-- | test/decoders/stratum/plugin_test_main.cpp | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/test/decoders/stratum/plugin_test_main.cpp b/test/decoders/stratum/plugin_test_main.cpp new file mode 100644 index 0000000..8f3d996 --- /dev/null +++ b/test/decoders/stratum/plugin_test_main.cpp @@ -0,0 +1,135 @@ +#include "cJSON.h" +#include <gtest/gtest.h> +#include <unistd.h> +#include <stdio.h> +#include <assert.h> + +#ifdef __cplusplus +extern "C" +{ +#endif +#include "stellar/stellar.h" +#ifdef __cplusplus +} +#endif + +// #define IGNORE_PRINTF +#ifdef IGNORE_PRINTF +#define printf(fmt, ...) (0) +#endif +static cJSON *g_test_result_root = NULL; +static cJSON *g_load_result_root = NULL; +static const char *result_json_path = NULL; + +extern "C" int commit_test_result_json(cJSON *node, const char *name) +{ + (void)name; + if (g_test_result_root) + { + // cJSON_AddItemToObject(g_test_result_root, name, node); + // cJSON_AddStringToObject(node, "name", name); + cJSON_AddItemToArray(g_test_result_root, node); + return 0; + } + return -1; +} + +static cJSON *load_result_from_jsonfile(const char *json_path) +{ + if (json_path == NULL) + return NULL; + + long file_len = 0; + char *file_content = NULL; + FILE *fp = NULL; + + fp = fopen(json_path, "r+"); + if (NULL == fp) + { + return NULL; + } + fseek(fp, 0, SEEK_END); + file_len = ftell(fp); + fseek(fp, 0, SEEK_SET); + if (file_len == 0) + { + fclose(fp); + return NULL; + } + file_content = (char *)malloc(file_len + 1); + fread(file_content, file_len, 1, fp); + file_content[file_len] = '\0'; + cJSON *load = cJSON_Parse(file_content); + free(file_content); + fclose(fp); + + return load; +} + +TEST(PROTOCOL, compare_result_json) +{ + EXPECT_EQ(cJSON_GetArraySize(g_test_result_root), cJSON_GetArraySize(g_load_result_root)); + int ret = cJSON_Compare(g_test_result_root, g_load_result_root, 0); + EXPECT_EQ(1, ret); + + if (ret != 1) + { + char *load_json_str = cJSON_Print(g_load_result_root); + printf("LOAD Raw:\n%s\n", load_json_str); + free(load_json_str); + char *result_json_str = cJSON_Print(g_test_result_root); + printf("TEST Raw:\n%s\n", result_json_str); + free(result_json_str); + + cJSON *t_load = g_load_result_root->child, *t_test = g_test_result_root->child; + while (t_load != NULL) + { + ret = cJSON_Compare(t_load, t_test, 0); + if (ret != 1) + { + load_json_str = cJSON_Print(t_load); + printf("LOAD Diff:\n%s\n", load_json_str); + free(load_json_str); + result_json_str = cJSON_Print(t_test); + printf("TEST Diff:\n%s\n", result_json_str); + free(result_json_str); + goto fail; + } + t_load = t_load->next; + t_test = t_test->next; + } + } + cJSON_Delete(g_load_result_root); + cJSON_Delete(g_test_result_root); + return; +fail: + cJSON_Delete(g_load_result_root); + cJSON_Delete(g_test_result_root); + return; +} + +int main(int argc, char *argv[]) +{ + int ret = 0; + if (argc < 2) + { + printf("Usage: %s <result_json_path>\n", argv[0]); + result_json_path = NULL; + } + else + { + result_json_path = argv[1]; + g_test_result_root = cJSON_CreateArray(); + g_load_result_root = load_result_from_jsonfile(result_json_path); + assert(g_load_result_root != NULL && g_test_result_root != NULL); + } + ::testing::InitGoogleTest(&argc, argv); + struct stellar *st = stellar_new("./conf/stellar.toml", "./plugin/spec.toml", "./conf/log.toml"); + stellar_run(st); + if (result_json_path != NULL) + { + ret = RUN_ALL_TESTS(); + } + stellar_free(st); + return ret; +} |
