tests: logging: log_api: Extend to test LOG_OVERRIDE_LEVEL
Extended test to validate CONFIG_LOG_OVERRIDE_LEVEL option. Signed-off-by: Krzysztof Chruscinski <krzysztof.chruscinski@nordicsemi.no>
This commit is contained in:
parent
476033e81f
commit
0b8b1ae997
7 changed files with 138 additions and 9 deletions
|
@ -5,7 +5,7 @@ find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
|
|||
project(log_api)
|
||||
|
||||
target_sources(app PRIVATE src/main.c src/mock_frontend.c
|
||||
src/mock_backend.c src/test_module.c)
|
||||
src/mock_backend.c src/test_module.c src/test_module2.c)
|
||||
|
||||
if(CONFIG_CPLUSPLUS)
|
||||
# When testing for C++ force test file C++ compilation
|
||||
|
|
|
@ -19,9 +19,6 @@
|
|||
#define NO_BACKENDS 0
|
||||
#endif
|
||||
|
||||
#define MODULE_NAME test
|
||||
#define CXX_MODULE_NAME test_cxx
|
||||
|
||||
LOG_MODULE_REGISTER(test, CONFIG_SAMPLE_MODULE_LOG_LEVEL);
|
||||
|
||||
#define LOG2_SIMPLE_MSG_LEN \
|
||||
|
@ -44,7 +41,7 @@ MOCK_LOG_BACKEND_DEFINE(backend2, false);
|
|||
static log_timestamp_t stamp;
|
||||
static bool in_panic;
|
||||
static int16_t test_source_id;
|
||||
static int16_t test_cxx_source_id;
|
||||
static int16_t test2_source_id;
|
||||
|
||||
static log_timestamp_t timestamp_get(void)
|
||||
{
|
||||
|
@ -103,8 +100,8 @@ static void log_setup(bool backend2_enable)
|
|||
|
||||
mock_log_frontend_reset();
|
||||
|
||||
test_source_id = log_source_id_get(STRINGIFY(MODULE_NAME));
|
||||
test_cxx_source_id = log_source_id_get(STRINGIFY(CXX_MODULE_NAME));
|
||||
test_source_id = log_source_id_get(STRINGIFY(test));
|
||||
test2_source_id = log_source_id_get(STRINGIFY(test2));
|
||||
|
||||
if (NO_BACKENDS) {
|
||||
return;
|
||||
|
@ -798,6 +795,41 @@ ZTEST(test_log_api, test_log_arg_evaluation)
|
|||
#undef TEST_MSG_0_PREFIX
|
||||
}
|
||||
|
||||
ZTEST(test_log_api, test_log_override_level)
|
||||
{
|
||||
log_timestamp_t exp_timestamp = TIMESTAMP_INIT_VAL;
|
||||
|
||||
log_setup(false);
|
||||
|
||||
if (CONFIG_LOG_OVERRIDE_LEVEL == 4) {
|
||||
char str[128];
|
||||
|
||||
/* If prefix is enabled, add function name prefix */
|
||||
if (IS_ENABLED(CONFIG_LOG_FUNC_NAME_PREFIX_DBG)) {
|
||||
snprintk(str, sizeof(str),
|
||||
"%s: " TEST_DBG_MSG, "test_func");
|
||||
} else {
|
||||
snprintk(str, sizeof(str), TEST_DBG_MSG);
|
||||
}
|
||||
|
||||
mock_log_frontend_record(test2_source_id, LOG_LEVEL_DBG, str);
|
||||
mock_log_backend_record(&backend1, test2_source_id,
|
||||
CONFIG_LOG_DOMAIN_ID, LOG_LEVEL_DBG,
|
||||
exp_timestamp++, str);
|
||||
|
||||
mock_log_frontend_record(test2_source_id, LOG_LEVEL_ERR, TEST_ERR_MSG);
|
||||
mock_log_backend_record(&backend1, test2_source_id,
|
||||
CONFIG_LOG_DOMAIN_ID, LOG_LEVEL_ERR,
|
||||
exp_timestamp++, TEST_ERR_MSG);
|
||||
} else if (CONFIG_LOG_OVERRIDE_LEVEL != 0) {
|
||||
zassert_true(false, "Unexpected configuration.");
|
||||
}
|
||||
|
||||
test_func2();
|
||||
|
||||
process_and_validate(false, false);
|
||||
}
|
||||
|
||||
/* Disable backends because same suite may be executed again but compiled by C++ */
|
||||
static void log_api_suite_teardown(void *data)
|
||||
{
|
||||
|
@ -847,6 +879,9 @@ static void log_api_suite_before(void *data)
|
|||
/* Flush logs and enable test backends. */
|
||||
flush_log();
|
||||
|
||||
if (IS_ENABLED(CONFIG_LOG_FRONTEND)) {
|
||||
mock_log_frontend_check_enable();
|
||||
}
|
||||
mock_log_backend_check_enable(&backend1);
|
||||
mock_log_backend_check_enable(&backend2);
|
||||
}
|
||||
|
@ -867,6 +902,9 @@ static void log_api_suite_after(void *data)
|
|||
/* Disable testing backends after the test. Otherwise test may fail due
|
||||
* to unexpected log message.
|
||||
*/
|
||||
if (IS_ENABLED(CONFIG_LOG_FRONTEND)) {
|
||||
mock_log_frontend_check_disable();
|
||||
}
|
||||
mock_log_backend_check_disable(&backend1);
|
||||
mock_log_backend_check_disable(&backend2);
|
||||
}
|
||||
|
|
|
@ -30,6 +30,16 @@ void mock_log_frontend_dummy_record(int cnt)
|
|||
mock_log_backend_dummy_record(&backend, cnt);
|
||||
}
|
||||
|
||||
void mock_log_frontend_check_enable(void)
|
||||
{
|
||||
mock.do_check = true;
|
||||
}
|
||||
|
||||
void mock_log_frontend_check_disable(void)
|
||||
{
|
||||
mock.do_check = false;
|
||||
}
|
||||
|
||||
void mock_log_frontend_generic_record(uint16_t source_id,
|
||||
uint16_t domain_id,
|
||||
uint8_t level,
|
||||
|
@ -79,6 +89,10 @@ static void log_frontend_n(struct log_msg_ids src_level, const char *fmt, ...)
|
|||
char str[128];
|
||||
va_list ap;
|
||||
|
||||
if (mock.do_check == false) {
|
||||
return;
|
||||
}
|
||||
|
||||
mock.msg_proc_idx++;
|
||||
|
||||
if (!exp_msg->check) {
|
||||
|
@ -105,6 +119,10 @@ void log_frontend_hexdump(const char *str,
|
|||
{
|
||||
struct mock_log_backend_msg *exp_msg = &mock.exp_msgs[mock.msg_proc_idx];
|
||||
|
||||
if (mock.do_check == false) {
|
||||
return;
|
||||
}
|
||||
|
||||
zassert_equal(exp_msg->data_len, length, NULL);
|
||||
if (exp_msg->data_len <= sizeof(exp_msg->data)) {
|
||||
zassert_equal(memcmp(data, exp_msg->data, length), 0, NULL);
|
||||
|
@ -115,6 +133,10 @@ void log_frontend_hexdump(const char *str,
|
|||
|
||||
void log_frontend_0(const char *str, struct log_msg_ids src_level)
|
||||
{
|
||||
if (mock.do_check == false) {
|
||||
return;
|
||||
}
|
||||
|
||||
log_frontend_n(src_level, str);
|
||||
}
|
||||
|
||||
|
@ -125,6 +147,10 @@ void log_frontend_1(const char *str, log_arg_t arg0, struct log_msg_ids src_leve
|
|||
|
||||
void log_frontend_2(const char *str, log_arg_t arg0, log_arg_t arg1, struct log_msg_ids src_level)
|
||||
{
|
||||
if (mock.do_check == false) {
|
||||
return;
|
||||
}
|
||||
|
||||
log_frontend_n(src_level, str, arg0, arg1);
|
||||
}
|
||||
|
||||
|
@ -134,6 +160,10 @@ void log_frontend_msg(const void *source,
|
|||
{
|
||||
struct mock_log_backend_msg *exp_msg = &mock.exp_msgs[mock.msg_proc_idx];
|
||||
|
||||
if (mock.do_check == false) {
|
||||
return;
|
||||
}
|
||||
|
||||
mock.msg_proc_idx++;
|
||||
|
||||
if (!exp_msg->check) {
|
||||
|
@ -147,7 +177,8 @@ void log_frontend_msg(const void *source,
|
|||
log_dynamic_source_id((struct log_source_dynamic_data *)source) :
|
||||
log_const_source_id((const struct log_source_const_data *)source);
|
||||
|
||||
zassert_equal(source_id, exp_msg->source_id, NULL);
|
||||
zassert_equal(source_id, exp_msg->source_id, "got: %d, exp: %d",
|
||||
source_id, exp_msg->source_id);
|
||||
|
||||
zassert_equal(exp_msg->data_len, desc.data_len, NULL);
|
||||
if (exp_msg->data_len <= sizeof(exp_msg->data)) {
|
||||
|
|
|
@ -27,7 +27,8 @@ static inline void mock_log_frontend_record(uint16_t source_id, uint8_t level, c
|
|||
}
|
||||
|
||||
void mock_log_frontend_validate(bool panic);
|
||||
|
||||
void mock_log_frontend_check_enable(void);
|
||||
void mock_log_frontend_check_disable(void);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -14,6 +14,7 @@ extern "C" {
|
|||
#endif
|
||||
|
||||
void test_func(void);
|
||||
void test_func2(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
23
tests/subsys/logging/log_api/src/test_module2.c
Normal file
23
tests/subsys/logging/log_api/src/test_module2.c
Normal file
|
@ -0,0 +1,23 @@
|
|||
/*
|
||||
* Copyright (c) 2022 Nordic Semiconductor
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file
|
||||
* @brief Test module for log api test
|
||||
*
|
||||
*/
|
||||
|
||||
#include "test_module.h"
|
||||
#include <logging/log.h>
|
||||
|
||||
/* Module disabled by default, will emit logs only when CONFIG_LOG_OVERRIDE_LEVEL. */
|
||||
LOG_MODULE_REGISTER(test2, 0);
|
||||
|
||||
void test_func2(void)
|
||||
{
|
||||
LOG_DBG(TEST_DBG_MSG);
|
||||
LOG_ERR(TEST_ERR_MSG);
|
||||
}
|
|
@ -127,6 +127,23 @@ tests:
|
|||
- CONFIG_LOG_MODE_DEFERRED=y
|
||||
- CONFIG_LOG_TIMESTAMP_64BIT=y
|
||||
|
||||
logging.log2_api_deferred_override_level:
|
||||
# Testing on selected platforms as it enables all logs in the application
|
||||
# and it cannot be handled on many platforms.
|
||||
platform_allow: qemu_cortex_m3 qemu_cortex_a9
|
||||
extra_configs:
|
||||
- CONFIG_LOG_MODE_DEFERRED=y
|
||||
- CONFIG_LOG_OVERRIDE_LEVEL=4
|
||||
|
||||
logging.log2_api_deferred_override_level_rt_filtering:
|
||||
# Testing on selected platforms as it enables all logs in the application
|
||||
# and it cannot be handled on many platforms.
|
||||
platform_allow: qemu_cortex_m3 qemu_cortex_a9
|
||||
extra_configs:
|
||||
- CONFIG_LOG_MODE_DEFERRED=y
|
||||
- CONFIG_LOG_RUNTIME_FILTERING=y
|
||||
- CONFIG_LOG_OVERRIDE_LEVEL=4
|
||||
|
||||
logging.log2_api_immediate:
|
||||
# FIXME: qemu_arc_hs6x excluded, see #38041
|
||||
platform_exclude: qemu_arc_hs6x
|
||||
|
@ -183,6 +200,24 @@ tests:
|
|||
- CONFIG_LOG_FRONTEND=y
|
||||
- CONFIG_LOG_MODE_IMMEDIATE=y
|
||||
|
||||
logging.log_api_frontend_immediate_override_level:
|
||||
# Testing on selected platforms as it enables all logs in the application
|
||||
# and it cannot be handled on many platforms.
|
||||
platform_allow: qemu_cortex_m3 qemu_cortex_a9
|
||||
extra_configs:
|
||||
- CONFIG_LOG_FRONTEND=y
|
||||
- CONFIG_LOG_MODE_IMMEDIATE=y
|
||||
- CONFIG_LOG_OVERRIDE_LEVEL=4
|
||||
|
||||
logging.log2_api_deferred_override_level_rt_filtering:
|
||||
# Testing on selected platforms as it enables all logs in the application
|
||||
# and it cannot be handled on many platforms.
|
||||
platform_allow: qemu_cortex_m3 qemu_cortex_a9
|
||||
extra_configs:
|
||||
- CONFIG_LOG_MODE_DEFERRED=y
|
||||
- CONFIG_LOG_RUNTIME_FILTERING=y
|
||||
- CONFIG_LOG_OVERRIDE_LEVEL=4
|
||||
|
||||
logging.log_api_frontend_only:
|
||||
# FIXME: qemu_arc_hs6x excluded, see #38041
|
||||
platform_exclude: qemu_arc_hs6x
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue