1
0
Fork 0
mirror of https://git.rwth-aachen.de/acs/public/villas/node/ synced 2025-03-30 00:00:11 +01:00
VILLASnode/fpga/tests/unit/logging.cpp
Steffen Vogel 157d5b21d7 Make REUSE copyright notice the same as in other VILLASframework projects and fix comments (#82)
This edits the headers in every file so the copyright notice mentions RWTH Aachen University. We also update some copyright years and fix various comments so the header is the same across all of VILLASframework.

* Harmonize comment and code-style

Signed-off-by: Steffen Vogel <steffen.vogel@opal-rt.com>

* Harmonize comment and code-style

Signed-off-by: Steffen Vogel <steffen.vogel@opal-rt.com>

---------

Signed-off-by: Steffen Vogel <steffen.vogel@opal-rt.com>
2023-09-08 11:35:18 +02:00

110 lines
2.9 KiB
C++

/* Logging utilities for unit test.
*
* Author: Steffen Vogel <post@steffenvogel.de>
* SPDX-FileCopyrightText: 2017 Steffen Vogel <post@steffenvogel.de>
* SPDX-License-Identifier: Apache-2.0
*/
#include <cstdarg>
#include <memory>
#include <criterion/logging.h>
#include <criterion/options.h>
#include <villas/log.hpp>
#include <spdlog/spdlog.h>
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 int 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;
return len;
}
void criterion_log_noformat(enum criterion_severity severity, const char *msg)
{
auto logger = villas::logging.get("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 = villas::logging.get("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 = villas::logging.get("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);
}