diff options
| author | Garrett D'Amore <garrett@damore.org> | 2024-04-21 12:23:07 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-21 12:23:07 -0700 |
| commit | 56507ab5c4db009be5251bde832f594fe5ed3d5e (patch) | |
| tree | c70e7d669c3548a5c58ab27c0fc6118a96580863 /src/testing | |
| parent | 3593eba5272bf627b99a2521b3f025141a49bcad (diff) | |
| download | nng-56507ab5c4db009be5251bde832f594fe5ed3d5e.tar.gz nng-56507ab5c4db009be5251bde832f594fe5ed3d5e.tar.bz2 nng-56507ab5c4db009be5251bde832f594fe5ed3d5e.zip | |
Logging improvements (#1816)
* Add nng_str_sockaddr to get string representation of socket address.
* Added nng_log_get_level() is meant to allow users to obtain the
current level and avoid some possibly expensive operations just
to collect debugging information when debugging is not in effect.
We use a custom logger for NUTS, and this fits within the NUTS
test framework well, so that if -v is supplied we get more content.
All tests now get this by default.
Diffstat (limited to 'src/testing')
| -rw-r--r-- | src/testing/acutest.h | 35 | ||||
| -rw-r--r-- | src/testing/nuts.h | 15 | ||||
| -rw-r--r-- | src/testing/util.c | 48 |
3 files changed, 94 insertions, 4 deletions
diff --git a/src/testing/acutest.h b/src/testing/acutest.h index 8b49afc8..a162bde1 100644 --- a/src/testing/acutest.h +++ b/src/testing/acutest.h @@ -3,7 +3,7 @@ * <https://github.com/mity/acutest> * * Copyright 2013-2020 Martin Mitas - * Copyright 2019 Garrett D'Amore + * Copyright 2024 Garrett D'Amore * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -361,6 +361,7 @@ extern const struct test_ test_list_[]; int test_check_(int cond, const char* file, int line, const char* fmt, ...); void test_case_(const char* fmt, ...); void test_message_(const char* fmt, ...); +void test_message_color_(int, const char* fmt, ...); void test_dump_(const char* title, const void* addr, size_t size); void test_abort_(void) TEST_ATTRIBUTE_(noreturn); @@ -779,6 +780,38 @@ test_message_(const char* fmt, ...) } } +/* Print a message in color, unconditionally (based on verbosity). */ +void TEST_ATTRIBUTE_(format (printf, 2, 3)) +test_message_color_(int color, const char* fmt, ...) +{ + char buffer[TEST_MSG_MAXSIZE]; + char* line_beg; + char* line_end; + va_list args; + + if(test_verbose_level_ < 3) + return; + + va_start(args, fmt); + vsnprintf(buffer, TEST_MSG_MAXSIZE, fmt, args); + va_end(args); + buffer[TEST_MSG_MAXSIZE-1] = '\0'; + + line_beg = buffer; + while(1) { + line_end = strchr(line_beg, '\n'); + if(line_end == NULL) + break; + test_line_indent_(test_case_name_[0] ? 3 : 2); + test_print_in_color_(color, "%.*s\n", (int)(line_end - line_beg), line_beg); + line_beg = line_end + 1; + } + if(line_beg[0] != '\0') { + test_line_indent_(test_case_name_[0] ? 3 : 2); + test_print_in_color_(color, "%s\n", line_beg); + } +} + void test_dump_(const char* title, const void* addr, size_t size) { diff --git a/src/testing/nuts.h b/src/testing/nuts.h index f24f7136..da0f525f 100644 --- a/src/testing/nuts.h +++ b/src/testing/nuts.h @@ -17,9 +17,18 @@ #ifndef NNG_TESTING_NUTS_H #define NNG_TESTING_NUTS_H +#include <nng/nng.h> +extern void nuts_logger( + nng_log_level, nng_log_facility, const char *, const char *); + // Call nng_fini during test finalization -- this avoids leak warnings. extern void nng_fini(void); #define TEST_FINI nng_fini() +#define TEST_INIT \ + do { \ + nng_log_set_logger(nuts_logger); \ + nng_log_set_level(NNG_LOG_DEBUG); \ + } while (0) #include "acutest.h" #include <stdbool.h> @@ -27,7 +36,6 @@ extern void nng_fini(void); #include <string.h> // The following headers are provided for test code convenience. -#include <nng/nng.h> #include <nng/protocol/bus0/bus.h> #include <nng/protocol/pair0/pair.h> #include <nng/protocol/pair1/pair.h> @@ -210,6 +218,11 @@ extern const char *nuts_garbled_crt; nng_log_set_level(level); \ } while (0) +#define NUTS_LOGGING() \ + do { \ + nng_log_set_logger(nuts_logger); \ + nng_log_set_level(NNG_LOG_DEBUG); \ + } while (0) #ifdef __cplusplus }; #endif diff --git a/src/testing/util.c b/src/testing/util.c index eeb70b4f..f93b6d55 100644 --- a/src/testing/util.c +++ b/src/testing/util.c @@ -1,5 +1,5 @@ // -// Copyright 2020 Staysail Systems, Inc. <info@staysail.tech> +// Copyright 2024 Staysail Systems, Inc. <info@staysail.tech> // Copyright 2018 Capitar IT Group BV <info@capitar.com> // // This software is supplied under the terms of the MIT License, a @@ -8,6 +8,7 @@ // found online at https://opensource.org/licenses/MIT. // +#include "nng/nng.h" #define TEST_NO_MAIN #ifdef _WIN32 @@ -72,7 +73,7 @@ nuts_clock(void) } tv.tv_sec -= epoch; return ( - ((uint64_t)(tv.tv_sec) * 1000) + (uint64_t)(tv.tv_usec / 1000)); + ((uint64_t) (tv.tv_sec) * 1000) + (uint64_t) (tv.tv_usec / 1000)); #endif #ifdef _WIN32 @@ -162,3 +163,46 @@ nuts_sleep(int msec) poll(NULL, 0, msec); #endif } + +#define NUTS_COLOR_DEFAULT_ 0 +#define NUTS_COLOR_GREEN_ 1 +#define NUTS_COLOR_RED_ 2 +#define NUTS_COLOR_DEFAULT_INTENSIVE_ 3 +#define NUTS_COLOR_GREEN_INTENSIVE_ 4 +#define NUTS_COLOR_RED_INTENSIVE_ 5 + +void +nuts_logger(nng_log_level level, nng_log_facility fac, const char *msgid, + const char *msg) +{ + (void) fac; + char *lstr; + int color; + switch (level) { + case NNG_LOG_DEBUG: + lstr = "DEBUG"; + color = NUTS_COLOR_DEFAULT_; + break; + case NNG_LOG_INFO: + lstr = "INFO"; + color = NUTS_COLOR_DEFAULT_; + break; + case NNG_LOG_NOTICE: + lstr = "NOTICE"; + color = NUTS_COLOR_DEFAULT_INTENSIVE_; + break; + case NNG_LOG_WARN: + lstr = "WARNING"; + color = NUTS_COLOR_RED_; + break; + case NNG_LOG_ERR: + lstr = "ERROR"; + color = NUTS_COLOR_RED_INTENSIVE_; + break; + default: + lstr = "LEVEL UNKNOWN"; + color = NUTS_COLOR_DEFAULT_; + break; + } + test_message_color_(color, "%s: %s: %s", lstr, msgid, msg); +} |
