diff --git a/.gitmodules b/.gitmodules
index eb0b9c6d2dbce279b64269e4fc93f3cbc46e015a..8b04d9fd2831a3b32d620c533a80f6d226f26ba3 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 b3defb020eb9f78c7307ae330916b973cec13992..a6dc514e02b929f142d8a779357d2151c0d93f0b 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 007888ac133f91659533c2a3949d5df5efabd3f3..f5eacb968a4ee36eb215ea7c5061b154a5d32a0a 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 811a0685b4150a2576810bf424e07b625994126a..11bb25f6c77e6018f4c47060da0e3a6ce6fa44cf 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 0000000000000000000000000000000000000000..e1e3b653959dcecd6e66c38f17c9b366e73e741b
--- /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 0000000000000000000000000000000000000000..b879104be4affe0f8b32198a30249c7b900dd00b
--- /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 0000000000000000000000000000000000000000..3c7901c9a33340c7d02530ba0efa0f7b93186582
--- /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 0000000000000000000000000000000000000000..c6580b9c49f79e0cd6f8dff3465a91d7aefa0428
--- /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 0000000000000000000000000000000000000000..502b770bfbb20ed3149902a130048cfb1fa0cbf3
--- /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();
+}