From 822337c7e40abe1df813d44fad0f8c62ba0b9606 Mon Sep 17 00:00:00 2001
From: armatusmiles <akurotych@gmail.com>
Date: Tue, 28 Aug 2018 20:45:02 +0300
Subject: [PATCH] [+] test module, dap_traffic_track_test

---
 .gitmodules                   |  3 +++
 CMakeLists.txt                |  5 +++++
 dap_traffic_track.c           | 10 +++++++---
 libdap                        |  2 +-
 test/CMakeLists.txt           | 18 ++++++++++++++++++
 test/dap_traffic_track_test.c | 36 +++++++++++++++++++++++++++++++++++
 test/dap_traffic_track_test.h |  6 ++++++
 test/libdap-test              |  1 +
 test/main.c                   |  8 ++++++++
 9 files changed, 85 insertions(+), 4 deletions(-)
 create mode 100644 test/CMakeLists.txt
 create mode 100644 test/dap_traffic_track_test.c
 create mode 100644 test/dap_traffic_track_test.h
 create mode 160000 test/libdap-test
 create mode 100644 test/main.c

diff --git a/.gitmodules b/.gitmodules
index eb0b9c6..8b04d9f 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +1,6 @@
 [submodule "libdap"]
 	path = libdap
 	url = https://github.com/kelvinblockchain/libdap
+[submodule "test/libdap-test"]
+	path = test/libdap-test
+	url = https://github.com/kelvinblockchain/libdap-test
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b3defb0..a6dc514 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -3,6 +3,11 @@ project (dap_core_server C)
 
 add_subdirectory(libdap)
 
+if(BUILD_DAP_CORE_SERVER_TESTS)
+    enable_testing()
+    add_subdirectory(test)
+endif()
+
 file(GLOB SOURCES *.c)
 file(GLOB HEADERS *.h)
 
diff --git a/dap_traffic_track.c b/dap_traffic_track.c
index 007888a..f5eacb9 100644
--- a/dap_traffic_track.c
+++ b/dap_traffic_track.c
@@ -3,14 +3,18 @@
 
 #define LOG_TAG "dap_traffic_track"
 
-static dap_traffic_callback_t callback;
+static dap_traffic_callback_t callback = NULL;
 static dap_server_client_t * server_clients;
 static ev_timer timeout_watcher;
 static struct ev_loop *loop;
 
 static void timeout_cb()
 {
-    log_it(L_DEBUG, "timeout_cb CB");
+    if(callback != NULL) {
+        callback(NULL, NULL);
+        return;
+    }
+    log_it(L_WARNING, "Callback is NULL!");
 }
 
 void dap_traffic_track_init(dap_server_client_t * clients,
@@ -26,7 +30,7 @@ void dap_traffic_track_init(dap_server_client_t * clients,
 
 void dap_traffic_track_deinit()
 {
-    ev_timer_stop (loop, &timeout_watcher);
+    ev_timer_stop(loop, &timeout_watcher);
     log_it(L_NOTICE, "Deinitialized traffic track module");
 }
 
diff --git a/libdap b/libdap
index 811a068..11bb25f 160000
--- a/libdap
+++ b/libdap
@@ -1 +1 @@
-Subproject commit 811a0685b4150a2576810bf424e07b625994126a
+Subproject commit 11bb25f6c77e6018f4c47060da0e3a6ce6fa44cf
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
new file mode 100644
index 0000000..e1e3b65
--- /dev/null
+++ b/test/CMakeLists.txt
@@ -0,0 +1,18 @@
+if(TARGET core_server_test)
+    return() # The project has already been built.
+endif()
+project(core_server_test)
+
+add_subdirectory(libdap-test)
+
+file(GLOB SOURCES *.c)
+file(GLOB HEADERS *.h)
+
+add_executable(${PROJECT_NAME} ${SOURCES} ${HEADERS})
+
+target_link_libraries(${PROJECT_NAME} dap_test dap_core_server ev)
+
+add_test(
+    NAME core_server_test
+    COMMAND core_server_test
+)
diff --git a/test/dap_traffic_track_test.c b/test/dap_traffic_track_test.c
new file mode 100644
index 0000000..b879104
--- /dev/null
+++ b/test/dap_traffic_track_test.c
@@ -0,0 +1,36 @@
+#include "dap_traffic_track_test.h"
+#include <ev.h>
+
+static struct ev_loop *loop;
+#define LOG_TAG "DTTT"
+
+static void success_callback() {
+   // this causes the innermost ev_run to stop iterating
+   dap_pass_msg("Call callback function");
+   ev_break (EV_A_ EVBREAK_ONE);
+}
+
+static void error_callback() {
+    log_it(L_ERROR, "ERROR CB");
+    dap_fail("Error callback call, success_callback has no been called");
+}
+
+static void test_callback() {
+    time_t timeout_sucess = 1;
+    loop = EV_DEFAULT;
+    dap_traffic_track_init(NULL, 1/* timeout sucess_callback*/);
+    dap_traffic_set_callback(success_callback);
+
+    /* Add error watcher*/
+    static ev_timer timeout_error_watcher;
+    ev_init(&timeout_error_watcher, error_callback);
+    ev_timer_init (&timeout_error_watcher, error_callback, timeout_sucess * 2, 0.);
+    ev_timer_start (loop, &timeout_error_watcher);
+    ev_run (loop, 0);
+}
+
+
+void dap_traffic_track_tests_run(void) {
+    dap_print_module_name("traffic_track");
+    test_callback();
+}
diff --git a/test/dap_traffic_track_test.h b/test/dap_traffic_track_test.h
new file mode 100644
index 0000000..3c7901c
--- /dev/null
+++ b/test/dap_traffic_track_test.h
@@ -0,0 +1,6 @@
+#pragma once
+#include "dap_test.h"
+#include "dap_traffic_track.h"
+#include "dap_common.h"
+
+extern void dap_traffic_track_tests_run(void);
diff --git a/test/libdap-test b/test/libdap-test
new file mode 160000
index 0000000..c6580b9
--- /dev/null
+++ b/test/libdap-test
@@ -0,0 +1 @@
+Subproject commit c6580b9c49f79e0cd6f8dff3465a91d7aefa0428
diff --git a/test/main.c b/test/main.c
new file mode 100644
index 0000000..502b770
--- /dev/null
+++ b/test/main.c
@@ -0,0 +1,8 @@
+#include "dap_common.h"
+#include "dap_traffic_track_test.h"
+
+int main(void) {
+    // switch off debug info from library
+    set_log_level(L_CRITICAL);
+    dap_traffic_track_tests_run();
+}
-- 
GitLab