test: logging: sync log handling with log process thread
Fix issue #27570 Waiting for the log process thread handle all the log by k_sleep(TIMEOUT), define a reasonable TIMEOUT for all platform is difficult. This patch sync the test thread and log process thread by taking and giving a defined semaphore. Signed-off-by: Meng xianglin <xianglinx.meng@intel.com>
This commit is contained in:
parent
2609101eda
commit
bc52a21b90
1 changed files with 21 additions and 6 deletions
|
@ -20,6 +20,7 @@
|
|||
|
||||
#define LOG_MODULE_NAME log_test
|
||||
LOG_MODULE_REGISTER(LOG_MODULE_NAME, LOG_LEVEL_INF);
|
||||
static K_SEM_DEFINE(log_sem, 0, 1);
|
||||
|
||||
struct backend_cb {
|
||||
/* count log messages handled by this backend */
|
||||
|
@ -34,6 +35,11 @@ struct backend_cb {
|
|||
uint16_t exp_severity[4];
|
||||
/* inform put() to check domain_id of message */
|
||||
bool check_domain_id;
|
||||
/* How many messages have been logged.
|
||||
* used in async mode, to make sure all logs have been handled by compare
|
||||
* counter with total_logs
|
||||
*/
|
||||
size_t total_logs;
|
||||
};
|
||||
|
||||
static void put(struct log_backend const *const backend, struct log_msg *msg)
|
||||
|
@ -60,6 +66,11 @@ static void put(struct log_backend const *const backend, struct log_msg *msg)
|
|||
}
|
||||
|
||||
cb->counter++;
|
||||
if (IS_ENABLED(CONFIG_LOG_PROCESS_THREAD)) {
|
||||
if (cb->counter == cb->total_logs) {
|
||||
k_sem_give(&log_sem);
|
||||
}
|
||||
}
|
||||
log_msg_put(msg);
|
||||
}
|
||||
|
||||
|
@ -130,8 +141,8 @@ static void log_setup(bool backend2_enable)
|
|||
static bool log_test_process(bool bypass)
|
||||
{
|
||||
if (IS_ENABLED(CONFIG_LOG_PROCESS_THREAD)) {
|
||||
/* a dedicate thread handle log messages, wait for 1 second */
|
||||
k_sleep(K_MSEC(1000));
|
||||
/* waiting for all logs have been handled */
|
||||
k_sem_take(&log_sem, K_FOREVER);
|
||||
return false;
|
||||
} else {
|
||||
return log_process(bypass);
|
||||
|
@ -152,13 +163,14 @@ static void test_log_domain_id(void)
|
|||
log_setup(false);
|
||||
|
||||
backend1_cb.check_domain_id = true;
|
||||
backend1_cb.total_logs = 1;
|
||||
|
||||
LOG_INF("info message for domain id test");
|
||||
|
||||
while (log_test_process(false)) {
|
||||
}
|
||||
|
||||
zassert_equal(1, backend1_cb.counter,
|
||||
zassert_equal(backend1_cb.total_logs, backend1_cb.counter,
|
||||
"Unexpected amount of messages received by the backend");
|
||||
}
|
||||
|
||||
|
@ -221,12 +233,13 @@ static void test_log_early_logging(void)
|
|||
|
||||
TC_PRINT("Activate backend with context");
|
||||
memset(&backend1_cb, 0, sizeof(backend1_cb));
|
||||
backend1_cb.total_logs = 3;
|
||||
log_backend_enable(&backend1, &backend1_cb, LOG_LEVEL_DBG);
|
||||
|
||||
while (log_test_process(false)) {
|
||||
}
|
||||
|
||||
zassert_equal(3, backend1_cb.counter,
|
||||
zassert_equal(backend1_cb.total_logs, backend1_cb.counter,
|
||||
"Unexpected amount of messages received. %d",
|
||||
backend1_cb.counter);
|
||||
}
|
||||
|
@ -253,11 +266,12 @@ static void test_log_severity(void)
|
|||
LOG_INF("info message");
|
||||
LOG_WRN("warning message");
|
||||
LOG_ERR("error message");
|
||||
backend1_cb.total_logs = 3;
|
||||
|
||||
while (log_test_process(false)) {
|
||||
}
|
||||
|
||||
zassert_equal(3, backend1_cb.counter,
|
||||
zassert_equal(backend1_cb.total_logs, backend1_cb.counter,
|
||||
"Unexpected amount of messages received by the backend.");
|
||||
}
|
||||
|
||||
|
@ -298,11 +312,12 @@ static void test_log_timestamping(void)
|
|||
LOG_INF("test timestamp");
|
||||
LOG_INF("test timestamp");
|
||||
LOG_WRN("test timestamp");
|
||||
backend1_cb.total_logs = 3;
|
||||
|
||||
while (log_test_process(false)) {
|
||||
}
|
||||
|
||||
zassert_equal(3,
|
||||
zassert_equal(backend1_cb.total_logs,
|
||||
backend1_cb.counter,
|
||||
"Unexpected amount of messages received by the backend.");
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue