* @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)
return;
failure:
- log_config_free(&config); // LCOV_EXCL_LINE
+ log_config_free(&config);
return;
}
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);
return DLOG_ERROR_NOT_PERMITTED;
}
}
- // LCOV_EXCL_STOP
if (!plog[log_id])
return DLOG_ERROR_NOT_PERMITTED;
--- /dev/null
+// 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();
+}