summaryrefslogtreecommitdiff
path: root/test/decoders/stratum/plugin_test_main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/decoders/stratum/plugin_test_main.cpp')
-rw-r--r--test/decoders/stratum/plugin_test_main.cpp135
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;
+}