tests: kernel: Move k_thread_foreach() API test to thread_apis test
Move k_thread_foreach() API test from tests/kernel/profiling to tests/kernel/threads/thread_apis. Fixes #7966 Signed-off-by: Ramakrishna Pallala <ramakrishna.pallala@intel.com>
This commit is contained in:
parent
8777ff1304
commit
00e29c176d
4 changed files with 99 additions and 77 deletions
|
@ -15,14 +15,6 @@
|
|||
static struct k_work work[NUM_OF_WORK];
|
||||
static struct k_sem sync_sema;
|
||||
|
||||
#define STACKSIZE 512
|
||||
K_THREAD_STACK_DEFINE(test_stack, STACKSIZE);
|
||||
__kernel struct k_thread test_thread;
|
||||
|
||||
static int tcount;
|
||||
static bool thread_flag;
|
||||
static bool stack_flag;
|
||||
|
||||
/**TESTPOINT: stack analyze*/
|
||||
static void tdata_dump_callback(const struct k_thread *thread, void *user_data)
|
||||
{
|
||||
|
@ -81,79 +73,13 @@ void test_call_stacks_analyze_workq(void)
|
|||
}
|
||||
}
|
||||
|
||||
static void thread_entry(void *p1, void *p2, void *p3)
|
||||
{
|
||||
k_sleep(SLEEP_MS);
|
||||
}
|
||||
|
||||
static void thread_callback(const struct k_thread *thread, void *user_data)
|
||||
{
|
||||
char *str = (char *)user_data;
|
||||
|
||||
if (thread == &test_thread) {
|
||||
TC_PRINT("%s: Newly added thread found\n", str);
|
||||
TC_PRINT("%s: tid: %p, prio: %d\n",
|
||||
str, thread, thread->base.prio);
|
||||
thread_flag = true;
|
||||
}
|
||||
|
||||
if ((char *)thread->stack_info.start ==
|
||||
K_THREAD_STACK_BUFFER(test_stack)) {
|
||||
TC_PRINT("%s: Newly added thread stack found\n", str);
|
||||
TC_PRINT("%s: stack:%p, size:%u\n", str,
|
||||
(char *)thread->stack_info.start,
|
||||
thread->stack_info.size);
|
||||
stack_flag = true;
|
||||
}
|
||||
|
||||
tcount++;
|
||||
}
|
||||
|
||||
static void test_k_thread_foreach(void)
|
||||
{
|
||||
int count;
|
||||
|
||||
/* Call k_thread_foreach() and check
|
||||
* thread_callback is getting called.
|
||||
*/
|
||||
k_thread_foreach(thread_callback, TEST_STRING);
|
||||
|
||||
/* Check thread_count non-zero, thread_flag
|
||||
* and stack_flag are not set.
|
||||
*/
|
||||
zassert_true(tcount && !thread_flag && !stack_flag,
|
||||
"thread_callback() not getting called");
|
||||
/* Save the initial thread count */
|
||||
count = tcount;
|
||||
|
||||
/* Create new thread which should add a new entry to the thread list */
|
||||
k_tid_t tid = k_thread_create(&test_thread, test_stack,
|
||||
STACKSIZE, (k_thread_entry_t)thread_entry, NULL,
|
||||
NULL, NULL, K_PRIO_PREEMPT(0), 0, 0);
|
||||
k_sleep(1);
|
||||
|
||||
/* Call k_thread_foreach() and check
|
||||
* thread_callback is getting called for
|
||||
* the newly added thread.
|
||||
*/
|
||||
tcount = 0;
|
||||
k_thread_foreach(thread_callback, TEST_STRING);
|
||||
|
||||
/* Check thread_count > temp, thread_flag and stack_flag are set */
|
||||
zassert_true((tcount > count) && thread_flag && stack_flag,
|
||||
"thread_callback() not getting called");
|
||||
k_thread_abort(tid);
|
||||
}
|
||||
|
||||
/*TODO: add test case to capture the usage of interrupt call stack*/
|
||||
|
||||
|
||||
void test_main(void)
|
||||
{
|
||||
ztest_test_suite(profiling_api,
|
||||
ztest_unit_test(test_call_stacks_analyze_main),
|
||||
ztest_unit_test(test_call_stacks_analyze_idle),
|
||||
ztest_unit_test(test_call_stacks_analyze_workq),
|
||||
ztest_unit_test(test_k_thread_foreach));
|
||||
ztest_unit_test(test_call_stacks_analyze_workq));
|
||||
ztest_run_test_suite(profiling_api);
|
||||
}
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
CONFIG_ZTEST=y
|
||||
CONFIG_THREAD_MONITOR=y
|
||||
CONFIG_HEAP_MEM_POOL_SIZE=256
|
||||
CONFIG_THREAD_CUSTOM_DATA=y
|
||||
CONFIG_THREAD_STACK_INFO=y
|
||||
CONFIG_HEAP_MEM_POOL_SIZE=256
|
||||
|
|
|
@ -28,6 +28,7 @@ extern void test_abort_handler(void);
|
|||
extern void test_essential_thread_operation(void);
|
||||
extern void test_threads_priority_set(void);
|
||||
extern void test_delayed_thread_abort(void);
|
||||
extern void test_k_thread_foreach(void);
|
||||
|
||||
__kernel struct k_thread tdata;
|
||||
#define STACK_SIZE (256 + CONFIG_TEST_EXTRA_STACKSIZE)
|
||||
|
@ -135,7 +136,8 @@ void test_main(void)
|
|||
ztest_unit_test(test_systhreads_main),
|
||||
ztest_unit_test(test_systhreads_idle),
|
||||
ztest_unit_test(test_customdata_get_set_coop),
|
||||
ztest_user_unit_test(test_customdata_get_set_preempt)
|
||||
ztest_user_unit_test(test_customdata_get_set_preempt),
|
||||
ztest_unit_test(test_k_thread_foreach)
|
||||
);
|
||||
|
||||
ztest_run_test_suite(threads_lifecycle);
|
||||
|
|
93
tests/kernel/threads/thread_apis/src/test_kthread_for_each.c
Normal file
93
tests/kernel/threads/thread_apis/src/test_kthread_for_each.c
Normal file
|
@ -0,0 +1,93 @@
|
|||
/*
|
||||
* Copyright (c) 2018 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#include <ztest.h>
|
||||
#include <irq_offload.h>
|
||||
#include <misc/stack.h>
|
||||
|
||||
#define SLEEP_MS 100
|
||||
#define TEST_STRING "TEST"
|
||||
|
||||
#define STACKSIZE (256 + CONFIG_TEST_EXTRA_STACKSIZE)
|
||||
K_THREAD_STACK_EXTERN(tstack);
|
||||
extern struct k_thread tdata;
|
||||
|
||||
static int tcount;
|
||||
static bool thread_flag;
|
||||
static bool stack_flag;
|
||||
|
||||
static void thread_entry(void *p1, void *p2, void *p3)
|
||||
{
|
||||
k_sleep(SLEEP_MS);
|
||||
}
|
||||
|
||||
static void thread_callback(const struct k_thread *thread, void *user_data)
|
||||
{
|
||||
char *str = (char *)user_data;
|
||||
|
||||
if (thread == &tdata) {
|
||||
TC_PRINT("%s: Newly added thread found\n", str);
|
||||
TC_PRINT("%s: tid: %p, prio: %d\n",
|
||||
str, thread, thread->base.prio);
|
||||
thread_flag = true;
|
||||
}
|
||||
|
||||
if ((char *)thread->stack_info.start ==
|
||||
K_THREAD_STACK_BUFFER(tstack)) {
|
||||
TC_PRINT("%s: Newly added thread stack found\n", str);
|
||||
TC_PRINT("%s: stack:%p, size:%u\n", str,
|
||||
(char *)thread->stack_info.start,
|
||||
thread->stack_info.size);
|
||||
stack_flag = true;
|
||||
}
|
||||
|
||||
tcount++;
|
||||
}
|
||||
|
||||
/**
|
||||
* @ingroup kernel_thread_tests
|
||||
* @brief Test k_thread_foreach API
|
||||
*
|
||||
* @details Call k_thread_foreach() at the beginning of the test and
|
||||
* call it again after creating a thread, See k_thread_foreach()
|
||||
* iterates over the newly created thread and calls the user passed
|
||||
* callback function.
|
||||
*
|
||||
* @see k_thread_foreach()
|
||||
*/
|
||||
void test_k_thread_foreach(void)
|
||||
{
|
||||
int count;
|
||||
|
||||
k_thread_foreach(thread_callback, TEST_STRING);
|
||||
|
||||
/* Check thread_count non-zero, thread_flag
|
||||
* and stack_flag are not set.
|
||||
*/
|
||||
zassert_true(tcount && !thread_flag && !stack_flag,
|
||||
"thread_callback() not getting called");
|
||||
/* Save the initial thread count */
|
||||
count = tcount;
|
||||
|
||||
/* Create new thread which should add a new entry to the thread list */
|
||||
k_tid_t tid = k_thread_create(&tdata, tstack,
|
||||
STACKSIZE, (k_thread_entry_t)thread_entry, NULL,
|
||||
NULL, NULL, K_PRIO_PREEMPT(0), 0, 0);
|
||||
k_sleep(1);
|
||||
|
||||
/* Call k_thread_foreach() and check
|
||||
* thread_callback is getting called for
|
||||
* the newly added thread.
|
||||
*/
|
||||
tcount = 0;
|
||||
k_thread_foreach(thread_callback, TEST_STRING);
|
||||
|
||||
/* Check thread_count > temp, thread_flag and stack_flag are set */
|
||||
zassert_true((tcount > count) && thread_flag && stack_flag,
|
||||
"thread_callback() not getting called");
|
||||
k_thread_abort(tid);
|
||||
}
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue