From 05de97e45d924b804ff0a4330e9244d086b5f693 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Al=D0=B5x=D0=B0nder=20Lysik=D0=BEv?=
 <alexander.lysikov@demlabs.net>
Date: Mon, 27 May 2019 22:42:07 +0500
Subject: [PATCH] added global_db test

---
 test/CMakeLists.txt       |   2 +-
 test/dap_global_db_test.c | 126 ++++++++++++++++++++++++++++++++++++++
 test/dap_global_db_test.h |   4 ++
 test/main.c               |   5 +-
 4 files changed, 135 insertions(+), 2 deletions(-)
 create mode 100644 test/dap_global_db_test.c
 create mode 100644 test/dap_global_db_test.h

diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 945ebdb98..31c812cf5 100755
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -10,7 +10,7 @@ file(GLOB HEADERS *.h)
 
 add_executable(${PROJECT_NAME} ${SOURCES} ${HEADERS})
 
-target_link_libraries(${PROJECT_NAME} dap_core)
+target_link_libraries(${PROJECT_NAME} dap_core dap_test dap_global_db)
 
 add_test(
     NAME kelvin_node_test
diff --git a/test/dap_global_db_test.c b/test/dap_global_db_test.c
new file mode 100644
index 000000000..4f16b272e
--- /dev/null
+++ b/test/dap_global_db_test.c
@@ -0,0 +1,126 @@
+#include <time.h>
+#include <unistd.h>
+
+#include "dap_common.h"
+#include "dap_strfuncs.h"
+//#include "dap_list.h"
+#include "dap_chain_global_db.h"
+#include "dap_chain_global_db_driver.h"
+#include "dap_global_db_test.h"
+
+#define DB_FILE "./base.sqlite"
+
+static void test_create_db(void)
+{
+    unlink(DB_FILE);
+    int res = dap_db_driver_init("sqlite", DB_FILE);
+    dap_assert_PIF(!res, "Init global_db");
+
+    dap_store_obj_t *l_store_obj = DAP_NEW_Z(dap_store_obj_t);
+    size_t l_store_count = 1;
+    l_store_obj->type = 'a';
+    l_store_obj->key = dap_strdup("key");
+    l_store_obj->group = dap_strdup("section.1");
+    l_store_obj->timestamp = time(NULL);
+    l_store_obj->value_len = rand() % 100;
+    l_store_obj->value = DAP_NEW_SIZE(uint8_t, l_store_obj->value_len);
+    for(size_t i = 0; i < l_store_obj->value_len; i++) {
+        l_store_obj->value[i] = rand();
+    }
+    int ret = dap_db_add(l_store_obj, l_store_count);
+
+    dap_store_obj_t *l_store_obj2 = dap_db_read_data(l_store_obj->group, l_store_obj->key);
+
+    dap_assert_PIF(l_store_obj2, "Read global_db entry");
+
+    // compare l_store_obj and l_store_obj
+    if(l_store_obj->timestamp == l_store_obj2->timestamp &&
+            l_store_obj->value_len == l_store_obj2->value_len &&
+            l_store_obj->value && l_store_obj2->value &&
+            !memcmp(l_store_obj->value, l_store_obj2->value, l_store_obj->value_len)) {
+        dap_assert_PIF(1, "Check read entry");
+    }
+    else {
+        dap_assert_PIF(0, "Check read entry");
+    }
+
+    dap_store_obj_free(l_store_obj, 1);
+    dap_store_obj_free(l_store_obj2, 1);
+    //dap_usleep(5 * DAP_USEC_PER_SEC);
+
+    dap_assert(1, "Test dap_global_db one record");
+
+}
+
+static void test_close_db(void)
+{
+    dap_assert(1, "Test close global_db");
+    dap_chain_global_db_deinit();
+}
+
+static void test_write_db_count(int a_count)
+{
+    //int a_count = 2;
+    dap_store_obj_t *l_store_obj = DAP_NEW_Z_SIZE(dap_store_obj_t, sizeof(dap_store_obj_t) * a_count);
+    size_t l_store_count = 1;
+    for(size_t n = 0; n < a_count; n++) {
+        dap_store_obj_t *l_store_obj_cur = l_store_obj + n;
+        l_store_obj_cur->type = 'a';
+        l_store_obj_cur->key = dap_strdup_printf("key_%d", rand());
+        l_store_obj_cur->group = dap_strdup("section.1");
+        l_store_obj_cur->timestamp = time(NULL);
+        l_store_obj_cur->value_len = 10 + rand() % 100;
+        l_store_obj_cur->value = DAP_NEW_SIZE(uint8_t, l_store_obj_cur->value_len);
+        for(size_t i = 0; i < l_store_obj_cur->value_len; i++) {
+            l_store_obj_cur->value[i] = rand();
+        }
+    }
+    dap_test_msg("Start test write dap_global_db %d record", a_count);
+    int ret = dap_db_add(l_store_obj, a_count);
+
+    dap_test_msg("Read first record");
+    dap_store_obj_t *l_store_obj2 = dap_db_read_data(l_store_obj->group, l_store_obj->key);
+    dap_store_obj_free(l_store_obj2, 1);
+    dap_test_msg("Start test read dap_global_db %d record", a_count);
+    for(size_t n = 1; n < a_count; n++) {
+        dap_store_obj_t *l_store_obj2 = dap_db_read_data(l_store_obj->group, l_store_obj->key);
+        // compare l_store_obj and l_store_obj
+        if(l_store_obj->timestamp == l_store_obj2->timestamp &&
+                l_store_obj->value_len == l_store_obj2->value_len &&
+                l_store_obj->value && l_store_obj2->value &&
+                !memcmp(l_store_obj->value, l_store_obj2->value, l_store_obj->value_len)) {
+            ;
+        }
+        else {
+            dap_assert_PIF(0, "Check read entry");
+        }
+        dap_store_obj_free(l_store_obj2, 1);
+    }
+    dap_assert_PIF(1, "Read global_db entry");
+
+    dap_store_obj_free(l_store_obj, a_count);
+
+    //dap_usleep(5 * DAP_USEC_PER_SEC);
+    dap_assert(1, "Test dap_global_db");
+
+}
+
+void dap_global_db_tests_run(void)
+{
+    dap_print_module_name("dap_global_db");
+
+    unlink(DB_FILE);
+    test_create_db();
+    test_write_db_count(1000000);
+
+//    benchmark_mgs_time("Read and Write in blobal_db 100 times",
+//            benchmark_test_time(test_write_db_count, 100));
+
+//        benchmark_mgs_rate("Read and Write in blobal_db",
+//                benchmark_test_rate(test_write_db_count, 2000));
+
+    dap_usleep(2 * DAP_USEC_PER_SEC);
+    test_close_db();
+
+    dap_assert(1, "Test dap_usleep(0.5 sec.)");
+}
diff --git a/test/dap_global_db_test.h b/test/dap_global_db_test.h
new file mode 100644
index 000000000..00bae493c
--- /dev/null
+++ b/test/dap_global_db_test.h
@@ -0,0 +1,4 @@
+#pragma once
+#include "libdap-test/dap_test.h"
+
+extern void dap_global_db_tests_run(void);
diff --git a/test/main.c b/test/main.c
index d015aec25..65d0a5bac 100755
--- a/test/main.c
+++ b/test/main.c
@@ -1,7 +1,10 @@
+#include "dap_global_db_test.h"
 #include "dap_common.h"
 
+
 int main(void) {
     // switch off debug info from library
-    set_log_level(L_CRITICAL);
+    dap_log_level_set(L_CRITICAL);
+    dap_global_db_tests_run();
     return 0;
 }
-- 
GitLab