From 2336acaf9826b123035ac483ec2b8ef7399a774e Mon Sep 17 00:00:00 2001 From: Steffen Vogel Date: Wed, 31 Jan 2018 20:23:48 +0100 Subject: [PATCH] tests: override some criteriod_log() functions in order to use spdlog style log output --- fpga/tests/CMakeLists.txt | 1 + fpga/tests/logging.cpp | 101 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 fpga/tests/logging.cpp diff --git a/fpga/tests/CMakeLists.txt b/fpga/tests/CMakeLists.txt index 152413de1..843c1b6a6 100644 --- a/fpga/tests/CMakeLists.txt +++ b/fpga/tests/CMakeLists.txt @@ -1,6 +1,7 @@ set(SOURCES main.cpp fpga.cpp + logging.cpp # dma.c fifo.cpp # hls.c diff --git a/fpga/tests/logging.cpp b/fpga/tests/logging.cpp new file mode 100644 index 000000000..64be9274f --- /dev/null +++ b/fpga/tests/logging.cpp @@ -0,0 +1,101 @@ +#include +#include + +#include +#include + +#include +#include + +extern "C" { + /* We override criterions function here */ + void criterion_log_noformat(enum criterion_severity severity, const char *msg); + void criterion_plog(enum criterion_logging_level level, const struct criterion_prefix_data *prefix, const char *msg, ...); + void criterion_vlog(enum criterion_logging_level level, const char *msg, va_list args); +} + +struct criterion_prefix_data { + const char *prefix; + const char *color; +}; + +static void format_msg(char *buf, size_t buflen, const char *msg, va_list args) +{ + int len = vsnprintf(buf, buflen, msg, args); + + /* Strip new line */ + char *nl = strchr(buf, '\n'); + if (nl) + *nl = 0; +} + +void criterion_log_noformat(enum criterion_severity severity, const char *msg) +{ + auto logger = loggerGetOrCreate("criterion"); + + switch (severity) { + case CR_LOG_INFO: + logger->info(msg); + break; + + case CR_LOG_WARNING: + logger->warn(msg); + break; + + case CR_LOG_ERROR: + logger->error(msg); + break; + } +} + +void criterion_vlog(enum criterion_logging_level level, const char *msg, va_list args) +{ + char formatted_msg[1024]; + + if (level < criterion_options.logging_threshold) + return; + + format_msg(formatted_msg, sizeof(formatted_msg), msg, args); + + auto logger = loggerGetOrCreate("criterion"); + logger->info(formatted_msg); +} + +void criterion_plog(enum criterion_logging_level level, const struct criterion_prefix_data *prefix, const char *msg, ...) +{ + char formatted_msg[1024]; + + va_list args; + + if (level < criterion_options.logging_threshold) + return; + + va_start(args, msg); + format_msg(formatted_msg, sizeof(formatted_msg), msg, args); + va_end(args); + + auto logger = loggerGetOrCreate("criterion"); + + if (strstr(formatted_msg, "Warning")) + logger->warn(formatted_msg); + else if (strstr(formatted_msg, "Failed")) + logger->error(formatted_msg); + else if(!strcmp(prefix->prefix, "----") && !strcmp(prefix->color, "\33[0;34m")) + logger->info(formatted_msg); + else if (!strcmp(prefix->prefix, "----") && !strcmp(prefix->color, "\33[1;30m")) + logger->debug(formatted_msg); + else if (!strcmp(prefix->prefix, "====")) + logger->info(formatted_msg); + else if (!strcmp(prefix->prefix, "RUN ")) + logger->info("Run: {}", formatted_msg); + else if (!strcmp(prefix->prefix, "SKIP")) + logger->info("Skip: {}", formatted_msg); + else if (!strcmp(prefix->prefix, "PASS")) + logger->info("Pass: {}", formatted_msg); + else if (!strcmp(prefix->prefix, "FAIL")) + logger->error("Fail: {}", formatted_msg); + else if (!strcmp(prefix->prefix, "WARN")) + logger->warn(formatted_msg); + else if (!strcmp(prefix->prefix, "ERR ")) + logger->error(formatted_msg); +}