Loading...
/* * Copyright (c) 2018 Intel Corporation * * SPDX-License-Identifier: Apache-2.0 */ #include <ztest.h> #include <irq_offload.h> #include <debug/stack.h> #include "tests_thread_apis.h" #define SLEEP_MS 100 #define TEST_STRING "TEST" static int tcount; static bool thread_flag; static void thread_entry(void *p1, void *p2, void *p3) { k_msleep(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; } 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, "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, STACK_SIZE, (k_thread_entry_t)thread_entry, NULL, NULL, NULL, K_PRIO_PREEMPT(0), 0, K_NO_WAIT); k_msleep(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, "thread_callback() not getting called"); k_thread_abort(tid); } |