From 856fd6c8a474d9fe7d1308299319eb787847a60b Mon Sep 17 00:00:00 2001 From: Michal Bloch Date: Fri, 30 Nov 2018 11:37:00 +0100 Subject: [PATCH] tests: add libdlog dynamic config unit tests Change-Id: I120962c2b83f05d52487a955abd8731119e57b0d Signed-off-by: Michal Bloch (cherry picked from commit 8d4febbb4cbf3e7d322560ae7a438fd11b8d2954) --- Makefile.am | 5 ++ src/tests/dynamic_config.c | 136 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 141 insertions(+) create mode 100644 src/tests/dynamic_config.c diff --git a/Makefile.am b/Makefile.am index 67936ad..ef1a8e4 100644 --- a/Makefile.am +++ b/Makefile.am @@ -186,6 +186,7 @@ check_PROGRAMS = \ src/tests/pipe_message \ src/tests/test_common \ src/tests/limiter \ + src/tests/dynamic_config \ src/tests/filters check_CFLAGS = $(AM_CFLAGS) -O0 -fprofile-arcs -ftest-coverage @@ -209,6 +210,10 @@ src_tests_limiter_SOURCES = src/tests/limiter.c src/libdlog/loglimiter.c src/sha src_tests_limiter_CFLAGS = $(check_CFLAGS) src_tests_limiter_LDFLAGS = $(AM_LDFLAGS) +src_tests_dynamic_config_SOURCES = src/tests/dynamic_config.c src/libdlog/dynamic_config.c src/shared/logcommon.c src/shared/logconfig.c +src_tests_dynamic_config_CFLAGS = $(check_CFLAGS) -pthread +src_tests_dynamic_config_LDFLAGS = $(AM_LDFLAGS) -pthread -Wl,--wrap=read,--wrap=syslog_critical_failure,--wrap=inotify_init1,--wrap=inotify_add_watch,--wrap=log_config_read_file + 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) diff --git a/src/tests/dynamic_config.c b/src/tests/dynamic_config.c new file mode 100644 index 0000000..60f879c --- /dev/null +++ b/src/tests/dynamic_config.c @@ -0,0 +1,136 @@ +#include +#include +#include + +#include +#include +#include +#include + +#include + +pthread_mutex_t log_init_lock = PTHREAD_MUTEX_INITIALIZER; +bool limiter; + +static const int INOTIFY_FD = 23; +static const int INOTIFY_WD = 76; + +static bool critical_failure_detected = false; +static int expected_errno; +void __wrap_syslog_critical_failure(const char *message, ...) +{ + va_list va; + va_start(va, message); + const int err = va_arg(va, int); + va_end(va); + + assert(!expected_errno || err == expected_errno); + critical_failure_detected = true; +} + +static bool fail_inotify_init = false; +int __wrap_inotify_init1(int flags) +{ + if (fail_inotify_init) { + expected_errno = errno = 14; + return -1; + } + + return INOTIFY_FD; +} + +static bool fail_inotify_add_watch = false; +int __wrap_inotify_add_watch(int fd, const char *pathname, uint32_t mask) +{ + assert(fd == INOTIFY_FD); + + if (fail_inotify_add_watch) { + expected_errno = errno = 42; + return -1; + } + + return INOTIFY_WD; +} + +ssize_t __wrap_read(int fd, void *buf, size_t count) +{ + struct ievent_with_filename { + struct inotify_event ie; + char filename[NAME_MAX + 1]; + } *const iwf = (struct ievent_with_filename *)buf; + + assert(count >= sizeof *iwf); + iwf->ie.wd = INOTIFY_WD; + return sizeof *iwf; +} + +static bool update_plog_called = false; +void __update_plog(const struct log_config *conf) +{ + update_plog_called = true; +} + +static bool limiter_update_called = false; +void __log_limiter_update(struct log_config *config) +{ + limiter_update_called = true; +} + +static int lcrf_retval; +int __wrap_log_config_read_file(struct log_config *config, const char *filename) +{ + return lcrf_retval; +} + +int main() +{ + // check whether these blow up when called before init + __dynamic_config_update(); + __dynamic_config_destroy(); + __dynamic_config_update(); + + struct log_config conf = {NULL, NULL}; + assert(!__dynamic_config_create(&conf)); + + log_config_set(&conf, DYNAMIC_CONFIG_CONF_KEY, "relative/path"); + assert(!__dynamic_config_create(&conf)); + + log_config_set(&conf, DYNAMIC_CONFIG_CONF_KEY, "/"); + + fail_inotify_init = true; + assert(!__dynamic_config_create(&conf)); + assert(critical_failure_detected); + critical_failure_detected = false; + fail_inotify_init = false; + + fail_inotify_add_watch = true; + assert(!__dynamic_config_create(&conf)); + assert(critical_failure_detected); + critical_failure_detected = false; + fail_inotify_add_watch = false; + + assert(__dynamic_config_create(&conf)); + assert(!critical_failure_detected); + + expected_errno = 0; + lcrf_retval = -EINVAL; + __dynamic_config_update(); + assert(critical_failure_detected); + assert(!update_plog_called); + assert(!limiter_update_called); + + limiter = false; + lcrf_retval = 0; + __dynamic_config_update(); + assert(update_plog_called); + assert(!limiter_update_called); + update_plog_called = false; + + limiter = true; + lcrf_retval = -ENOENT; + __dynamic_config_update(); + assert(update_plog_called); + assert(limiter_update_called); + + __dynamic_config_destroy(); +} -- 2.7.4