tests: add libdlog base unit tests 41/195341/1
authorMichal Bloch <m.bloch@samsung.com>
Tue, 11 Dec 2018 19:33:19 +0000 (20:33 +0100)
committerMichal Bloch <m.bloch@samsung.com>
Wed, 12 Dec 2018 18:50:01 +0000 (19:50 +0100)
Change-Id: I9d489ed607d9917aaf782339b7db700259955ac9
Signed-off-by: Michal Bloch <m.bloch@samsung.com>
Makefile.am
src/libdlog/log.c
src/tests/libdlog_base.c [new file with mode: 0644]

index 3711e52..eebdd31 100644 (file)
@@ -189,6 +189,7 @@ check_PROGRAMS = \
        src/tests/dynamic_config \
        src/tests/libdlog_pipe \
        src/tests/libdlog_android \
+       src/tests/libdlog_base \
        src/tests/filters
 
 check_CFLAGS = $(AM_CFLAGS) -O0 -fprofile-arcs -ftest-coverage
@@ -224,6 +225,10 @@ src_tests_libdlog_android_SOURCES = src/tests/libdlog_android.c src/libdlog/log_
 src_tests_libdlog_android_CFLAGS = $(check_CFLAGS)
 src_tests_libdlog_android_LDFLAGS = $(AM_LDFLAGS) -Wl,--wrap=logger_open_buffer_from_config,--wrap=close,--wrap=writev
 
+src_tests_libdlog_base_SOURCES = src/tests/libdlog_base.c src/libdlog/log.c src/shared/logcommon.c src/shared/logconfig.c
+src_tests_libdlog_base_CFLAGS = $(check_CFLAGS)
+src_tests_libdlog_base_LDFLAGS = $(AM_LDFLAGS) -Wl,--wrap=log_config_read
+
 src_tests_config_SOURCES = src/tests/config.c src/shared/logconfig.c src/shared/logcommon.c
 src_tests_config_CFLAGS = $(check_CFLAGS)
 src_tests_config_LDFLAGS = $(AM_LDFLAGS)
index 7c93a1a..fb499fa 100644 (file)
@@ -70,9 +70,9 @@ static int limiter_apply_to_all_buffers;
  * @param[in] msg The contents of the message.
  * @return DLOG_ERROR_NOT_PERMITTED
  */
-static int __write_to_log_null(log_id_t log_id, log_priority prio, const char *tag, const char *msg)// LCOV_EXCL_LINE
+static int __write_to_log_null(log_id_t log_id, log_priority prio, const char *tag, const char *msg)
 {
-       return DLOG_ERROR_NOT_PERMITTED; // LCOV_EXCL_LINE
+       return DLOG_ERROR_NOT_PERMITTED;
 }
 
 static void __configure_limiter(struct log_config *config)
@@ -173,7 +173,7 @@ static void __configure(void)
        return;
 
 failure:
-       log_config_free(&config); // LCOV_EXCL_LINE
+       log_config_free(&config);
        return;
 }
 
@@ -244,7 +244,6 @@ static int dlog_check_limiter(log_id_t log_id, int prio, const char *tag)
        if (dynamic_config)
                __dynamic_config_update();
 
-       // LCOV_EXCL_START : disabled feature (limiter)
        if (limiter) {
                pthread_mutex_lock(&log_init_lock);
                int should_log = __log_limiter_pass_log(tag, prio);
@@ -258,7 +257,6 @@ static int dlog_check_limiter(log_id_t log_id, int prio, const char *tag)
                        return DLOG_ERROR_NOT_PERMITTED;
                }
        }
-       // LCOV_EXCL_STOP
 
        if (!plog[log_id])
                return DLOG_ERROR_NOT_PERMITTED;
diff --git a/src/tests/libdlog_base.c b/src/tests/libdlog_base.c
new file mode 100644 (file)
index 0000000..7b6a501
--- /dev/null
@@ -0,0 +1,116 @@
+// C
+#include <assert.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <string.h>
+
+// DLog
+#include <dlog.h>
+#include <logconfig.h>
+
+extern int (*write_to_log)(log_id_t, log_priority, const char *tag, const char *msg);
+void __attribute__((destructor)) __dlog_fini(void);
+
+void __log_limiter_update(struct log_config *config) { }
+void __log_limiter_destroy(void) { }
+void __dynamic_config_destroy() { }
+
+int wtl_android(log_id_t buf_id, log_priority pri, const char *tag, const char *msg) { return 45835705; }
+int wtl_pipe   (log_id_t buf_id, log_priority pri, const char *tag, const char *msg) { return 0xDECC16; }
+void __dlog_init_android(const struct log_config *conf) { write_to_log = wtl_android; }
+void __dlog_init_pipe   (const struct log_config *conf) { write_to_log = wtl_pipe;    }
+
+static struct log_config CONFIG;
+static bool fail_conf_read;
+static bool conf_read_called;
+int __wrap_log_config_read(struct log_config *config)
+{
+       conf_read_called = true;
+       if (fail_conf_read)
+               return -1;
+
+       config->begin = config->last = NULL;
+       log_config_copy(config, &CONFIG);
+       return 0;
+}
+
+int limiter_ret;
+int __log_limiter_pass_log(const char* tag, int prio) { return limiter_ret; }
+
+static bool limiter_created;
+int __log_limiter_create(struct log_config *config)
+{
+       limiter_created = true;
+       return 1;
+}
+
+static bool use_dynamic_conf;
+bool __dynamic_config_create(struct log_config *config) { return use_dynamic_conf; }
+
+static bool dynamic_config_called;
+void __dynamic_config_update() { dynamic_config_called = true; }
+
+int main()
+{
+       __dlog_fini();
+       __dlog_fini();
+
+       fail_conf_read = true;
+       assert(dlog_print(DLOG_ERROR, "tag", "msg") == DLOG_ERROR_NOT_PERMITTED);
+       assert(write_to_log != wtl_android);
+       assert(write_to_log != wtl_pipe);
+       fail_conf_read = false;
+       __dlog_fini();
+
+       assert(dlog_print(DLOG_ERROR, "tag", "msg") == DLOG_ERROR_NOT_PERMITTED);
+       assert(write_to_log != wtl_android);
+       assert(write_to_log != wtl_pipe);
+       conf_read_called = false;
+       assert(dlog_print(DLOG_ERROR, "tag", "msg") == DLOG_ERROR_NOT_PERMITTED);
+       assert(!conf_read_called); // no duplicate init
+       __dlog_fini();
+
+       log_config_set(&CONFIG, "backend", "Hej, zamawiam Bentoye. Czekam do 11:15.");
+       assert(dlog_print(DLOG_ERROR, "tag", "msg") == DLOG_ERROR_NOT_PERMITTED);
+       assert(write_to_log != wtl_pipe);
+       assert(write_to_log != wtl_android);
+       __dlog_fini();
+
+       log_config_set(&CONFIG, "backend", "pipe");
+       log_config_set(&CONFIG, "limiter", "0");
+       assert(dlog_print(DLOG_ERROR, "tag", "msg") == 0xDECC16);
+       assert(!dynamic_config_called);
+       assert(write_to_log == wtl_pipe);
+       assert(!limiter_created);
+       __dlog_fini();
+
+       log_config_set(&CONFIG, "backend", "logger");
+       log_config_set(&CONFIG, "limiter", "1");
+       log_config_set(&CONFIG, "debugmode", "0");
+       use_dynamic_conf = true;
+       limiter_ret = 1;
+       assert(  dlog_print(               DLOG_ERROR, "tag", "msg") == 45835705);
+       assert(__dlog_print(LOG_ID_MAIN,   DLOG_ERROR, "tag", "msg") == 45835705);
+       assert(write_to_log != wtl_pipe); // ceci n'est pas une pipe
+       assert(write_to_log == wtl_android);
+       assert(limiter_created);
+       assert(dynamic_config_called);
+
+       limiter_ret = 0;
+       assert(  dlog_print(             DLOG_ERROR, "tag", "msg") == 45835705);
+       assert(__dlog_print(LOG_ID_MAIN, DLOG_ERROR, "tag", "msg") == DLOG_ERROR_NONE);
+       limiter_ret = -1;
+       assert(  dlog_print(             DLOG_ERROR, "tag", "msg") == 45835705);
+       assert(__dlog_print(LOG_ID_MAIN, DLOG_ERROR, "tag", "msg") == DLOG_ERROR_NONE);
+
+       assert(__dlog_print((log_id_t) -1, DLOG_ERROR, "tag", "msg") == DLOG_ERROR_INVALID_PARAMETER);
+       assert(__dlog_print(  LOG_ID_MAIN, DLOG_ERROR, NULL , "msg") == DLOG_ERROR_INVALID_PARAMETER);
+       assert(__dlog_print(  LOG_ID_MAIN, DLOG_DEBUG, "tag", "msg") == DLOG_ERROR_NONE); // limited
+
+       limiter_ret = 1;
+       __dlog_fini();
+
+       log_config_set(&CONFIG, "enable_system", "0");
+       assert(__dlog_print(LOG_ID_SYSTEM, DLOG_ERROR, "tag", "msg") == DLOG_ERROR_NONE);
+       __dlog_fini();
+}