From 0d47952611198ef6b1163f366dc03922d20b1475 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 17 Apr 2024 09:42:04 +0200 Subject: Adding upstream version 7.94+git20230807.3be01efb1+dfsg. Signed-off-by: Daniel Baumann --- nsock/tests/logs.c | 176 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100644 nsock/tests/logs.c (limited to 'nsock/tests/logs.c') diff --git a/nsock/tests/logs.c b/nsock/tests/logs.c new file mode 100644 index 0000000..d316d34 --- /dev/null +++ b/nsock/tests/logs.c @@ -0,0 +1,176 @@ +/* + * Nsock regression test suite + * Same license as nmap -- see https://nmap.org/book/man-legal.html + */ + +#include "test-common.h" + + +struct log_test_data { + nsock_pool nsp; + nsock_loglevel_t current_level; + unsigned int got_dbgfull: 1; + unsigned int got_dbg: 1; + unsigned int got_info: 1; + unsigned int got_error: 1; + unsigned int total; + int errcode; +}; + +static struct log_test_data *GlobalLTD; + +static void log_handler(const struct nsock_log_rec *rec) { + GlobalLTD->total++; + switch(rec->level) { + case NSOCK_LOG_DBG_ALL: + GlobalLTD->got_dbgfull = 1; + break; + + case NSOCK_LOG_DBG: + GlobalLTD->got_dbg = 1; + break; + + case NSOCK_LOG_INFO: + GlobalLTD->got_info = 1; + break; + + case NSOCK_LOG_ERROR: + GlobalLTD->got_error = 1; + break; + + default: + fprintf(stderr, "UNEXPECTED LOG LEVEL (%d)!\n", (int)rec->level); + GlobalLTD->errcode = -EINVAL; + } +} + +static void nop_handler(nsock_pool nsp, nsock_event nse, void *udata) { +} + +static int check_loglevel(struct log_test_data *ltd, nsock_loglevel_t level) { + int rc = 0; + nsock_event_id id; + + nsock_set_loglevel(level); + + ltd->current_level = level; + + ltd->got_dbgfull = 0; + ltd->got_dbg = 0; + ltd->got_info = 0; + ltd->got_error = 0; + + ltd->total = 0; + ltd->errcode = 0; + + id = nsock_timer_create(ltd->nsp, nop_handler, 200, NULL); + nsock_event_cancel(ltd->nsp, id, 0); + + if (ltd->errcode) + return ltd->errcode; + + if (ltd->total < 1) + return -EINVAL; + + return rc; +} + +static int check_errlevel(struct log_test_data *ltd, nsock_loglevel_t level) { + nsock_event_id id; + + nsock_set_loglevel(level); + + ltd->current_level = level; + + ltd->got_dbgfull = 0; + ltd->got_dbg = 0; + ltd->got_info = 0; + ltd->got_error = 0; + + ltd->total = 0; + ltd->errcode = 0; + + id = nsock_timer_create(ltd->nsp, nop_handler, 200, NULL); + nsock_event_cancel(ltd->nsp, id, 0); + + if (ltd->errcode) + return ltd->errcode; + + if (ltd->total > 0) + return -EINVAL; + + return 0; +} + +static int log_setup(void **tdata) { + struct log_test_data *ltd; + + ltd = calloc(1, sizeof(struct log_test_data)); + if (ltd == NULL) + return -ENOMEM; + + ltd->nsp = nsock_pool_new(ltd); + AssertNonNull(ltd->nsp); + + *tdata = GlobalLTD = ltd; + return 0; +} + +static int log_teardown(void *tdata) { + struct log_test_data *ltd = (struct log_test_data *)tdata; + + if (tdata) { + nsock_pool_delete(ltd->nsp); + free(tdata); + } + nsock_set_log_function(NULL); + GlobalLTD = NULL; + return 0; +} + +static int log_check_std_levels(void *tdata) { + struct log_test_data *ltd = (struct log_test_data *)tdata; + nsock_loglevel_t lvl; + int rc = 0; + + nsock_set_log_function(log_handler); + + for (lvl = NSOCK_LOG_DBG_ALL; lvl < NSOCK_LOG_ERROR; lvl++) { + rc = check_loglevel(ltd, lvl); + if (rc) + return rc; + } + + return 0; +} + +static int log_check_err_levels(void *tdata) { + struct log_test_data *ltd = (struct log_test_data *)tdata; + nsock_loglevel_t lvl; + int rc = 0; + + nsock_set_log_function(log_handler); + + for (lvl = NSOCK_LOG_ERROR; lvl <= NSOCK_LOG_NONE; lvl++) { + rc = check_errlevel(ltd, NSOCK_LOG_ERROR); + if (rc) + return rc; + } + + return 0; +} + + +const struct test_case TestLogLevels = { + .t_name = "set standard log levels", + .t_setup = log_setup, + .t_run = log_check_std_levels, + .t_teardown = log_teardown +}; + +const struct test_case TestErrLevels = { + .t_name = "check error log levels", + .t_setup = log_setup, + .t_run = log_check_err_levels, + .t_teardown = log_teardown +}; -- cgit v1.2.3